* Several sandbox manager improvements - Bound sandbox manager to B key as it lists on the UI - Bound entity spawner to F5 - Bound tile spawner to F6 - Made entity spawner and tile spawner toggle instead of repeated spawning new windows from the sandbox panel * Move relevant keyfunctions from engine to content Turns out it was unnecessary to have the key functions in the engine as all code using the ones added here are in content.
161 lines
5.3 KiB
C#
161 lines
5.3 KiB
C#
using Content.Client.UserInterface;
|
|
using Content.Shared.Input;
|
|
using Content.Shared.Sandbox;
|
|
using Robust.Client.Interfaces.Input;
|
|
using Robust.Client.Interfaces.Placement;
|
|
using Robust.Client.Interfaces.ResourceManagement;
|
|
using Robust.Client.UserInterface.Controls;
|
|
using Robust.Client.UserInterface.CustomControls;
|
|
using Robust.Shared.Input;
|
|
using Robust.Shared.Interfaces.Map;
|
|
using Robust.Shared.Interfaces.Network;
|
|
using Robust.Shared.IoC;
|
|
using Robust.Shared.Localization;
|
|
using Robust.Shared.Prototypes;
|
|
|
|
namespace Content.Client.Sandbox
|
|
{
|
|
internal sealed class SandboxManager : SharedSandboxManager, ISandboxManager
|
|
{
|
|
#pragma warning disable 649
|
|
[Dependency] private readonly IGameHud _gameHud;
|
|
[Dependency] private readonly IClientNetManager _netManager;
|
|
[Dependency] private readonly ILocalizationManager _localization;
|
|
[Dependency] private readonly IPlacementManager _placementManager;
|
|
[Dependency] private readonly IPrototypeManager _prototypeManager;
|
|
[Dependency] private readonly IResourceCache _resourceCache;
|
|
[Dependency] private readonly ITileDefinitionManager _tileDefinitionManager;
|
|
[Dependency] private readonly IInputManager _inputManager;
|
|
#pragma warning restore 649
|
|
|
|
private bool _sandboxAllowed;
|
|
private SandboxWindow _window;
|
|
private EntitySpawnWindow _spawnWindow;
|
|
private TileSpawnWindow _tilesSpawnWindow;
|
|
private bool _sandboxWindowToggled = false;
|
|
|
|
public void Initialize()
|
|
{
|
|
_netManager.RegisterNetMessage<MsgSandboxStatus>(nameof(MsgSandboxStatus),
|
|
message => SetAllowed(message.SandboxAllowed));
|
|
|
|
_gameHud.SandboxButtonToggled = SandboxButtonPressed;
|
|
|
|
_inputManager.SetInputCommand(ContentKeyFunctions.OpenEntitySpawnWindow,
|
|
InputCmdHandler.FromDelegate(session => ToggleEntitySpawnWindow()));
|
|
_inputManager.SetInputCommand(ContentKeyFunctions.OpenSandboxWindow,
|
|
InputCmdHandler.FromDelegate(session => ToggleSandboxWindow()));
|
|
_inputManager.SetInputCommand(ContentKeyFunctions.OpenTileSpawnWindow,
|
|
InputCmdHandler.FromDelegate(session => ToggleTilesWindow()));
|
|
}
|
|
|
|
private void SandboxButtonPressed(bool newValue)
|
|
{
|
|
_sandboxWindowToggled = newValue;
|
|
UpdateSandboxWindowVisibility();
|
|
}
|
|
|
|
private void ToggleSandboxWindow()
|
|
{
|
|
_sandboxWindowToggled = !_sandboxWindowToggled;
|
|
UpdateSandboxWindowVisibility();
|
|
}
|
|
|
|
private void UpdateSandboxWindowVisibility()
|
|
{
|
|
if (_sandboxWindowToggled && _sandboxAllowed)
|
|
OpenWindow();
|
|
else
|
|
_window?.Close();
|
|
}
|
|
|
|
private void SetAllowed(bool newAllowed)
|
|
{
|
|
if (newAllowed == _sandboxAllowed)
|
|
{
|
|
return;
|
|
}
|
|
|
|
_sandboxAllowed = newAllowed;
|
|
_gameHud.SandboxButtonVisible = newAllowed;
|
|
|
|
if (!newAllowed)
|
|
{
|
|
// Sandbox permission revoked, close window.
|
|
_window?.Close();
|
|
}
|
|
}
|
|
|
|
private void OpenWindow()
|
|
{
|
|
if (_window != null)
|
|
{
|
|
return;
|
|
}
|
|
|
|
_window = new SandboxWindow(_localization);
|
|
|
|
_window.OnClose += WindowOnOnClose;
|
|
|
|
_window.RespawnButton.OnPressed += OnRespawnButtonOnOnPressed;
|
|
_window.SpawnTilesButton.OnPressed += OnSpawnTilesButtonClicked;
|
|
_window.SpawnEntitiesButton.OnPressed += OnSpawnEntitiesButtonClicked;
|
|
|
|
_window.OpenCentered();
|
|
}
|
|
|
|
private void WindowOnOnClose()
|
|
{
|
|
_window = null;
|
|
_gameHud.SandboxButtonDown = false;
|
|
}
|
|
|
|
private void OnRespawnButtonOnOnPressed(BaseButton.ButtonEventArgs args)
|
|
{
|
|
_netManager.ClientSendMessage(_netManager.CreateNetMessage<MsgSandboxRespawn>());
|
|
}
|
|
|
|
private void OnSpawnEntitiesButtonClicked(BaseButton.ButtonEventArgs args)
|
|
{
|
|
ToggleEntitySpawnWindow();
|
|
}
|
|
|
|
private void OnSpawnTilesButtonClicked(BaseButton.ButtonEventArgs args)
|
|
{
|
|
ToggleTilesWindow();
|
|
}
|
|
|
|
private void ToggleEntitySpawnWindow()
|
|
{
|
|
if(_spawnWindow == null)
|
|
_spawnWindow = new EntitySpawnWindow(_placementManager, _prototypeManager, _resourceCache, _localization);
|
|
|
|
if (_spawnWindow.IsOpen)
|
|
{
|
|
_spawnWindow.Close();
|
|
}
|
|
else
|
|
{
|
|
_spawnWindow = new EntitySpawnWindow(_placementManager, _prototypeManager, _resourceCache, _localization);
|
|
_spawnWindow.OpenToLeft();
|
|
}
|
|
}
|
|
|
|
private void ToggleTilesWindow()
|
|
{
|
|
if(_tilesSpawnWindow == null)
|
|
_tilesSpawnWindow = new TileSpawnWindow(_tileDefinitionManager, _placementManager, _resourceCache);
|
|
|
|
if (_tilesSpawnWindow.IsOpen)
|
|
{
|
|
_tilesSpawnWindow.Close();
|
|
}
|
|
else
|
|
{
|
|
_tilesSpawnWindow = new TileSpawnWindow(_tileDefinitionManager, _placementManager, _resourceCache);
|
|
_tilesSpawnWindow.OpenToLeft();
|
|
}
|
|
}
|
|
}
|
|
}
|