From 3eb8f70985c8368f99191d3a3e6b82ddfdd4fbb0 Mon Sep 17 00:00:00 2001 From: Flipp Syder <76629141+vulppine@users.noreply.github.com> Date: Fri, 10 Mar 2023 19:25:56 -0800 Subject: [PATCH] Screen load event for GameplayState (#14316) Co-authored-by: metalgearsloth --- Content.Client/Gameplay/GameplayState.cs | 53 ++----------------- .../Systems/Actions/ActionUIController.cs | 20 +++++++ .../Systems/Alerts/AlertsUIController.cs | 14 +++++ .../Systems/Chat/ChatUIController.cs | 18 +++++++ .../Gameplay/GameplayStateLoadController.cs | 30 +++++++++++ .../Systems/Ghost/GhostUIController.cs | 20 +++++++ .../Systems/Hotbar/HotbarUIController.cs | 16 +++++- .../MenuBar/GameTopMenuBarUIController.cs | 10 ++++ .../Systems/Viewport/ViewportUIController.cs | 9 ++++ 9 files changed, 141 insertions(+), 49 deletions(-) create mode 100644 Content.Client/UserInterface/Systems/Gameplay/GameplayStateLoadController.cs diff --git a/Content.Client/Gameplay/GameplayState.cs b/Content.Client/Gameplay/GameplayState.cs index f50c493408..3765753c69 100644 --- a/Content.Client/Gameplay/GameplayState.cs +++ b/Content.Client/Gameplay/GameplayState.cs @@ -1,29 +1,15 @@ -using Content.Client.Construction.UI; using Content.Client.Hands; using Content.Client.UserInterface.Controls; using Content.Client.UserInterface.Screens; -using Content.Client.UserInterface.Systems.Actions; -using Content.Client.UserInterface.Systems.Alerts; -using Content.Client.UserInterface.Systems.Chat; -using Content.Client.UserInterface.Systems.Chat.Widgets; -using Content.Client.UserInterface.Systems.Ghost; -using Content.Client.UserInterface.Systems.Hands; -using Content.Client.UserInterface.Systems.Hotbar; -using Content.Client.UserInterface.Systems.Hotbar.Widgets; -using Content.Client.UserInterface.Systems.Inventory; -using Content.Client.UserInterface.Systems.MenuBar; -using Content.Client.UserInterface.Systems.Viewport; +using Content.Client.UserInterface.Systems.Gameplay; using Content.Client.Viewport; using Content.Shared.CCVar; using Robust.Client.Graphics; using Robust.Client.Input; using Robust.Client.UserInterface; -using Robust.Client.UserInterface.Controls; using Robust.Client.UserInterface.CustomControls; using Robust.Shared.Configuration; using Robust.Shared.Timing; -using Robust.Client.Player; -using Robust.Client.GameObjects; namespace Content.Client.Gameplay { @@ -39,25 +25,13 @@ namespace Content.Client.Gameplay public MainViewport Viewport => _uiManager.ActiveScreen!.GetWidget()!; - private readonly GhostUIController _ghostController; - private readonly ActionUIController _actionController; - private readonly AlertsUIController _alertsController; - private readonly HotbarUIController _hotbarController; - private readonly ChatUIController _chatController; - private readonly ViewportUIController _viewportController; - private readonly GameTopMenuBarUIController _menuController; + private readonly GameplayStateLoadController _loadController; public GameplayState() { IoCManager.InjectDependencies(this); - _ghostController = _uiManager.GetUIController(); - _actionController = _uiManager.GetUIController(); - _alertsController = _uiManager.GetUIController(); - _hotbarController = _uiManager.GetUIController(); - _chatController = _uiManager.GetUIController(); - _viewportController = _uiManager.GetUIController(); - _menuController = _uiManager.GetUIController(); + _loadController = _uiManager.GetUIController(); } protected override void Startup() @@ -109,10 +83,7 @@ namespace Content.Client.Gameplay private void UnloadMainScreen() { - _chatController.SetMainChat(false); - _menuController.UnloadButtons(); - _ghostController.UnloadGui(); - _actionController.UnloadGui(); + _loadController.UnloadScreen(); _uiManager.UnloadScreen(); } @@ -128,29 +99,15 @@ namespace Content.Client.Gameplay { case ScreenType.Default: _uiManager.LoadScreen(); - break; case ScreenType.Separated: _uiManager.LoadScreen(); break; } - _chatController.SetMainChat(true); - _viewportController.ReloadViewport(); - _menuController.LoadButtons(); - - // TODO: This could just be like, the equivalent of an event or something - _ghostController.LoadGui(); - _actionController.LoadGui(); - _alertsController.SyncAlerts(); - _hotbarController.ReloadHotbar(); - - var viewportContainer = _uiManager.ActiveScreen!.FindControl("ViewportContainer"); - _chatController.SetSpeechBubbleRoot(viewportContainer); + _loadController.LoadScreen(); } - - protected override void OnKeyBindStateChanged(ViewportBoundKeyEventArgs args) { if (args.Viewport == null) diff --git a/Content.Client/UserInterface/Systems/Actions/ActionUIController.cs b/Content.Client/UserInterface/Systems/Actions/ActionUIController.cs index c47fba16a2..06a7792f38 100644 --- a/Content.Client/UserInterface/Systems/Actions/ActionUIController.cs +++ b/Content.Client/UserInterface/Systems/Actions/ActionUIController.cs @@ -10,6 +10,7 @@ using Content.Client.UserInterface.Controls; using Content.Client.UserInterface.Systems.Actions.Controls; using Content.Client.UserInterface.Systems.Actions.Widgets; using Content.Client.UserInterface.Systems.Actions.Windows; +using Content.Client.UserInterface.Systems.Gameplay; using Content.Shared.Actions; using Content.Shared.Actions.ActionTypes; using Content.Shared.Input; @@ -87,6 +88,25 @@ public sealed class ActionUIController : UIController, IOnStateChanged(); + gameplayStateLoad.OnScreenLoad += OnScreenLoad; + gameplayStateLoad.OnScreenUnload += OnScreenUnload; + } + + private void OnScreenLoad() + { + LoadGui(); + } + + private void OnScreenUnload() + { + UnloadGui(); + } + public void OnStateEntered(GameplayState state) { DebugTools.Assert(_window == null); diff --git a/Content.Client/UserInterface/Systems/Alerts/AlertsUIController.cs b/Content.Client/UserInterface/Systems/Alerts/AlertsUIController.cs index 53963195a1..5fe84b506c 100644 --- a/Content.Client/UserInterface/Systems/Alerts/AlertsUIController.cs +++ b/Content.Client/UserInterface/Systems/Alerts/AlertsUIController.cs @@ -1,6 +1,7 @@ using Content.Client.Alerts; using Content.Client.Gameplay; using Content.Client.UserInterface.Systems.Alerts.Widgets; +using Content.Client.UserInterface.Systems.Gameplay; using Content.Shared.Alert; using Robust.Client.UserInterface; using Robust.Client.UserInterface.Controllers; @@ -13,6 +14,19 @@ public sealed class AlertsUIController : UIController, IOnStateEntered UIManager.GetActiveUIWidgetOrNull(); + public override void Initialize() + { + base.Initialize(); + + var gameplayStateLoad = UIManager.GetUIController(); + gameplayStateLoad.OnScreenLoad += OnScreenLoad; + } + + private void OnScreenLoad() + { + SyncAlerts(); + } + private void OnAlertPressed(object? sender, AlertType e) { _alertsSystem?.AlertClicked(e); diff --git a/Content.Client/UserInterface/Systems/Chat/ChatUIController.cs b/Content.Client/UserInterface/Systems/Chat/ChatUIController.cs index 1097e7e851..efc9929cc0 100644 --- a/Content.Client/UserInterface/Systems/Chat/ChatUIController.cs +++ b/Content.Client/UserInterface/Systems/Chat/ChatUIController.cs @@ -11,6 +11,7 @@ using Content.Client.Ghost; using Content.Client.Lobby.UI; using Content.Client.UserInterface.Screens; using Content.Client.UserInterface.Systems.Chat.Widgets; +using Content.Client.UserInterface.Systems.Gameplay; using Content.Shared.Administration; using Content.Shared.CCVar; using Content.Shared.Chat; @@ -183,6 +184,23 @@ public sealed class ChatUIController : UIController _input.SetInputCommand(ContentKeyFunctions.CycleChatChannelBackward, InputCmdHandler.FromDelegate(_ => CycleChatChannel(false))); + + var gameplayStateLoad = UIManager.GetUIController(); + gameplayStateLoad.OnScreenLoad += OnScreenLoad; + gameplayStateLoad.OnScreenUnload += OnScreenUnload; + } + + public void OnScreenLoad() + { + SetMainChat(true); + + var viewportContainer = UIManager.ActiveScreen!.FindControl("ViewportContainer"); + SetSpeechBubbleRoot(viewportContainer); + } + + public void OnScreenUnload() + { + SetMainChat(false); } public void SetMainChat(bool setting) diff --git a/Content.Client/UserInterface/Systems/Gameplay/GameplayStateLoadController.cs b/Content.Client/UserInterface/Systems/Gameplay/GameplayStateLoadController.cs new file mode 100644 index 0000000000..32906238b1 --- /dev/null +++ b/Content.Client/UserInterface/Systems/Gameplay/GameplayStateLoadController.cs @@ -0,0 +1,30 @@ +using Content.Client.Gameplay; +using Robust.Client.UserInterface.Controllers; + +namespace Content.Client.UserInterface.Systems.Gameplay; + +public sealed class GameplayStateLoadController : UIController, IOnStateChanged +{ + public Action? OnScreenLoad; + public Action? OnScreenUnload; + + public void OnStateEntered(GameplayState state) + { + LoadScreen(); + } + + public void OnStateExited(GameplayState state) + { + UnloadScreen(); + } + + public void UnloadScreen() + { + OnScreenUnload?.Invoke(); + } + + public void LoadScreen() + { + OnScreenLoad?.Invoke(); + } +} diff --git a/Content.Client/UserInterface/Systems/Ghost/GhostUIController.cs b/Content.Client/UserInterface/Systems/Ghost/GhostUIController.cs index c379cbf643..d45ff4ee9e 100644 --- a/Content.Client/UserInterface/Systems/Ghost/GhostUIController.cs +++ b/Content.Client/UserInterface/Systems/Ghost/GhostUIController.cs @@ -1,5 +1,6 @@ using Content.Client.Gameplay; using Content.Client.Ghost; +using Content.Client.UserInterface.Systems.Gameplay; using Content.Client.UserInterface.Systems.Ghost.Widgets; using Content.Shared.Ghost; using Robust.Client.UserInterface; @@ -16,6 +17,25 @@ public sealed class GhostUIController : UIController, IOnSystemChanged UIManager.GetActiveUIWidgetOrNull(); + public override void Initialize() + { + base.Initialize(); + + var gameplayStateLoad = UIManager.GetUIController(); + gameplayStateLoad.OnScreenLoad += OnScreenLoad; + gameplayStateLoad.OnScreenUnload += OnScreenUnload; + } + + private void OnScreenLoad() + { + LoadGui(); + } + + private void OnScreenUnload() + { + UnloadGui(); + } + public void OnSystemLoaded(GhostSystem system) { system.PlayerRemoved += OnPlayerRemoved; diff --git a/Content.Client/UserInterface/Systems/Hotbar/HotbarUIController.cs b/Content.Client/UserInterface/Systems/Hotbar/HotbarUIController.cs index 4059803b7a..17cc03c113 100644 --- a/Content.Client/UserInterface/Systems/Hotbar/HotbarUIController.cs +++ b/Content.Client/UserInterface/Systems/Hotbar/HotbarUIController.cs @@ -1,4 +1,5 @@ -using Content.Client.UserInterface.Systems.Hands; +using Content.Client.UserInterface.Systems.Gameplay; +using Content.Client.UserInterface.Systems.Hands; using Content.Client.UserInterface.Systems.Hands.Controls; using Content.Client.UserInterface.Systems.Hotbar.Widgets; using Content.Client.UserInterface.Systems.Inventory; @@ -13,6 +14,19 @@ public sealed class HotbarUIController : UIController private InventoryUIController? _inventory; private HandsUIController? _hands; + public override void Initialize() + { + base.Initialize(); + + var gameplayStateLoad = UIManager.GetUIController(); + gameplayStateLoad.OnScreenLoad += OnScreenLoad; + } + + private void OnScreenLoad() + { + ReloadHotbar(); + } + public void Setup(HandsContainer handsContainer, ItemSlotButtonContainer inventoryBar, ItemStatusPanel handStatus) { _inventory = UIManager.GetUIController(); diff --git a/Content.Client/UserInterface/Systems/MenuBar/GameTopMenuBarUIController.cs b/Content.Client/UserInterface/Systems/MenuBar/GameTopMenuBarUIController.cs index 6f3c7344a4..9779dbc582 100644 --- a/Content.Client/UserInterface/Systems/MenuBar/GameTopMenuBarUIController.cs +++ b/Content.Client/UserInterface/Systems/MenuBar/GameTopMenuBarUIController.cs @@ -5,6 +5,7 @@ using Content.Client.UserInterface.Systems.Bwoink; using Content.Client.UserInterface.Systems.Character; using Content.Client.UserInterface.Systems.Crafting; using Content.Client.UserInterface.Systems.EscapeMenu; +using Content.Client.UserInterface.Systems.Gameplay; using Content.Client.UserInterface.Systems.Inventory; using Content.Client.UserInterface.Systems.MenuBar.Widgets; using Content.Client.UserInterface.Systems.Sandbox; @@ -25,6 +26,15 @@ public sealed class GameTopMenuBarUIController : UIController private GameTopMenuBar? GameTopMenuBar => UIManager.GetActiveUIWidgetOrNull(); + public override void Initialize() + { + base.Initialize(); + + var gameplayStateLoad = UIManager.GetUIController(); + gameplayStateLoad.OnScreenLoad += LoadButtons; + gameplayStateLoad.OnScreenUnload += UnloadButtons; + } + public void UnloadButtons() { _escape.UnloadButton(); diff --git a/Content.Client/UserInterface/Systems/Viewport/ViewportUIController.cs b/Content.Client/UserInterface/Systems/Viewport/ViewportUIController.cs index f0773b9a0d..d16b61317d 100644 --- a/Content.Client/UserInterface/Systems/Viewport/ViewportUIController.cs +++ b/Content.Client/UserInterface/Systems/Viewport/ViewportUIController.cs @@ -1,4 +1,5 @@ using Content.Client.UserInterface.Controls; +using Content.Client.UserInterface.Systems.Gameplay; using Content.Shared.CCVar; using Robust.Client.GameObjects; using Robust.Client.Graphics; @@ -25,6 +26,14 @@ public sealed class ViewportUIController : UIController _configurationManager.OnValueChanged(CCVars.ViewportMinimumWidth, _ => UpdateViewportRatio()); _configurationManager.OnValueChanged(CCVars.ViewportMaximumWidth, _ => UpdateViewportRatio()); _configurationManager.OnValueChanged(CCVars.ViewportWidth, _ => UpdateViewportRatio()); + + var gameplayStateLoad = UIManager.GetUIController(); + gameplayStateLoad.OnScreenLoad += OnScreenLoad; + } + + private void OnScreenLoad() + { + ReloadViewport(); } private void UpdateViewportRatio()