This commit is contained in:
Fang 2023-07-04 14:34:23 +08:00
parent 6b60a73944
commit 5cd90eab7e
9 changed files with 139 additions and 43 deletions

View File

@ -43,6 +43,8 @@ EventManager.CUSTOM_EVENT = {
-- 竞技场 -- 竞技场
ARENA_SEASON_SETTLEMENT = "ARENA_SEASON_SETTLEMENT",-- 赛季结算 ARENA_SEASON_SETTLEMENT = "ARENA_SEASON_SETTLEMENT",-- 赛季结算
ARENA_SEASON_END = "ARENA_SEASON_END",-- 赛季结束 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_BEGIN = "BORAD_TOUCH_BEGIN",
-- BORAD_TOUCH_OVER = "BORAD_TOUCH_OVER" -- BORAD_TOUCH_OVER = "BORAD_TOUCH_OVER"
} }

View File

@ -1,19 +1,37 @@
local ArenaManager = class("ArenaManager", BaseModule) 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() 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 end
-- 赛季改变 -- 赛季改变
function ArenaManager:onSeasonChanged() function ArenaManager:onSeasonChanged()
EventManager.dispatchEvent(EventManager.CUSTOM_EVENT.ARENA_SEASON_END) if EDITOR_MODE then
Logger.logHighlight("赛季改变")
end
if not self.isResetting then if not self.isResetting then
return return
end end
DataManager.ArenaData:onSeasonChanged() DataManager.ArenaData:onSeasonChanged()
self:reqArenaInfo() self:reqArenaInfo()
EventManager:dispatchEvent(EventManager.CUSTOM_EVENT.ARENA_SEASON_END)
end end
-- 匹配 -- 匹配
@ -112,6 +130,7 @@ function ArenaManager:rspSettlement(result)
end end
-- 展示结算界面 -- 展示结算界面
ModuleManager.BattleManager:showArenaBattleResultUI(result.settlement, result.rewards, checkCount) ModuleManager.BattleManager:showArenaBattleResultUI(result.settlement, result.rewards, checkCount)
self:checkSeasonChange()
end end
end end
@ -123,6 +142,7 @@ end
function ArenaManager:rspRecord(result) function ArenaManager:rspRecord(result)
if result.err_code == GConst.ERROR_STR.SUCCESS then if result.err_code == GConst.ERROR_STR.SUCCESS then
DataManager.ArenaData:onRecentBattleReceived(result.history) DataManager.ArenaData:onRecentBattleReceived(result.history)
EventManager:dispatchEvent(EventManager.CUSTOM_EVENT.ARENA_RECORD_SUCCESS)
end end
end end
@ -134,6 +154,7 @@ end
function ArenaManager:rspRank(result) function ArenaManager:rspRank(result)
if result.err_code == GConst.ERROR_STR.SUCCESS then if result.err_code == GConst.ERROR_STR.SUCCESS then
DataManager.ArenaData:onRankDataReceived(result.rank, result.top100.info) DataManager.ArenaData:onRankDataReceived(result.rank, result.top100.info)
EventManager:dispatchEvent(EventManager.CUSTOM_EVENT.ARENA_RANK_SUCCESS)
end end
end end

View File

@ -148,7 +148,7 @@ end
function ArenaMatchUI:showMatchResult() function ArenaMatchUI:showMatchResult()
local matchInfo = DataManager.ArenaData:getMatchInfo() local matchInfo = DataManager.ArenaData:getMatchInfo()
if not matchInfo then if not matchInfo then
Logger.logError("没有匹配对象却进入了匹配结果页,有问题@.#") Logger.logError("没有获取到匹配对象,检查匹配响应,查看原因")
return return
end end

View File

@ -57,7 +57,7 @@ function ArenaRankUI:onLoadRootComplete()
self.closeBtn:addClickListener(function() self.closeBtn:addClickListener(function()
self:closeUI() self:closeUI()
end) end)
self:bind(DataManager.ArenaData, "isDirty", function() self:addEventListener(EventManager.CUSTOM_EVENT.ARENA_RANK_SUCCESS, function()
self:onRefresh() self:onRefresh()
end) end)
end end

View File

@ -52,7 +52,7 @@ function ArenaRecentBattleUI:onLoadRootComplete()
self.btnClose:addClickListener(function() self.btnClose:addClickListener(function()
self:closeUI() self:closeUI()
end) end)
self:bind(DataManager.ArenaData, "isDirty", function() self:addEventListener(EventManager.CUSTOM_EVENT.ARENA_RECORD_SUCCESS, function()
self:onRefresh() self:onRefresh()
end) end)
end end

View File

@ -1,5 +1,6 @@
-- 竞技场:赛季奖励 -- 竞技场:赛季奖励
local ArenaSeasonRewardUI = class("ArenaSeasonRewardUI", BaseUI) local ArenaSeasonRewardUI = class("ArenaSeasonRewardUI", BaseUI)
local MAX_SCROLL_SHOW_COUNT = 10
function ArenaSeasonRewardUI:isFullScreen() function ArenaSeasonRewardUI:isFullScreen()
return false return false
@ -31,6 +32,10 @@ function ArenaSeasonRewardUI:onClose()
self:unscheduleGlobal(self.seasonChangeSid) self:unscheduleGlobal(self.seasonChangeSid)
self.seasonChangeSid = nil self.seasonChangeSid = nil
end end
if self.spineGrading then
self.spineGrading:destroy()
self.spineGrading = nil
end
end end
function ArenaSeasonRewardUI:onLoadRootComplete() function ArenaSeasonRewardUI:onLoadRootComplete()
@ -46,9 +51,10 @@ function ArenaSeasonRewardUI:onLoadRootComplete()
-- 领取奖励 -- 领取奖励
self.getReward = uiMap["arena_season_reward_ui.bg.last_reward"] self.getReward = uiMap["arena_season_reward_ui.bg.last_reward"]
self.txSeason = uiMap["arena_season_reward_ui.bg.last_reward.tx_season"] 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.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.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"] 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) self.getReward:setActive(true)
local lastId = DataManager.ArenaData:getLastGradingId() 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.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.txGrading:setText(DataManager.ArenaData:getGradingName(lastId))
self.txGet:setText(I18N:getGlobalText(I18N.GlobalConst.BTN_CLAIM)) 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) self.btnGet:addRedPoint(110, 35, 0.6)
local rewards = DataManager.ArenaData:getGradingRewardInfo(lastId)
local rewardCount = #rewards
self.getRewardComp:addInitCallback(function() self.getRewardComp:addInitCallback(function()
return GConst.TYPEOF_LUA_CLASS.REWARD_CELL return GConst.TYPEOF_LUA_CLASS.REWARD_CELL
end) end)
self.getRewardComp:addRefreshCallback(function(index, cell) self.getRewardComp:addRefreshCallback(function(index, cell)
cell:refresh(rewards[index]) cell:refreshByConfig(rewards[index])
end) end)
self.seasonRewardComp:clearCells() self.getRewardComp:clearCells()
self.seasonRewardComp:refillCells(#rewards)
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 end
return ArenaSeasonRewardUI return ArenaSeasonRewardUI

View File

@ -121,6 +121,10 @@ function BattleResultUI:onLoadRootComplete()
self.arenaTxProg = uiMap["battle_result_ui.arena_node.prog.tx_prog"] self.arenaTxProg = uiMap["battle_result_ui.arena_node.prog.tx_prog"]
-- 竞技场广告宝箱 -- 竞技场广告宝箱
self.arenaBoxNode = uiMap["battle_result_ui.arena_box_node"] 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.victoryMask:addClickListener(function()
self:onClickMask() self:onClickMask()
@ -128,6 +132,9 @@ function BattleResultUI:onLoadRootComplete()
self.defeatMask:addClickListener(function() self.defeatMask:addClickListener(function()
self:onClickMask() self:onClickMask()
end) end)
self.arenaBoxBtnGet:addClickListener(function()
-- 打开宝箱界面
end)
end end
function BattleResultUI:onClickMask() function BattleResultUI:onClickMask()
@ -151,6 +158,7 @@ function BattleResultUI:onRefresh()
self:refreshRewards() self:refreshRewards()
self:refreshUnitInfo() self:refreshUnitInfo()
self:refreshArenaNode() self:refreshArenaNode()
self:refreshArenaBoxNode()
end end
function BattleResultUI:refreshVictoryNode() function BattleResultUI:refreshVictoryNode()
@ -216,7 +224,6 @@ end
function BattleResultUI:refreshArenaNode() function BattleResultUI:refreshArenaNode()
if self.battleType ~= GConst.BattleConst.BATTLE_TYPE.ARENA then if self.battleType ~= GConst.BattleConst.BATTLE_TYPE.ARENA then
self.arenaNode:setVisible(false) self.arenaNode:setVisible(false)
self.arenaBoxNode:setVisible(false)
return return
end end
@ -258,17 +265,32 @@ function BattleResultUI:refreshArenaNode()
else else
self.arenaTxScore:setText(I18N:getGlobalText(I18N.GlobalConst.ARENA_DESC_27, self.incrScore)) self.arenaTxScore:setText(I18N:getGlobalText(I18N.GlobalConst.ARENA_DESC_27, self.incrScore))
end 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.isWin then
if (self.arenaTotalCount % GFunc.getConstIntValue("arena_win_adbox")) == 0 then -- 胜利宝箱
self.arenaBoxNode:setVisible(true) self.arenaBoxNode:setSprite(GConst.ATLAS_PATH.ARENA, "arena_bg_6")
self.arenaBoxImgIcon:setSprite(GConst.ATLAS_PATH.ARENA, "arena_chest_2")
end self.arenaBoxTxTitle:setText(I18N:getGlobalText(I18N.GlobalConst.ARENA_DESC_32))
else else
if (self.arenaTotalCount % GFunc.getConstIntValue("arena_lose_adbox")) == 0 then -- 鼓励宝箱
self.arenaBoxNode:setVisible(true) self.arenaBoxNode:setSprite(GConst.ATLAS_PATH.ARENA, "arena_bg_5")
end self.arenaBoxImgIcon:setSprite(GConst.ATLAS_PATH.ARENA, "arena_chest_1")
self.arenaBoxTxTitle:setText(I18N:getGlobalText(I18N.GlobalConst.ARENA_DESC_33))
end end
end end

View File

@ -16,6 +16,11 @@ function ArenaComp:getFightDesc()
end end
function ArenaComp:onClickFight() 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") UIManager:showUI("app/ui/arena/arena_match_ui")
end end
@ -61,11 +66,6 @@ function ArenaComp:init()
ModuleManager.TipsManager:showHelpTips(params) ModuleManager.TipsManager:showHelpTips(params)
end) end)
self.btnRecord:addClickListener(function() 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") UIManager:showUI("app/ui/arena/arena_recent_battle_ui")
end) end)
self.btnFormation:addClickListener(function() self.btnFormation:addClickListener(function()
@ -171,16 +171,22 @@ function ArenaComp:updateTimer()
self.seasonEndSid = nil self.seasonEndSid = nil
end 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() self.seasonSettlementSid = self:getBaseObject():performWithDelayGlobal(function()
ModuleManager.ArenaManager:onSeasonSettlement() ModuleManager.ArenaManager:onSeasonSettlement()
end, DataManager.ArenaData:getRemainSeasonTime()) end, DataManager.ArenaData:getRemainSeasonSettlementTime())
else else
-- 结束计时器 -- 结束计时器
if EDITOR_MODE then
Logger.logHighlight("赛季结束倒计时:"..DataManager.ArenaData:getRemainSeasonTime())
end
self.seasonEndSid = self:getBaseObject():performWithDelayGlobal(function() self.seasonEndSid = self:getBaseObject():performWithDelayGlobal(function()
ModuleManager.ArenaManager:onSeasonChanged() ModuleManager.ArenaManager:onSeasonChanged()
end, DataManager.ArenaData:getRemainSeasonSettlementTime()) end, DataManager.ArenaData:getRemainSeasonTime())
end end
-- 显示倒计时 -- 显示倒计时

View File

@ -130,10 +130,15 @@ function ArenaData:hasServerData()
end end
-- 是否在赛季结算中 -- 是否在赛季结算中
function ArenaData:isInSeasonSettlement() function ArenaData:isInSeasonSettlementTime()
return self:getRemainSeasonTime() > 0 and self:getRemainSeasonSettlementTime() < 0 return self:getRemainSeasonTime() > 0 and self:getRemainSeasonSettlementTime() < 0
end end
-- 是否在赛季时间段中
function ArenaData:isInSeasonTime()
return self:getRemainSeasonTime() > 0 and self:getRemainSeasonSettlementTime() > 0
end
-- 获取当前为第几赛季 -- 获取当前为第几赛季
function ArenaData:getSeason() function ArenaData:getSeason()
return self.season return self.season
@ -413,7 +418,6 @@ end
function ArenaData:onRankDataReceived(rank, list) function ArenaData:onRankDataReceived(rank, list)
self.rank = rank self.rank = rank
self.rankList = list self.rankList = list
self:setDirty()
end end
-- 获取到排行榜编队信息 -- 获取到排行榜编队信息
@ -432,7 +436,6 @@ function ArenaData:onRecentBattleReceived(recentBattle)
return a.occur_at > b.occur_at return a.occur_at > b.occur_at
end) end)
self.recentBattle = recentBattle self.recentBattle = recentBattle
self:setDirty()
end end
-- 获取到匹配数据 -- 获取到匹配数据
@ -445,6 +448,9 @@ end
-- 结算战斗数据 -- 结算战斗数据
function ArenaData:onBattleResultReceived(settlement) function ArenaData:onBattleResultReceived(settlement)
self.matchInfo = nil
if settlement then
-- 战斗记录改变 -- 战斗记录改变
if self.recentBattle == nil then if self.recentBattle == nil then
self.recentBattle = {} self.recentBattle = {}
@ -454,6 +460,7 @@ function ArenaData:onBattleResultReceived(settlement)
-- 积分改变 -- 积分改变
self.score = self.score + settlement.incr_score self.score = self.score + settlement.incr_score
self.curGradingId = self:getGradingIdFromScore(self.score) self.curGradingId = self:getGradingIdFromScore(self.score)
end
self:setDirty() self:setDirty()
end end