local uiCtrl = require_ex('UI/Panels/Base/UICtrl') local PANEL_ID = PanelId.BattlePassBuyLevel BattlePassBuyLevelCtrl = HL.Class('BattlePassBuyLevelCtrl', uiCtrl.UICtrl) local MIN_REFRESH_TIME = 0.1 BattlePassBuyLevelCtrl.s_messages = HL.StaticField(HL.Table) << { [MessageConst.ON_BATTLE_PASS_BUY_LEVEL] = '_OnBuyLevel', } BattlePassBuyLevelCtrl.m_bpSystem = HL.Field(HL.Any) BattlePassBuyLevelCtrl.m_originiumEnough = HL.Field(HL.Boolean) << true BattlePassBuyLevelCtrl.m_maxLevel = HL.Field(HL.Number) << 1 BattlePassBuyLevelCtrl.m_curLevel = HL.Field(HL.Number) << 1 BattlePassBuyLevelCtrl.m_targetLevel = HL.Field(HL.Number) << 1 BattlePassBuyLevelCtrl.m_buyLevel = HL.Field(HL.Number) << 0 BattlePassBuyLevelCtrl.m_currExp = HL.Field(HL.Number) << 0 BattlePassBuyLevelCtrl.m_seasonData = HL.Field(HL.Any) BattlePassBuyLevelCtrl.m_rewards = HL.Field(HL.Any) BattlePassBuyLevelCtrl.m_getCell = HL.Field(HL.Function) BattlePassBuyLevelCtrl.m_buyOriTrack = HL.Field(HL.Boolean) << false BattlePassBuyLevelCtrl.m_buyProtocalTrack = HL.Field(HL.Boolean) << false BattlePassBuyLevelCtrl.m_onBuyClose = HL.Field(HL.Function) BattlePassBuyLevelCtrl.OnCreate = HL.Override(HL.Any) << function(self, arg) self.view.closeButton.onClick:AddListener(function() self:PlayAnimationOutWithCallback(function() self:Close() if self.m_onBuyClose ~= nil then self.m_onBuyClose(false) end end) end) self.m_bpSystem = GameInstance.player.battlePassSystem self.m_seasonData = BattlePassUtils.GetSeasonData() self.m_getCell = UIUtils.genCachedCellFunction(self.view.scrollList) self.m_maxLevel = self.m_seasonData.maxLevel self.m_curLevel = self.m_bpSystem.levelData.currLevel self.m_buyOriTrack = BattlePassUtils.CheckOriginiumTrackActive() self.m_buyProtocalTrack = BattlePassUtils.CheckPayTrackActive() self.m_currExp = self.m_bpSystem.levelData.currExp self.m_onBuyClose = arg ~= nil and arg.onBuyClose or nil self:_InitViews() self:_InitNumberSelector() self.view.scrollList.onUpdateCell:AddListener(function(object, csIndex) self:_OnUpdateCell(object, LuaIndex(csIndex)) end) self.view.scrollList:UpdateCount(#self.m_rewards) end BattlePassBuyLevelCtrl._InitNumberSelector = HL.Method() << function(self) local maxBuyLevel = math.max(self.m_maxLevel - self.m_curLevel, 1) self.view.numberSelector:InitNumberSelector(maxBuyLevel, 1, maxBuyLevel, function(curNumber) self:_RefreshLevelInfos(math.floor(curNumber)) end) end BattlePassBuyLevelCtrl._OnBuyLevel = HL.Method(HL.Table) << function(self, arg) local curLevel = unpack(arg) local expGap = BattlePassUtils.GetExpGap(self.m_curLevel,self.m_currExp,curLevel,0) Notify(MessageConst.SHOW_SYSTEM_REWARDS, { title = Language.LUA_BATTLEPASS_BUY_LEVEL_TIPS, items = { { id = Tables.battlePassConst.bpExpItem , count = expGap } }, onComplete = function() if self.m_onBuyClose ~= nil then self.m_onBuyClose(true) end end }) self:PlayAnimationOutAndClose() end BattlePassBuyLevelCtrl._RefreshLevelInfos = HL.Method(HL.Opt(HL.Number)) << function(self, curNumber) self.m_curLevel = self.m_bpSystem.levelData.currLevel self.m_buyLevel = curNumber or self.m_buyLevel self.m_targetLevel = self.m_buyLevel + self.m_curLevel self.view.curLevelText.text = self.m_curLevel self.view.buyLevelText.text = self.m_buyLevel self.view.targetLevelText.text = self.m_targetLevel self.view.costTotalTxt.text = self.m_buyLevel * Tables.battlePassConst.buyLevelMoneyCnt self.m_originiumEnough = BattlePassUtils.CheckOriginiumEnough(self.m_buyLevel) self.view.mainStateController:SetState(self.m_originiumEnough and "Buy" or "NoMoney") self:_RefreshRewards(self.m_curLevel + 1, self.m_targetLevel) end BattlePassBuyLevelCtrl._InitViews = HL.Method() << function(self) self.view.controllerHintPlaceholder:InitControllerHintPlaceholder({ self.view.inputGroup.groupId }) self.view.moneyCell:InitMoneyCell(Tables.battlePassConst.buyLevelMoneyID) self.view.originiumNode:SetState(self.m_buyOriTrack and "Active" or "NoActive") self.view.protocolNode:SetState(self.m_buyProtocalTrack and "Active" or "NoActive") self.view.buyBtn.onClick:AddListener(function() if self.m_buyOriTrack and self.m_buyProtocalTrack then self.m_bpSystem:SendBuyLevel(self.m_targetLevel) else Notify(MessageConst.SHOW_POP_UP,{ content = string.format(Language.LUA_BATTLEPASS_BUY_TRACK_TIPS, self.m_buyOriTrack and BattlePassUtils.GetPayTrackInfo().name or BattlePassUtils.GetOriginiumTrackInfo().name), onConfirm = function() UIManager:Close(PanelId.CommonPopUp) self.m_bpSystem:SendBuyLevel(self.m_targetLevel) end }) end end) self.view.noMoneyBtn.onClick:AddListener(function() Notify(MessageConst.SHOW_POP_UP,{ content = Language.LUA_BATTLEPASS_ORIGINIUM_NOT_ENOUGH_TIPS, onConfirm = function() UIManager:Close(PanelId.CommonPopUp) CashShopUtils.GotoCashShopRechargeTab() end }) end) end BattlePassBuyLevelCtrl._RefreshRewards = HL.Method(HL.Number,HL.Number) << function(self, startLevel, endLevel) local levelGroupId = self.m_seasonData.levelGroupId self.m_rewards = {} for i = startLevel,endLevel do local freeRewardId = Tables.battlePassLevelTable[levelGroupId].levelInfos[i].freeRewardId self.m_rewards = UIUtils.getRewardItemsMergeSameId(freeRewardId, self.m_rewards) if self.m_buyOriTrack then local originiumRewardId = Tables.battlePassLevelTable[levelGroupId].levelInfos[i].originiumRewardId self.m_rewards = UIUtils.getRewardItemsMergeSameId(originiumRewardId, self.m_rewards) end if self.m_buyProtocalTrack then local payRewardId = Tables.battlePassLevelTable[levelGroupId].levelInfos[i].payRewardId self.m_rewards = UIUtils.getRewardItemsMergeSameId(payRewardId, self.m_rewards) end end for i = 1, #self.m_rewards do self.m_rewards[i].rarity = Tables.itemTable[self.m_rewards[i].id].rarity end table.sort(self.m_rewards, Utils.genSortFunction({"rarity"}, false)) self.view.scrollList:UpdateCount(#self.m_rewards, 1, false, false, true) end BattlePassBuyLevelCtrl._OnUpdateCell = HL.Method(HL.Any,HL.Number) << function(self, obj, index) local cell = self.m_getCell(obj) cell:InitItem(self.m_rewards[index], true) if DeviceInfo.usingController then cell:SetExtraInfo({ isSideTips = true, }) end end BattlePassBuyLevelCtrl.m_init = HL.Field(HL.Boolean) << false BattlePassBuyLevelCtrl.OnShow = HL.Override() << function(self) if self.m_init then self:_RefreshLevelInfos() else self.m_init = true end end HL.Commit(BattlePassBuyLevelCtrl)