155 lines
5.5 KiB
Lua
155 lines
5.5 KiB
Lua
|
---@class WB_PlayerSoldiers_C:UAEUserWidget
|
|||
|
---@field VerticalBox_Players UVerticalBox
|
|||
|
--Edit Below--
|
|||
|
---@type WB_PlayerSoldiers_C
|
|||
|
local WB_PlayerSoldiers = { bInitDoOnce = false; };
|
|||
|
|
|||
|
function WB_PlayerSoldiers:Construct()
|
|||
|
UGCLogSystem.Log("[WB_PlayerSoldiers:Construct] 执行")
|
|||
|
self:LuaInit();
|
|||
|
end
|
|||
|
|
|||
|
function WB_PlayerSoldiers:LuaInit()
|
|||
|
if self.bInitDoOnce then return; end
|
|||
|
UGCEventSystem.AddListener(EventTypes.SelectSoldierType, self.SetSoldierTypes, self);
|
|||
|
UGCEventSystem.AddListener(EventTypes.UpdateNewTeams, self.SetPlayerKeys, self);
|
|||
|
UGCEventSystem.AddListener(EventTypes.PlayerUseBuff, self.OnTriggerSoldier, self);
|
|||
|
UGCEventSystem.AddListener(EventTypes.ResetRound, self.OnResetRound, self);
|
|||
|
UGCEventSystem.AddListener(EventTypes.UpdatePlayerSoldiers, self.SetSoldierTypes, self);
|
|||
|
|
|||
|
for i = 1, UITool.GetChildrenCount(self.VerticalBox_Players) do
|
|||
|
local Item = self.VerticalBox_Players:GetChildAt(i - 1);
|
|||
|
Item:SetVisibility(ESlateVisibility.Collapsed);
|
|||
|
end
|
|||
|
|
|||
|
self:HideAllChildrenCooldown();
|
|||
|
self.bInitDoOnce = true;
|
|||
|
end
|
|||
|
|
|||
|
-- 通过 WidgetManager 显示当前页面
|
|||
|
--function WB_PlayerSoldiers:OnShowPanel(...) end
|
|||
|
|
|||
|
function WB_PlayerSoldiers:Tick(MyGeometry, InDeltaTime) end
|
|||
|
|
|||
|
function WB_PlayerSoldiers:HideAllChildrenCooldown()
|
|||
|
for i = 1, self.VerticalBox_Players:GetChildrenCount() do
|
|||
|
local Item = self.VerticalBox_Players:GetChildAt(i - 1);
|
|||
|
Item:HideCooldown();
|
|||
|
end
|
|||
|
end
|
|||
|
|
|||
|
function WB_PlayerSoldiers:Destruct()
|
|||
|
UGCEventSystem.RemoveListener(EventTypes.SelectSoldierType, self.SetSoldierTypes, self);
|
|||
|
end
|
|||
|
|
|||
|
--- @field InList table<TeamId,table<PlayerKey>> 同队玩家的 PlayerKey
|
|||
|
function WB_PlayerSoldiers:SetPlayerKeys(InList)
|
|||
|
if InList == nil then return; end
|
|||
|
|
|||
|
-- 查找本地
|
|||
|
UGCLogSystem.Log("[WB_PlayerSoldiers:SetPlayerKeys] Local Team ID = %d", DefaultSettings.LocalTeamId);
|
|||
|
local TeamId = DefaultSettings.LocalTeamId;
|
|||
|
if TeamId == nil or TeamId == -1 then
|
|||
|
TeamId = UGCPlayerControllerSystem.GetTeamID(STExtraGameplayStatics.GetFirstPlayerController(UGCGameSystem.GameState))
|
|||
|
if TeamId == nil or TeamId <= 0 then return; end
|
|||
|
end
|
|||
|
local PlayerList = InList[TeamId];
|
|||
|
UGCLogSystem.Log("[WB_PlayerSoldiers:SetPlayerKeys] Local Team ID = %d", DefaultSettings.LocalTeamId);
|
|||
|
|
|||
|
--for i, v in pairs(InList) do
|
|||
|
-- local PlayerStr = "";
|
|||
|
-- for c, d in pairs(v) do
|
|||
|
-- PlayerStr = PlayerStr .. tostring(d);
|
|||
|
-- end
|
|||
|
-- UGCLogSystem.Log("[WB_PlayerSoldiers:SetPlayerKeys] TeamId = %d, Val = %s", i, PlayerStr);
|
|||
|
--end
|
|||
|
UGCLogSystem.LogTree("[WB_PlayerSoldiers:SetPlayerKeys] InList = ", InList);
|
|||
|
|
|||
|
for i, v in pairs(PlayerList) do
|
|||
|
local Item = self.VerticalBox_Players:GetChildAt(i - 1);
|
|||
|
Item:SetPlayerKey(v);
|
|||
|
end
|
|||
|
end
|
|||
|
|
|||
|
--- 设置子项中的兵种类型
|
|||
|
---@param InList table<PlayerKey, ESoldierType> {PlayerKey: SoldierConfig.ESoldierType, ...}
|
|||
|
function WB_PlayerSoldiers:SetSoldierTypes(InList)
|
|||
|
UGCLogSystem.LogTree("[WB_PlayerSoldiers:SetSoldierTypes] InList = ", InList);
|
|||
|
for i, v in pairs(InList) do
|
|||
|
self:SetSoldierType(i, v);
|
|||
|
end
|
|||
|
end
|
|||
|
|
|||
|
---@param InPlayerKey PlayerKey 玩家 Key
|
|||
|
---@param InType ESoldierType 兵种类型
|
|||
|
function WB_PlayerSoldiers:SetSoldierType(InPlayerKey, InType)
|
|||
|
-- 判断当前是否是自己队伍的
|
|||
|
if InPlayerKey == nil then return end
|
|||
|
local LocalTeamID = UGCGameSystem.GameState:GetPlayerTeamId(LocalPlayerKey);
|
|||
|
if LocalTeamID ~= UGCGameSystem.GameState:GetPlayerTeamId(InPlayerKey) then return; end
|
|||
|
local Item = self:FindItem(InPlayerKey)
|
|||
|
-- 找到一个不是他的
|
|||
|
if Item == nil then return; end
|
|||
|
Item:SetVisibility(ESlateVisibility.Visible);
|
|||
|
Item:SetSoldierType(InType);
|
|||
|
end
|
|||
|
|
|||
|
-- 找到对应的 WidgetItem
|
|||
|
---@param InPlayerKey PlayerKey
|
|||
|
function WB_PlayerSoldiers:FindItem(InPlayerKey)
|
|||
|
for i = 1, self.VerticalBox_Players:GetChildrenCount() do
|
|||
|
local Item = self.VerticalBox_Players:GetChildAt(i - 1);
|
|||
|
if Item:GetPlayerKey() == InPlayerKey then return Item; end
|
|||
|
end
|
|||
|
UGCLogSystem.Log("[WB_PlayerSoldiers:FindItem] 开始匹配没有的");
|
|||
|
for i = 1, self.VerticalBox_Players:GetChildrenCount() do
|
|||
|
local Widget = self.VerticalBox_Players:GetChildAt(i - 1);
|
|||
|
local PlayerKey = Widget:GetPlayerKey();
|
|||
|
if PlayerKey == 0 then
|
|||
|
Widget:SetPlayerKey(InPlayerKey);
|
|||
|
return Widget;
|
|||
|
end
|
|||
|
end
|
|||
|
UGCLogSystem.Log("[WB_PlayerSoldiers:FindItem] 无法找到 PlayerKey 对应的Item:%s", tostring(InPlayerKey));
|
|||
|
return nil;
|
|||
|
end
|
|||
|
|
|||
|
function WB_PlayerSoldiers:HideChildren(InCount)
|
|||
|
local Count = self.VerticalBox_Players:GetChildrenCount();
|
|||
|
if InCount == nil or InCount > Count then
|
|||
|
InCount = Count;
|
|||
|
end
|
|||
|
-- 从后往前逐个隐藏
|
|||
|
for i = 1, InCount do
|
|||
|
local Item = self.VerticalBox_Players:GetChildrenCount(Count - i);
|
|||
|
Item:SetVisibility(ESlateVisibility.Collapsed);
|
|||
|
end
|
|||
|
end
|
|||
|
|
|||
|
function WB_PlayerSoldiers:OnTriggerSoldier(InPlayerKey, InBuffType, InBuffInfo, InServerTime)
|
|||
|
-- 首先检查是否是我们这一方的
|
|||
|
local TheTeamId = UGCGameSystem.GameState:GetPlayerTeamId(InPlayerKey);
|
|||
|
UGCLogSystem.Log("[WB_PlayerSoldiers:OnTriggerSoldier] TeamId = %s,Local Team ID = %s", tostring(TheTeamId), tostring(DefaultSettings.LocalTeamId));
|
|||
|
|
|||
|
if TheTeamId ~= DefaultSettings.LocalTeamId then
|
|||
|
return;
|
|||
|
end
|
|||
|
for i = 1, self.VerticalBox_Players:GetChildrenCount() do
|
|||
|
local Item = self.VerticalBox_Players:GetChildAt(i - 1);
|
|||
|
local PlayerKey = Item:GetPlayerKey();
|
|||
|
if PlayerKey == InPlayerKey then
|
|||
|
Item:TriggerSoldierType();
|
|||
|
--break;
|
|||
|
end
|
|||
|
end
|
|||
|
end
|
|||
|
|
|||
|
function WB_PlayerSoldiers:OnResetRound()
|
|||
|
local Count = self.VerticalBox_Players:GetChildrenCount()
|
|||
|
for i = 1, Count do
|
|||
|
local Item = self.VerticalBox_Players:GetChildAt(i - 1);
|
|||
|
Item:Reset();
|
|||
|
end
|
|||
|
end
|
|||
|
|
|||
|
return WB_PlayerSoldiers;
|