194 lines
6.3 KiB
Lua
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; |