204 lines
7.0 KiB
Lua
Raw Normal View History

2025-01-04 23:00:19 +08:00
---@class WB_Main_C:UAEUserWidget
---@field ShowScore UWidgetAnimation
---@field Button_FaceNotice UButton
---@field Button_Test UButton
---@field Button_Test_Custom UButton
---@field Button_TestSide UButton
---@field CanvasPanel_Test UCanvasPanel
---@field Overlay_EnemyHP UOverlay
---@field TextBlock_1 UTextBlock
---@field TextBlock_EnemyHP UTextBlock
---@field TextBlock_State UTextBlock
---@field TextBlock_WinnerPlayerName UTextBlock
---@field WB_DamageTextButton UWB_DamageTextButton_C
---@field WB_InTest_Side UWB_InTest_Side_C
---@field WB_PID UWB_PID_C
---@field WB_ReselectWeaponBtn UWB_ReselectWeaponBtn_C
---@field WB_RoundEnd UWB_RoundEnd_C
---@field WB_SelectParts UWB_SelectParts_C
---@field WB_SettingButton UWB_SettingButton_C
---@field WB_Title1_2 UWB_Title1_2_C
---@field WB_Title2_2 UWB_Title2_2_C
---@field WidgetSwitcher_Title UWidgetSwitcher
--Edit Below--
---@type WB_Main_C
local WB_Main = { bInitDoOnce = false; };
WB_Main.IsTestShow = true;
function WB_Main:Construct()
self:LuaInit();
UGCLogSystem.Log("[WB_Main:Construct] MainUI = %s", UE.GetName(self));
end
function WB_Main:LuaInit()
if self.bInitDoOnce then return ; end
self.bInitDoOnce = true;
-- 发送 RPC
UGCEventSystem.AddListener(EventTypes.MiniStateChange, self.OnMiniStateChange, self)
UGCEventSystem.AddListener(EventTypes.ChangeSpector, self.OnChangeSpector, self)
UGCEventSystem.AddListener(EventTypes.ShowRoundWin, self.ShowRoundWin, self)
--- 死亡的时候显示 ID Panel
UGCEventSystem.AddListener(EventTypes.PlayerRespawn, function(MainUI, PlayerKey)
if PlayerKey == LocalPlayerKey then
UGCLogSystem.Log("[WB_Main:LuaInit] 隐藏 IDPanel")
self.WB_PID:SetVisibility(ESlateVisibility.Collapsed);
self.WB_SettingButton:SetVisibility(ESlateVisibility.Collapsed);
end
self.Overlay_EnemyHP:SetVisibility(ESlateVisibility.Collapsed);
end, self);
UGCEventSystem.AddListener(EventTypes.PlayerDead, function(MainUI, DeadPlayerKey, KillerPlayerKey)
if DeadPlayerKey == LocalPlayerKey then
UGCLogSystem.Log("[WB_Main:LuaInit] 显示 IDPanel")
self.WB_PID:SetVisibility(ESlateVisibility.HitTestInvisible);
self.WB_SettingButton:SetVisibility(ESlateVisibility.SelfHitTestInvisible);
local Pawns = UGCGameSystem.GetAllPlayerPawn()
for i, v in pairs(Pawns) do
if v and UE.IsValidPawn(v) and v.PlayerKey ~= DeadPlayerKey then
local Health = UGCPawnAttrSystem.GetHealth(v);
if Health then
if Health > 1 then
self.TextBlock_EnemyHP:SetText(string.format('%0.f', Health));
else
self.TextBlock_EnemyHP:SetText('1');
end
self.Overlay_EnemyHP:SetVisibility(ESlateVisibility.HitTestInvisible);
end
break
end
end
end
end, self);
--UITool.ButtonOnClickShowPanel(self.Button_FaceNotice, WidgetConfig.EUIType.FaceNotice, true)
self.WB_SettingButton:LuaInit();
self.WB_PID:LuaInit();
self.WB_Title1_2:LuaInit();
self.WB_Title2_2:LuaInit();
self.WB_SelectParts:LuaInit();
self.WB_ReselectWeaponBtn:LuaInit();
self.WB_SelectParts:SetType({ EWeaponPartType.Telescope, EWeaponPartType.Grip, EWeaponPartType.Muzzle, });
self:ShowCustomSelectWeaponBtn(false);
--- 获取
self.TextBlock_WinnerPlayerName:SetVisibility(ESlateVisibility.Collapsed);
self.WB_PID:SetVisibility(ESlateVisibility.Collapsed);
if self.WB_ShovelButton then self.WB_ShovelButton:LuaInit(); end
if self.WB_DamageTextButton then self.WB_DamageTextButton:LuaInit(); end
-- 观战玩家
if LocalIsGlobalSpectator then
self.WB_DamageTextButton:SetVisibility(ESlateVisibility.Collapsed);
self.WB_SelectParts:SetVisibility(ESlateVisibility.Collapsed);
self.WidgetSwitcher_Title:SetActiveWidgetIndex(1);
else
self.WidgetSwitcher_Title:SetActiveWidgetIndex(0);
end
if DefaultSettings.EnableTest then
if not LocalIsGlobalSpectator then
self.CanvasPanel_Test:SetVisibility(ESlateVisibility.SelfHitTestInvisible)
self.WB_InTest_Side:LuaInit();
--UITool.ButtonOnClickShowPanel(self.Button_Test, WidgetConfig.EUIType.Test, true);
UITool.BindButtonClicked(self.Button_Test_Custom, self.OnClickCustomTest, self);
end
else
self.CanvasPanel_Test:SetVisibility(ESlateVisibility.Collapsed);
end
GameState:UIAlready();
end
function WB_Main:OnShowPanel(...)
self.WB_PID:SetIDs()
end
function WB_Main:Tick(MyGeometry, InDeltaTime)
if self.WB_ReselectWeaponBtn then
self.WB_ReselectWeaponBtn:OnTick();
end
end
function WB_Main:Destruct()
end
function WB_Main:OnClickCustomTest()
if self.IsTestShow then
self.WB_InTest_Side:SetVisibility(ESlateVisibility.Collapsed)
self.Button_FaceNotice:SetVisibility(ESlateVisibility.Collapsed)
self.Button_Test:SetVisibility(ESlateVisibility.Collapsed)
self.Button_TestSide:SetVisibility(ESlateVisibility.Collapsed)
else
self.WB_InTest_Side:SetVisibility(ESlateVisibility.SelfHitTestInvisible)
self.Button_FaceNotice:SetVisibility(ESlateVisibility.SelfHitTestInvisible)
self.Button_Test:SetVisibility(ESlateVisibility.SelfHitTestInvisible)
self.Button_TestSide:SetVisibility(ESlateVisibility.SelfHitTestInvisible)
end
self.IsTestShow = not self.IsTestShow;
end
function WB_Main:OnGameStart()
UGCLogSystem.Log("[WB_Main:OnGameStart] 执行")
end
WB_Main.ShowRoundWinTimer = nil;
function WB_Main:ShowRoundWin(IsShow, Winner)
UGCLogSystem.Log("[WB_Main:ShowRoundWin] IsShow = %s, Winner = %s", tostring(IsShow), tostring(Winner));
if IsShow then
self.WB_RoundEnd:SetVisibility(ESlateVisibility.HitTestInvisible);
if LocalIsGlobalSpectator then
self.TextBlock_WinnerPlayerName:SetText(UE.GetPlayerName(Winner));
self.TextBlock_WinnerPlayerName:SetVisibility(ESlateVisibility.SelfHitTestInvisible);
self.WB_RoundEnd:SetWin(true);
else
self.WB_RoundEnd:SetWin(Winner == LocalPlayerKey);
end
-- 定时关闭
UGCEventSystem.SetTimer(self, function()
self.WB_RoundEnd:SetVisibility(ESlateVisibility.Collapsed);
self.TextBlock_WinnerPlayerName:SetVisibility(ESlateVisibility.Collapsed);
end, 10);
else
self.WB_RoundEnd:SetVisibility(ESlateVisibility.Collapsed);
self.TextBlock_WinnerPlayerName:SetVisibility(ESlateVisibility.Collapsed);
if self.ShowRoundWinTimer ~= nil then
UGCEventSystem.StopTimer(self.ShowRoundWinTimer);
self.ShowRoundWinTimer = nil;
end
end
end
function WB_Main:OnMiniStateChange(InState)
self.TextBlock_State:SetText(TableHelper.printEnum(MiniGameState, InState));
end
function WB_Main:SetRoundKill(InList)
self.WB_Title1_2:SetRoundKill(InList)
self.WB_Title2_2:SetRoundKill(InList)
end
function WB_Main:OnChangeSpector(IsGlobal)
UGCLogSystem.Log("[WB_Main:OnChangeSpector] IsGlobal = %s", tostring(IsGlobal));
--if IsGlobal then
-- -- 切换到全局
-- self.WidgetSwitcher_Title:SetActiveWidgetIndex(1);
--else
-- self.WidgetSwitcher_Title:SetActiveWidgetIndex(0);
--end
end
function WB_Main:ShowCustomSelectWeaponBtn(IsShow)
if IsShow then
self.WB_ReselectWeaponBtn:OnShowPanel()
self.WB_ReselectWeaponBtn:SetVisibility(ESlateVisibility.SelfHitTestInvisible);
else
self.WB_ReselectWeaponBtn:SetVisibility(ESlateVisibility.Collapsed);
end
end
return WB_Main;