142 lines
5.0 KiB
Lua
142 lines
5.0 KiB
Lua
---@class WBP_SkillBtn_Item_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 = {
|
|
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},
|
|
|
|
SkillBGColor = { R = 0, G = 0, B = 0, A = 0.4 }, -- 默认颜色
|
|
};
|
|
|
|
function WBP_SkillBtn_Item: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_BG_Level:BindingProperty("ColorAndOpacity", self.SetLevelBGColorAndOpacity, self)
|
|
self.Image_SkillIcon:BindingProperty("Visibility", self.SetIconVisibility, self)
|
|
self.Image_SkillIcon:BindingProperty("ColorAndOpacity", self.SetIconColorAndOpacity, self)
|
|
self.Image_CDTime:BindingProperty("Visibility", self.SetCDTimeVisibility, self)
|
|
self.TextBlock_SkillName:BindingProperty("Text", self.SetSkillNameText, self)
|
|
self.TextBlock_CDTime:BindingProperty("Visibility", self.SetCDTimeVisibility, self)
|
|
self.TextBlock_CDTime:BindingProperty("Text", self.SetCDTimeText, self)
|
|
end
|
|
|
|
function WBP_SkillBtn_Item:Destruct()
|
|
self.MatInst_CD = nil
|
|
end
|
|
|
|
function WBP_SkillBtn_Item:SetIconVisibility(ReturnValue)
|
|
return self.SkillName > 0 and ESlateVisibility.SelfHitTestInvisible or ESlateVisibility.Collapsed
|
|
end
|
|
|
|
function WBP_SkillBtn_Item:SetIconColorAndOpacity(ReturnValue) ---区分主动/被动技能
|
|
return self.IsPassiveSkill and self.Color_Disable or self.Color_Normal
|
|
end
|
|
|
|
function WBP_SkillBtn_Item:SetLevelBGColorAndOpacity(ReturnValue)
|
|
return self.SkillName > ESkillName.Heal and GlobalConfigs.QualityColor[self.SkillLevel] or self.SkillBGColor
|
|
end
|
|
|
|
function WBP_SkillBtn_Item:SetCDTimeText(ReturnValue)
|
|
return tostring(self.LastCDSeconds)
|
|
end
|
|
|
|
function WBP_SkillBtn_Item:SetCDTimeVisibility(ReturnValue)
|
|
return self.CurrentSkillCDDurationTimer > 0 and ESlateVisibility.SelfHitTestInvisible or ESlateVisibility.Collapsed
|
|
end
|
|
|
|
function WBP_SkillBtn_Item:SetSkillNameText(ReturnValue)
|
|
return self.SkillName > -1 and GameDataManager.GetSkillNameStrByName(SkillName) or "未装备"
|
|
end
|
|
|
|
function WBP_SkillBtn_Item:SetIconTexture(InTexture)
|
|
UIManager.LoadTexture(self.Image_SkillIcon, InTexture)
|
|
end
|
|
|
|
function WBP_SkillBtn_Item:SetupSkillButton(SkillName, SkillLevel)
|
|
self.SkillLevel = 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:OnSkillButtonPressed()
|
|
if self.SkillName < 0 then
|
|
return
|
|
end
|
|
|
|
if self.IsPassiveSkill == true then
|
|
UE.Log("[WBP_SkillBtn_Item:OnSkillButtonPressed] SkillName = %d is Passive Skill", self.SkillName)
|
|
return
|
|
end
|
|
|
|
if self.CurrentSkillCDDurationTimer > 0 then
|
|
UE.Log("[WBP_SkillBtn_Item:OnSkillButtonPressed] SkillName = %d is in CD", self.SkillName)
|
|
return
|
|
end
|
|
|
|
UE.Log("[WBP_SkillBtn_Item:OnSkillButtonPressed] Request cast skill. SkillName = %d", self.SkillName)
|
|
GameDataManager.GetLocalPlayerController():ClientOnCastSkill(self.SkillSlot)
|
|
end
|
|
|
|
function WBP_SkillBtn_Item: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: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: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; |