From 3f0773e1f4b4df368911b524e27b960a05ec90f6 Mon Sep 17 00:00:00 2001 From: Flipp Syder <76629141+vulppine@users.noreply.github.com> Date: Mon, 17 Oct 2022 23:45:32 -0700 Subject: [PATCH] Character setup in Lobby UI (#12007) --- Content.Client/Gameplay/GameplayState.cs | 10 +- Content.Client/Lobby/LobbyState.cs | 112 ++++++++++-------- Content.Client/Lobby/UI/LobbyGui.xaml | 63 +++++----- Content.Client/Lobby/UI/LobbyGui.xaml.cs | 49 ++++++++ .../Preferences/UI/CharacterSetupGui.xaml | 6 +- .../Preferences/UI/CharacterSetupGui.xaml.cs | 1 + 6 files changed, 157 insertions(+), 84 deletions(-) diff --git a/Content.Client/Gameplay/GameplayState.cs b/Content.Client/Gameplay/GameplayState.cs index 47cbc22e3e..67d8b29548 100644 --- a/Content.Client/Gameplay/GameplayState.cs +++ b/Content.Client/Gameplay/GameplayState.cs @@ -76,7 +76,7 @@ namespace Content.Client.Gameplay UserInterfaceManager.PopupRoot.AddChild(_fpsCounter); _fpsCounter.Visible = _configurationManager.GetCVar(CCVars.HudFpsCounterVisible); _configurationManager.OnValueChanged(CCVars.HudFpsCounterVisible, (show) => { _fpsCounter.Visible = show; }); - _configurationManager.OnValueChanged(CCVars.UILayout, _ => ReloadMainScreen()); + _configurationManager.OnValueChanged(CCVars.UILayout, ReloadMainScreenValueChange); } protected override void Shutdown() @@ -88,12 +88,18 @@ namespace Content.Client.Gameplay _eyeManager.MainViewport = UserInterfaceManager.MainViewport; _fpsCounter.Dispose(); _uiManager.ClearWindows(); + _configurationManager.UnsubValueChanged(CCVars.UILayout, ReloadMainScreenValueChange); UnloadMainScreen(); } + private void ReloadMainScreenValueChange(string _) + { + ReloadMainScreen(); + } + public void ReloadMainScreen() { - if (_uiManager.ActiveScreen == null) + if (_uiManager.ActiveScreen?.GetWidget() == null) { return; } diff --git a/Content.Client/Lobby/LobbyState.cs b/Content.Client/Lobby/LobbyState.cs index 69ff8600d1..c16d1353ed 100644 --- a/Content.Client/Lobby/LobbyState.cs +++ b/Content.Client/Lobby/LobbyState.cs @@ -39,60 +39,45 @@ namespace Content.Client.Lobby private ClientGameTicker _gameTicker = default!; protected override Type? LinkedScreenType { get; } = typeof(LobbyGui); - private LobbyGui Lobby => (LobbyGui) _userInterfaceManager.ActiveScreen!; + private LobbyGui? _lobby; protected override void Startup() { + if (_userInterfaceManager.ActiveScreen == null) + { + return; + } + + _lobby = (LobbyGui) _userInterfaceManager.ActiveScreen; + var chatController = _userInterfaceManager.GetUIController(); _gameTicker = _entityManager.System(); _characterSetup = new CharacterSetupGui(_entityManager, _resourceCache, _preferencesManager, _prototypeManager, _configurationManager); LayoutContainer.SetAnchorPreset(_characterSetup, LayoutContainer.LayoutPreset.Wide); + _lobby.CharacterSetupState.AddChild(_characterSetup); chatController.SetMainChat(true); _characterSetup.CloseButton.OnPressed += _ => { - _userInterfaceManager.StateRoot.AddChild(Lobby); - _userInterfaceManager.StateRoot.RemoveChild(_characterSetup); + _lobby.SwitchState(LobbyGui.LobbyGuiState.Default); }; _characterSetup.SaveButton.OnPressed += _ => { _characterSetup.Save(); - Lobby?.CharacterPreview.UpdateUI(); + _lobby.CharacterPreview.UpdateUI(); }; - LayoutContainer.SetAnchorPreset(Lobby, LayoutContainer.LayoutPreset.Wide); - _voteManager.SetPopupContainer(Lobby.VoteContainer); - Lobby.ServerName.Text = _baseClient.GameInfo?.ServerName; //The eye of refactor gazes upon you... + LayoutContainer.SetAnchorPreset(_lobby, LayoutContainer.LayoutPreset.Wide); + _voteManager.SetPopupContainer(_lobby.VoteContainer); + _lobby.ServerName.Text = _baseClient.GameInfo?.ServerName; //The eye of refactor gazes upon you... UpdateLobbyUi(); - Lobby.CharacterPreview.CharacterSetupButton.OnPressed += _ => - { - SetReady(false); - _userInterfaceManager.StateRoot.RemoveChild(Lobby); - _userInterfaceManager.StateRoot.AddChild(_characterSetup); - }; - - Lobby.ReadyButton.OnPressed += _ => - { - if (!_gameTicker.IsGameStarted) - { - return; - } - - new LateJoinGui().OpenCentered(); - }; - - Lobby.ReadyButton.OnToggled += args => - { - SetReady(args.Pressed); - }; - - Lobby.LeaveButton.OnPressed += _ => _consoleHost.ExecuteCommand("disconnect"); - Lobby.OptionsButton.OnPressed += _ => _userInterfaceManager.GetUIController().ToggleWindow(); - + _lobby.CharacterPreview.CharacterSetupButton.OnPressed += OnSetupPressed; + _lobby.ReadyButton.OnPressed += OnReadyPressed; + _lobby.ReadyButton.OnToggled += OnReadyToggled; _gameTicker.InfoBlobUpdated += UpdateLobbyUi; _gameTicker.LobbyStatusUpdated += LobbyStatusUpdated; @@ -107,16 +92,43 @@ namespace Content.Client.Lobby _gameTicker.LobbyStatusUpdated -= LobbyStatusUpdated; _gameTicker.LobbyLateJoinStatusUpdated -= LobbyLateJoinStatusUpdated; + _lobby!.CharacterPreview.CharacterSetupButton.OnPressed -= OnSetupPressed; + _lobby!.ReadyButton.OnPressed -= OnReadyPressed; + _lobby!.ReadyButton.OnToggled -= OnReadyToggled; + + _lobby = null; + _characterSetup?.Dispose(); _characterSetup = null; } + private void OnSetupPressed(BaseButton.ButtonEventArgs args) + { + SetReady(false); + _lobby!.SwitchState(LobbyGui.LobbyGuiState.CharacterSetup); + } + + private void OnReadyPressed(BaseButton.ButtonEventArgs args) + { + if (!_gameTicker.IsGameStarted) + { + return; + } + + new LateJoinGui().OpenCentered(); + } + + private void OnReadyToggled(BaseButton.ButtonToggledEventArgs args) + { + SetReady(args.Pressed); + } + public override void FrameUpdate(FrameEventArgs e) { if (_gameTicker.IsGameStarted) { - Lobby.StartTime.Text = string.Empty; - Lobby.StationTime.Text = Loc.GetString("lobby-state-player-status-station-time", ("stationTime", _gameTiming.CurTime.Subtract(_gameTicker.RoundStartTimeSpan).ToString("hh\\:mm"))); + _lobby!.StartTime.Text = string.Empty; + _lobby!.StationTime.Text = Loc.GetString("lobby-state-player-status-station-time", ("stationTime", _gameTiming.CurTime.Subtract(_gameTicker.RoundStartTimeSpan).ToString("hh\\:mm"))); return; } @@ -140,8 +152,8 @@ namespace Content.Client.Lobby } } - Lobby.StationTime.Text = Loc.GetString("lobby-state-player-status-station-time", ("stationTime", TimeSpan.Zero.ToString("hh\\:mm"))); - Lobby.StartTime.Text = Loc.GetString("lobby-state-round-start-countdown-text", ("timeLeft", text)); + _lobby!.StationTime.Text = Loc.GetString("lobby-state-player-status-station-time", ("stationTime", TimeSpan.Zero.ToString("hh\\:mm"))); + _lobby!.StartTime.Text = Loc.GetString("lobby-state-round-start-countdown-text", ("timeLeft", text)); } private void LobbyStatusUpdated() @@ -152,31 +164,31 @@ namespace Content.Client.Lobby private void LobbyLateJoinStatusUpdated() { - Lobby.ReadyButton.Disabled = _gameTicker.DisallowedLateJoin; + _lobby!.ReadyButton.Disabled = _gameTicker.DisallowedLateJoin; } private void UpdateLobbyUi() { if (_gameTicker.IsGameStarted) { - Lobby.ReadyButton.Text = Loc.GetString("lobby-state-ready-button-join-state"); - Lobby.ReadyButton.ToggleMode = false; - Lobby.ReadyButton.Pressed = false; - Lobby.ObserveButton.Disabled = false; + _lobby!.ReadyButton.Text = Loc.GetString("lobby-state-ready-button-join-state"); + _lobby!.ReadyButton.ToggleMode = false; + _lobby!.ReadyButton.Pressed = false; + _lobby!.ObserveButton.Disabled = false; } else { - Lobby.StartTime.Text = string.Empty; - Lobby.ReadyButton.Text = Loc.GetString("lobby-state-ready-button-ready-up-state"); - Lobby.ReadyButton.ToggleMode = true; - Lobby.ReadyButton.Disabled = false; - Lobby.ReadyButton.Pressed = _gameTicker.AreWeReady; - Lobby.ObserveButton.Disabled = true; + _lobby!.StartTime.Text = string.Empty; + _lobby!.ReadyButton.Text = Loc.GetString("lobby-state-ready-button-ready-up-state"); + _lobby!.ReadyButton.ToggleMode = true; + _lobby!.ReadyButton.Disabled = false; + _lobby!.ReadyButton.Pressed = _gameTicker.AreWeReady; + _lobby!.ObserveButton.Disabled = true; } if (_gameTicker.ServerInfoBlob != null) { - Lobby.ServerInfo.SetInfoBlob(_gameTicker.ServerInfoBlob); + _lobby!.ServerInfo.SetInfoBlob(_gameTicker.ServerInfoBlob); } } @@ -184,11 +196,11 @@ namespace Content.Client.Lobby { if (_gameTicker.LobbyBackground != null) { - Lobby.Background.Texture = _resourceCache.GetResource(_gameTicker.LobbyBackground ); + _lobby!.Background.Texture = _resourceCache.GetResource(_gameTicker.LobbyBackground ); } else { - Lobby.Background.Texture = null; + _lobby!.Background.Texture = null; } } diff --git a/Content.Client/Lobby/UI/LobbyGui.xaml b/Content.Client/Lobby/UI/LobbyGui.xaml index 0adf5d486d..a4f540bcb2 100644 --- a/Content.Client/Lobby/UI/LobbyGui.xaml +++ b/Content.Client/Lobby/UI/LobbyGui.xaml @@ -1,4 +1,4 @@ - - - + + - - - - - - - - -