TitleTips = {} TitleTips._ui = nil local pcTag = SL:GetValue("IS_PC_OPER_MODE") and 1 or 2 local fontSizes = { [1] = 16, -- PC [2] = 18 } local textSize = fontSizes[pcTag] local tipsWidth = 270 function TitleTips.main() local parent = GUI:Win_Create(UIConst.LAYERID.TitleTipsGUI, 0, 0, 0, 0, false, false, true, true, nil, nil, GUIDefine.UIZ.TOBOX) local data = GUI:GetLayerOpenParam() local screenW = SL:GetValue("SCREEN_WIDTH") local screenH = SL:GetValue("SCREEN_HEIGHT") if not data.pos then data.pos = GUI:p(screenW/2, screenH/2) data.anchorPoint = GUI:p(0.5, 0.5) end if data.node then TitleTips._panel = GUI:Layout_Create(data.node,"Layout_Main", 0, 0, 0, 0, false) elseif data.pos then local touchPanel = GUI:Layout_Create(parent,"Layout_Main_2", 0, 0, screenW, screenH, false) GUI:setTouchEnabled(touchPanel,true) GUI:setSwallowTouches(touchPanel,false) GUI:addOnClickEvent(touchPanel,function() UIOperator:CloseTitleTipsUI() end) TitleTips._panel = touchPanel end TitleTips.InitUI(data) SL:RegisterLUAEvent(LUA_EVENT_USERINPUT_EVENT_NOTICE, "TitleTips", function() GUI:Win_Close(parent) end, parent) end function TitleTips.InitUI(data) GUI:removeAllChildren(TitleTips._panel) TitleTips._panelList = nil TitleTips._data = data TitleTips.CreateItemPanel(data) end function TitleTips.CreateItemPanel(data) GUI:removeAllChildren(TitleTips._panel) if not data or (not data.pos and not data.node) then return false end local width = 420 local tips = GUI:Layout_Create(TitleTips._panel,"Layout_Tips", 0, 0, 135, 173, false) GUI:Layout_setBackGroundImage(tips, GUIDefine.PATH_RES_PRIVATE .. "item_tips/bg_tipszy_05.png") GUI:Layout_setBackGroundImageScale9Slice(tips, 16, 16, 16, 16) GUI:setAnchorPoint(tips,0, 0) local listView = GUI:ListView_Create(tips,"PlayerListView", 10, 10, 0, 0, 1) GUI:ListView_setClippingEnabled(listView,true) GUI:ListView_setItemsMargin(listView, 0) GUI:setTouchEnabled(listView,false) GUI:setPosition(listView, 10, 10) local typeId = data.id local itemConfig = SL:GetValue("ITEM_DATA", typeId) local name = itemConfig.Name or "" local color = (itemConfig.Color and itemConfig.Color > 0) and SL:GetValue("ITEM_NAME_COLOR_VALUE", typeId) or "#FFFFFF" GUI:RichText_Create(listView, "rich_text", 0, 0, name, tipsWidth, textSize, color) --获取属性原始id local function getAttOriginId(id) return id >= 10000 and math.floor(id / 10000) or id end --显示 + local function getAddShow(id) if id == 1 or id == 2 or id == 13 or id == 14 or id == 15 or id == 16 or id == 17 or id == 18 or id == 19 or id == 20 or id == 38 or id == 39 then return "+" end return "" end -- 基础属性 local attList = GUIFunction:ParseItemBaseAtt(itemConfig.Attribute, data.job) local stringAtt = GUIFunction:GetAttDataShow(attList, nil, true) local basicAttrShow = {} for id, v in pairs(stringAtt) do v.id = id local originId = getAttOriginId(id) local attConfig = SL:GetValue("ATTR_CONFIG", originId) v.sort = attConfig and attConfig.sort or originId + 1000 table.insert(basicAttrShow, v) end table.sort(basicAttrShow, function(a, b) return a.sort < b.sort end) local str = "" for _, v in pairs(basicAttrShow) do local oneStr = v.name .. getAddShow(v.id) .. v.value local color = v.color if color and color > 0 then oneStr = string.format("%s", SL:GetHexColorByStyleId(color), oneStr) end str = str .. oneStr .. "
" end local strSize = SL:GetValue("GAME_DATA", "DEFAULT_FONT_SIZE") GUI:RichText_Create(listView, "rich_attr", 0, 0, str, tipsWidth, strSize, "#FFFFFF") local time = data.time if time and time > SL:GetValue("SERVER_TIME") then local richText = GUI:RichText_Create(listView, "rich_time", 0, 0, string.format("剩余时间:%s", SL:TimeFormatToStr(time - SL:GetValue("SERVER_TIME"))), width, strSize, "#28EF01") end if not data.lookOther then local desc = TitleTips.isWinPlayMode and (data.type == 1 and "(单击图标激活当前称号)" or "(单击图标取消当前称号)") or (data.type == 1 and "(双击图标激活当前称号)" or "(双击图标取消当前称号)") local richText = GUI:RichText_Create(listView, "rich_desc", 0, 0, desc, width, strSize, "#FFFFFF") end -- 道具说明 local itemDescList = GUIFunction:GetItemDescList(itemConfig) local groupIdTab = itemDescList and table.keys(itemDescList) or {} table.sort(groupIdTab) for _, groupId in ipairs(groupIdTab) do local descStr = GUIFunction:GetItemDescStrByGroup(itemDescList, groupId) if descStr and string.len(descStr) > 0 then local rich_desc = GUI:RichText_Create(listView, "rich_desc_" .. groupId, 0, 0, descStr, width, SL:GetValue("GAME_DATA", "DEFAULT_FONT_SIZE"), "#FFFFFF") end end GUI:setPosition(tips, data.pos) TitleTips.RefreshItemPosition(tips, listView) local anchorPoint, pos = TitleTips.GetTipsAnchorPoint(tips, data.pos, TitleTips._data.anchorPoint or GUI:p(0,1)) GUI:setAnchorPoint(tips, anchorPoint) GUI:setPosition(tips,pos) end function TitleTips.GetTipsAnchorPoint(widget, pos, ancPoint) ancPoint = ancPoint or GUI:getAnchorPoint(widget) local size = GUI:getContentSize(widget) local screenW = SL:GetValue("SCREEN_WIDTH") local screenH = SL:GetValue("SCREEN_HEIGHT") local outScreenX = false local outScreenY = false if pos.y + size.height * ancPoint.y > screenH then ancPoint.y = 1 outScreenY = true end if pos.y - size.height * ancPoint.y < 0 then if outScreenY then ancPoint.y = 0.5 pos.y = screenH / 2 else ancPoint.y = 0 end end if pos.x + size.width * (1 - ancPoint.x) > screenW then ancPoint.x = 1 outScreenX = true end if pos.x - size.width * ancPoint.x < 0 then if outScreenX then ancPoint.x = 0.5 pos.x = screenW / 2 else ancPoint.x = 0 end end return ancPoint, pos end function TitleTips.RefreshItemPosition(tips, listView) GUI:ListView_doLayout(listView) local listHeight = GUI:ListView_getInnerContainerSize(listView).height local listWidth = 420 local maxWidth = 0 for _, v in ipairs(GUI:getChildren(listView)) do maxWidth = math.max(maxWidth, GUI:getContentSize(v).width) end listWidth = math.min(listWidth, maxWidth) GUI:setContentSize(listView, listWidth, listHeight) GUI:setContentSize(tips, listWidth + 20, listHeight + 20) end TitleTips.main()