diff --git a/lua/app/common/event_manager.lua b/lua/app/common/event_manager.lua index 6530cb1d..aa4e16a0 100644 --- a/lua/app/common/event_manager.lua +++ b/lua/app/common/event_manager.lua @@ -43,6 +43,8 @@ EventManager.CUSTOM_EVENT = { -- 竞技场 ARENA_SEASON_SETTLEMENT = "ARENA_SEASON_SETTLEMENT",-- 赛季结算 ARENA_SEASON_END = "ARENA_SEASON_END",-- 赛季结束 + ARENA_RECORD_SUCCESS = "ARENA_RECORD_SUCCESS",-- 战报获取成功 + ARENA_RANK_SUCCESS = "ARENA_RANK_SUCCESS",-- 排行榜获取成功 -- BORAD_TOUCH_BEGIN = "BORAD_TOUCH_BEGIN", -- BORAD_TOUCH_OVER = "BORAD_TOUCH_OVER" } diff --git a/lua/app/module/arena/arena_manager.lua b/lua/app/module/arena/arena_manager.lua index 31ebbf52..2e4647e1 100644 --- a/lua/app/module/arena/arena_manager.lua +++ b/lua/app/module/arena/arena_manager.lua @@ -1,19 +1,37 @@ local ArenaManager = class("ArenaManager", BaseModule) +function ArenaManager:checkSeasonChange() + if not DataManager.ArenaData:isInSeasonTime() then + -- 不在赛季时间段,赛季改变 + self:onSeasonChanged() + elseif not DataManager.ArenaData:isInSeasonSettlementTime() then + -- 不在赛季结算时间段,赛季锁定 + self:onSeasonSettlement() + else + -- 赛季未发生改变,不处理 + end +end + -- 赛季结算 function ArenaManager:onSeasonSettlement() - EventManager.dispatchEvent(EventManager.CUSTOM_EVENT.ARENA_SEASON_SETTLEMENT) + if EDITOR_MODE then + Logger.logHighlight("赛季结算") + end + EventManager:dispatchEvent(EventManager.CUSTOM_EVENT.ARENA_SEASON_SETTLEMENT) end -- 赛季改变 function ArenaManager:onSeasonChanged() - EventManager.dispatchEvent(EventManager.CUSTOM_EVENT.ARENA_SEASON_END) + if EDITOR_MODE then + Logger.logHighlight("赛季改变") + end if not self.isResetting then return end DataManager.ArenaData:onSeasonChanged() self:reqArenaInfo() + EventManager:dispatchEvent(EventManager.CUSTOM_EVENT.ARENA_SEASON_END) end -- 匹配 @@ -112,6 +130,7 @@ function ArenaManager:rspSettlement(result) end -- 展示结算界面 ModuleManager.BattleManager:showArenaBattleResultUI(result.settlement, result.rewards, checkCount) + self:checkSeasonChange() end end @@ -123,6 +142,7 @@ end function ArenaManager:rspRecord(result) if result.err_code == GConst.ERROR_STR.SUCCESS then DataManager.ArenaData:onRecentBattleReceived(result.history) + EventManager:dispatchEvent(EventManager.CUSTOM_EVENT.ARENA_RECORD_SUCCESS) end end @@ -134,6 +154,7 @@ end function ArenaManager:rspRank(result) if result.err_code == GConst.ERROR_STR.SUCCESS then DataManager.ArenaData:onRankDataReceived(result.rank, result.top100.info) + EventManager:dispatchEvent(EventManager.CUSTOM_EVENT.ARENA_RANK_SUCCESS) end end diff --git a/lua/app/ui/arena/arena_match_ui.lua b/lua/app/ui/arena/arena_match_ui.lua index eb8bcb44..a6f4ef82 100644 --- a/lua/app/ui/arena/arena_match_ui.lua +++ b/lua/app/ui/arena/arena_match_ui.lua @@ -148,7 +148,7 @@ end function ArenaMatchUI:showMatchResult() local matchInfo = DataManager.ArenaData:getMatchInfo() if not matchInfo then - Logger.logError("没有匹配对象却进入了匹配结果页,有问题@.#") + Logger.logError("没有获取到匹配对象,检查匹配响应,查看原因") return end diff --git a/lua/app/ui/arena/arena_rank_ui.lua b/lua/app/ui/arena/arena_rank_ui.lua index f6b39e73..bc75fe84 100644 --- a/lua/app/ui/arena/arena_rank_ui.lua +++ b/lua/app/ui/arena/arena_rank_ui.lua @@ -57,9 +57,9 @@ function ArenaRankUI:onLoadRootComplete() self.closeBtn:addClickListener(function() self:closeUI() end) - self:bind(DataManager.ArenaData, "isDirty", function() - self:onRefresh() - end) + self:addEventListener(EventManager.CUSTOM_EVENT.ARENA_RANK_SUCCESS, function() + self:onRefresh() + end) end function ArenaRankUI:onRefresh() diff --git a/lua/app/ui/arena/arena_recent_battle_ui.lua b/lua/app/ui/arena/arena_recent_battle_ui.lua index a5a38445..40909cdf 100644 --- a/lua/app/ui/arena/arena_recent_battle_ui.lua +++ b/lua/app/ui/arena/arena_recent_battle_ui.lua @@ -52,9 +52,9 @@ function ArenaRecentBattleUI:onLoadRootComplete() self.btnClose:addClickListener(function() self:closeUI() end) - self:bind(DataManager.ArenaData, "isDirty", function() + self:addEventListener(EventManager.CUSTOM_EVENT.ARENA_RECORD_SUCCESS, function() self:onRefresh() - end) + end) end function ArenaRecentBattleUI:onRefresh() diff --git a/lua/app/ui/arena/arena_season_reward_ui.lua b/lua/app/ui/arena/arena_season_reward_ui.lua index 872bca40..efff029a 100644 --- a/lua/app/ui/arena/arena_season_reward_ui.lua +++ b/lua/app/ui/arena/arena_season_reward_ui.lua @@ -1,5 +1,6 @@ -- 竞技场:赛季奖励 local ArenaSeasonRewardUI = class("ArenaSeasonRewardUI", BaseUI) +local MAX_SCROLL_SHOW_COUNT = 10 function ArenaSeasonRewardUI:isFullScreen() return false @@ -31,6 +32,10 @@ function ArenaSeasonRewardUI:onClose() self:unscheduleGlobal(self.seasonChangeSid) self.seasonChangeSid = nil end + if self.spineGrading then + self.spineGrading:destroy() + self.spineGrading = nil + end end function ArenaSeasonRewardUI:onLoadRootComplete() @@ -46,9 +51,10 @@ function ArenaSeasonRewardUI:onLoadRootComplete() -- 领取奖励 self.getReward = uiMap["arena_season_reward_ui.bg.last_reward"] self.txSeason = uiMap["arena_season_reward_ui.bg.last_reward.tx_season"] - self.imgGrading = uiMap["arena_season_reward_ui.bg.last_reward.img_grading"] + self.spineRoot = uiMap["arena_season_reward_ui.bg.last_reward.spine_root"] self.txGrading = uiMap["arena_season_reward_ui.bg.last_reward.img_grading.tx_grading"] - self.getRewardComp = uiMap["arena_season_reward_ui.bg.last_reward.rewards"]:addLuaComponent(GConst.TYPEOF_LUA_CLASS.SCROLL_RECT_BASE) + self.rewardList = uiMap["arena_season_reward_ui.bg.last_reward.rewards"] + self.getRewardComp = self.rewardList:addLuaComponent(GConst.TYPEOF_LUA_CLASS.SCROLL_RECT_BASE) self.btnGet = uiMap["arena_season_reward_ui.bg.last_reward.btn_get"] self.txGet = uiMap["arena_season_reward_ui.bg.last_reward.btn_get.tx_get"] @@ -112,22 +118,54 @@ function ArenaSeasonRewardUI:showGetReward() self.getReward:setActive(true) local lastId = DataManager.ArenaData:getLastGradingId() - local rewards = DataManager.ArenaData:getGradingRewardInfo(lastId) + self.txSeason:setText(I18N:getGlobalText(I18N.GlobalConst.ARENA_DESC_13, DataManager.ArenaData:getSeason() - 1)) - self.imgGrading:setSprite(GConst.ATLAS_PATH.ARENA, DataManager.ArenaData:getGradingIconName(lastId)) self.txGrading:setText(DataManager.ArenaData:getGradingName(lastId)) self.txGet:setText(I18N:getGlobalText(I18N.GlobalConst.BTN_CLAIM)) + if self.spineGrading then + self.spineGrading:destroy() + self.spineGrading = nil + end + SpineManager:loadUISpineWidgetAsync(DataManager.ArenaData:getGradingIconName(lastId).."_spine", self.spineRoot, function(spineObject) + self.spineGrading = spineObject + self.spineGrading:setSkin(DataManager.ArenaData:getGradingNumName(lastId)) + self.spineGrading:playAnimComplete("born", false, false, function() + self.spineGrading:playAnim("idle", true, false) + end) + end) self.btnGet:addRedPoint(110, 35, 0.6) + local rewards = DataManager.ArenaData:getGradingRewardInfo(lastId) + local rewardCount = #rewards self.getRewardComp:addInitCallback(function() return GConst.TYPEOF_LUA_CLASS.REWARD_CELL end) self.getRewardComp:addRefreshCallback(function(index, cell) - cell:refresh(rewards[index]) + cell:refreshByConfig(rewards[index]) end) - self.seasonRewardComp:clearCells() - self.seasonRewardComp:refillCells(#rewards) + self.getRewardComp:clearCells() + + if rewardCount > MAX_SCROLL_SHOW_COUNT then + local comp = self.rewardList:getComponent(GConst.TYPEOF_UNITY_CLASS.UI_SCROLL_RECT) + comp.movementType = CS.UnityEngine.UI.ScrollRect.MovementType.Elastic + self.getRewardComp:setPerLineNum(5) + self.rewardList:setSizeDeltaX(560) + else + local comp = self.rewardList:getComponent(GConst.TYPEOF_UNITY_CLASS.UI_SCROLL_RECT) + comp.movementType = CS.UnityEngine.UI.ScrollRect.MovementType.Clamped + if rewardCount >= 5 then + self.getRewardComp:setPerLineNum(5) + self.rewardList:setSizeDeltaX(560) + elseif rewardCount <= 0 then + self.getRewardComp:setPerLineNum(1) + self.rewardList:setSizeDeltaX(560) + else + self.getRewardComp:setPerLineNum(rewardCount) + self.rewardList:setSizeDeltaX(112 * rewardCount) + end + end + self.getRewardComp:refillCells(rewardCount) end return ArenaSeasonRewardUI \ No newline at end of file diff --git a/lua/app/ui/battle/battle_result_ui.lua b/lua/app/ui/battle/battle_result_ui.lua index fe829aba..cd4bd068 100644 --- a/lua/app/ui/battle/battle_result_ui.lua +++ b/lua/app/ui/battle/battle_result_ui.lua @@ -121,6 +121,10 @@ function BattleResultUI:onLoadRootComplete() self.arenaTxProg = uiMap["battle_result_ui.arena_node.prog.tx_prog"] -- 竞技场广告宝箱 self.arenaBoxNode = uiMap["battle_result_ui.arena_box_node"] + self.arenaBoxImgIcon = uiMap["battle_result_ui.arena_box_node.img_box"] + self.arenaBoxTxTitle = uiMap["battle_result_ui.arena_box_node.tx_box"] + self.arenaBoxBtnGet = uiMap["battle_result_ui.arena_box_node.btn_get"] + self.arenaBoxTxGet = uiMap["battle_result_ui.arena_box_node.btn_get.tx_get"] self.victoryMask:addClickListener(function() self:onClickMask() @@ -128,6 +132,9 @@ function BattleResultUI:onLoadRootComplete() self.defeatMask:addClickListener(function() self:onClickMask() end) + self.arenaBoxBtnGet:addClickListener(function() + -- 打开宝箱界面 + end) end function BattleResultUI:onClickMask() @@ -151,6 +158,7 @@ function BattleResultUI:onRefresh() self:refreshRewards() self:refreshUnitInfo() self:refreshArenaNode() + self:refreshArenaBoxNode() end function BattleResultUI:refreshVictoryNode() @@ -216,7 +224,6 @@ end function BattleResultUI:refreshArenaNode() if self.battleType ~= GConst.BattleConst.BATTLE_TYPE.ARENA then self.arenaNode:setVisible(false) - self.arenaBoxNode:setVisible(false) return end @@ -258,17 +265,32 @@ function BattleResultUI:refreshArenaNode() else self.arenaTxScore:setText(I18N:getGlobalText(I18N.GlobalConst.ARENA_DESC_27, self.incrScore)) end +end + +function BattleResultUI:refreshArenaBoxNode() + if self.battleType ~= GConst.BattleConst.BATTLE_TYPE.ARENA then + self.arenaBoxNode:setVisible(false) + return + end + if self.isWin and (self.arenaTotalCount % GFunc.getConstIntValue("arena_win_adbox")) ~= 0 then + return + end + if not self.isWin and (self.arenaTotalCount % GFunc.getConstIntValue("arena_lose_adbox")) ~= 0 then + return + end + self.arenaBoxNode:setVisible(true) + self.arenaBoxTxGet:setText(I18N:getGlobalText(I18N.GlobalConst.BTN_CLAIM)) - -- 检查ad宝箱显示 if self.isWin then - if (self.arenaTotalCount % GFunc.getConstIntValue("arena_win_adbox")) == 0 then - self.arenaBoxNode:setVisible(true) - - end + -- 胜利宝箱 + self.arenaBoxNode:setSprite(GConst.ATLAS_PATH.ARENA, "arena_bg_6") + self.arenaBoxImgIcon:setSprite(GConst.ATLAS_PATH.ARENA, "arena_chest_2") + self.arenaBoxTxTitle:setText(I18N:getGlobalText(I18N.GlobalConst.ARENA_DESC_32)) else - if (self.arenaTotalCount % GFunc.getConstIntValue("arena_lose_adbox")) == 0 then - self.arenaBoxNode:setVisible(true) - end + -- 鼓励宝箱 + self.arenaBoxNode:setSprite(GConst.ATLAS_PATH.ARENA, "arena_bg_5") + self.arenaBoxImgIcon:setSprite(GConst.ATLAS_PATH.ARENA, "arena_chest_1") + self.arenaBoxTxTitle:setText(I18N:getGlobalText(I18N.GlobalConst.ARENA_DESC_33)) end end diff --git a/lua/app/ui/main_city/component/arena_comp.lua b/lua/app/ui/main_city/component/arena_comp.lua index 2369ce30..bacc6ed5 100644 --- a/lua/app/ui/main_city/component/arena_comp.lua +++ b/lua/app/ui/main_city/component/arena_comp.lua @@ -16,6 +16,11 @@ function ArenaComp:getFightDesc() end function ArenaComp:onClickFight() + -- 赛季结算 + 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 @@ -61,11 +66,6 @@ function ArenaComp:init() ModuleManager.TipsManager:showHelpTips(params) end) self.btnRecord:addClickListener(function() - -- 赛季结算 - if DataManager.ArenaData:isInSeasonSettlement() then - GFunc.showToast(I18N:getGlobalText(I18N.GlobalConst.ARENA_DESC_29)) - return - end UIManager:showUI("app/ui/arena/arena_recent_battle_ui") end) self.btnFormation:addClickListener(function() @@ -171,16 +171,22 @@ function ArenaComp:updateTimer() self.seasonEndSid = nil end - if DataManager.ArenaData:isInSeasonSettlement() then + if not DataManager.ArenaData:isInSeasonSettlementTime() then -- 结算计时器 + if EDITOR_MODE then + Logger.logHighlight("赛季锁定倒计时:"..DataManager.ArenaData:getRemainSeasonSettlementTime()) + end self.seasonSettlementSid = self:getBaseObject():performWithDelayGlobal(function() ModuleManager.ArenaManager:onSeasonSettlement() - end, DataManager.ArenaData:getRemainSeasonTime()) + end, DataManager.ArenaData:getRemainSeasonSettlementTime()) else -- 结束计时器 + if EDITOR_MODE then + Logger.logHighlight("赛季结束倒计时:"..DataManager.ArenaData:getRemainSeasonTime()) + end self.seasonEndSid = self:getBaseObject():performWithDelayGlobal(function() ModuleManager.ArenaManager:onSeasonChanged() - end, DataManager.ArenaData:getRemainSeasonSettlementTime()) + end, DataManager.ArenaData:getRemainSeasonTime()) end -- 显示倒计时 diff --git a/lua/app/userdata/arena/arena_data.lua b/lua/app/userdata/arena/arena_data.lua index 4d71ba3e..6ac0abe5 100644 --- a/lua/app/userdata/arena/arena_data.lua +++ b/lua/app/userdata/arena/arena_data.lua @@ -130,10 +130,15 @@ function ArenaData:hasServerData() end -- 是否在赛季结算中 -function ArenaData:isInSeasonSettlement() +function ArenaData:isInSeasonSettlementTime() return self:getRemainSeasonTime() > 0 and self:getRemainSeasonSettlementTime() < 0 end +-- 是否在赛季时间段中 +function ArenaData:isInSeasonTime() + return self:getRemainSeasonTime() > 0 and self:getRemainSeasonSettlementTime() > 0 +end + -- 获取当前为第几赛季 function ArenaData:getSeason() return self.season @@ -413,7 +418,6 @@ end function ArenaData:onRankDataReceived(rank, list) self.rank = rank self.rankList = list - self:setDirty() end -- 获取到排行榜编队信息 @@ -432,7 +436,6 @@ function ArenaData:onRecentBattleReceived(recentBattle) return a.occur_at > b.occur_at end) self.recentBattle = recentBattle - self:setDirty() end -- 获取到匹配数据 @@ -445,15 +448,19 @@ end -- 结算战斗数据 function ArenaData:onBattleResultReceived(settlement) - -- 战斗记录改变 - if self.recentBattle == nil then - self.recentBattle = {} + self.matchInfo = nil + + if settlement then + -- 战斗记录改变 + if self.recentBattle == nil then + self.recentBattle = {} + end + table.remove(self.recentBattle, #self.recentBattle) + table.insert(self.recentBattle, 1, settlement) + -- 积分改变 + self.score = self.score + settlement.incr_score + self.curGradingId = self:getGradingIdFromScore(self.score) end - table.remove(self.recentBattle, #self.recentBattle) - table.insert(self.recentBattle, 1, settlement) - -- 积分改变 - self.score = self.score + settlement.incr_score - self.curGradingId = self:getGradingIdFromScore(self.score) self:setDirty() end