122 lines
5.0 KiB
Lua
122 lines
5.0 KiB
Lua
---@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; |