diff --git a/Content.Client/Content.Client.csproj b/Content.Client/Content.Client.csproj index 0eaf694e59..71024b6d7d 100644 --- a/Content.Client/Content.Client.csproj +++ b/Content.Client/Content.Client.csproj @@ -75,6 +75,7 @@ + @@ -120,6 +121,7 @@ + diff --git a/Content.Client/EntryPoint.cs b/Content.Client/EntryPoint.cs index 2ac904e533..aeae753655 100644 --- a/Content.Client/EntryPoint.cs +++ b/Content.Client/EntryPoint.cs @@ -12,14 +12,12 @@ using Content.Client.Interfaces; using Content.Client.Interfaces.GameObjects; using Content.Client.Interfaces.Parallax; using Content.Client.Parallax; -using Content.Shared.GameObjects.Components.Weapons.Ranged; using Content.Shared.Interfaces; using Robust.Client; using Robust.Client.Interfaces; using Robust.Client.Interfaces.Graphics.Overlays; using Robust.Client.Interfaces.Input; using Robust.Client.Player; -using Robust.Client.Utility; using Robust.Shared.ContentPack; using Robust.Shared.Interfaces.GameObjects; using Robust.Shared.IoC; @@ -31,14 +29,14 @@ using Content.Client.GameObjects.Components.Mobs; using Content.Client.GameObjects.Components.Research; using Content.Client.GameObjects.Components.Sound; using Content.Client.Interfaces.Chat; -using Content.Client.Research; using Content.Client.UserInterface; using Content.Shared.GameObjects.Components.Markers; using Content.Shared.GameObjects.Components.Materials; using Content.Shared.GameObjects.Components.Mobs; using Content.Shared.GameObjects.Components.Research; +using Robust.Client.Interfaces.State; using Robust.Client.Interfaces.UserInterface; -using Robust.Shared.Log; +using Robust.Client.State.States; namespace Content.Client { @@ -46,6 +44,7 @@ namespace Content.Client { #pragma warning disable 649 [Dependency] private readonly IPlayerManager _playerManager; + [Dependency] private readonly IEscapeMenuOwner _escapeMenuOwner; #pragma warning restore 649 public override void Init() @@ -139,6 +138,7 @@ namespace Content.Client IoCManager.Register(); IoCManager.Register(); IoCManager.Register(); + IoCManager.Register(); IoCManager.BuildGraph(); IoCManager.Resolve().LoadParallax(); @@ -146,11 +146,13 @@ namespace Content.Client var stylesheet = new NanoStyle(); + IoCManager.Resolve().Stylesheet = stylesheet.Stylesheet; IoCManager.Resolve().Stylesheet = stylesheet.Stylesheet; IoCManager.InjectDependencies(this); - } + _escapeMenuOwner.Initialize(); + } /// /// Subscribe events to the player manager after the player manager is set up /// diff --git a/Content.Client/EscapeMenuOwner.cs b/Content.Client/EscapeMenuOwner.cs new file mode 100644 index 0000000000..667026cd53 --- /dev/null +++ b/Content.Client/EscapeMenuOwner.cs @@ -0,0 +1,88 @@ +using Content.Client.UserInterface; +using Robust.Client.Console; +using Robust.Client.Interfaces.Graphics; +using Robust.Client.Interfaces.Input; +using Robust.Client.Interfaces.Placement; +using Robust.Client.Interfaces.ResourceManagement; +using Robust.Client.Interfaces.State; +using Robust.Client.State.States; +using Robust.Client.UserInterface.CustomControls; +using Robust.Shared.Input; +using Robust.Shared.Interfaces.Configuration; +using Robust.Shared.Interfaces.Map; +using Robust.Shared.IoC; +using Robust.Shared.Prototypes; + +namespace Content.Client +{ + internal sealed class EscapeMenuOwner : IEscapeMenuOwner + { +#pragma warning disable 649 + [Dependency] private readonly IStateManager _stateManager; + [Dependency] private readonly IDisplayManager _displayManager; + [Dependency] private readonly IClientConsole _clientConsole; + [Dependency] private readonly ITileDefinitionManager _tileDefinitionManager; + [Dependency] private readonly IPlacementManager _placementManager; + [Dependency] private readonly IPrototypeManager _prototypeManager; + [Dependency] private readonly IResourceCache _resourceCache; + [Dependency] private readonly IConfigurationManager _configurationManager; + [Dependency] private readonly IInputManager _inputManager; +#pragma warning restore 649 + + private EscapeMenu _escapeMenu; + + public void Initialize() + { + _stateManager.OnStateChanged += StateManagerOnOnStateChanged; + } + + private void StateManagerOnOnStateChanged(StateChangedEventArgs obj) + { + if (obj.NewState is GameScreen) + { + // Switched TO GameScreen. + _escapeMenu = new EscapeMenu(_displayManager, _clientConsole, _tileDefinitionManager, _placementManager, + _prototypeManager, _resourceCache, _configurationManager) + { + Visible = false + }; + + _escapeMenu.AddToScreen(); + + var escapeMenuCommand = InputCmdHandler.FromDelegate(session => + { + if (_escapeMenu.Visible) + { + if (_escapeMenu.IsAtFront()) + { + _escapeMenu.Visible = false; + } + else + { + _escapeMenu.MoveToFront(); + } + } + else + { + _escapeMenu.OpenCentered(); + } + }); + + _inputManager.SetInputCommand(EngineKeyFunctions.EscapeMenu, escapeMenuCommand); + } + else if (obj.OldState is GameScreen) + { + // Switched FROM GameScreen. + _escapeMenu.Dispose(); + _escapeMenu = null; + + _inputManager.SetInputCommand(EngineKeyFunctions.EscapeMenu, null); + } + } + } + + public interface IEscapeMenuOwner + { + void Initialize(); + } +} diff --git a/Content.Client/UserInterface/EscapeMenu.cs b/Content.Client/UserInterface/EscapeMenu.cs new file mode 100644 index 0000000000..324d9590da --- /dev/null +++ b/Content.Client/UserInterface/EscapeMenu.cs @@ -0,0 +1,121 @@ +using Robust.Client.Console; +using Robust.Client.Interfaces.Graphics; +using Robust.Client.Interfaces.Placement; +using Robust.Client.Interfaces.ResourceManagement; +using Robust.Client.UserInterface; +using Robust.Client.UserInterface.Controls; +using Robust.Client.UserInterface.CustomControls; +using Robust.Shared.Interfaces.Configuration; +using Robust.Shared.Interfaces.Map; +using Robust.Shared.Prototypes; + +namespace Content.Client.UserInterface +{ + internal sealed class EscapeMenu : SS14Window + { + private readonly IClientConsole _console; + private readonly ITileDefinitionManager __tileDefinitionManager; + private readonly IPlacementManager _placementManager; + private readonly IPrototypeManager _prototypeManager; + private readonly IResourceCache _resourceCache; + private readonly IDisplayManager _displayManager; + private readonly IConfigurationManager _configSystem; + + private BaseButton QuitButton; + private BaseButton OptionsButton; + private BaseButton SpawnEntitiesButton; + private BaseButton SpawnTilesButton; + private OptionsMenu optionsMenu; + + public EscapeMenu(IDisplayManager displayManager, + IClientConsole console, + ITileDefinitionManager tileDefinitionManager, + IPlacementManager placementManager, + IPrototypeManager prototypeManager, + IResourceCache resourceCache, + IConfigurationManager configSystem) : base(displayManager) + { + _configSystem = configSystem; + _displayManager = displayManager; + _console = console; + __tileDefinitionManager = tileDefinitionManager; + _placementManager = placementManager; + _prototypeManager = prototypeManager; + _resourceCache = resourceCache; + + PerformLayout(); + } + + private void PerformLayout() + { + optionsMenu = new OptionsMenu(_displayManager, _configSystem) + { + Visible = false + }; + optionsMenu.AddToScreen(); + + Resizable = false; + HideOnClose = true; + + Title = "Menu"; + + var vBox = new VBoxContainer {SeparationOverride = 2}; + Contents.AddChild(vBox); + + SpawnEntitiesButton = new Button {Text = "Spawn Entities"}; + SpawnEntitiesButton.OnPressed += OnSpawnEntitiesButtonClicked; + vBox.AddChild(SpawnEntitiesButton); + + SpawnTilesButton = new Button {Text = "Spawn Tiles"}; + SpawnTilesButton.OnPressed += OnSpawnTilesButtonClicked; + vBox.AddChild(SpawnTilesButton); + + // Add a spacer. + vBox.AddChild(new Control { CustomMinimumSize = (0, 5)}); + + OptionsButton = new Button {Text = "Options"}; + OptionsButton.OnPressed += OnOptionsButtonClicked; + vBox.AddChild(OptionsButton); + + QuitButton = new Button {Text = "Quit"}; + QuitButton.OnPressed += OnQuitButtonClicked; + vBox.AddChild(QuitButton); + + Size = CombinedMinimumSize; + } + + private void OnQuitButtonClicked(BaseButton.ButtonEventArgs args) + { + _console.ProcessCommand("disconnect"); + Dispose(); + } + + private void OnOptionsButtonClicked(BaseButton.ButtonEventArgs args) + { + optionsMenu.OpenCentered(); + } + + private void OnSpawnEntitiesButtonClicked(BaseButton.ButtonEventArgs args) + { + var window = new EntitySpawnWindow(_displayManager, _placementManager, _prototypeManager, _resourceCache); + window.AddToScreen(); + window.OpenToLeft(); + } + + private void OnSpawnTilesButtonClicked(BaseButton.ButtonEventArgs args) + { + var window = new TileSpawnWindow(__tileDefinitionManager, _placementManager, _displayManager, _resourceCache); + window.AddToScreen(); + window.OpenToLeft(); + } + + protected override void Dispose(bool disposing) + { + base.Dispose(disposing); + if (disposing) + { + optionsMenu.Dispose(); + } + } + } +} diff --git a/RobustToolbox b/RobustToolbox index bb7288d26a..3bad55a705 160000 --- a/RobustToolbox +++ b/RobustToolbox @@ -1 +1 @@ -Subproject commit bb7288d26ab45198ea43e134cb3935ae6a7932a6 +Subproject commit 3bad55a705b000e691bdcf50e54948f59fcc51bc