UGCProjects/GZJ/Script/UI/Skill/WBP_SkillBtn.lua
2025-01-08 22:46:12 +08:00

99 lines
3.2 KiB
Lua

---@class WBP_SkillBtn_C:UAEUserWidget
---@field SkillBtn_Slot0 UWBP_SkillBtn_Item_2_C
---@field SkillBtn_Slot1 UWBP_SkillBtn_Item_C
---@field SkillBtn_Slot2 UWBP_SkillBtn_Item_C
---@field SkillBtn_Slot3 UWBP_SkillBtn_Item_C
---@field SkillBtn_Slot4 UWBP_SkillBtn_Item_C
--Edit Below--
local WBP_SkillBtn = {
bInitOnce = false,
SkillButtons = {},
SkillsMapping = {},
};
function WBP_SkillBtn:Construct()
if self.bInitOnce then
return
end
self.bInitOnce = true
self.bCanEverTick = true
self.SkillButtons = {
[ESkillSlot.Slot0] = self.SkillBtn_Slot0,
[ESkillSlot.Slot1] = self.SkillBtn_Slot1,
[ESkillSlot.Slot2] = self.SkillBtn_Slot2,
[ESkillSlot.Slot3] = self.SkillBtn_Slot3,
[ESkillSlot.Slot4] = self.SkillBtn_Slot4,
}
self.SkillsMapping = {
[ESkillSlot.Slot0] = -1,
[ESkillSlot.Slot1] = -1,
[ESkillSlot.Slot2] = -1,
[ESkillSlot.Slot3] = -1,
[ESkillSlot.Slot4] = -1,
}
for _, Button in pairs(self.SkillButtons) do
if Button then
Button:Show()
end
end
local LocalPC = GameDataManager.GetLocalPlayerController()
if UE.IsValid(LocalPC) then
for Slot, SkillInfo in pairs(LocalPC.ActiveSkillNameList) do
self:OnSetupSkillButton(SkillInfo.SkillName, Slot, SkillInfo.SkillLevel)
end
end
self:OnGameStageChange(UGCGameSystem.GameState.GameStage)
EventSystem:AddListener(EventType.OnGameStageChanged, WBP_SkillBtn.OnGameStageChange, self)
EventSystem:AddListener(EventType.OnSetupSkillButton, WBP_SkillBtn.OnSetupSkillButton, self)
EventSystem:AddListener(EventType.PlayerSkillCDTriggered, WBP_SkillBtn.OnSkillCDTriggered, self)
end
function WBP_SkillBtn:Destruct()
EventSystem:RemoveListener(EventType.OnGameStageChanged, WBP_SkillBtn.OnGameStageChange, self)
EventSystem:RemoveListener(EventType.OnSetupSkillButton, WBP_SkillBtn.OnSetupSkillButton, self)
EventSystem:RemoveListener(EventType.PlayerSkillCDTriggered, WBP_SkillBtn.OnSkillCDTriggered, self)
end
---@param InGameStage EGameStage
function WBP_SkillBtn:OnGameStageChange(InGameStage)
if InGameStage == EGameStage.GameFight then
UIManager:VisiblePanel(EUIType.SkillButton)
end
end
---@param SkillName ESkillName
---@param SkillSlot ESkillSlot
function WBP_SkillBtn:OnSetupSkillButton(SkillName, SkillSlot, SkillLevel)
UE.Log("[WBP_SkillBtn:OnSetupSkillButton] SkillName=%d, SkillSlot=%d, PlayerKey=%d", SkillName, SkillSlot, GameDataManager.GetLocalPlayerController().PlayerKey)
self:OnGameStageChange(UGCGameSystem.GameState.GameStage)
self.SkillsMapping[SkillSlot] = SkillName
local Button = self.SkillButtons[SkillSlot]
Button:Show()
Button:SetupSkillButton(SkillName, SkillLevel)
end
---@param SkillName ESkillName
---@param CD float
function WBP_SkillBtn:OnSkillCDTriggered(Slot, CD)
local Button = self:GetSkillButtonBySlot(Slot)
if Button then
UE.Log("[WBP_SkillBtn:OnSkillCDTriggered] Slot=%d, CD=%.2f", Slot, CD)
Button:OnSkillCD(Slot, CD)
end
end
---@param InSkillSlot ESkillSlot
---@return SkillButton
function WBP_SkillBtn:GetSkillButtonBySlot(InSkillSlot)
return self.SkillButtons[InSkillSlot]
end
return WBP_SkillBtn;