| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155 |
- using Content.Client.Gameplay;
- using Content.Client.UserInterface.Controls;
- using Content.Client.UserInterface.Systems.Guidebook;
- using Content.Client.UserInterface.Systems.Info;
- using Content.Shared.CCVar;
- using JetBrains.Annotations;
- using Robust.Client.Console;
- using Robust.Client.UserInterface;
- using Robust.Client.UserInterface.Controllers;
- using Robust.Shared.Configuration;
- using Robust.Shared.Input;
- using Robust.Shared.Input.Binding;
- using Robust.Shared.Utility;
- using static Robust.Client.UserInterface.Controls.BaseButton;
- namespace Content.Client.UserInterface.Systems.EscapeMenu;
- [UsedImplicitly]
- public sealed class EscapeUIController : UIController, IOnStateEntered<GameplayState>, IOnStateExited<GameplayState>
- {
- [Dependency] private readonly IClientConsoleHost _console = default!;
- [Dependency] private readonly IUriOpener _uri = default!;
- [Dependency] private readonly IConfigurationManager _cfg = default!;
- [Dependency] private readonly ChangelogUIController _changelog = default!;
- [Dependency] private readonly InfoUIController _info = default!;
- [Dependency] private readonly OptionsUIController _options = default!;
- [Dependency] private readonly GuidebookUIController _guidebook = default!;
- private Options.UI.EscapeMenu? _escapeWindow;
- private MenuButton? EscapeButton => UIManager.GetActiveUIWidgetOrNull<MenuBar.Widgets.GameTopMenuBar>()?.EscapeButton;
- public void UnloadButton()
- {
- if (EscapeButton == null)
- {
- return;
- }
- EscapeButton.Pressed = false;
- EscapeButton.OnPressed -= EscapeButtonOnOnPressed;
- }
- public void LoadButton()
- {
- if (EscapeButton == null)
- {
- return;
- }
- EscapeButton.OnPressed += EscapeButtonOnOnPressed;
- }
- private void ActivateButton() => EscapeButton!.SetClickPressed(true);
- private void DeactivateButton() => EscapeButton!.SetClickPressed(false);
- public void OnStateEntered(GameplayState state)
- {
- DebugTools.Assert(_escapeWindow == null);
- _escapeWindow = UIManager.CreateWindow<Options.UI.EscapeMenu>();
- _escapeWindow.OnClose += DeactivateButton;
- _escapeWindow.OnOpen += ActivateButton;
- _escapeWindow.ChangelogButton.OnPressed += _ =>
- {
- CloseEscapeWindow();
- _changelog.ToggleWindow();
- };
- _escapeWindow.RulesButton.OnPressed += _ =>
- {
- CloseEscapeWindow();
- _info.OpenWindow();
- };
- _escapeWindow.DisconnectButton.OnPressed += _ =>
- {
- CloseEscapeWindow();
- _console.ExecuteCommand("disconnect");
- };
- _escapeWindow.OptionsButton.OnPressed += _ =>
- {
- CloseEscapeWindow();
- _options.OpenWindow();
- };
- _escapeWindow.QuitButton.OnPressed += _ =>
- {
- CloseEscapeWindow();
- _console.ExecuteCommand("quit");
- };
- _escapeWindow.WikiButton.OnPressed += _ =>
- {
- _uri.OpenUri(_cfg.GetCVar(CCVars.InfoLinksWiki));
- };
- _escapeWindow.GuidebookButton.OnPressed += _ =>
- {
- _guidebook.ToggleGuidebook();
- };
- // Hide wiki button if we don't have a link for it.
- _escapeWindow.WikiButton.Visible = _cfg.GetCVar(CCVars.InfoLinksWiki) != "";
- CommandBinds.Builder
- .Bind(EngineKeyFunctions.EscapeMenu,
- InputCmdHandler.FromDelegate(_ => ToggleWindow()))
- .Register<EscapeUIController>();
- }
- public void OnStateExited(GameplayState state)
- {
- if (_escapeWindow != null)
- {
- _escapeWindow.Dispose();
- _escapeWindow = null;
- }
- CommandBinds.Unregister<EscapeUIController>();
- }
- private void EscapeButtonOnOnPressed(ButtonEventArgs obj)
- {
- ToggleWindow();
- }
- private void CloseEscapeWindow()
- {
- _escapeWindow?.Close();
- }
- /// <summary>
- /// Toggles the game menu.
- /// </summary>
- public void ToggleWindow()
- {
- if (_escapeWindow == null)
- return;
- if (_escapeWindow.IsOpen)
- {
- CloseEscapeWindow();
- EscapeButton!.Pressed = false;
- }
- else
- {
- _escapeWindow.OpenCentered();
- EscapeButton!.Pressed = true;
- }
- }
- }
|