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