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