local InfinityTowerSelectTowerItem = class("InfinityTowerSelectTowerItem", BaseCtrl) local texNameColor = { Color(0.8901960784313725, 0.8901960784313725, 0.8901960784313725, 1), Color(0.611764705882353, 0.611764705882353, 0.611764705882353, 1) } InfinityTowerSelectTowerItem._mapNodeConfig = { tex_Name = {sComponentName = "TMP_Text"}, obj_Passed = {}, bg_1 = {sComponentName = "Image"}, obj_LockTime = {}, obj_UnLock = {}, tex_UnLock = {sComponentName = "TMP_Text"}, obj_week = {}, tex_Week = {sComponentName = "TMP_Text"}, obj_Property = {}, img_Property = {sComponentName = "Image"}, tex_LevelCount = {sComponentName = "TMP_Text"}, obj_PropertyBlock = {} } InfinityTowerSelectTowerItem._mapEventConfig = {} function InfinityTowerSelectTowerItem:InitTowerMsg(index) self.towerId = index self._mapNode.obj_Passed:SetActive(false) self._mapNode.obj_LockTime:SetActive(false) self._mapNode.obj_UnLock:SetActive(false) self._mapNode.obj_week:SetActive(false) local sPath = "Icon/MapChallenge/zs_infinitytower_lspic_0" .. index - 1 NovaAPI.SetImageSprite(self._mapNode.bg_1, Settings.AB_ROOT_PATH .. sPath .. ".png") local towerData = ConfigTable.GetData("InfinityTower", index) NovaAPI.SetTMPText(self._mapNode.tex_Name, towerData.Name) NovaAPI.SetTMPColor(self._mapNode.tex_Name, texNameColor[1]) NovaAPI.SetImageColor(self._mapNode.bg_1, Color(1, 1, 1, 1)) local isOpenDay = PlayerData.InfinityTower:CheckOpenDay(index) local openDayLength = #towerData.OpenDay local isUnLock = PlayerData.InfinityTower:CheckTowerUnLock(self.towerId, towerData.PreTowerLevelId) local passAll = PlayerData.InfinityTower:GetTowerPassAll(index) if index == 1 then local activityBg = self.gameObject.transform:Find("AnimRoot/activityBg").gameObject local openDayActivityId = ConfigTable.GetConfigNumber("InfinityOpenDayActivityId") local activityData = PlayerData.Activity:GetActivityDataById(openDayActivityId) if activityData ~= nil then local curTimeStamp = CS.ClientManager.Instance.serverTimeStamp if curTimeStamp > activityData.nOpenTime and curTimeStamp < activityData.nEndTime then self.activityRemainTime = activityData.nEndTime - curTimeStamp local tex_Activity = activityBg.transform:Find("imgActTipsBg/tex_Activity"):GetComponent("TMP_Text") local txtActTime = activityBg.transform:Find("imgActTimeBg/txtActTime"):GetComponent("TMP_Text") NovaAPI.SetTMPText(tex_Activity, ConfigTable.GetUIText("Infinity_OpenDay_Activity")) NovaAPI.SetTMPText(txtActTime, self:GetTimeStr(self.activityRemainTime)) local refreshTime = function() self.activityRemainTime = self.activityRemainTime - 1 NovaAPI.SetTMPText(txtActTime, self:GetTimeStr(self.activityRemainTime)) if self.activityRemainTime <= 0 and self.timer ~= nil then self.timer:Cancel() self.timer = nil end end self.timer = self:AddTimer(0, 1, refreshTime, true, true, true) activityBg:SetActive(true) else activityBg:SetActive(false) end else activityBg:SetActive(false) end end if passAll then NovaAPI.SetTMPText(self._mapNode.tex_LevelCount, ConfigTable.GetUIText("Infinity_Clear")) else local lastLv = PlayerData.InfinityTower:GetTowerPassLv(self.towerId) local diff = 0 if lastLv == 0 then diff = 1 else local nextLv = lastLv + 1 local lvData = ConfigTable.GetData("InfinityTowerLevel", nextLv) if lvData then local diffData = ConfigTable.GetData("InfinityTowerDifficulty", lvData.DifficultyId) diff = diffData.Sort end end NovaAPI.SetTMPText(self._mapNode.tex_LevelCount, string.format(ConfigTable.GetUIText("Infinity_Diff"), diff)) end NovaAPI.SetTMPColor(self._mapNode.tex_LevelCount, texNameColor[1]) self._mapNode.obj_PropertyBlock:SetActive(false) self._mapNode.obj_Property:SetActive(isUnLock and towerData.ElementType ~= GameEnum.elementType.NONE) self._mapNode.tex_Name.gameObject:SetActive(isUnLock) self._mapNode.tex_LevelCount.gameObject:SetActive(isUnLock) self:SetAtlasSprite(self._mapNode.img_Property, "12_rare", AllEnum.ElementIconType.Icon .. towerData.ElementType) local btn = self.gameObject:GetComponent("UIButton") btn.onClick:RemoveAllListeners() local clickCb = function() if not isUnLock then local strTips = orderedFormat(ConfigTable.GetUIText("InfinityTower_LockTips"), towerData.Name) EventManager.Hit(EventId.OpenMessageBox, strTips) return elseif openDayLength == 0 then local strTips = ConfigTable.GetUIText("InfinityTower_OpenNone") EventManager.Hit(EventId.OpenMessageBox, strTips) return elseif not isOpenDay then EventManager.Hit("Infinity_Select_Tower", self.towerId, true, true) else EventManager.Hit("Infinity_Select_Tower", self.towerId, true, true) end end btn.onClick:AddListener(clickCb) if not isUnLock then self._mapNode.obj_UnLock:SetActive(true) local towerLvDate = ConfigTable.GetData("InfinityTowerLevel", towerData.PreTowerLevelId) NovaAPI.SetTMPText(self._mapNode.tex_UnLock, orderedFormat(ConfigTable.GetUIText("InfinityTower_Lock"), towerLvDate.Name)) NovaAPI.SetImageColor(self._mapNode.bg_1, Color(1, 1, 1, 0.5)) NovaAPI.SetTMPColor(self._mapNode.tex_Name, texNameColor[2]) NovaAPI.SetTMPColor(self._mapNode.tex_LevelCount, texNameColor[2]) else self._mapNode.tex_Name.gameObject:SetActive(true) if not isOpenDay then self._mapNode.obj_LockTime:SetActive(true) NovaAPI.SetTMPColor(self._mapNode.tex_Name, texNameColor[2]) NovaAPI.SetTMPColor(self._mapNode.tex_LevelCount, texNameColor[2]) self._mapNode.obj_week:SetActive(true) self.totalSec = PlayerData.InfinityTower:GetNextDaySec(self.towerId) if self.totalSec > 0 then if self.timerCountDown then self.timerCountDown = nil end if self.timerCountDown == nil then self.timerCountDown = self:AddTimer(0, 1, "SetCountdownOpen", false, true, false) end self:SetCountdownOpen() self.timerCountDown:Pause(false) else NovaAPI.SetTMPText(self._mapNode.tex_Week, "") end NovaAPI.SetImageColor(self._mapNode.bg_1, Color(1, 1, 1, 0.5)) self._mapNode.obj_PropertyBlock:SetActive(true) return end if passAll then self._mapNode.obj_Passed:SetActive(true) NovaAPI.SetTMPColor(self._mapNode.tex_Name, texNameColor[2]) NovaAPI.SetTMPColor(self._mapNode.tex_LevelCount, texNameColor[2]) NovaAPI.SetImageColor(self._mapNode.bg_1, Color(1, 1, 1, 0.5)) self._mapNode.obj_PropertyBlock:SetActive(true) else end end end function InfinityTowerSelectTowerItem:SetCountdownOpen() self.totalSec = self.totalSec - 1 if self.totalSec > 3600 then local nHour = math.floor(self.totalSec / 3600) NovaAPI.SetTMPText(self._mapNode.tex_Week, string.format(ConfigTable.GetUIText("Infinity_Hour_Open"), nHour)) elseif self.totalSec > 60 then local nMin = math.floor(self.totalSec / 60) NovaAPI.SetTMPText(self._mapNode.tex_Week, string.format(ConfigTable.GetUIText("Infinity_Min_Open"), nMin)) elseif self.totalSec > 0 then NovaAPI.SetTMPText(self._mapNode.tex_Week, string.format(ConfigTable.GetUIText("Infinity_Sec_Open"), self.totalSec)) else NovaAPI.SetTMPText(self._mapNode.tex_Week, "") end end function InfinityTowerSelectTowerItem:GetTimeStr(nRemainTime) local sTimeStr = "" if nRemainTime <= 60 then local sec = math.floor(nRemainTime) sTimeStr = orderedFormat(ConfigTable.GetUIText("Activity_Remain_Time_Sec") or "", sec) elseif 60 < nRemainTime and nRemainTime <= 3600 then local min = math.floor(nRemainTime / 60) local sec = math.floor(nRemainTime - min * 60) if sec == 0 then min = min - 1 sec = 60 end sTimeStr = orderedFormat(ConfigTable.GetUIText("Activity_Remain_Time_Min") or "", min, sec) elseif 3600 < nRemainTime and nRemainTime <= 86400 then local hour = math.floor(nRemainTime / 3600) local min = math.floor((nRemainTime - hour * 3600) / 60) if min == 0 then hour = hour - 1 min = 60 end sTimeStr = orderedFormat(ConfigTable.GetUIText("Activity_Remain_Time_Hour") or "", hour, min) elseif 86400 < nRemainTime then local day = math.floor(nRemainTime / 86400) local hour = math.floor((nRemainTime - day * 86400) / 3600) if hour == 0 then day = day - 1 hour = 24 end sTimeStr = orderedFormat(ConfigTable.GetUIText("Activity_Remain_Time_Day") or "", day, hour) end return sTimeStr end function InfinityTowerSelectTowerItem:OnDisable() end return InfinityTowerSelectTowerItem