296 lines
9.7 KiB
Lua
296 lines
9.7 KiB
Lua
---@class WB_GameEnd_C:UUserWidget
|
|
---@field Button_Return UButton
|
|
---@field Button_Share UButton
|
|
---@field Image_3 UImage
|
|
---@field Image_BG UImage
|
|
---@field NewButton_History UNewButton
|
|
---@field NewButton_Report UNewButton
|
|
---@field TextBlock_Return UTextBlock
|
|
---@field UIParticleEmitter_127 UUIParticleEmitter
|
|
---@field WB_GameEnd_PlayerInfo_Enemy UWB_GameEnd_PlayerInfo_C
|
|
---@field WB_GameEnd_PlayerInfo_Self UWB_GameEnd_PlayerInfo_C
|
|
---@field WB_PID UWB_PID_C
|
|
---@field WB_PlayerInfo UWB_PlayerInfo_C
|
|
---@field WidgetSwitcher_Enemy UWidgetSwitcher
|
|
---@field WidgetSwitcher_GameEnd UWidgetSwitcher
|
|
--Edit Below--
|
|
---@type WB_GameEnd_C
|
|
local WB_GameEnd = { bInitDoOnce = false; };
|
|
|
|
WB_GameEnd.GameWinner = nil;
|
|
WB_GameEnd.RoundWinners = {};
|
|
|
|
function WB_GameEnd:Construct()
|
|
self:LuaInit();
|
|
end
|
|
|
|
function WB_GameEnd:OnShowPanel(...)
|
|
UE.OnCloseDS();
|
|
|
|
local vars = { ... };
|
|
local EndTime = MiniGameTimes.End;
|
|
if LocalIsFriendSpectator then EndTime = 18; end
|
|
|
|
GlobalTickTool:AddInternalCount(self, function(o, dt, st, t)
|
|
self.TextBlock_Return:SetText("返回大厅(" .. tostring(t) .. ')');
|
|
end, 1, EndTime, self.ReturnToLobby);
|
|
|
|
self:LuaInit();
|
|
UGCLogSystem.Log("[WB_GameEnd:OnShowPanel] 开始绑定设置")
|
|
if not LocalIsGlobalSpectator then
|
|
UGCEventSystem.SetTimer(self, function()
|
|
if GlobalModeType then
|
|
if GlobalModeType == GameModeConfig.EGameModeType.DefaultMode then
|
|
UGCLogSystem.Log("[WB_GameEnd:OnShowPanel] 显示 Rank 和成就界面")
|
|
UGCGameSystem.ShowUGCRankAndAchievementUI();
|
|
end
|
|
else
|
|
UGCGameSystem.ShowUGCRankAndAchievementUI();
|
|
end
|
|
end, 2);
|
|
end
|
|
|
|
UGCLogSystem.LogTree(string.format("[WB_GameEnd:OnShowPanel] vars ="), vars);
|
|
self.GameWinner = vars[1];
|
|
self.RoundWinners = vars[2];
|
|
if self.GameWinner == nil then
|
|
self.GameWinner = SoloKingGameWinner;
|
|
if self.GameWinner == nil then self.GameWinner = GameState.MiniInfo.GameWinner end
|
|
end
|
|
if self.RoundWinners == nil then
|
|
self.RoundWinners = SoloKingRoundWinner;
|
|
if self.RoundWinners == nil then self.RoundWinners = GameState.MiniInfo.RoundWinners end
|
|
end
|
|
|
|
-- 通知 GameRecord 组装数据
|
|
WidgetManager:GetPanel(WidgetConfig.EUIType.GameRecord, function(Widget)
|
|
UGCLogSystem.Log("[WB_GameEnd:OnShowPanel] 执行显示 GameRecord")
|
|
Widget:ShowArchives();
|
|
end)
|
|
UGCLogSystem.Log("[WB_GameEnd:OnShowPanel] GameWinner = %s", tostring(self.GameWinner));
|
|
end
|
|
|
|
function WB_GameEnd:LuaInit()
|
|
if self.bInitDoOnce then return ; end
|
|
self.bInitDoOnce = true;
|
|
|
|
UGCLogSystem.Log("[WB_GameEnd:LuaInit] 执行")
|
|
self.WB_PlayerInfo:LuaInit();
|
|
UITool.BindButtonClicked(self.Button_Return, self.ReturnToLobby, self);
|
|
UITool.BindButtonClicked(self.NewButton_History, self.OnClickHistory, self);
|
|
UITool.BindButtonToShare(self.Button_Share);
|
|
self.TextBlock_Return:SetText("返回大厅");
|
|
self.WidgetSwitcher_GameEnd:SetActiveWidgetIndex(3);
|
|
|
|
self.WB_PID:LuaInit();
|
|
|
|
UGCEventSystem.AddListener(EventTypes.UpdateRoundWinners, self.GotoGameEnd, self)
|
|
UGCEventSystem.AddListener(EventTypes.UpdateAccountInfo, self.OnUpdateAccountInfo, self)
|
|
UGCEventSystem.AddListener(EventTypes.UpdateGameWinner, self.HandleIsWin, self)
|
|
|
|
if LocalIsGlobalSpectator then
|
|
self.WB_GameEnd_PlayerInfo_Self:LuaInit();
|
|
self.WB_GameEnd_PlayerInfo_Enemy:LuaInit();
|
|
self.NewButton_History:SetVisibility(ESlateVisibility.Collapsed);
|
|
self.Button_Share:SetVisibility(ESlateVisibility.Collapsed);
|
|
else
|
|
self.WB_GameEnd_PlayerInfo_Self:LuaInit(true);
|
|
self.WB_GameEnd_PlayerInfo_Enemy:LuaInit(false);
|
|
end
|
|
|
|
UITool.BindButtonClicked(self.NewButton_Report, self.OnClickReport, self);
|
|
|
|
UGCEventSystem.SetTimer(self, function()
|
|
self:OnUpdateAccountInfo();
|
|
end, 10);
|
|
|
|
if not (LocalIsGlobalSpectator or LocalIsFriendSpectator) then
|
|
self.NewButton_Report:SetVisibility(ESlateVisibility.Visible);
|
|
--self.WB_RankingListBtn:SetVisibility(ESlateVisibility.Visible);
|
|
end
|
|
--self.WB_RankingListBtn:LuaInit();
|
|
--UITool.BindButtonClicked(self.Button_367, self.OnClickSelectMode, self)
|
|
end
|
|
|
|
function WB_GameEnd:OnClickSelectMode()
|
|
UGCMultiMode.RequestMatch(1002, function(Success)
|
|
UGCLogSystem.Log("[WB_GameEnd:OnClickSelectMode] Success = %s", tostring(Success));
|
|
end, self)
|
|
end
|
|
|
|
function WB_GameEnd:ReturnToLobby()
|
|
UE.ReturnToLobby();
|
|
end
|
|
|
|
function WB_GameEnd:OnNotifyRank(...)
|
|
local vars = { ... };
|
|
UGCLogSystem.LogTree(string.format("[WB_GameEnd:OnNotifyRank] vars ="), vars)
|
|
--- 显示段位 UI
|
|
UGCLogSystem.Log("[WB_GameEnd:OnShowPanel] 显示段位UI");
|
|
UGCGameSystem.ShowUGCRankAndAchievementUI();
|
|
end
|
|
|
|
function WB_GameEnd:HandleIsWin(Winner, WinnerList)
|
|
UGCLogSystem.Log("[WB_GameEnd:HandleIsWin] 执行胜利方是 %s", tostring(Winner))
|
|
local WinnerTable = {};
|
|
for i, Info in pairs(WinnerList) do
|
|
if Info.Winner then
|
|
WinnerTable[Info.Winner] = (WinnerTable[Info.Winner] or 0) + 1;
|
|
end
|
|
end
|
|
if LocalIsGlobalSpectator then
|
|
self.WidgetSwitcher_GameEnd:SetActiveWidgetIndex(3);
|
|
local TeamID = UE.GetTeamID(Winner)
|
|
UGCLogSystem.Log("[WB_GameEnd:HandleIsWin] TeamID = %s", tostring(TeamID));
|
|
if TeamID == 1 then
|
|
self.WB_GameEnd_PlayerInfo_Self:SetWin(true);
|
|
self.WB_GameEnd_PlayerInfo_Enemy:SetWin(false);
|
|
else
|
|
self.WB_GameEnd_PlayerInfo_Self:SetWin(false);
|
|
self.WB_GameEnd_PlayerInfo_Enemy:SetWin(true);
|
|
end
|
|
else
|
|
if Winner == LocalPlayerKey then
|
|
self.WB_GameEnd_PlayerInfo_Self:SetWin(true);
|
|
self.WB_GameEnd_PlayerInfo_Enemy:SetWin(false);
|
|
if table.getCount(WinnerTable) == 1 then
|
|
self.WidgetSwitcher_GameEnd:SetActiveWidgetIndex(2);
|
|
else
|
|
self.WidgetSwitcher_GameEnd:SetActiveWidgetIndex(1);
|
|
end
|
|
else
|
|
self.WB_GameEnd_PlayerInfo_Self:SetWin(false);
|
|
self.WB_GameEnd_PlayerInfo_Enemy:SetWin(true);
|
|
self.WidgetSwitcher_GameEnd:SetActiveWidgetIndex(0);
|
|
end
|
|
end
|
|
end
|
|
|
|
-- function WB_GameEnd:Tick(MyGeometry, InDeltaTime)
|
|
|
|
-- end
|
|
|
|
-- function WB_GameEnd:Destruct()
|
|
|
|
-- end
|
|
|
|
function WB_GameEnd:GotoGameEnd(RoundInfo)
|
|
-- 分别计算分数
|
|
UGCLogSystem.Log("[WB_GameEnd:GotoGameEnd] 执行")
|
|
if table.isEmpty(RoundInfo) then return end
|
|
|
|
local ScoreTable = {};
|
|
for i, v in pairs(RoundInfo) do
|
|
if v.Winner then
|
|
ScoreTable[v.Winner] = 1 + (ScoreTable[v.Winner] or 0);
|
|
end
|
|
end
|
|
UGCLogSystem.LogTree(string.format("[WB_GameEnd:GotoGameEnd] ScoreTable ="), ScoreTable)
|
|
|
|
self.WB_GameEnd_PlayerInfo_Self:SetVisibility(ESlateVisibility.SelfHitTestInvisible);
|
|
self.WB_GameEnd_PlayerInfo_Enemy:SetVisibility(ESlateVisibility.SelfHitTestInvisible);
|
|
|
|
if LocalIsGlobalSpectator then
|
|
for PlayerKey, Info in pairs(UE.GetAccountInfo()) do
|
|
if Info.TeamID == 1 then
|
|
self.WB_GameEnd_PlayerInfo_Self:SetPlayerInfo(PlayerKey, ScoreTable[PlayerKey], true)
|
|
else
|
|
self.WB_GameEnd_PlayerInfo_Enemy:SetPlayerInfo(PlayerKey, ScoreTable[PlayerKey], false)
|
|
end
|
|
end
|
|
|
|
self.WidgetSwitcher_GameEnd:SetVisibility(ESlateVisibility.Collapsed);
|
|
else
|
|
-- 拿到敌方玩家的 PlayerKey
|
|
local EnemyPlayerKey = 0;
|
|
for i, v in pairs(UE.GetAccountInfo()) do
|
|
if i ~= LocalPlayerKey then EnemyPlayerKey = i; end
|
|
end
|
|
|
|
self.WB_GameEnd_PlayerInfo_Self:SetPlayerInfo(LocalPlayerKey, ScoreTable[LocalPlayerKey], true)
|
|
self.WB_GameEnd_PlayerInfo_Enemy:SetPlayerInfo(EnemyPlayerKey, ScoreTable[EnemyPlayerKey], false)
|
|
|
|
self.WidgetSwitcher_GameEnd:SetVisibility(ESlateVisibility.SelfHitTestInvisible);
|
|
end
|
|
end
|
|
|
|
function WB_GameEnd:OnUpdateAccountInfo(AccountInfo)
|
|
UGCLogSystem.Log("[WB_GameEnd:OnUpdateAccountInfo] 执行")
|
|
if LocalIsGlobalSpectator then
|
|
for PlayerKey, Data in pairs(UE.GetAccountInfo()) do
|
|
if Data.TeamID == 1 then
|
|
self.WB_GameEnd_PlayerInfo_Self:SetPlayerKey(PlayerKey, Data);
|
|
else
|
|
self.WB_GameEnd_PlayerInfo_Enemy:SetPlayerKey(PlayerKey, Data);
|
|
end
|
|
end
|
|
else
|
|
for PlayerKey, Data in pairs(UE.GetAccountInfo()) do
|
|
if PlayerKey == LocalPlayerKey then
|
|
self.WB_GameEnd_PlayerInfo_Self:SetPlayerKey(PlayerKey, Data);
|
|
else
|
|
self.WB_GameEnd_PlayerInfo_Enemy:SetPlayerKey(PlayerKey, Data);
|
|
end
|
|
end
|
|
end
|
|
end
|
|
|
|
function WB_GameEnd:OnUpdatePlayerRank(RankScores)
|
|
UGCLogSystem.LogTree(string.format("[WB_GameEnd:OnUpdatePlayerRank] RankScores ="), RankScores)
|
|
if not table.isEmpty(RankScores) then
|
|
local WinnerRank = RankScores[1];
|
|
local LoserRank = RankScores[2];
|
|
if not LocalIsGlobalSpectator then
|
|
if WinnerRank.PlayerKey == LocalPlayerKey then
|
|
self.WB_GameEnd_PlayerInfo_Self:SetTargetRank(WinnerRank);
|
|
if LoserRank then
|
|
self.WidgetSwitcher_Enemy:SetActiveWidgetIndex(0);
|
|
self.WB_GameEnd_PlayerInfo_Enemy:SetTargetRank(LoserRank);
|
|
else
|
|
self.WidgetSwitcher_Enemy:SetActiveWidgetIndex(1);
|
|
end
|
|
else
|
|
-- 说明是敌方赢了
|
|
self.WB_GameEnd_PlayerInfo_Self:SetTargetRank(LoserRank);
|
|
if LoserRank then
|
|
self.WidgetSwitcher_Enemy:SetActiveWidgetIndex(0);
|
|
self.WB_GameEnd_PlayerInfo_Enemy:SetTargetRank(WinnerRank);
|
|
else
|
|
self.WidgetSwitcher_Enemy:SetActiveWidgetIndex(1);
|
|
end
|
|
end
|
|
else
|
|
-- 分别设置胜利方和失败方
|
|
local TeamID = UE.GetTeamID(WinnerRank.PlayerKey);
|
|
if TeamID == 1 then
|
|
self.WB_GameEnd_PlayerInfo_Self:SetTargetRank(WinnerRank);
|
|
if LoserRank then
|
|
self.WidgetSwitcher_Enemy:SetActiveWidgetIndex(0);
|
|
self.WB_GameEnd_PlayerInfo_Enemy:SetTargetRank(LoserRank);
|
|
else
|
|
self.WidgetSwitcher_Enemy:SetActiveWidgetIndex(1);
|
|
end
|
|
else
|
|
self.WB_GameEnd_PlayerInfo_Enemy:SetTargetRank(WinnerRank);
|
|
if LoserRank then
|
|
self.WidgetSwitcher_Enemy:SetActiveWidgetIndex(0);
|
|
self.WB_GameEnd_PlayerInfo_Self:SetTargetRank(LoserRank);
|
|
else
|
|
self.WidgetSwitcher_Enemy:SetActiveWidgetIndex(1);
|
|
end
|
|
end
|
|
end
|
|
end
|
|
end
|
|
|
|
function WB_GameEnd:OnClickHistory()
|
|
WidgetManager:ShowPanel(WidgetConfig.EUIType.GameRecord, false);
|
|
end
|
|
|
|
function WB_GameEnd:OnClickReport()
|
|
UGCLogSystem.Log("[WB_GameEnd:OnClickReport] 打开设置界面");
|
|
--WidgetManager:ClosePanel(self.UIType);
|
|
UITool.OpenSettings();
|
|
end
|
|
|
|
return WB_GameEnd; |