---@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 --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;