UGCProjects/GZJ/Script/UI/Skill/WBP_SkillBtn_Item_2.lua

124 lines
4.1 KiB
Lua
Raw Normal View History

2025-01-08 22:46:12 +08:00
---@class WBP_SkillBtn_Item_2_C:UAEUserWidget
---@field Button_Skill UButton
---@field CanvasPanel_CD UCanvasPanel
---@field CanvasPanel_SkillSlot UCanvasPanel
---@field Image_BG UImage
---@field Image_BG_Level UImage
---@field Image_CDTime UImage
---@field Image_SkillIcon UImage
---@field TextBlock_CDTime UTextBlock
---@field TextBlock_SkillName UTextBlock
---@field SkillSlot TEnumAsByte<ESkillSlot>
--Edit Below--
local WBP_SkillBtn_Item_2 = {
SkillName = -1,
SkillLevel = 1,
CurrentSkillCDDurationTimer = 0,
CurrentSkillCDDuration = 0,
LastCDSeconds = 0,
MatInst_CD = nil,
IsPassiveSkill = false,
Color_Normal = {R = 1.0, G = 1.0, B = 1.0, A = 1.0},
Color_Disable = {R = 0.2, G = 0.2, B = 0.2, A = 1.0},
};
function WBP_SkillBtn_Item_2:Construct()
self.bCanEverTick = true
self.Button_Skill.OnPressed:Add(self.OnSkillButtonPressed, self)
self.MatInst_CD = self.Image_CDTime:GetDynamicMaterial()
self.MatInst_CD:SetScalarParameterValue("Mask_Percent", 0)
self.Image_SkillIcon:BindingProperty("ColorAndOpacity", self.SetIconColorAndOpacity, self)
self.Image_CDTime:BindingProperty("Visibility", self.SetCDTimeVisibility, self)
self.TextBlock_CDTime:BindingProperty("Visibility", self.SetCDTimeVisibility, self)
self.TextBlock_CDTime:BindingProperty("Text", self.SetCDTimeText, self)
end
function WBP_SkillBtn_Item_2:Destruct()
self.MatInst_CD = nil
end
function WBP_SkillBtn_Item_2:SetIconColorAndOpacity(ReturnValue) ---区分主动/被动技能
return self.IsPassiveSkill and self.Color_Disable or self.Color_Normal
end
function WBP_SkillBtn_Item_2:SetCDTimeText(ReturnValue)
return tostring(self.LastCDSeconds)
end
function WBP_SkillBtn_Item_2:SetCDTimeVisibility(ReturnValue)
return self.CurrentSkillCDDurationTimer > 0 and ESlateVisibility.SelfHitTestInvisible or ESlateVisibility.Collapsed
end
function WBP_SkillBtn_Item_2:SetIconTexture(InTexture)
UIManager.LoadTexture(self.Image_SkillIcon, InTexture)
end
function WBP_SkillBtn_Item_2:SetupSkillButton(SkillName, SkillLevel)
self.SkillName = SkillName
self.IsPassiveSkill = GameDataManager.GetSkillTypeByName(SkillName) == ESkillType.Passive --主动/被动技能处理
local IconPath = GameDataManager.GetSkillIconPathByName(SkillName)
if IconPath ~= "" then
self:SetIconTexture(IconPath)
end
self.TextBlock_SkillName:SetText(GameDataManager.GetSkillNameStrByName(SkillName))
end
function WBP_SkillBtn_Item_2:OnSkillButtonPressed()
if self.SkillName < 0 then
return
end
if self.IsPassiveSkill == true then
UE.Log("[WBP_SkillBtn_Item_2:OnSkillButtonPressed] SkillName = %d is Passive Skill", self.SkillName)
return
end
if self.CurrentSkillCDDurationTimer > 0 then
UE.Log("[WBP_SkillBtn_Item_2:OnSkillButtonPressed] SkillName = %d is in CD", self.SkillName)
return
end
UE.Log("[WBP_SkillBtn_Item_2:OnSkillButtonPressed] Request cast skill. SkillName = %d", self.SkillName)
GameDataManager.GetLocalPlayerController():ClientOnCastSkill(self.SkillSlot)
end
function WBP_SkillBtn_Item_2:OnSkillCD(Slot, CoolDownDuration)
if self.SkillSlot ~= Slot then
return
end
self.CurrentSkillCDDuration = CoolDownDuration
self.CurrentSkillCDDurationTimer = CoolDownDuration
self.LastCDSeconds = math.floor(CoolDownDuration)
end
function WBP_SkillBtn_Item_2:Tick(MyGeometry, InDeltaTime)
if self.CurrentSkillCDDurationTimer > 0 then
self.CurrentSkillCDDurationTimer = self.CurrentSkillCDDurationTimer - InDeltaTime
if self.CurrentSkillCDDurationTimer <= 0 then
self.CurrentSkillCDDurationTimer = 0
return
end
local CDSeconds = math.ceil(self.CurrentSkillCDDurationTimer)
if CDSeconds ~= self.LastCDSeconds then
self.LastCDSeconds = CDSeconds
UE.Log("[WBP_SkillBtn_Item_2:Tick] SkillName=%d, CurCD=%d", self.SkillName, CDSeconds)
end
local CDPercent = self.CurrentSkillCDDurationTimer / self.CurrentSkillCDDuration
self.MatInst_CD:SetScalarParameterValue("Mask_Percent", CDPercent)
end
end
return WBP_SkillBtn_Item_2;