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

308 lines
8.8 KiB
Lua
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
local uiCtrl = require_ex('UI/Panels/Base/UICtrl')
local PANEL_ID = PanelId.BattlePassAdvancedPlanBuy
BattlePassAdvancedPlanBuyCtrl = HL.Class('BattlePassAdvancedPlanBuyCtrl', uiCtrl.UICtrl)
BattlePassAdvancedPlanBuyCtrl.s_messages = HL.StaticField(HL.Table) << {
[MessageConst.ON_BATTLE_PASS_TRACK_UPDATE] = '_AfterBuy',
}
BattlePassAdvancedPlanBuyCtrl.m_bpSystem = HL.Field(HL.Any)
BattlePassAdvancedPlanBuyCtrl.m_buyOriTrack = HL.Field(HL.Boolean) << false
BattlePassAdvancedPlanBuyCtrl.m_buyProtocalTrack = HL.Field(HL.Boolean) << false
BattlePassAdvancedPlanBuyCtrl.m_seasonData = HL.Field(HL.Any)
BattlePassAdvancedPlanBuyCtrl.m_oriPreInfos = HL.Field(HL.Any)
BattlePassAdvancedPlanBuyCtrl.m_payPreInfos = HL.Field(HL.Any)
BattlePassAdvancedPlanBuyCtrl.m_topCells = HL.Field(HL.Any)
BattlePassAdvancedPlanBuyCtrl.m_bottomCells = HL.Field(HL.Any)
BattlePassAdvancedPlanBuyCtrl.OnCreate = HL.Override(HL.Any) << function(self, arg)
self.view.btnClose.onClick:AddListener(function()
self:PlayAnimationOutAndClose()
end)
self:_InitData()
self:_InitViews()
self:_RefreshRewardsPreview()
end
BattlePassAdvancedPlanBuyCtrl._InitData = HL.Method() << function(self)
self.m_bpSystem = GameInstance.player.battlePassSystem
self.m_seasonData = BattlePassUtils.GetSeasonData()
self:_RefreshTrackState()
end
BattlePassAdvancedPlanBuyCtrl._InitViews = HL.Method() << function(self)
self.view.controllerHintPlaceholder:InitControllerHintPlaceholder({ self.view.inputGroup.groupId })
local bpExpUpRatioOri = BattlePassUtils.GetOriginiumTrackInfo().bpExpUpRatio
local bpExpUpRatioPro = BattlePassUtils.GetPayTrackInfo().bpExpUpRatio
self.view.bpNumTxt1.text = string.format("+%d%%", bpExpUpRatioOri / 10)
self.view.bpNumTxt2.text = string.format("+%d%%", bpExpUpRatioPro / 10)
self.view.countDownText:InitCountDownText(self.m_bpSystem.seasonData.closeTime)
self.m_topCells = UIUtils.genCellCache(self.view.topPreviewCell)
self.m_bottomCells = UIUtils.genCellCache(self.view.bottomPreviewCell)
self.view.moneyCell:InitMoneyCell(Tables.battlePassConst.buyLevelMoneyID)
self.view.oriAllRewardBtn.onClick:AddListener(function()
UIManager:Open(PanelId.BattlePassBuyPlan,{
type = "Ori"
})
end)
self.view.proAllRewardBtn.onClick:AddListener(function()
UIManager:Open(PanelId.BattlePassBuyPlan,{
type = "Pro"
})
end)
self.view.originiumTxt:SetAndResolveTextStyle(string.format("×%d", Tables.battlePassConst.buyOriginiumTrackMoneyCnt))
self.view.originalOriginiumTxt.text = Tables.battlePassConst.buyOriginiumTrackOriPrice
if Tables.battlePassConst.buyOriginiumTrackOriPrice == 0 then
self.view.originalOriginiumTxt.gameObject:SetActive(false)
end
self.view.priceTxt.text = CashShopUtils.getGoodsPriceText(Tables.battlePassConst.buyPayTrackCashGoodsId)
self.view.buyOriBtn.onClick:AddListener(function()
BattlePassUtils.BuyOriginiumTrack()
end)
self.view.buyProBtn.onClick:AddListener(function()
BattlePassUtils.BuyPayTrack()
end)
self.view.helpBtn.onClick:AddListener(function()
UIManager:Open(PanelId.InstructionBook, "battle_pass")
end)
if BEYOND_DEBUG_COMMAND then
UIUtils.bindInputEvent(CS.Beyond.Input.KeyboardKeyCode.Z, function()
self:_AfterBuy()
end, nil, nil, self.view.inputGroup.groupId)
end
self.view.originiumAllocateNode.onGroupSetAsNaviTarget:RemoveAllListeners()
self.view.originiumAllocateNode.onGroupSetAsNaviTarget:AddListener(function(isTarget)
self.view.originiumKeyHint.gameObject:SetActive(isTarget)
end)
self.view.agreementCustomizeNode.onGroupSetAsNaviTarget:RemoveAllListeners()
self.view.agreementCustomizeNode.onGroupSetAsNaviTarget:AddListener(function(isTarget)
self.view.agreementKeyHint.gameObject:SetActive(isTarget)
end)
self.view.originiumKeyHint.gameObject:SetActive(true)
self.view.agreementKeyHint.gameObject:SetActive(false)
if DeviceInfo.usingController then
UIUtils.setAsNaviTarget(self.view.originiumAllocateNode)
end
end
BattlePassAdvancedPlanBuyCtrl._RefreshTrackState = HL.Method() << function(self)
self.m_buyOriTrack = BattlePassUtils.CheckOriginiumTrackActive()
self.m_buyProtocalTrack = BattlePassUtils.CheckPayTrackActive()
self.view.buyOriBtn.enabled = not self.m_buyOriTrack
self.view.buyProBtn.enabled = not self.m_buyProtocalTrack
self.view.buyOriBtnStateController:SetState(self.m_buyOriTrack and "Buy" or "NotBuy")
self.view.buyProBtnStateController:SetState(self.m_buyProtocalTrack and "Buy" or "NotBuy")
end
BattlePassAdvancedPlanBuyCtrl._AfterBuy = HL.Method() << function(self)
local buyingPro = not self.m_buyProtocalTrack and BattlePassUtils.CheckPayTrackActive()
self:_RefreshTrackState()
self:_RefreshRewardsPreview()
local shouldClose = self.m_buyProtocalTrack and self.m_buyOriTrack
if buyingPro then
BattlePassUtils.AfterBuyPayTrack(self, shouldClose)
else
BattlePassUtils.ShowTrackReward(GEnums.BPTrackType.ORIGINIUM, function()
if shouldClose then
self:PlayAnimationOutAndClose()
end
end)
end
end
BattlePassAdvancedPlanBuyCtrl._RefreshRewardsPreview = HL.Method() << function(self)
self.m_oriPreInfos = self:_GetInfo(GEnums.BPTrackType.ORIGINIUM)
self.m_payPreInfos = self:_GetInfo(GEnums.BPTrackType.PAY)
local showInterval = 0.1
if self.view.config.CELL_GRADUALLY_SHOW_INTERVAL ~= nil then
showInterval = self.view.config.CELL_GRADUALLY_SHOW_INTERVAL
end
self.m_topCells:GraduallyRefresh(#self.m_oriPreInfos, showInterval, function(cell, index)
cell.animationWrapper:PlayInAnimation()
self:_OnUpdateCell(cell, self.m_oriPreInfos[index], index == #self.m_oriPreInfos)
end)
self.m_bottomCells:GraduallyRefresh(#self.m_payPreInfos, showInterval, function(cell, index)
cell.animationWrapper:PlayInAnimation()
self:_OnUpdateCell(cell, self.m_payPreInfos[index], index == #self.m_payPreInfos)
end)
AudioAdapter.PostEvent("Au_UI_Event_BPMotion")
end
BattlePassAdvancedPlanBuyCtrl._GetInfo = HL.Method(HL.Any).Return(HL.Table) << function(self, trackType)
local ret = {}
local previewId
if trackType == GEnums.BPTrackType.ORIGINIUM then
previewId = Tables.battlePassSeasonTable[self.m_bpSystem.seasonData.seasonId].originiumPreviewGroupId
else
previewId = Tables.battlePassSeasonTable[self.m_bpSystem.seasonData.seasonId].payPreviewGroupId
end
local infos = Tables.battlePassRewardPreviewTable[previewId].rewardInfos
for i = 1,#infos do
local info = infos[CSIndex(i)]
local temp = {
name = info.name,
desc = info.desc,
iconId = info.iconId,
itemId = info.itemId,
count = info.count,
finishLevel = info.finishLevel,
canObtain = info.finishLevel == 0 and not BattlePassUtils.CheckBattlePassTrackActive(trackType),
obtained = info.finishLevel == 0 and BattlePassUtils.CheckBattlePassTrackActive(trackType) or BattlePassUtils.CheckIsRewardGained(trackType, info.finishLevel),
sortId = info.sortId,
}
temp.obtainState = temp.obtained and 3 or (temp.canObtain and 1 or 2)
table.insert(ret, temp)
end
table.sort(ret, Utils.genSortFunction({"sortId"}, true))
return ret
end
BattlePassAdvancedPlanBuyCtrl._OnUpdateCell = HL.Method(HL.Any, HL.Table, HL.Boolean) << function(self, cell, info, isLast)
cell.nameTxt.text = string.format(info.name, info.count)
cell.lvTxt.text = string.format(info.desc, info.finishLevel)
cell.icon:LoadSprite(UIConst.UI_SPRITE_BATTLE_PASS_PLAN, info.iconId)
cell.decoLineNode.color = UIUtils.getItemRarityColor(Tables.itemTable[info.itemId].rarity)
cell.stateController:SetState(info.obtained and "End" or (info.canObtain and "Obtain" or "LockLv"))
cell.button.onClick:AddListener(function()
Notify(MessageConst.SHOW_ITEM_TIPS, {
transform = cell.button.transform,
posType = UIConst.UI_TIPS_POS_TYPE.RightTop,
itemId = info.itemId,
isSideTips = true,
})
end)
cell.decoLineImage.gameObject:SetActive(not isLast)
end
BattlePassAdvancedPlanBuyCtrl.OnShow = HL.Override() << function(self)
if BattlePassUtils.CheckBattlePassPurchaseBlock() == false then
CashShopUtils.ShowPsStore()
end
end
BattlePassAdvancedPlanBuyCtrl.OnClose = HL.Override() << function(self)
Notify(MessageConst.ON_BATTLE_PASS_ADVANCED_BUY_CLOSE)
CashShopUtils.HidePsStore()
end
HL.Commit(BattlePassAdvancedPlanBuyCtrl)