local ActBaseUI = class("ActBaseUI", BaseUI) function ActBaseUI:ctor(params) self.page = params.page or self:getActConst().BOTTOM_PAGE.TURNTABLE self.ActConst = self:getActConst() end function ActBaseUI:onClose() if self.subComps then for _, comp in pairs(self.subComps) do if comp.onClose then comp:onClose() end end end self.subComps = nil end function ActBaseUI:onLoadRootComplete() self:_display() self:_addListeners() self:_bind() self:initComps() self:updateCurrencyBar() self:scheduleGlobal(function() self:updateTime() end, 0) self:updateTime() end function ActBaseUI:_display() local uiMap = self.root:genAllChildren() self.compsRoot = uiMap["act_main_ui.sub_comps"] self.closeBtn = uiMap["act_main_ui.node_down.close_btn"] self.titleBg = uiMap["act_main_ui.title_bg"] self.titleTx = uiMap["act_main_ui.title_bg.title_tx"] self.helpBtn = uiMap["act_main_ui.title_bg.help_btn"] self.timeTx = uiMap["act_main_ui.title_bg.time_bg.time_tx"] self.disableBg = uiMap["act_main_ui.disable_bg"] self.disableBg:setActive(false) self.pageBtns = {} for k, idx in pairs(self:getActConst().BOTTOM_PAGE) do self.pageBtns[idx] = uiMap["act_main_ui.node_down.btns.page_btn_" .. idx] uiMap["act_main_ui.node_down.btns.page_btn_" .. idx .. ".text"]:setText(self:getCellName(idx)) end end function ActBaseUI:_addListeners() self.closeBtn:addClickListener(function() self:closeUI() end) if self.helpBtn then self.helpBtn:addClickListener(function() if self.getHelpStr then local params = {} params.desc = self:getHelpStr() ModuleManager.TipsManager:showHelpTips(params) end end) end for i, btn in ipairs(self.pageBtns) do btn:addClickListener(function() self:refreshPage(i) end, GConst.CLICK_SOUND.NONE) end self:addEventListener(EventManager.CUSTOM_EVENT.CHANGE_MAIN_CITY_PAGE, function(params) if not self:isClosed() then self:closeUI() end end) self:addEventListener(EventManager.CUSTOM_EVENT.ACT_GAME_OPT, function(params) if params.isSettlement and self.subComps[self:getActConst().BOTTOM_PAGE.GAME] then self.subComps[self:getActConst().BOTTOM_PAGE.GAME]:settlementGame() end if params.toGift then self.page = self:getActConst().BOTTOM_PAGE.GIFT self:onRefresh() end self:refreshPageBtns() end) self:addEventListener(EventManager.CUSTOM_EVENT.ACT_TURNTABLE, function(params) if not self:isClosed() and self.page == self:getActConst().BOTTOM_PAGE.TURNTABLE then self.subComps[self.page]:playAni(params) end end) self:addEventListener(EventManager.CUSTOM_EVENT.ACT_BIG_REWARD_SHOW, function(params) if self:isClosed() then return end if self.page ~= self:getActConst().BOTTOM_PAGE.TURNTABLE then return end local rewards = DataManager[self:getActDataType()]:getBigRewards() if rewards == nil or #rewards == 0 then return end ModuleManager.ActivityManager:showBigRewardUI(self, rewards) end) self:addEventListener(EventManager.CUSTOM_EVENT.ACT_TRIGGER_GIFT, function() if not self:isClosed() and self.page == self:getActConst().BOTTOM_PAGE.TURNTABLE then self.subComps[self.page]:updateTriggerGift() end end) self:addEventListener(EventManager.CUSTOM_EVENT.ACT_TURNTABLE_RESET, function() if not self:isClosed() and self.page == self:getActConst().BOTTOM_PAGE.TURNTABLE then self.subComps[self.page]:updateTurntable() end end) self:addEventListener(EventManager.CUSTOM_EVENT.CHANGE_ACTIVITY_PAGE, function(params) self:refreshPage(params) end) end function ActBaseUI:_bind() self:bind(DataManager.PaymentData, "isDirty", function() self.subComps[self.page]:refresh(self, self:getActDataType()) self:onRefresh() end) self:bind(DataManager[self:getActDataType()], "isDirty", function() if self.page == self:getActConst().BOTTOM_PAGE.GAME then self.subComps[self.page]:refreshStepRewardScrollrect() else self.subComps[self.page]:refresh(self, self:getActDataType()) end self:refreshPageBtns() end) self:bind(DataManager.ActTaskData, "isDirty", function() self:refreshPageBtns() end) end function ActBaseUI:refreshPage(page) -- if self.page == page then -- return -- end self.page = page self:onRefresh() end function ActBaseUI:initComps() if self.subComps then return end local uiMap = self.root:genAllChildren() self.subComps = {} for k, id in pairs(self:getActConst().BOTTOM_PAGE) do if self:getActConst().COMP_NAME[id] then -- 预制体挂载 self.subComps[id] = CellManager:addCellComp(uiMap[self:getActConst().COMP_NAME[id]], self:getActConst().COMP[id]) if self.subComps[id].setParentUI then self.subComps[id]:setParentUI(self, self:getActDataType()) end elseif self:getActConst().COMP_PATH[id] then -- 动态加载 self:loadModule(self:getActConst().COMP_PATH[id], self.compsRoot, self:getActConst().COMP[id], function(comp) comp:getBaseObject():setActive(false) self.subComps[id] = comp if self.subComps[id].setParentUI then self.subComps[id]:setParentUI(self, self:getActDataType()) end end) end end if self:getActConst().BOTTOM_PAGE.GAME then local order = self._baseRootCanvas.sortingOrder self.subComps[self:getActConst().BOTTOM_PAGE.GAME]:getBaseObject():setActive(true) local uiHelper = self.subComps[self:getActConst().BOTTOM_PAGE.GAME]:getGameObject():GetComponent(GConst.TYPEOF_UNITY_CLASS.BF_UI_HELPER) if uiHelper then uiHelper:SetSortingOrder(order + 1) end end end function ActBaseUI:updateTime() if DataManager[self:getActDataType()]:getRemainTime() <= 0 then self:closeUI() return end local remainTime = DataManager[self:getActDataType()]:getRemainTime() if self.cacheRemainTime ~= remainTime then self.cacheRemainTime = remainTime if remainTime > 0 then self.timeTx:setText(I18N:getGlobalText(I18N.GlobalConst.TIME_END_DESC_1, Time:formatNumTimeStr(remainTime))) end end for i,v in ipairs(self.subComps) do if v.updateTime then v:updateTime() end end if self.subComps[self:getActConst().BOTTOM_PAGE.TURNTABLE] then self.subComps[self:getActConst().BOTTOM_PAGE.TURNTABLE]:updateAni() end end function ActBaseUI:onRefresh() self:refreshPanel() self:refreshPageBtns() self.titleBg:setActive(self.page == self:getActConst().BOTTOM_PAGE.TURNTABLE) self.titleTx:setText(self:getCellName(self.page)) if self.helpBtn then self.helpBtn:setActive(self.page == self:getActConst().BOTTOM_PAGE.GAME) -- 特殊处理 if self:getActDataType() == "ActSailingData" then self.helpBtn:setActive(self.page == self:getActConst().BOTTOM_PAGE.TURNTABLE) end end end function ActBaseUI:refreshPanel() for i, comp in ipairs(self.subComps) do comp.baseObject:setActive(i == self.page) if i == self.page then comp:refresh(self, self:getActDataType()) end end end function ActBaseUI:refreshPageBtns() for i, btn in ipairs(self.pageBtns) do local atlas = GConst.ATLAS_PATH.UI_ACT_COMMON -- 特殊处理 if self:getActDataType() == "ActMagicData" then atlas = GConst.ATLAS_PATH.UI_ACT_MAGIC end if self.page == i then btn:setSprite(atlas, self:getPageBtnName(i, true)) else btn:setSprite(atlas, self:getPageBtnName(i, false)) end if DataManager[self:getActDataType()]:getRpByPage(i) then btn:addRedPoint(32, 20, 1) else btn:removeRedPoint() end end self:updateCurrencyBar() end function ActBaseUI:disableUITouchSelf() self.disableBg:setActive(true) end function ActBaseUI:enableUITouchSelf() self.disableBg:setActive(false) end -- 界面显示通用方法 function ActBaseUI:getTaskBannerSize() return 1280, 319 end function ActBaseUI:getBountyBannerSize() return 1280, 319 end function ActBaseUI:getShowBountyBg() return true, "common_bg_4" end function ActBaseUI:isShowBannerLine1() return true end function ActBaseUI:isShowBannerLine2() return false end function ActBaseUI:getShowExchangeBg() return true, "assets/arts/textures/background/act_dream/act_dream_bg_2.png" end function ActBaseUI:getExchangeTopBg() return true, "assets/arts/textures/background/banner/banner_shop_1.png" end return ActBaseUI