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

194 lines
6.3 KiB
Lua

---@class WBP_TeamPanel_Item_C:UUserWidget
---@field Image_IDBG UImage
---@field Image_ItemBG UImage
---@field Image_PlayerOffOnline UImage
---@field Image_Space1 UImage
---@field Image_UpdateAttack UImage
---@field Panel_Offline UCanvasPanel
---@field ProgressBar_HP UProgressBar
---@field TextBlock_KillPoint UTextBlock
---@field TextBlock_Level UTextBlock
---@field TextBlock_Lv UTextBlock
---@field TextBlock_PlayerName UTextBlock
---@field TextBlock_TeamIndex UTextBlock
---@field WidgetSwitcher_BG UWidgetSwitcher
---@field WidgetSwitcher_Space UWidgetSwitcher
---@field WidgetSwitcher_Update UWidgetSwitcher
--Edit Below--
local WBP_TeamPanel_Item = {
bInitDoOnce = false,
IdxInTeam = 0,
PlayerKey = 0,
CombatPoint = 0;
HideUpdateTimer = nil;
TeamColorList = {
{ R = 0.806952, G = 0.715693, B = 0.052861, A = 1.0 },
{ R = 1, G = 0.191202, B = 0.051269, A = 1.0 },
{ R = 0.43735, G = 0.219526, B = 0.396755, A = 1.0 },
{ R = 0.723055, G = 0.020289, B = 0.011612, A = 1.0 },
},
};
function WBP_TeamPanel_Item:Destruct()
EventSystem:RemoveListener(EventType.OnPlayerHPChanged, WBP_TeamPanel_Item.OnPlayerHPChanged, self)
EventSystem:RemoveListener(EventType.OnPlayerLevelChanged, WBP_TeamPanel_Item.OnPlayerLevelChange, self)
EventSystem:RemoveListener(EventType.OnPlayerCombatPointChanged, WBP_TeamPanel_Item.OnPlayerCombatPointChanged, self)
self.WidgetSwitcher_Update:SetVisibility(ESlateVisibility.Collapsed);
WBP_TeamPanel_Item.SuperClass.Destruct(self)
end
function WBP_TeamPanel_Item:SetPlayerData(InPlayerData)
if self.bInitDoOnce then
return
end
self.bInitDoOnce = true
if InPlayerData.PlayerKey == nil then
UE.Log("[WBP_TeamPanel_Item:SetPlayerData] [Error] Invalid PlayerData")
return
end
self:SetVisibility(ESlateVisibility.HitTestInvisible)
self.TextBlock_Lv:SetVisibility(ESlateVisibility.Collapsed)
self.TextBlock_Level:SetVisibility(ESlateVisibility.Collapsed)
self.TextBlock_KillPoint:SetVisibility(ESlateVisibility.Collapsed)
self.PlayerKey = InPlayerData.PlayerKey
self.IdxInTeam = InPlayerData.IdxInTeam
self.PlayerName = InPlayerData.PlayerName
self.IsOffline = InPlayerData.IsOffline
self.IsDead = InPlayerData.IsDead
UE.Log("[WBP_TeamPanel_Item:SetPlayerData] PlayerKey = %d, IdxInTeam = %d, PlayerName = %s, IsOffline = %s, IsDead = %s", self.PlayerKey, self.IdxInTeam, self.PlayerName, tostring(self.IsOffline), tostring(self.IsDead))
self:Init()
end
function WBP_TeamPanel_Item:Init()
self:SetIndexInTeam()
self:SetPlayerName()
self:SetIsOffline()
self:SetIsDead()
self:InitData()
end
function WBP_TeamPanel_Item:InitData()
local RelatedPawn = UGCGameSystem.GetPlayerPawnByPlayerKey(self.PlayerKey)
local CurHP = UGCPawnAttrSystem.GetHealth(RelatedPawn)
local MaxHP = UGCPawnAttrSystem.GetHealthMax(RelatedPawn)
self:OnPlayerHPChanged(self.PlayerKey, CurHP, MaxHP, 0)
self:OnPlayerLevelChange(UGCGameSystem.GameState:GetAllPlayerLevel())
self:OnPlayerCombatPointChanged(UGCGameSystem.GameState.PlayerCombatPointList)
EventSystem:AddListener(EventType.OnPlayerHPChanged, WBP_TeamPanel_Item.OnPlayerHPChanged, self)
EventSystem:AddListener(EventType.OnPlayerLevelChanged, WBP_TeamPanel_Item.OnPlayerLevelChange, self)
EventSystem:AddListener(EventType.OnPlayerCombatPointChanged, WBP_TeamPanel_Item.OnPlayerCombatPointChanged, self)
end
function WBP_TeamPanel_Item:SetPlayerName()
self.TextBlock_PlayerName:SetText(self.PlayerName)
end
function WBP_TeamPanel_Item:SetIndexInTeam()
self.TextBlock_TeamIndex:SetText(tostring(self.IdxInTeam))
local TeamColor = self.TeamColorList[self.IdxInTeam]
if TeamColor ~= nil then
self.Image_IDBG:SetColorAndOpacity(TeamColor)
-- 设置中间分割的颜色
self.Image_Space1:SetColorAndOpacity(TeamColor)
local TextColor = {
SpecifiedColor = {
R = TeamColor.R,
G = TeamColor.G,
B = TeamColor.B,
A = TeamColor.A
},
ColorUseRule = 0,
}
-- 设置等级的颜色
self.TextBlock_Level:SetColorAndOpacity(TextColor)
end
end
function WBP_TeamPanel_Item:SetIsOffline()
if self.IsOffline == false then
self.Image_PlayerOffOnline:SetVisibility(ESlateVisibility.Collapsed)
else
self.Image_PlayerOffOnline:SetVisibility(ESlateVisibility.SelfHitTestInvisible)
end
end
function WBP_TeamPanel_Item:SetIsDead()
if self.IsDead == false then
self.WidgetSwitcher_BG:SetActiveWidgetIndex(0)
self.WidgetSwitcher_Space:SetActiveWidgetIndex(0)
else
self.WidgetSwitcher_BG:SetActiveWidgetIndex(1)
self.WidgetSwitcher_Space:SetActiveWidgetIndex(1)
end
end
function WBP_TeamPanel_Item:SetPlayerLevel(InLevel)
self.TextBlock_Lv:SetVisibility(ESlateVisibility.HitTestInvisible)
self.TextBlock_Level:SetVisibility(ESlateVisibility.HitTestInvisible)
self.TextBlock_Level:SetText(tostring(InLevel))
end
function WBP_TeamPanel_Item:SetPlayerCombatPoint(InCombatPoint)
self.CombatPoint = InCombatPoint
self.TextBlock_KillPoint:SetVisibility(ESlateVisibility.HitTestInvisible)
self.TextBlock_KillPoint:SetText(tostring(InCombatPoint))
end
function WBP_TeamPanel_Item:OnPlayerHPChanged(PlayerKey, CurHP, MaxHP, PrevHP)
if self.PlayerKey == PlayerKey then
self.ProgressBar_HP:SetPercent(CurHP / MaxHP)
end
end
function WBP_TeamPanel_Item:OnPlayerLevelChange(InAllPlayerLevel)
for PlayerKey, Level in pairs(InAllPlayerLevel) do
if PlayerKey == self.PlayerKey then
self:SetPlayerLevel(Level)
return
end
end
end
function WBP_TeamPanel_Item:OnPlayerCombatPointChanged(InAllCombatPoint)
for PlayerKey, CombatPoint in pairs(InAllCombatPoint) do
if PlayerKey == self.PlayerKey then
local Val = CombatPoint - 7082
CombatPoint = math.clamp(Val, 0, CombatPoint)
if CombatPoint > self.CombatPoint then
-- 显示上升
self.WidgetSwitcher_Update:SetActiveWidgetIndex(0);
self.WidgetSwitcher_Update:SetVisibility(ESlateVisibility.SelfHitTestInvisible)
elseif CombatPoint < self.CombatPoint then
self.WidgetSwitcher_Update:SetActiveWidgetIndex(1);
self.WidgetSwitcher_Update:SetVisibility(ESlateVisibility.SelfHitTestInvisible)
else
self.WidgetSwitcher_Update:SetVisibility(ESlateVisibility.Collapsed)
end
if UE.IsValid(self.HideUpdateTimer) then
-- 隐藏
EventSystem.StopTimer(self.HideUpdateTimer);
end
self.HideUpdateTimer = EventSystem.SetTimer(self, function()
self.WidgetSwitcher_Update:SetVisibility(ESlateVisibility.Collapsed);
end, 1)
self:SetPlayerCombatPoint(CombatPoint)
return
end
end
end
return WBP_TeamPanel_Item;