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