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

158 lines
4.0 KiB
Lua

local uiCtrl = require_ex('UI/Panels/Base/UICtrl')
local PANEL_ID = PanelId.BattleComboSkillUse
BattleComboSkillUseCtrl = HL.Class('BattleComboSkillUseCtrl', uiCtrl.UICtrl)
BattleComboSkillUseCtrl.s_messages = HL.StaticField(HL.Table) << {
[MessageConst.ON_COMBO_SKILL_START] = 'OnComboSkillStart',
[MessageConst.ON_BATTLE_SQUAD_CHANGED] = 'OnBattleTeamChanged',
}
local COMBO_USE_STATE_NONE = 1
local COMBO_USE_STATE_IN = 2
local COMBO_USE_STATE_OUT = 3
do
BattleComboSkillUseCtrl.m_comboSkillUseList = HL.Field(HL.Table)
BattleComboSkillUseCtrl.m_useBgShowing = HL.Field(HL.Boolean) << false
end
BattleComboSkillUseCtrl.OnCreate = HL.Override(HL.Any) << function(self, arg)
self.m_comboSkillUseList = {}
for i = 1, Const.BATTLE_SQUAD_MAX_CHAR_NUM do
local use = self.view['comboSkillUse' .. i]
use.gameObject:SetActive(false)
use.state = COMBO_USE_STATE_NONE
self.m_comboSkillUseList[i] = use
end
end
BattleComboSkillUseCtrl.OnShow = HL.Override() << function(self)
self:OnBattleTeamChanged()
self.view.useBgAnim:SampleToOutAnimationEnd()
self.m_useBgShowing = false
end
BattleComboSkillUseCtrl.OnHide = HL.Override() << function(self)
for i, useObj in ipairs(self.m_comboSkillUseList) do
useObj.anim:ClearTween()
useObj.gameObject:SetActive(false)
useObj.state = COMBO_USE_STATE_NONE
end
self:_CheckUseState()
end
BattleComboSkillUseCtrl.OnBattleTeamChanged = HL.Method(HL.Opt(HL.Table)) << function(self, args)
local slots = GameInstance.player.squadManager.curSquad.slots
for i = 1, slots.Count do
local useObj = self.m_comboSkillUseList[i]
local character = slots[CSIndex(i)].character
if character ~= nil then
local abilityCom = character.abilityCom
local comboSkill = abilityCom.activeSkillMap:get_Item(abilityCom.curComboSkill)
local comboSkillData = comboSkill.data
useObj.charIcon:LoadSprite("CharHorHeadIcon", comboSkillData.comboSkillUIBigSpriteName)
end
end
end
BattleComboSkillUseCtrl.OnComboSkillStart = HL.Method(HL.Table) << function(self, args)
local charIndex = LuaIndex(unpack(args))
local useObj = self.m_comboSkillUseList[charIndex]
useObj.anim:ClearTween()
useObj.gameObject:SetActive(true)
useObj.state = COMBO_USE_STATE_IN
useObj.anim:PlayInAnimation(function()
if self:IsHide() then
return
end
useObj.state = COMBO_USE_STATE_OUT
useObj.anim:PlayOutAnimation(function()
useObj.gameObject:SetActive(false)
useObj.state = COMBO_USE_STATE_NONE
self:_CheckUseState()
end)
self:_CheckUseState()
end)
self:_CheckUseState()
for i, obj in ipairs(self.m_comboSkillUseList) do
if i ~= charIndex and obj.state == COMBO_USE_STATE_IN then
obj.state = COMBO_USE_STATE_OUT
obj.anim:PlayOutAnimation(function()
obj.gameObject:SetActive(false)
end)
obj.gameObject:SetActive(true)
end
end
end
BattleComboSkillUseCtrl._CheckUseState = HL.Method() << function(self)
local hasIn = false
local hasOut = false
for i, useObj in ipairs(self.m_comboSkillUseList) do
if useObj.state == COMBO_USE_STATE_IN then
hasIn = true
useObj.gameObject:SetActive(true)
elseif useObj.state == COMBO_USE_STATE_OUT then
hasOut = true
useObj.gameObject:SetActive(true)
end
end
if hasIn then
if self.m_useBgShowing then
self.view.useBgAnim:SampleToInAnimationEnd()
else
self.m_useBgShowing = true
self.view.useBgAnim:PlayWithTween("combo_skill_bg_in")
end
elseif hasOut then
self.view.useBgAnim:PlayWithTween("combo_skill_bg_out")
self.m_useBgShowing = false
else
self.view.useBgAnim:SampleToOutAnimationEnd()
self.m_useBgShowing = false
end
end
HL.Commit(BattleComboSkillUseCtrl)