---@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 CustomizeCanvasPanel_BP_C_4 UCustomizeCanvasPanel_BP_C ---@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) UGCEventSystem.AddListener(EventTypes.OpenOldWeaponParts, self.OpenOldWeaponParts, self) UGCEventSystem.AddListener(EventTypes.UpdateArchiveData, self.UpdateArchiveData, 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_ReselectWeaponBtn:LuaInit(); --- 有显示的操作 self.WB_SelectParts: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.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 self:UpdateArchiveData(); GameState:UIAlready(); end function WB_Main:OpenOldWeaponParts(IsShow) UGCLogSystem.Log("[WB_Main:OpenOldWeaponParts] 执行") if IsShow then self.CustomizeCanvasPanel_BP_C_4:SetVisibility(ESlateVisibility.SelfHitTestInvisible); else self.CustomizeCanvasPanel_BP_C_4:SetVisibility(ESlateVisibility.Collapsed); end end function WB_Main:UpdateArchiveData() if ArchiveTable[LocalPlayerKey] == nil then return; end --- 默认选项 self:OpenOldWeaponParts(ArchiveTable[LocalPlayerKey].bOldParts); 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;