2025-01-04 23:00:19 +08:00

103 lines
2.6 KiB
Lua

---@class WB_GameEnd_C:UUserWidget
---@field Button_Return UButton
---@field Button_Share UButton
---@field TextBlock_Return UTextBlock
---@field WB_PlayerInfo UWB_PlayerInfo_C
---@field WidgetSwitcher_GameEnd UWidgetSwitcher
--Edit Below--
---@type WB_GameEnd_C
local WB_GameEnd = { bInitDoOnce = false; };
function WB_GameEnd:Construct()
self:LuaInit();
end
function WB_GameEnd:OnShowPanel(InTime)
-- 加载即可
self:AutoReturnToLobby(InTime);
end
WB_GameEnd.ReturnTimer = nil;
function WB_GameEnd:AutoReturnToLobby(InTime)
if InTime == nil then InTime = MiniGameTimes.GameEnd; end
GlobalTickTool:AddInternalCount(self, function(o, dt, ServerTime, t)
self.TextBlock_Return:SetText("返回大厅(" .. tostring(t) .. ')');
end, 1, InTime, function(o)
o:OnReturnToLobby();
end);
end
function WB_GameEnd:LuaInit()
if self.bInitDoOnce then return ; end
self.WB_PlayerInfo:LuaInit();
self.Button_Return.OnClicked:Add(self.OnReturnToLobby, self)
UITool.BindButtonToShare(self.Button_Share);
UGCEventSystem.AddListener(EventTypes.UpdatePlayerKDAs, self.UpdatePlayerKDAs, self)
self.TextBlock_Return:SetText("返回大厅");
self.bInitDoOnce = true;
end
function WB_GameEnd:OnReturnToLobby()
-- 发送关闭协议到服务器
UE.ReturnToLobby();
end
-- function WB_GameEnd:Tick(MyGeometry, InDeltaTime)
-- end
-- function WB_GameEnd:Destruct()
-- end
function WB_GameEnd:UpdatePlayerKDAs(InKDAs)
local KDATable = {};
for PlayerKey, KDA in pairs(InKDAs) do
table.insert(KDATable, {
Kill = KDA.Kill,
Dead = KDA.Dead,
Assist = KDA.Assist,
KDA = (KDA.Kill + KDA.Assist) / (KDA.Dead == 0 and 1 or KDA.Dead),
PlayerKey = PlayerKey,
});
end
table.sort(KDATable, function(a, b)
if a.KDA == b.KDA then
if a.Kill == b.Kill then
return a.Dead < b.Dead;
end
return a.Kill > b.Kill;
end
return a.KDA > b.KDA;
end);
local No = 1;
local Kda, Kill, Dead = 0, 0, 0;
local LocalNo = 0;
for i = 1, #KDATable do
local Item = KDATable[i];
if not (Kda == Item.KDA and Kill == Item.Kill and Dead == Item.Dead) then
No = i;
end
KDATable[i].No = No;
if LocalPlayerKey == Item.PlayerKey then LocalNo = No; end
Kill = Item.Kill;
Kda = Item.KDA;
Dead = Item.Dead;
end
self.WB_PlayerInfo:SetKDAItems(KDATable);
UGCLogSystem.LogTree(string.format("[WB_GameEnd:UpdatePlayerKDAs] KDATable End"), KDATable)
-- 检查是否是前三名
if LocalNo == 1 then
self.WidgetSwitcher_GameEnd:SetActiveWidgetIndex(2);
elseif LocalNo <= 3 then
self.WidgetSwitcher_GameEnd:SetActiveWidgetIndex(1);
else
self.WidgetSwitcher_GameEnd:SetActiveWidgetIndex(0);
end
end
return WB_GameEnd;