---@class WB_PlayerInfo_Small_C:UUserWidget ---@field HorizontalBox_Title UHorizontalBox ---@field Overlay_MVP UOverlay ---@field Overlay_Tile_AddFriend UOverlay ---@field ScrollBox_Items UScrollBox ---@field Spacer_Button USpacer ---@field TextBlock_BodySize UTextBlock ---@field TextBlock_Damage UTextBlock ---@field TextBlock_KDA UTextBlock ---@field TextBlock_PlayerName UTextBlock --Edit Below-- ---@type WB_PlayerInfo_Small_C local WB_PlayerInfo = { bInitDoOnce = false; }; function WB_PlayerInfo:Construct() self:LuaInit(); end WB_PlayerInfo.HeadIcons = {}; function WB_PlayerInfo:LuaInit() if self.bInitDoOnce then return ; end UITool.ForeachAllChildren(self.ScrollBox_Items, function(index, Widget) Widget:LuaInit(); end) -- 添加回调 UGCEventSystem.AddListener(EventTypes.AllPlayerKDAChange, self.SetInfos, self); self.bInitDoOnce = true; end function WB_PlayerInfo:HandleInfos(InInfo) local Num = table.getCount(InInfo); -- 构建一下 local Infos = {}; local No = 1; local LastBodySize = -1; local LastDamage = 0.; --local LocalNo = 0; local LastKDA = 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 LastKDA ~= KDA then No = i; end Infos[i] = { PlayerKey = Item.PlayerKey, PlayerName = AccountInfo.PlayerName, IconURL = AccountInfo.IconURL, KDA = KDA, Damage = Item.Damage, Kill = Item.KDA.Kill, IsSelf = Item.PlayerKey == LocalPlayerKey, No = No; BodySize = BodySize, } --if Infos[i].IsSelf then -- LocalNo = No; --end LastDamage = Item.Damage; LastBodySize = Infos[i].BodySize; LastKDA = KDA; end return Infos; end ---@param InInfo table 支持排序功能 function WB_PlayerInfo:SetInfos(InInfo) InInfo = self:HandleInfos(InInfo); UGCLogSystem.LogTree(string.format("[WB_PlayerInfo:SetInfos] InInfo ="), InInfo) local Num = table.getCount(InInfo); UITool.AdaptChildren(self.ScrollBox_Items, Num, ObjectPath.WB_PlayerInfoItem_Small); UITool.ForeachAllChildren(self.ScrollBox_Items, function(index, Widget) local Info = InInfo[index]; if Info then Widget:SetPlayerInfo(Info, self); Widget:SetVisibility(ESlateVisibility.SelfHitTestInvisible); else Widget:SetVisibility(ESlateVisibility.Collapsed); end end); end function WB_PlayerInfo:Adapt() local Total = 0; for c, d in pairs(GameState.PlayerList) do Total = Total + table.getCount(d); end UITool.AdaptChildren(self.ScrollBox_Items, Total, ObjectPath.WB_PlayerInfoItem); -- 开始加载头像保存一下 for i, v in pairs(GameState.PlayerKDA_Damages) do ---@type PlayerAccountInfo local AccountInfo = GameState.PlayerDatas.AccountInfo[v.PlayerKey] if AccountInfo then UITool.DownloadImage(AccountInfo.IconURL, function(TextDynamic) self.HeadIcons[v.PlayerKey] = TextDynamic; UGCLogSystem.LogTree(string.format("[WB_PlayerInfo:Adapt] self.HeadIcons ="), self.HeadIcons); end); end end end function WB_PlayerInfo:SetInGaming() self:LuaInit(); self.Spacer_Button:SetVisibility(ESlateVisibility.Collapsed); self.Overlay_MVP:SetVisibility(ESlateVisibility.Collapsed); --self.Overlay_Tile_AddFriend:SetVisibility(ESlateVisibility.Collapsed); UITool.ForeachAllChildren(self.ScrollBox_Items, function(index, Widget) Widget:SetInGaming(); end); end -- function WB_PlayerInfo:Tick(MyGeometry, InDeltaTime) -- end -- function WB_PlayerInfo:Destruct() -- end return WB_PlayerInfo;