local TemplateItemCtrl = class("TemplateItemCtrl", BaseCtrl) local LayoutRebuilder = CS.UnityEngine.UI.LayoutRebuilder local _, Gray = ColorUtility.TryParseHtmlString("#5E89B4") TemplateItemCtrl._mapNodeConfig = { imgRare = {sComponentName = "Image"}, imgIcon = {sComponentName = "Image"}, Basic = {sNodeName = "--Basic--"}, Item = {sNodeName = "--Item--"}, Char = {sNodeName = "--Char--"}, imgTimeLimit = {}, imgBasicCharIcon = {sComponentName = "Image"}, imgCharRare = {sComponentName = "Image"}, imgTimeBg = {}, rtImgTimeBg = { sNodeName = "imgTimeBg", sComponentName = "RectTransform" }, imgTime = {nCount = 3}, txtItemTime = {sComponentName = "TMP_Text"}, goStar = { sCtrlName = "Game.UI.TemplateEx.TemplateStarCtrl" }, Select = {}, imgMultiSelected1 = {}, imgMultiSelected2 = {}, imgMultiSelectedMask1 = {}, imgMultiSelectedMask2 = {}, imgCharIcon = {sComponentName = "Image"}, goReceived = {}, txtReceived = { sComponentName = "TMP_Text", sLanguageId = "RogueBoss_Receive_Tip" }, txtCount = {sComponentName = "TMP_Text"}, txtX = {sComponentName = "TMP_Text"}, imgFirstPass = {}, imgThreePass = {}, imgExtra = {}, imgElement = {sComponentName = "Image"} } TemplateItemCtrl._mapEventConfig = {} function TemplateItemCtrl:SetItem(nItemId, nRarity, nCount, nExpire, bReceived, bFirstPass, bThreePass, bFullShow, bMat, bHideTime, bExtraDrop) local nStar = 0 if nItemId and nItemId ~= 0 then local mapCfg = ConfigTable.GetData_Item(nItemId) if mapCfg == nil then printError("Item CfgData Missing:" .. nItemId) end if mapCfg.Type == GameEnum.itemType.Char then self:SetChar(nItemId, nCount, bReceived) return end if mapCfg.Type == GameEnum.itemType.Disc then nStar = 6 - mapCfg.Rarity end end self:_SwitchType(GameEnum.itemType.Item) self:_SetCommon(nItemId, nRarity, 0, nStar, nil, nExpire, bReceived, bHideTime) self:_SetCount(nCount, bFullShow, bMat) self:_SetPassState(bFirstPass, bThreePass, bExtraDrop) end function TemplateItemCtrl:SetChar(nItemId, nCount, bReceived, nRewardType) self:_SwitchType(GameEnum.itemType.Char) local itemCfg = ConfigTable.GetData_Item(nItemId) local nMaxStar = 6 - itemCfg.Rarity self:SetAtlasSprite(self._mapNode.imgCharRare, "12_rare", AllEnum.FrameType_New.Item .. AllEnum.FrameColor_New[itemCfg.Rarity]) self:_SetCommon(nItemId, nil, 0, nMaxStar, nil, nil, bReceived) if nCount and 1 < nCount then self:_SetCount(nCount) else self:_SetCount() end self:_SetPassState(nRewardType and nRewardType == AllEnum.RewardType.First, nRewardType and nRewardType == AllEnum.RewardType.Three, false) end function TemplateItemCtrl:SetSelect(bSelect) self._mapNode.Select:SetActive(bSelect) end function TemplateItemCtrl:SetMultiSelected_Blue(bSelect) self._mapNode.imgMultiSelected1:SetActive(bSelect) self._mapNode.imgMultiSelectedMask1:SetActive(bSelect) end function TemplateItemCtrl:SetMultiSelected_Red(bSelect) self._mapNode.imgMultiSelected2:SetActive(bSelect) self._mapNode.imgMultiSelectedMask2:SetActive(bSelect) end function TemplateItemCtrl:SetLock(bLock) end function TemplateItemCtrl:_SetChar(nCharId) if nCharId and nCharId ~= 0 then self._mapNode.imgCharIcon.gameObject:SetActive(true) local nCharSkinId = PlayerData.Char:GetCharSkinId(nCharId) local mapCharSkin = ConfigTable.GetData_CharacterSkin(nCharSkinId) self:SetPngSprite(self._mapNode.imgCharIcon, mapCharSkin.Icon, AllEnum.CharHeadIconSurfix.S) else self._mapNode.imgCharIcon.gameObject:SetActive(false) end end function TemplateItemCtrl:_SetCommon(nItemId, nRarity, nStar, nMaxStar, nCharId, nExpire, bReceived, bHideTime) self:_SetChar(nCharId) self._mapNode.Select:SetActive(false) self._mapNode.imgMultiSelected1:SetActive(false) self._mapNode.imgMultiSelectedMask1:SetActive(false) self._mapNode.imgMultiSelected2:SetActive(false) self._mapNode.imgMultiSelectedMask2:SetActive(false) self._mapNode.goStar:SetStar(nStar, nMaxStar) self._mapNode.goReceived:SetActive(bReceived) self._mapNode.imgTimeLimit.gameObject:SetActive(false) if not nItemId or nItemId == 0 then self._mapNode.imgIcon.gameObject:SetActive(false) self:SetAtlasSprite(self._mapNode.imgRare, "12_rare", AllEnum.FrameType_New.Item .. AllEnum.FrameColor_New[0]) self._mapNode.imgTimeBg:SetActive(false) return end local mapCfg = ConfigTable.GetData_Item(nItemId) self._mapNode.imgIcon.gameObject:SetActive(true) if mapCfg.Type == GameEnum.itemType.Disc then self:SetPngSprite(self._mapNode.imgIcon, mapCfg.Icon .. AllEnum.OutfitIconSurfix.Item) local mapDiscCfgData = ConfigTable.GetData("Disc", nItemId) if mapDiscCfgData ~= nil then self:SetAtlasSprite(self._mapNode.imgElement, "12_rare", AllEnum.Star_Element[mapDiscCfgData.EET].icon) self._mapNode.imgElement.gameObject:SetActive(true) end elseif mapCfg.Type == GameEnum.itemType.Char then self:SetPngSprite(self._mapNode.imgBasicCharIcon, mapCfg.Icon) local mapCharCfgData = ConfigTable.GetData("Character", nItemId) if mapCharCfgData ~= nil then self:SetAtlasSprite(self._mapNode.imgElement, "12_rare", AllEnum.Char_Element[mapCharCfgData.EET].icon) self._mapNode.imgElement.gameObject:SetActive(true) end else self:SetPngSprite(self._mapNode.imgIcon, mapCfg.Icon) self._mapNode.imgElement.gameObject:SetActive(false) end if not nRarity and nItemId then nRarity = mapCfg.Rarity end local sPath = AllEnum.FrameType_New.Item .. AllEnum.FrameColor_New[nRarity] self:SetAtlasSprite(self._mapNode.imgRare, "12_rare", sPath) local nTimeType local sTimeStr = "" if nExpire and nExpire ~= 0 then local curTime = CS.ClientManager.Instance.serverTimeStamp local remainTime = nExpire - curTime if 86400 <= remainTime then sTimeStr = math.floor(remainTime / 86400) .. ConfigTable.GetUIText("Depot_Item_LeftTime_Day") nTimeType = 1 elseif 3600 <= remainTime then sTimeStr = math.floor(remainTime / 3600) .. ConfigTable.GetUIText("Depot_Item_LeftTime_Hour") nTimeType = 2 else local nMin = math.max(math.floor(remainTime / 60), 1) sTimeStr = nMin .. ConfigTable.GetUIText("Depot_LeftTime_Min") nTimeType = 3 end end self._mapNode.imgTimeBg:SetActive(nTimeType ~= nil) if nTimeType then NovaAPI.SetTMPText(self._mapNode.txtItemTime, sTimeStr) LayoutRebuilder.ForceRebuildLayoutImmediate(self._mapNode.rtImgTimeBg) for i = 1, 3 do self._mapNode.imgTime[i]:SetActive(i == nTimeType) end end self._mapNode.imgTimeLimit.gameObject:SetActive(mapCfg and mapCfg.ExpireType ~= 0 and nTimeType == nil and not bHideTime) end function TemplateItemCtrl:_SetCount(nCount, bFullShow, bMat) if nCount and type(nCount) == "string" and nCount ~= "" then NovaAPI.SetTMPText(self._mapNode.txtCount, nCount) NovaAPI.SetTMPColor(self._mapNode.txtCount, Blue_Normal) NovaAPI.SetTMPColor(self._mapNode.txtX, Blue_Normal) self._mapNode.txtX.gameObject:SetActive(true) self._mapNode.txtCount.gameObject:SetActive(true) elseif nCount and 1 < nCount then if 999999 < nCount then local nFloor = math.floor(nCount / 100) local nK = string.format("%.0f", nFloor / 10) local sCount = nK .. "k" NovaAPI.SetTMPText(self._mapNode.txtCount, sCount) else NovaAPI.SetTMPText(self._mapNode.txtCount, nCount) end NovaAPI.SetTMPColor(self._mapNode.txtCount, Blue_Normal) NovaAPI.SetTMPColor(self._mapNode.txtX, Blue_Normal) self._mapNode.txtX.gameObject:SetActive(true) self._mapNode.txtCount.gameObject:SetActive(true) elseif nCount and nCount == 0 then NovaAPI.SetTMPText(self._mapNode.txtCount, nCount) NovaAPI.SetTMPColor(self._mapNode.txtCount, Gray) NovaAPI.SetTMPColor(self._mapNode.txtX, Gray) self._mapNode.txtX.gameObject:SetActive(true) self._mapNode.txtCount.gameObject:SetActive(true) elseif nCount and nCount == 1 then NovaAPI.SetTMPText(self._mapNode.txtCount, nCount) if bMat then NovaAPI.SetTMPColor(self._mapNode.txtCount, Blue_Normal) NovaAPI.SetTMPColor(self._mapNode.txtX, Blue_Normal) end self._mapNode.txtX.gameObject:SetActive(true) self._mapNode.txtCount.gameObject:SetActive(true) else NovaAPI.SetTMPText(self._mapNode.txtCount, "") self._mapNode.txtX.gameObject:SetActive(false) self._mapNode.txtCount.gameObject:SetActive(false) end end function TemplateItemCtrl:_SetPassState(bFirstPass, bThreePass, bExtraDrop) self._mapNode.imgFirstPass:SetActive(bFirstPass) self._mapNode.imgThreePass:SetActive(bThreePass) self._mapNode.imgExtra:SetActive(bExtraDrop) end function TemplateItemCtrl:_SwitchType(enumType) self._mapNode.Item:SetActive(enumType == GameEnum.itemType.Item) self._mapNode.Char:SetActive(enumType == GameEnum.itemType.Char) self._mapNode.Basic:SetActive(enumType ~= GameEnum.itemType.Char) end return TemplateItemCtrl