---@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 支持排序功能 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;