* attempt at moving MainViewport to UIWidget * oldchat (prototype) * separate oldchat and default ss14 HUD into their own files * restores original default game screen logic and adds that logic into separated chat game screen * hand reloading, several tweaks to port oldchat to main ss14 branch oldchat is currently not selectable * screen type cvar, gameplay state screen reloading/loading * reload screen on ui layout cvar change * fixes up basic reloading (HUD switching is still very bad) * some UI widget reloading for main UI screen switching * alert sync on screen change * inventory reload * hotbar margin fix * chat bubbles above viewport * whoops * fixes ordering of speech bubble root * should fix the chat focus issue (at least in-game, not lobby yet) * should fix up the lobby/game chat focus * fixes chat for lobby, turns lobby into a UI state * viewport UI controller * viewport ratio selection * whoops * adds the /tg/ widescreen ratio * removes warning from inventory UI controller, adds background to separated chat game screen's chat portion * menu button reload * unload menu buttons only from gameplay state shutdown * bugfix * character button fix * adds config options for viewport width/UI layout * variable naming changes, get or null instead of get to avoid exceptions * moves entity system get into controller
155 lines
4.0 KiB
C#
155 lines
4.0 KiB
C#
using Content.Client.Gameplay;
|
|
using Content.Client.Info;
|
|
using Content.Client.Links;
|
|
using Content.Client.UserInterface.Controls;
|
|
using Content.Client.UserInterface.Systems.Info;
|
|
using JetBrains.Annotations;
|
|
using Robust.Client.Console;
|
|
using Robust.Client.Input;
|
|
using Robust.Client.UserInterface;
|
|
using Robust.Client.UserInterface.Controllers;
|
|
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 ChangelogUIController _changelog = default!;
|
|
[Dependency] private readonly InfoUIController _info = default!;
|
|
[Dependency] private readonly OptionsUIController _options = 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;
|
|
|
|
if (_escapeWindow == null)
|
|
{
|
|
return;
|
|
}
|
|
|
|
_escapeWindow.OnClose -= DeactivateButton;
|
|
_escapeWindow.OnOpen -= ActivateButton;
|
|
}
|
|
|
|
public void LoadButton()
|
|
{
|
|
if (EscapeButton == null)
|
|
{
|
|
return;
|
|
}
|
|
|
|
EscapeButton.OnPressed += EscapeButtonOnOnPressed;
|
|
|
|
if (_escapeWindow == null)
|
|
{
|
|
return;
|
|
}
|
|
|
|
_escapeWindow.OnClose += DeactivateButton;
|
|
_escapeWindow.OnOpen += ActivateButton;
|
|
}
|
|
|
|
private void ActivateButton() => EscapeButton!.Pressed = true;
|
|
private void DeactivateButton() => EscapeButton!.Pressed = false;
|
|
|
|
public void OnStateEntered(GameplayState state)
|
|
{
|
|
DebugTools.Assert(_escapeWindow == null);
|
|
|
|
_escapeWindow = UIManager.CreateWindow<Options.UI.EscapeMenu>();
|
|
|
|
_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(UILinks.Wiki);
|
|
};
|
|
|
|
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();
|
|
}
|
|
|
|
private void ToggleWindow()
|
|
{
|
|
if (_escapeWindow == null)
|
|
return;
|
|
|
|
if (_escapeWindow.IsOpen)
|
|
{
|
|
CloseEscapeWindow();
|
|
}
|
|
else
|
|
{
|
|
_escapeWindow.OpenCentered();
|
|
EscapeButton!.Pressed = true;
|
|
}
|
|
}
|
|
}
|