local ArenaUI = class("ArenaUI", BaseUI) local GIFT_CELL = "app/ui/main_city/cell/side_bar_arena_gift_cell" function ArenaUI:isFullScreen() return false end function ArenaUI:getPrefabPath() return "assets/prefabs/ui/arena/arena_ui.prefab" end function ArenaUI:getShowEntranceRedPoint() return DataManager.ArenaData:hasEntranceRedDot() end function ArenaUI:ctor() end function ArenaUI:onClose() if self.spineGrading then self.spineGrading:destroy() self.spineGrading = nil end end function ArenaUI:getCurrencyParams() if self.currencyParams == nil then self.currencyParams = { itemIds = { GConst.ItemConst.ITEM_ID_GOLD, GConst.ItemConst.ITEM_ID_GEM, GConst.ItemConst.ITEM_ID_ARENA_TICKET }, showType = GConst.CURRENCY_TYPE.HORIZONTAL } end return self.currencyParams end function ArenaUI:onLoadRootComplete() local uiMap = self.root:genAllChildren() uiMap["arena_ui.close_btn"]:addClickListener(function () self:closeUI() end) self.txSeason = uiMap["arena_ui.tx_season"] self.txTitle = uiMap["arena_ui.tx_title"] self.txCountdown = uiMap["arena_ui.countdown.tx_time"] self.txGarding = uiMap["arena_ui.tx_garding"] self.spineRoot = uiMap["arena_ui.spine_root"] self.imgProg = uiMap["arena_ui.prog.img_prog"] self.txProg = uiMap["arena_ui.prog.tx_prog"] self.btnHelp = uiMap["arena_ui.tx_season.btn_help"] self.btnRecord = uiMap["arena_ui.btn_record"] self.txRecord = uiMap["arena_ui.btn_record.tx_record"] self.btnFormation = uiMap["arena_ui.btn_formation"] self.txFormation = uiMap["arena_ui.btn_formation.tx_formation"] self.btnReward = uiMap["arena_ui.btn_reward"] self.txReward = uiMap["arena_ui.btn_reward.tx_reward"] self.btnRank = uiMap["arena_ui.btn_rank"] self.txRank = uiMap["arena_ui.btn_rank.tx_rank"] self.btnGradingReward = uiMap["arena_ui.btn_grading_reward"] self.txGradingReward = uiMap["arena_ui.btn_grading_reward.tx_grading_reward"] self.txTitle:setText(I18N:getGlobalText(I18N.GlobalConst.ARENA_DESC_4)) self.txRecord:setText(I18N:getGlobalText(I18N.GlobalConst.ARENA_DESC_7)) self.txFormation:setText(I18N:getGlobalText(I18N.GlobalConst.ARENA_DESC_9)) self.txReward:setText(I18N:getGlobalText(I18N.GlobalConst.ARENA_DESC_41)) self.txRank:setText(I18N:getGlobalText(I18N.GlobalConst.ARENA_DESC_5)) self.txGradingReward:setText(I18N:getGlobalText(I18N.GlobalConst.ARENA_DESC_40)) self.btnHelp:addClickListener(function() local params = { type = GConst.TipsConst.HELP_TIPS_TYPE.ARENA, title = I18N:getGlobalText(I18N.GlobalConst.ARENA_DESC_4), desc = I18N:getGlobalText(I18N.GlobalConst.ARENA_DESC_HELP), } ModuleManager.TipsManager:showHelpTips(params) end) self.btnRecord:addClickListener(function() UIManager:showUI("app/ui/arena/arena_recent_battle_ui") end) self.btnFormation:addClickListener(function() UIManager:showUI("app/ui/arena/arena_formation_ui", {type = GConst.BattleConst.FORMATION_TYPE.ARENA_DEFEND}) end) self.btnReward:addClickListener(function() UIManager:showUI("app/ui/arena/arena_season_reward_ui") end) self.btnRank:addClickListener(function() UIManager:showUI("app/ui/arena/arena_rank_ui") end) self.btnGradingReward:addClickListener(function() UIManager:showUI("app/ui/arena/arena_grading_reward_ui") end) self.bountyNode = uiMap["arena_ui.bounty_node"] self.bountyBanner = uiMap["arena_ui.bounty_node.banner"] self.bountyBanner:addClickListener(function() ModuleManager.ArenaBountyManager:showBountyMainUI() end) self.bountyRewardSpine = uiMap["arena_ui.bounty_node.banner.spine"] self.bountyBannerInfo = uiMap["arena_ui.bounty_node.banner.info"] self.bountyBannerDescTx = uiMap["arena_ui.bounty_node.banner.desc"] self.bountyBannerSlider = uiMap["arena_ui.bounty_node.banner.info.progress_bg.slider"] self.bountyBannerSliderTx = uiMap["arena_ui.bounty_node.banner.info.progress_bg.slider_tx"] self.bountyBannerLvTx = uiMap["arena_ui.bounty_node.banner.info.progress_bg.lv_tx"] uiMap["arena_ui.bounty_node.banner.info.name"]:setText(I18N:getGlobalText(I18N.GlobalConst.ARENA_BATTLEPASS_1)) self.rightArrow = uiMap["arena_ui.right_node.arrow_node"] self.rightArrow:setVisible(false) self.rightNode = uiMap["arena_ui.right_node"] self.rightBtnCells = {} self.rightBtnCells.giftCell = CellManager:addCellComp(uiMap["arena_ui.right_node.side_bar.side_bar_cell"], GIFT_CELL) self.fightBtn = uiMap["arena_ui.fight_btn"] -- 体力消耗 self.fightCost = uiMap["arena_ui.fight_btn.cost"] self.costTxDesc = uiMap["arena_ui.fight_btn.cost.tx_desc"] self.costTxCost = uiMap["arena_ui.fight_btn.cost.tx_cost"] -- 剩余次数 self.countTxNum = uiMap["arena_ui.fight_btn.tx_count"] -- 按钮文本 self.txFight = uiMap["arena_ui.fight_btn.tx_desc"] self.txFight:setText(I18N:getGlobalText(I18N.GlobalConst.ARENA_DESC_2)) self.fightBtn:addClickListener(function () -- 赛季结算 if DataManager.ArenaData:isInSeasonSettlementTime() then GFunc.showToast(I18N:getGlobalText(I18N.GlobalConst.ARENA_DESC_29)) return end UIManager:showUI("app/ui/arena/arena_match_ui") end) self:bind(DataManager.ArenaData, "isDirty", function() self:onRefresh() end) self:updateTime() end function ArenaUI:updateTime() if self.seasonSettlementSid then self:unscheduleGlobal(self.seasonSettlementSid) self.seasonSettlementSid = nil end if self.seasonEndSid then self:unscheduleGlobal(self.seasonEndSid) self.seasonEndSid = nil end if not DataManager.ArenaData:isInSeasonSettlementTime() then -- 结算计时器 if EDITOR_MODE then Logger.logHighlight("赛季锁定倒计时:"..DataManager.ArenaData:getRemainSeasonSettlementTime()) end self.seasonSettlementSid = self:performWithDelayGlobal(function() ModuleManager.ArenaManager:onSeasonSettlement() end, DataManager.ArenaData:getRemainSeasonSettlementTime()) else -- 结束计时器 if EDITOR_MODE then Logger.logHighlight("赛季结束倒计时:"..DataManager.ArenaData:getRemainSeasonTime()) end self.seasonEndSid = self:performWithDelayGlobal(function() ModuleManager.ArenaManager:onSeasonChanged() end, DataManager.ArenaData:getRemainSeasonTime()) end -- 显示倒计时 if self.seasonChangeSid then self:unscheduleGlobal(self.seasonChangeSid) end self.txCountdown:setText(Time:formatNumTimeStr(DataManager.ArenaData:getRemainSeasonTime())) self.seasonChangeSid = self:scheduleGlobal(function() self.txCountdown:setText(Time:formatNumTimeStr(DataManager.ArenaData:getRemainSeasonTime())) end, 1) end function ArenaUI:onRefresh() self:refreshInfo() self:refreshBounty() self:refreshRightBtns() self:refreshFightBtn() self:refreshRedPoint() end function ArenaUI:refreshBounty() if GFunc.isShenhe() then self.bountyNode:setVisible(false) return end self.bountyNode:setVisible(true) if DataManager.ArenaBountyData:getIfCanClaimReward() then self.bountyRewardSpine:setVisible(true) self.bountyRewardSpine:playAnim("idle", true) self.bountyRewardSpine:getSkeletonGraphic().enabled = true self.bountyBannerInfo:setVisible(false) self.bountyBannerDescTx:setText(I18N:getGlobalText(I18N.GlobalConst.COLLET_REWARDS)) else self.bountyRewardSpine:setVisible(false) self.bountyRewardSpine:getSkeletonGraphic().enabled = false local bannerName = DataManager.ArenaBountyData:getBannerName() self.bountyBanner:setSprite(GConst.ATLAS_PATH.BOUNTY, bannerName) self.bountyBannerInfo:setVisible(true) self.bountyBannerDescTx:setText(GConst.EMPTY_STRING) local exp = DataManager.ArenaBountyData:getExp() local lvUpExp = DataManager.ArenaBountyData:getLvUpExp() local level = DataManager.ArenaBountyData:getLevel() local maxLevel = DataManager.ArenaBountyData:getMaxLevel() self.bountyBannerSliderTx:setText(exp .. "/" .. lvUpExp) self.bountyBannerSlider:getComponent(GConst.TYPEOF_UNITY_CLASS.BF_SLIDER).value = exp / lvUpExp if level >= maxLevel then self.bountyBannerLvTx:setText(I18N:getGlobalText(I18N.GlobalConst.STR_MAX)) else self.bountyBannerLvTx:setText(tostring(level)) end end end function ArenaUI:refreshInfo() local gradingId = DataManager.ArenaData:getGradingId() local totalScore = DataManager.ArenaData:getScore() local maxScore = DataManager.ArenaData:getGradingScoreTotal(totalScore) local curScore = DataManager.ArenaData:getGradingScore(totalScore) local gradingIconName = DataManager.ArenaData:getGradingIconName(gradingId) local gradingNumName = DataManager.ArenaData:getGradingNumName(gradingId) self.txSeason:setText(I18N:getGlobalText(I18N.GlobalConst.ARENA_DESC_3, DataManager.ArenaData:getSeason())) self.txGarding:setText(DataManager.ArenaData:getGradingName(gradingId)) if maxScore then self.txProg:setText(curScore.."/"..maxScore) self.imgProg:getComponent(GConst.TYPEOF_UNITY_CLASS.BF_SLIDER).value = curScore/maxScore else self.txProg:setText(curScore) self.imgProg:getComponent(GConst.TYPEOF_UNITY_CLASS.BF_SLIDER).value = 1 end if DataManager.ArenaData:hasSeasonReward() then self.btnReward:addRedPoint(36, 25, 1) else self.btnReward:removeRedPoint() end self.spineRoot:removeAllChildren() SpineManager:loadUISpineWidgetAsync(gradingIconName.."_spine", self.spineRoot, function(spineObject) self.spineGrading = spineObject self.spineGrading:setSkin(gradingNumName) self.spineGrading:playAnim("idle", true) end) end function ArenaUI:refreshRightBtns() local y = 0 if self.rightBtnCells.giftCell:checkIsOpen() then y = y - 60 self.rightBtnCells.giftCell:setActive(true) self.rightBtnCells.giftCell:setVisible(true) self.rightBtnCells.giftCell:getBaseObject():setAnchoredPositionY(y) self.rightBtnCells.giftCell:refresh() else self.rightBtnCells.giftCell:setVisible(false) end -- 暂不处理箭头的问题 self.rightNode:setVisible(y < 0) end -- 刷新段位奖励红点 function ArenaUI:refreshRedPoint() if DataManager.ArenaData:hasGradingRewardRedDot() then self.btnGradingReward:addRedPoint(50, 50, 1) else self.btnGradingReward:removeRedPoint() end end function ArenaUI:refreshFightBtn() local isShowFight = false -- 体力消耗 self.fightCost:setActive(false) self.countTxNum:setActive(false) self.fightBtn:setActive(true) if DataManager.ArenaData:hasTicket() then self.fightBtn:addRedPoint(120, 40, 1) else self.fightBtn:removeRedPoint() end end return ArenaUI