115 lines
3.2 KiB
Lua
115 lines
3.2 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(...)
|
|
-- 加载即可
|
|
self.TheReturnTime = DefaultSettings.ReturnToLobbyTime;
|
|
self:AutoReturnToLobby();
|
|
end
|
|
|
|
WB_GameEnd.ReturnTimer = nil;
|
|
|
|
function WB_GameEnd:AutoReturnToLobby()
|
|
self.ReturnTimer = UGCEventSystem.SetTimerLoop(self, function()
|
|
self.TheReturnTime = self.TheReturnTime - 0.5;
|
|
local Time = math.floor(self.TheReturnTime);
|
|
self.TextBlock_Return:SetText(string.format("返回大厅(%ds)", Time));
|
|
end, 0.5)
|
|
UGCEventSystem.SetTimer(self, function()
|
|
if self.ReturnTimer ~= nil then
|
|
UGCEventSystem.StopTimer(self.ReturnTimer);
|
|
self.ReturnTimer = nil;
|
|
self:OnReturnToLobby();
|
|
end
|
|
end, DefaultSettings.ReturnToLobbyTime - 0.5);
|
|
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.GameProgressChange_Gaming, self.OnGoToGaming, self)
|
|
UGCEventSystem.AddListener(EventTypes.AllPlayerKDAChange, self.SetInfos, self);
|
|
self.TextBlock_Return:SetText("返回大厅");
|
|
self.TheReturnTime = DefaultSettings.ReturnToLobbyTime;
|
|
|
|
self.bInitDoOnce = true;
|
|
end
|
|
|
|
function WB_GameEnd:OnGoToGaming()
|
|
self.WB_PlayerInfo:Adapt();
|
|
end
|
|
|
|
function WB_GameEnd:OnReturnToLobby()
|
|
-- 发送关闭协议到服务器
|
|
UE.ReturnToLobby();
|
|
end
|
|
|
|
---@param InInfo table<int32, PlayerKDA_DamageItem> 支持排序功能
|
|
function WB_GameEnd:SetInfos(InInfo)
|
|
local Num = table.getCount(InInfo);
|
|
-- 构建一下
|
|
local Infos = {};
|
|
local No = 1;
|
|
local LastBodySize = -1;
|
|
local LastDamage = 0.;
|
|
local LocalNo = 0;
|
|
for i = 1, Num do
|
|
local Item = InInfo[i];
|
|
local AccountInfo = GameState.PlayerDatas.AccountInfo[Item.PlayerKey];
|
|
local KDA = Item.KDA.Kill / (Item.KDA.Dead == 0 and 1 or Item.KDA.Dead);
|
|
local BodySize = GameState:GetPlayerAttribute(Item.PlayerKey, DefaultSettings.EPawnBenefitType.BodySize);
|
|
-- 此时说明当前名次跟上面的人一样,一样的话那么就用伤害来比较
|
|
if LastBodySize == BodySize then
|
|
else
|
|
No = i;
|
|
end
|
|
Infos[i] = {
|
|
PlayerKey = Item.PlayerKey,
|
|
PlayerName = AccountInfo.PlayerName,
|
|
IconURL = AccountInfo.IconURL,
|
|
KDA = KDA,
|
|
Kill = Item.KDA.Kill,
|
|
Damage = Item.Damage,
|
|
IsSelf = Item.PlayerKey == LocalPlayerKey,
|
|
No = No;
|
|
BodySize = BodySize,
|
|
}
|
|
if Infos[i].IsSelf then
|
|
LocalNo = No;
|
|
end
|
|
LastDamage = Item.Damage;
|
|
LastBodySize = Infos[i].BodySize;
|
|
end
|
|
|
|
if LocalNo <= 3 then
|
|
self.WidgetSwitcher_GameEnd:SetActiveWidgetIndex(0);
|
|
else
|
|
self.WidgetSwitcher_GameEnd:SetActiveWidgetIndex(1);
|
|
end
|
|
|
|
UGCLogSystem.LogTree(string.format("[WB_GameEnd:SetInfos] Infos ="), Infos)
|
|
self.WB_PlayerInfo:SetInfos(Infos);
|
|
end
|
|
|
|
-- function WB_GameEnd:Tick(MyGeometry, InDeltaTime)
|
|
|
|
-- end
|
|
|
|
-- function WB_GameEnd:Destruct()
|
|
|
|
-- end
|
|
|
|
return WB_GameEnd; |