123 lines
3.8 KiB
Lua
123 lines
3.8 KiB
Lua
---@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<int32, PlayerKDA_DamageItem> 支持排序功能
|
|
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; |