103 lines
2.6 KiB
Lua
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; |