Files
RobustToolbox/Robust.Shared/Toolshed/Commands/Entities/DoCommand.cs
Moony 0e1328675c Toolshed (#4197)
* Saving work

* Move shit to engine

* lord

* merg

* awa

* bql is kill

* forgot the fucking bike rack

* bql is kill for real

* pjb will kill me

* aughfhbdj

* yo ho here we go on my way to the MINES

* a

* adgddf

* gdsgvfvxshngfgh

* b

* hfsjhghj

* hbfdjjh

* tf you mean i have to document it

* follow C# standards

* Assorted cleanup and documentation pass, minor bugfix in ValueRefParser.

* Start porting old commands, remove that pesky prefix in favor of integrating with the shell.

* Fix valueref up a bit, improve autocomplete for it.

* e

* Toolshed type system adventure.

* a log

* a

* a e i o u

* awa

* fix tests

* Arithmetic commands.

* a

* parse improvements

---------

Co-authored-by: moonheart08 <moonheart08@users.noreply.github.com>
2023-08-02 16:06:16 -05:00

45 lines
1.4 KiB
C#

using System;
using System.Collections.Generic;
using System.Globalization;
using Robust.Shared.GameObjects;
using Robust.Shared.Toolshed.Invocation;
namespace Robust.Shared.Toolshed.Commands.Entities;
[ToolshedCommand]
internal sealed class DoCommand : ToolshedCommand
{
private SharedTransformSystem? _xformSys;
[CommandImplementation, TakesPipedTypeAsGeneric]
public void Do<T>(
[CommandInvocationContext] IInvocationContext ctx,
[PipedArgument] IEnumerable<T> input,
[CommandArgument] string command)
{
if (ctx is not OldShellInvocationContext { } reqCtx)
{
throw new NotImplementedException();
}
_xformSys ??= GetSys<SharedTransformSystem>();
var xformQ = GetEntityQuery<TransformComponent>();
var shell = reqCtx.Shell;
foreach (var i in input)
{
var cmdStr = command;
if (i is EntityUid id)
{
var worldPos = _xformSys.GetWorldPosition(id, xformQ);
cmdStr = cmdStr
.Replace("$ID", id.ToString())
.Replace("$WX", worldPos.X.ToString(CultureInfo.InvariantCulture))
.Replace("$WY", worldPos.Y.ToString(CultureInfo.InvariantCulture));
}
cmdStr = cmdStr.Replace("$SELF", i!.ToString() ?? "");
shell.ExecuteCommand(cmdStr);
}
}
}