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

169 lines
5.4 KiB
Lua

---@class WBP_WeaponAttribute_C:UUserWidget
---@field CanvasPanel_Senior UCanvasPanel
---@field CanvasPanel_WeaponDesc UCanvasPanel
---@field Spacer_BaseAttribute USpacer
---@field Spacer_Between USpacer
---@field Spacer_Senior USpacer
---@field TextBlock_Desc UTextBlock
---@field VerticalBox_Base_Left UVerticalBox
---@field VerticalBox_Base_Right UVerticalBox
---@field VerticalBox_Senior_Left UVerticalBox
---@field VerticalBox_Senior_Right UVerticalBox
---@field WBP_WidgetHeader UWBP_WidgetHeader_C
--Edit Below--
local WBP_WeaponAttribute = {
bInitDoOnce = false;
AttributeItemClass = nil;
AddBaseItemTimer = nil;
WeaponActor = nil;
LoadWeaponActorHandler = nil;
};
function WBP_WeaponAttribute:Construct()
self.SuperClass:Construct()
self.WBP_WidgetHeader:Construct()
end
-- function WBP_WeaponAttribute:Tick(MyGeometry, InDeltaTime)
-- end
function WBP_WeaponAttribute:OnShowPanel()
--清空
self.VerticalBox_Base_Left:ClearChildren()
self.VerticalBox_Base_Right:ClearChildren()
self.VerticalBox_Senior_Left:ClearChildren()
self.VerticalBox_Senior_Right:ClearChildren()
self.AttributeItemClass = UE.LoadClass(UGCGameSystem.GetUGCResourcesFullPath('Asset/UI/ChildWidgets/WBP_WeaponAttributeItem.WBP_WeaponAttributeItem_C'))
self.WeaponActor = GameDataManager.GetLocalPlayerPawn().WeaponActor
if not UE.IsValid(self.WeaponActor) then
self.LoadWeaponActorHandler = EventSystem.SetTimerLoop(self, function()
if GameDataManager.GetLocalPlayerPawn().WeaponActor ~= nil then
self.WeaponActor = GameDataManager.GetLocalPlayerPawn().WeaponActor
self:UpdateWeaponAttributes()
EventSystem.StopTimer(self.LoadWeaponActorHandler)
end
end, 0.2)
else
self:UpdateWeaponAttributes()
end
-- 设置数据
local Pawn = GameDataManager.GetLocalPlayerPawn()
local WeaponType = GameDataManager.GetWeaponType(Pawn.WeaponActor.CurrentWeaponId)
if WeaponType == nil then
UE.Log("[WBP_WeaponAttribute:OnShowPanel] Data is nil")
return
end
local Table = DropItemMap.WeaponTable[WeaponType]
--self.WBP_WidgetHeader:SetHeaderText(Table.Desc)
self.TextBlock_Desc:SetText('特质:' .. Table.Prop)
end
function WBP_WeaponAttribute:Destruct()
self.AttributeItemClass = nil
self.AddBaseItemTimer = nil;
self.SuperClass:Destruct()
end
function WBP_WeaponAttribute:UpdateWeaponAttributes()
local BaseAttributes = self.WeaponActor:GetWeaponBaseAttribute()
local SeniorAttributes = self.WeaponActor:GetWeaponSeniorAttribute()
local Temp = 0
for i = 1, table.getCount(BaseAttributes) do
-- TODO 去掉特殊属性
if true then
Temp = Temp + 1
end
self:AddBaseItem(Temp, BaseAttributes[i])
end
local SeniorCount = table.getCount(SeniorAttributes)
if SeniorCount == 0 then
self.Spacer_Between:SetVisibility(ESlateVisibility.Collapsed)
self.CanvasPanel_Senior:SetVisibility(ESlateVisibility.Collapsed)
else
for i = 1, SeniorCount do
local SeniorAttribute = SeniorAttributes[i]
self:AddSeniorItem(i,SeniorAttribute)
end
self.Spacer_Between:SetVisibility(ESlateVisibility.SelfHitTestInvisible)
self.CanvasPanel_Senior:SetVisibility(ESlateVisibility.SelfHitTestInvisible)
end
end
function WBP_WeaponAttribute:CalculateSpacerHeight(InRank)
return (InRank + 1) * 25
end
function WBP_WeaponAttribute:SetSpacerHeight(InSpacer, InRank)
InSpacer:SetSize({ X = InSpacer.Size.X, Y = self:CalculateSpacerHeight(InRank) })
end
function WBP_WeaponAttribute:AddBaseItem(InCount, InData)
local Rank = (InCount + 1) // 2
local LeftOrRight = InCount % 2 == 1
self:SetSpacerHeight(self.Spacer_BaseAttribute, Rank)
-- 创建一个新的
if UE.IsValid(self.AttributeItemClass) and UE.IsValid(UGCGameSystem.GameState) then
local AttributeItemWidget = UserWidget.NewWidgetObjectBP(UGCGameSystem.GameState, self.AttributeItemClass)
if AttributeItemWidget ~= nil then
if LeftOrRight then
self.VerticalBox_Base_Left:AddChildToVerticalBox(AttributeItemWidget)
else
self.VerticalBox_Base_Right:AddChildToVerticalBox(AttributeItemWidget)
end
else
return
end
local that = self
if not AttributeItemWidget.bHasConstruct then
that.AddBaseItemTimer = EventSystem.SetTimerLoop(self, function()
if AttributeItemWidget.bHasConstruct then
AttributeItemWidget:SetAttributeItem(InData)
EventSystem.StopTimer(that.AddBaseItemTimer)
end
end, 0.2)
else
AttributeItemWidget:SetAttributeItem(InData)
end
end
end
function WBP_WeaponAttribute:AddSeniorItem(InCount, InData)
local Rank = (InCount + 1) // 2
local LeftOrRight = InCount % 2 == 1
self:SetSpacerHeight(self.Spacer_Senior, Rank)
-- 创建一个新的
if UE.IsValid(self.AttributeItemClass) and UE.IsValid(UGCGameSystem.GameState) then
local AttributeItemWidget = UserWidget.NewWidgetObjectBP(UGCGameSystem.GameState, self.AttributeItemClass)
if AttributeItemWidget ~= nil then
if LeftOrRight then
self.VerticalBox_Senior_Left:AddChildToVerticalBox(AttributeItemWidget)
else
self.VerticalBox_Senior_Right:AddChildToVerticalBox(AttributeItemWidget)
end
else
return
end
local that = self
if not AttributeItemWidget.bHasConstruct then
self.AddBaseItemTimer = EventSystem.SetTimerLoop(self, function()
if AttributeItemWidget.bHasConstruct then
AttributeItemWidget:SetAttributeItem(InData)
EventSystem.StopTimer(that.AddBaseItemTimer)
end
end, 0.2)
else
AttributeItemWidget:SetAttributeItem(InData)
end
end
end
return WBP_WeaponAttribute;