238 lines
7.4 KiB
Lua
238 lines
7.4 KiB
Lua
|
---@class WB_SelectSoldier_C:UUserWidget
|
|||
|
---@field Button_Back UButton
|
|||
|
---@field Button_Select UButton
|
|||
|
---@field HorizontalBox_HadSelected UHorizontalBox
|
|||
|
---@field NewButton_Settings UNewButton
|
|||
|
---@field ScrollBox_Type UScrollBox
|
|||
|
---@field TextBlock_CountDown UTextBlock
|
|||
|
---@field TextBlock_Load UTextBlock
|
|||
|
---@field TextBlock_Tip UTextBlock
|
|||
|
---@field TextBlock_Type UTextBlock
|
|||
|
---@field TextBlock_WaitTime UTextBlock
|
|||
|
---@field VerticalBox_Diff UVerticalBox
|
|||
|
---@field VerticalBox_TeamPlayerSoldier UVerticalBox
|
|||
|
--Edit Below--
|
|||
|
---@type WB_SelectSoldier_C
|
|||
|
local WB_SelectSoldier = { bInitDoOnce = false; };
|
|||
|
|
|||
|
function WB_SelectSoldier:Construct()
|
|||
|
print(string.format('[WB_SelectSoldier:Construct] 执行'))
|
|||
|
UITool.BindButtonClicked(self.Button_Select, self.OnClickSelect, self);
|
|||
|
UITool.BindButtonClicked(self.NewButton_Settings, self.OpenSettings, self);
|
|||
|
UGCEventSystem.AddListener(EventTypes.UpdateWaitingTime, self.UpdateWaitTime, self);
|
|||
|
--self.HorizontalBox_HadSelected:SetVisibility(ESlateVisibility.Collapsed);
|
|||
|
UGCEventSystem.AddListener(EventTypes.UpdateNewTeams, self.UpdatePlayerTeams, self);
|
|||
|
|
|||
|
self.TextBlock_Load:SetVisibility(ESlateVisibility.Collapsed);
|
|||
|
end
|
|||
|
|
|||
|
WB_SelectSoldier.CurrentSelectType = nil;
|
|||
|
|
|||
|
function WB_SelectSoldier:OnShowPanel(...)
|
|||
|
UGCLogSystem.Log("[WB_SelectSoldier:OnShowPanel] 执行")
|
|||
|
-- 查找对应的数组
|
|||
|
local WidgetItemCount = self.ScrollBox_Type:GetChildrenCount();
|
|||
|
|
|||
|
-- 进行排序
|
|||
|
local Table = {};
|
|||
|
for Type, Str in pairs(SoldierConfig.Chinese) do
|
|||
|
Table[#Table + 1] = { Type = Type };
|
|||
|
end
|
|||
|
|
|||
|
table.sort(Table, function(a, b)
|
|||
|
if SoldierConfig.InitShowTypes[a.Type] then
|
|||
|
if SoldierConfig.InitShowTypes[b.Type] then
|
|||
|
return SoldierConfig.UnlockScore[a.Type].Score < SoldierConfig.UnlockScore[b.Type].Score;
|
|||
|
else
|
|||
|
return true;
|
|||
|
end
|
|||
|
else
|
|||
|
if SoldierConfig.InitShowTypes[b.Type] then
|
|||
|
return false;
|
|||
|
else
|
|||
|
return SoldierConfig.UnlockScore[a.Type].Score < SoldierConfig.UnlockScore[b.Type].Score
|
|||
|
end
|
|||
|
end
|
|||
|
end);
|
|||
|
|
|||
|
local Count = 0;
|
|||
|
for i, v in pairs(Table) do
|
|||
|
local Item;
|
|||
|
if Count < WidgetItemCount then
|
|||
|
Item = self.ScrollBox_Type:GetChildAt(Count);
|
|||
|
Item:SetVisibility(ESlateVisibility.SelfHitTestInvisible);
|
|||
|
else
|
|||
|
Item = UITool.AddWidgetItem(self.ScrollBox_Type, ObjectPath.WB_SelectSolider_Item, self);
|
|||
|
end
|
|||
|
Item:SetParentWidget(self);
|
|||
|
Item:SetSoldierType(v.Type);
|
|||
|
Count = Count + 1;
|
|||
|
end
|
|||
|
|
|||
|
-- 初始化显示
|
|||
|
for i = 1, self.VerticalBox_Diff:GetChildrenCount() do
|
|||
|
local Item = self.VerticalBox_Diff:GetChildAt(i - 1);
|
|||
|
Item:SetInfoName(i);
|
|||
|
end
|
|||
|
|
|||
|
-- 所有子项全部设置为不可点击
|
|||
|
for i = 1, self.ScrollBox_Type:GetChildrenCount() do
|
|||
|
local Item = self.ScrollBox_Type:GetChildAt(i - 1);
|
|||
|
Item:SetButtonEnable(true);
|
|||
|
end
|
|||
|
end
|
|||
|
|
|||
|
function WB_SelectSoldier:OnClickSelect()
|
|||
|
if self.CurrentSelectType == nil then
|
|||
|
return ;
|
|||
|
end
|
|||
|
-- 发送 RPC
|
|||
|
UGCLogSystem.Log("[WB_SelectSoldier:OnClickSelect] 执行");
|
|||
|
UGCSendRPCSystem.ActorRPCNotify(nil, UGCGameSystem.GameState, "Server_SelectSoldier", LocalPlayerKey, self.CurrentSelectType);
|
|||
|
|
|||
|
-- 提示选择的职业
|
|||
|
UGCWidgetManagerSystem.ShowTipsUI(string.format("当前选择 %s", SoldierConfig.Chinese[self.CurrentSelectType]));
|
|||
|
local ChildrenCount = self.ScrollBox_Type:GetChildrenCount()
|
|||
|
for i = 0, ChildrenCount - 1 do
|
|||
|
local Item = self.ScrollBox_Type:GetChildAt(i);
|
|||
|
Item:SetSubmitSelect(self.CurrentSelectType);
|
|||
|
end
|
|||
|
|
|||
|
SoundSystem.PlaySound(SoundSystem.ESound.OK);
|
|||
|
end
|
|||
|
|
|||
|
function WB_SelectSoldier:OpenSettings()
|
|||
|
local MainControlPanel = GameBusinessManager.GetWidgetFromName(ingame, "MainControlPanelTochButton_C");
|
|||
|
if MainControlPanel then
|
|||
|
MainControlPanel.MainControlBaseUI:OpenSettingPanel();
|
|||
|
if self.DoOnceOpenSettingPanel then
|
|||
|
MainControlPanel.MainControlBaseUI:OpenSettingPanel();
|
|||
|
else
|
|||
|
self.DoOnceOpenSettingPanel = true
|
|||
|
end
|
|||
|
end
|
|||
|
end
|
|||
|
|
|||
|
function WB_SelectSoldier:Tick(MyGeometry, InDeltaTime)
|
|||
|
self:Loading(InDeltaTime);
|
|||
|
end
|
|||
|
|
|||
|
-- function WB_SelectSoldier:Destruct()
|
|||
|
|
|||
|
-- end
|
|||
|
|
|||
|
--- 到时间的时候自动设置
|
|||
|
--- @param InList table<int32, int32> 玩家兵种类型
|
|||
|
function WB_SelectSoldier:OnSelectSoldierType(InList)
|
|||
|
local LocalTeamId = UGCGameSystem.GameState:GetPlayerTeamId(LocalPlayerKey);
|
|||
|
local Players = {};
|
|||
|
for i, v in pairs(InList) do
|
|||
|
local TeamId = UGCGameSystem.GameState:GetPlayerTeamId(i);
|
|||
|
if TeamId == LocalTeamId then
|
|||
|
Players[i] = v;
|
|||
|
end
|
|||
|
end
|
|||
|
|
|||
|
-- 设置到
|
|||
|
UGCEventSystem.SendEvent(EventTypes.UpdatePlayerSoldiers, Players);
|
|||
|
end
|
|||
|
|
|||
|
WB_SelectSoldier.CurrItem = nil;
|
|||
|
|
|||
|
-- 当点击了某个子控件,该函数作为子控件的回调函数
|
|||
|
function WB_SelectSoldier:SetClickItemType(InItem, InType)
|
|||
|
if self.CurrItem ~= nil then self.CurrItem:SetSelect(false) end
|
|||
|
self.CurrItem = InItem;
|
|||
|
self.CurrItem:SetSelect(true);
|
|||
|
|
|||
|
self.CurrentSelectType = InType;
|
|||
|
-- 下面的描述显示一下对应描述
|
|||
|
self.HorizontalBox_HadSelected:SetVisibility(ESlateVisibility.SelfHitTestInvisible);
|
|||
|
self.TextBlock_Type:SetText(SoldierConfig.Chinese[InType]);
|
|||
|
local ChildrenCount = self.ScrollBox_Type:GetChildrenCount();
|
|||
|
for i = 0, ChildrenCount - 1 do
|
|||
|
local Item = self.ScrollBox_Type:GetChildAt(i);
|
|||
|
Item:SetClickSelect(InType);
|
|||
|
end
|
|||
|
|
|||
|
self:UpdateSoldierDiff(InType);
|
|||
|
self:OnClickSelect();
|
|||
|
end
|
|||
|
|
|||
|
function WB_SelectSoldier:UpdatePlayerTeams(PlayerTeams)
|
|||
|
if DefaultSettings.LocalTeamId then
|
|||
|
local TeamPlayers = PlayerTeams[DefaultSettings.LocalTeamId];
|
|||
|
local ChildrenCount = self.VerticalBox_TeamPlayerSoldier:GetChildrenCount();
|
|||
|
for i = 0, ChildrenCount - 1 do
|
|||
|
local Item = self.VerticalBox_TeamPlayerSoldier:GetChildAt(i);
|
|||
|
if TeamPlayers and TeamPlayers[i + 1] then
|
|||
|
Item:SetVisibility(ESlateVisibility.SelfHitTestInvisible);
|
|||
|
Item:SetTargetPlayer(TeamPlayers[i + 1]);
|
|||
|
else
|
|||
|
Item:SetVisibility(ESlateVisibility.Hidden);
|
|||
|
end
|
|||
|
end
|
|||
|
end
|
|||
|
end
|
|||
|
|
|||
|
--- 更新兵种
|
|||
|
|
|||
|
--- 更新差异
|
|||
|
function WB_SelectSoldier:UpdateSoldierDiff(InType)
|
|||
|
for i = 1, self.VerticalBox_Diff:GetChildrenCount() do
|
|||
|
local Item = self.VerticalBox_Diff:GetChildAt(i - 1);
|
|||
|
Item:SetSoldierType(InType, i);
|
|||
|
end
|
|||
|
end
|
|||
|
|
|||
|
function WB_SelectSoldier:UpdateWaitTime(NewTime)
|
|||
|
-- 显示出来
|
|||
|
UGCLogSystem.Log("[WB_SelectSoldier:UpdateWaitTime] 当前时间:%0.f", NewTime);
|
|||
|
self.HorizontalBox_HadSelected:SetVisibility(ESlateVisibility.SelfHitTestInvisible);
|
|||
|
local Time = math.floor(math.clamp(NewTime - 1, 0, NewTime));
|
|||
|
self.TextBlock_WaitTime:SetText(Time);
|
|||
|
UGCLogSystem.Log("[WB_SelectSoldier:UpdateWaitTime] 当前时间1111:%0.f", Time);
|
|||
|
self.TextBlock_CountDown:SetText(Time);
|
|||
|
if Time <= 0 then
|
|||
|
-- 启动
|
|||
|
self.bShowLoading = true;
|
|||
|
self.TextBlock_Load:SetVisibility(ESlateVisibility.SelfHitTestInvisible);
|
|||
|
self.Button_Select:SetIsEnabled(false);
|
|||
|
-- 所有子项全部设置为不可点击
|
|||
|
for i = 1, self.ScrollBox_Type:GetChildrenCount() do
|
|||
|
local Item = self.ScrollBox_Type:GetChildAt(i - 1);
|
|||
|
Item:SetButtonEnable(false);
|
|||
|
end
|
|||
|
end
|
|||
|
end
|
|||
|
|
|||
|
WB_SelectSoldier.bIsOnce = false;
|
|||
|
WB_SelectSoldier.bShowLoading = false;
|
|||
|
WB_SelectSoldier.AddPoint = 0.85;
|
|||
|
WB_SelectSoldier.PointCount = 0.;
|
|||
|
WB_SelectSoldier.TotalPointCount = 3;
|
|||
|
WB_SelectSoldier.CurrCount = 0;
|
|||
|
|
|||
|
function WB_SelectSoldier:Loading(InDeltaTime)
|
|||
|
if self.bIsOnce then
|
|||
|
return ;
|
|||
|
end
|
|||
|
if not self.bShowLoading then
|
|||
|
return
|
|||
|
end
|
|||
|
|
|||
|
self.PointCount = self.PointCount + InDeltaTime;
|
|||
|
if self.PointCount > self.AddPoint then
|
|||
|
self.PointCount = self.PointCount - self.AddPoint;
|
|||
|
local s = '加载中'
|
|||
|
|
|||
|
for i = 1, self.CurrCount + 1 do
|
|||
|
s = s .. '. '
|
|||
|
end
|
|||
|
|
|||
|
self.CurrCount = (self.CurrCount + 1) % self.TotalPointCount;
|
|||
|
self.TextBlock_Load:SetText(s);
|
|||
|
end
|
|||
|
end
|
|||
|
|
|||
|
return WB_SelectSoldier;
|