Files
tbd-station-14/Content.Client/UserInterface/Systems/EscapeMenu/EscapeContextUIController.cs
ShadowCommander 3b21421ef1 Add EscapeContext keybind (#15301)
* Add EscapeContext

Escape context input closes windows if there are any open. If there are not any windows it opens the game menu.

* Add fluent for Escape Context

* Move EngineContext keybind to content

* Readd WindowCloseAll

* Fix EscapeContext not opening the game menu after using WindowCloseAll

WindowCloseAll does not clear the CloseRecentWindowUIController.recentlyInteractedWindows, which caused HasClosableWindow to return true because the list still had items.

Changed HasClosableWindow to check if windows in the list are still open and clear them if they aren't.

* Clean up EscapeContextUIController
2023-04-13 18:10:44 -07:00

38 lines
1.2 KiB
C#

using Content.Client.UserInterface.Systems.Info;
using Content.Shared.Input;
using JetBrains.Annotations;
using Robust.Client.Input;
using Robust.Client.UserInterface;
using Robust.Client.UserInterface.Controllers;
using Robust.Shared.Input;
using Robust.Shared.Input.Binding;
namespace Content.Client.UserInterface.Systems.EscapeMenu;
[UsedImplicitly]
public sealed class EscapeContextUIController : UIController
{
[Dependency] private readonly IInputManager _inputManager = default!;
[Dependency] private readonly CloseRecentWindowUIController _closeRecentWindowUIController = default!;
[Dependency] private readonly EscapeUIController _escapeUIController = default!;
public override void Initialize()
{
_inputManager.SetInputCommand(ContentKeyFunctions.EscapeContext,
InputCmdHandler.FromDelegate(_ => CloseWindowOrOpenGameMenu()));
}
private void CloseWindowOrOpenGameMenu()
{
if (_closeRecentWindowUIController.HasClosableWindow())
{
_closeRecentWindowUIController.CloseMostRecentWindow();
}
else
{
_escapeUIController.ToggleWindow();
}
}
}