---@class WB_TeamRank_N_C:UUserWidget ---@field HorizontalBox_AllName1 UHorizontalBox ---@field HorizontalBox_AllName2 UHorizontalBox ---@field VerticalBox_Left UVerticalBox ---@field VerticalBox_Right UVerticalBox ---@field WB_RankScore_Name UWB_RankScore_Name_C --Edit Below-- ---@type WB_TeamRank_C local WB_TeamRank_N = { bInitDoOnce = false; LeftTeamType = 1; RightTeamType = 2; }; function WB_TeamRank_N:Construct() UGCEventSystem.AddListener(EventEnum.UpdatePlayerScoreData, self.UpdateRank, self); UGCEventSystem.AddListener(EventEnum.UpdatePlayerInfo, self.SetItemTeam, self); self:SetItemTeam() for i = 0, self.VerticalBox_Left:GetChildrenCount() - 1 do local ItemLeftInst = self.VerticalBox_Left:GetChildAt(i) local ItemRightInst = self.VerticalBox_Right:GetChildAt(i) ItemLeftInst:SetIndex(i + 1) ItemRightInst:SetIndex(i + 1) end for i, v in pairs(PlayerScoreSystem.Config.ShowRankType) do local Item1 = self.HorizontalBox_AllName1:GetChildAt(i - 1) local Item2 = self.HorizontalBox_AllName2:GetChildAt(i - 1) if not UE.IsValid(Item1) then Item1 = UserWidget.NewWidgetObjectBP(UGCSystemLibrary.GetLocalPlayerController(), self:GetScoreNameItemClass()); self.HorizontalBox_AllName1:AddChild(Item1) end if not UE.IsValid(Item2) then Item2 = UserWidget.NewWidgetObjectBP(UGCSystemLibrary.GetLocalPlayerController(), self:GetScoreNameItemClass()); self.HorizontalBox_AllName2:AddChild(Item2) end Item1:SetColorIndex(i) Item2:SetColorIndex(i) Item1:SetName(PlayerScoreSystem.Config.ScoreTypeName[v]) Item2:SetName(PlayerScoreSystem.Config.ScoreTypeName[v]) end -- 隐藏多余的Item的起始索引 local HideStartIndex = #PlayerScoreSystem.Config.ShowRankType -- 判断是否显示总得分 if PlayerScoreSystem.Config.ShowTotalScore then HideStartIndex = HideStartIndex + 1 local Item1 = self.HorizontalBox_AllName1:GetChildAt(#PlayerScoreSystem.Config.ShowRankType) local Item2 = self.HorizontalBox_AllName2:GetChildAt(#PlayerScoreSystem.Config.ShowRankType) if not UE.IsValid(Item1) then Item1 = UserWidget.NewWidgetObjectBP(UGCSystemLibrary.GetLocalPlayerController(), self:GetScoreNameItemClass()); self.HorizontalBox_AllName1:AddChild(Item1) end if not UE.IsValid(Item2) then Item2 = UserWidget.NewWidgetObjectBP(UGCSystemLibrary.GetLocalPlayerController(), self:GetScoreNameItemClass()); self.HorizontalBox_AllName2:AddChild(Item2) end Item1:SetName("得分") Item2:SetName("得分") end -- 隐藏多余的Item for i = HideStartIndex, self.HorizontalBox_AllName1:GetChildrenCount() - 1 do self.HorizontalBox_AllName1:GetChildAt(i):SetVisibility(ESlateVisibility.Collapsed) self.HorizontalBox_AllName2:GetChildAt(i):SetVisibility(ESlateVisibility.Collapsed) end end function WB_TeamRank_N:GetScoreNameItemClass() if self.ScoreNameItemClass == nil then self.ScoreNameItemClass = UE.LoadClass(UGCGameSystem.GetUGCResourcesFullPath('Asset/UI/Rank/AutoRank/WB_RankScore_Name.WB_RankScore_Name_C')) end return self.ScoreNameItemClass end function WB_TeamRank_N:SetItemTeam() local LocalPlayerTeamID = UGCGameSystem.GameState:GetPlayerTeamIDByPlayerKey(UGCSystemLibrary.GetLocalPlayerKey()) if LocalPlayerTeamID == TeamConfig.TeamType.CT then self.LeftTeamType, self.RightTeamType = TeamConfig.TeamType.CT, TeamConfig.TeamType.T else self.LeftTeamType, self.RightTeamType = TeamConfig.TeamType.T, TeamConfig.TeamType.CT end for i = 0, self.VerticalBox_Left:GetChildrenCount() - 1 do local ItemLeftInst = self.VerticalBox_Left:GetChildAt(i) local ItemRightInst = self.VerticalBox_Right:GetChildAt(i) ItemLeftInst:SetTeam(TeamConfig.TeamType.CT) ItemRightInst:SetTeam(TeamConfig.TeamType.T) end end function WB_TeamRank_N:UpdateRank() -- ScoreData: {[PlayerKey] = {Kill = int32, Dead = int32, Score = float}...} local RankData = PlayerScoreSystem.GetTeamRank() UGCLogSystem.LogTree("[WB_TeamRank_UpdateRank]", RankData) for i = 0, self.VerticalBox_Left:GetChildrenCount() - 1 do local ItemLeftInst = self.VerticalBox_Left:GetChildAt(i) local ItemRightInst = self.VerticalBox_Right:GetChildAt(i) local PlayerKeyLeft = RankData[self.LeftTeamType] and RankData[self.LeftTeamType][i + 1] or nil local PlayerKeyRight = RankData[self.RightTeamType] and RankData[self.RightTeamType][i + 1] or nil if PlayerKeyLeft then ItemLeftInst:SetVisibility(ESlateVisibility.SelfHitTestInvisible) ItemLeftInst:InitRankInfo(PlayerKeyLeft) else ItemLeftInst:SetVisibility(ESlateVisibility.Collapsed) end if PlayerKeyRight then ItemRightInst:SetVisibility(ESlateVisibility.SelfHitTestInvisible) ItemRightInst:InitRankInfo(PlayerKeyRight) else ItemRightInst:SetVisibility(ESlateVisibility.Collapsed) end end end return WB_TeamRank_N;