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; |