Files
Endfield-Data/LuaScripts/UI/Panels/BattlePassBuyLevel/BattlePassBuyLevelCtrl.lua
2025-12-02 20:37:18 +07:00

275 lines
7.2 KiB
Lua

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)