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

88 lines
3.4 KiB
Lua

---@class WBP_TeamPanel_C:UUserWidget
---@field Panel_AttackBossInfo UWBP_AttackBossPanel_C
---@field PlayerList UVerticalBox
---@field Team_Item_1 UWBP_TeamPanel_Item_C
---@field Team_Item_2 UWBP_TeamPanel_Item_C
---@field Team_Item_3 UWBP_TeamPanel_Item_C
---@field Team_Item_4 UWBP_TeamPanel_Item_C
---@field TextBlock_CoinPoint UTextBlock
---@field TextBlock_KillPoint UTextBlock
--Edit Below--
local WBP_TeamPanel = {
bInitDoOnce = false,
TeamInfoPanels = {},
};
function WBP_TeamPanel:Construct()
WBP_TeamPanel.SuperClass.Construct(self)
self.Panel_AttackBossInfo:Construct() --engine bug fixed: 按理说construct不需要手动调用
self.TeamInfoPanels = {
self.Team_Item_1,
self.Team_Item_2,
self.Team_Item_3,
self.Team_Item_4,
}
for Idx, TeamItem in pairs(self.TeamInfoPanels) do
TeamItem:SetVisibility(ESlateVisibility.Collapsed)
end
self:Init()
self:RegisterEvents()
end
function WBP_TeamPanel:Destruct()
self:UnRegisterEvents()
WBP_TeamPanel.SuperClass.Destruct(self)
end
function WBP_TeamPanel:RegisterEvents()
EventSystem:AddListener(EventType.PlayerDataListChanged, WBP_TeamPanel.OnPlayerDataListChanged, self)
EventSystem:AddListener(EventType.PlayerCoinPointChanged, WBP_TeamPanel.OnPlayerCoinPointChanged, self)
EventSystem:AddListener(EventType.PlayerKillPointChanged, WBP_TeamPanel.OnPlayerKillPointChanged, self)
EventSystem:AddListener(EventType.OnGameStageChanged, WBP_TeamPanel.OnGameStageChange, self)
end
function WBP_TeamPanel:UnRegisterEvents()
EventSystem:RemoveListener(EventType.PlayerDataListChanged, WBP_TeamPanel.OnPlayerDataListChanged, self)
EventSystem:RemoveListener(EventType.PlayerCoinPointChanged, WBP_TeamPanel.OnPlayerCoinPointChanged, self)
EventSystem:RemoveListener(EventType.PlayerKillPointChanged, WBP_TeamPanel.OnPlayerKillPointChanged, self)
EventSystem:RemoveListener(EventType.OnGameStageChanged, WBP_TeamPanel.OnGameStageChange, self)
end
function WBP_TeamPanel:Init()
self:OnPlayerDataListChanged(UGCGameSystem.GameState.PlayerDataList)
self:OnPlayerCoinPointChanged(GameDataManager.GetLocalPlayerState().CoinPoint.Current)
self:OnPlayerKillPointChanged(GameDataManager.GetLocalPlayerState().KillPoint.Current)
self:OnGameStageChange(UGCGameSystem.GameState.GameStage)
end
function WBP_TeamPanel:OnPlayerDataListChanged(InPlayerDataList)
for PlayerKey, PlayerData in pairs(InPlayerDataList) do
UE.Log("[WBP_TeamPanel:OnPlayerDataListChanged] IndexInTeam=%d, PlayerKey=%d, PlayerName=%s", PlayerData.IdxInTeam, PlayerData.PlayerKey, PlayerData.PlayerName)
local TeamInfoItem = self.TeamInfoPanels[PlayerData.IdxInTeam]
if TeamInfoItem then
TeamInfoItem:SetPlayerData(PlayerData)
end
end
end
function WBP_TeamPanel:OnPlayerCoinPointChanged(InCoinPoint)
self.TextBlock_CoinPoint:SetText(tostring(math.ceil(InCoinPoint).." "))
end
function WBP_TeamPanel:OnPlayerKillPointChanged(InKillPoint)
self.TextBlock_KillPoint:SetText(tostring(math.ceil(InKillPoint).." "))
end
function WBP_TeamPanel:OnGameStageChange(InGameStage)
if InGameStage >= EGameStage.GameFight then
self.Panel_AttackBossInfo:SetVisibility(ESlateVisibility.SelfHitTestInvisible)
else
self.Panel_AttackBossInfo:SetVisibility(ESlateVisibility.Collapsed)
end
end
return WBP_TeamPanel;