169 lines
5.4 KiB
Lua
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; |