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

59 lines
2.2 KiB
Lua

---@class WBP_PlayerInfo_C:UUserWidget
---@field ProgressBar_Energy UProgressBar
---@field ProgressBar_Exp UProgressBar
---@field ProgressBar_Health UProgressBar
---@field TextBlock_Health UTextBlock
--Edit Below--
local WBP_PlayerInfo = {
bInitDoOnce = false;
};
function WBP_PlayerInfo:Construct()
self.SuperClass:Construct()
local OwningPawn = GameDataManager.GetLocalPlayerController():GetPlayerCharacterSafety()
self.PlayerKey = GameDataManager.GetLocalPlayerController().PlayerKey
self:OnHealthChanged(self.PlayerKey, UGCPawnAttrSystem.GetHealth(OwningPawn), UGCPawnAttrSystem.GetHealth(OwningPawn), 0)
self:OnEnergyChanged(self.PlayerKey, OwningPawn.EnergyData.Cur, OwningPawn.EnergyData.Max)
self:OnExpChanged(UGCGameSystem.GameState:GetAllPlayerExp())
EventSystem:AddListener(EventType.OnPlayerExpChanged, WBP_PlayerInfo.OnExpChanged, self)
EventSystem:AddListener(EventType.OnPlayerHPChanged, WBP_PlayerInfo.OnHealthChanged, self)
EventSystem:AddListener(EventType.OnPlayerEnergyChanged, WBP_PlayerInfo.OnEnergyChanged, self)
end
-- function WBP_PlayerInfo:Tick(MyGeometry, InDeltaTime)
-- end
function WBP_PlayerInfo:Destruct()
EventSystem:RemoveListener(EventType.OnPlayerExpChanged, WBP_PlayerInfo.OnExpChanged, self)
EventSystem:RemoveListener(EventType.OnPlayerHPChanged, WBP_PlayerInfo.OnHealthChanged, self)
EventSystem:RemoveListener(EventType.OnPlayerEnergyChanged, WBP_PlayerInfo.OnEnergyChanged, self)
end
function WBP_PlayerInfo:OnExpChanged(PlayerAllExp)
for PlayerKey, ExpInfo in pairs(PlayerAllExp) do
if self.PlayerKey == PlayerKey then
self.ProgressBar_Exp:SetVisibility(ESlateVisibility.SelfHitTestInvisible)
self.ProgressBar_Exp:SetPercent(ExpInfo.CurExp / ExpInfo.TotalExp)
return
end
end
self.ProgressBar_Exp:SetVisibility(ESlateVisibility.Collapsed)
end
function WBP_PlayerInfo:OnHealthChanged(InPlayerKey, CurHP, MaxHP, PrevHP)
if self.PlayerKey == InPlayerKey then
self.ProgressBar_Health:SetPercent(CurHP / MaxHP)
self.TextBlock_Health:SetText(string.format('%d / %d', math.floor(CurHP), math.floor(MaxHP)))
end
end
function WBP_PlayerInfo:OnEnergyChanged(InPlayerKey, CurEnergy, MaxEnergy)
if self.PlayerKey == InPlayerKey then
self.ProgressBar_Energy:SetPercent(CurEnergy / MaxEnergy)
end
end
return WBP_PlayerInfo;