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

155 lines
4.2 KiB
Lua

local uiCtrl = require_ex('UI/Panels/Base/UICtrl')
local PANEL_ID = PanelId.CharacterFootBarUpgrade
CharacterFootBarUpgradeCtrl = HL.Class('CharacterFootBarUpgradeCtrl', uiCtrl.UICtrl)
CharacterFootBarUpgradeCtrl.s_messages = HL.StaticField(HL.Table) << {
[MessageConst.INTERRUPT_MAIN_HUD_ACTION_QUEUE] = 'InterruptMainHudActionQueue',
}
CharacterFootBarUpgradeCtrl.m_oldCellNum = HL.Field(HL.Number) << 0
CharacterFootBarUpgradeCtrl.m_newCellNum = HL.Field(HL.Number) << 0
CharacterFootBarUpgradeCtrl.m_cells = HL.Field(HL.Table)
CharacterFootBarUpgradeCtrl.m_coroutine = HL.Field(HL.Thread)
CharacterFootBarUpgradeCtrl.OnCreate = HL.Override(HL.Any) << function(self, arg)
local old, current = unpack(arg)
self.m_oldCellNum = old
self.m_newCellNum = current
self.view.main:SetState(lume.round(old) .. "GridState")
self.view.footBarNode:SampleClipAtPercent("characterfootbararcupgrad_in", 0)
self.view.greenFootBar.fillAmount = 1
self.view.whiteFootBar.fillAmount = 1
self.m_cells = { self.view.splitLineCell.gameObject }
local parent = self.view.splitLineCell.parent
for i = 2, current do
local cell = GameObject.Instantiate(self.view.splitLineCell.gameObject, parent)
table.insert(self.m_cells, cell)
cell:SetActive(i <= old)
end
self.view.splitLineCell.localScale = Vector3.zero
end
CharacterFootBarUpgradeCtrl.OnShow = HL.Override() << function(self)
GameInstance.playerController.dashCountChangeAnimShowing = true
end
CharacterFootBarUpgradeCtrl.OnAnimationInFinished = HL.Override() << function(self)
self.m_coroutine = coroutine.create(function()
self.view.footBarNode:PlayWithTween("characterfootbararcupgrad_in", function()
self:_ResumeCoroutine()
end)
coroutine.yield()
self.view.footBarNode:PlayWithTween("characterfootbararcupgrad_out", function()
self:_ResumeCoroutine()
end)
coroutine.yield()
self.view.main:SetState(lume.round(self.m_newCellNum) .. "GridState")
for i, cell in ipairs(self.m_cells) do
cell:SetActive(true)
end
self.view.footBarNode:PlayWithTween("characterfootbararcupgrad_upgrad", function()
self:_ResumeCoroutine()
end)
self.view.greenFootBar.fillAmount = self.m_oldCellNum / self.m_newCellNum
coroutine.yield()
self.view.greenFootBar:DOFillAmount(1, self.view.config.FILL_AMOUNT_INCREASE_DURATION):OnComplete(function()
self:_ResumeCoroutine()
end)
coroutine.yield()
self.view.footBarNode:PlayWithTween("characterfootbararcupgrad_upgrad_glow", function()
self:_ResumeCoroutine()
end)
coroutine.yield()
self:PlayAnimationOutAndClose()
Notify(MessageConst.ON_ONE_MAIN_HUD_ACTION_FINISHED, "DashBarUpgrade")
end)
coroutine.resume(self.m_coroutine)
end
CharacterFootBarUpgradeCtrl._ResumeCoroutine = HL.Method() << function(self)
if self.m_coroutine ~= nil then
coroutine.resume(self.m_coroutine)
end
end
CharacterFootBarUpgradeCtrl.OnDashCountMaxChanged = HL.StaticMethod() << function()
local isOpen, ctrl = UIManager:IsOpen(PANEL_ID)
if isOpen then
return
end
local old = GameInstance.playerController.lastShownMaxDashCount
local current = GameInstance.playerController.maxDashCount
if old >= current then
return
end
LuaSystemManager.mainHudActionQueue:AddRequest("DashBarUpgrade", function()
local old = GameInstance.playerController.lastShownMaxDashCount
local current = GameInstance.playerController.maxDashCount
GameInstance.playerController.lastShownMaxDashCount = current
if old >= current then
Notify(MessageConst.ON_ONE_MAIN_HUD_ACTION_FINISHED, "DashBarUpgrade")
return
end
UIManager:Open(PANEL_ID, {old, current})
end)
end
CharacterFootBarUpgradeCtrl.InterruptMainHudActionQueue = HL.Method() << function(self)
self:Close()
end
CharacterFootBarUpgradeCtrl.OnClose = HL.Override() << function(self)
self.m_coroutine = nil
GameInstance.playerController.dashCountChangeAnimShowing = false
end
HL.Commit(CharacterFootBarUpgradeCtrl)