Files
RobustToolbox/Robust.Client/ViewVariables/ViewVariablesCommand.cs
2023-09-11 09:42:55 +10:00

85 lines
2.6 KiB
C#

using JetBrains.Annotations;
using Robust.Client.UserInterface;
using Robust.Shared.Console;
using Robust.Shared.GameObjects;
using Robust.Shared.IoC;
using Robust.Shared.ViewVariables;
using Robust.Shared.ViewVariables.Commands;
namespace Robust.Client.ViewVariables
{
[UsedImplicitly]
public sealed class ViewVariablesCommand : ViewVariablesBaseCommand
{
[Dependency] private readonly IClientViewVariablesManager _cvvm = default!;
[Dependency] private readonly IUserInterfaceManager _ui = default!;
[Dependency] private readonly IEntityManager _entities = default!;
public override string Command => "vv";
public override void Execute(IConsoleShell shell, string argStr, string[] args)
{
// If you don't provide an entity ID, it opens the test class.
// Spooky huh.
if (args.Length == 0)
{
_cvvm.OpenVV(new ViewVariablesPathSelector("/vvtest"));
return;
}
if (args.Length > 1)
{
shell.WriteError($"Incorrect number of arguments. Did you forget to quote a path?");
return;
}
var valArg = args[0];
if (valArg.StartsWith("/c"))
{
// Remove "/c" before calling method.
_cvvm.OpenVV(valArg[2..]);
return;
}
if (valArg.StartsWith("/"))
{
var selector = new ViewVariablesPathSelector(valArg);
_cvvm.OpenVV(selector);
return;
}
if (valArg.StartsWith("guihover"))
{
// UI element.
var obj = _ui.CurrentlyHovered;
if (obj == null)
{
shell.WriteLine("Not currently hovering any control.");
return;
}
_cvvm.OpenVV(obj);
return;
}
// Entity.
if (!NetEntity.TryParse(args[0], out var netEntity))
{
shell.WriteLine("Invalid specifier format.");
return;
}
var entity = _entities.GetEntity(netEntity);
if (!_entities.EntityExists(entity))
{
shell.WriteLine("That entity does not exist locally. Attempting to open remote view...");
_cvvm.OpenVV(new ViewVariablesEntitySelector(netEntity));
return;
}
_cvvm.OpenVV(netEntity);
}
}
}