using System.Numerics;
using Content.Server.Administration;
using Content.Shared.Administration;
using Content.Shared.Sprite;
using Robust.Shared.Physics.Systems;
using Robust.Shared.Toolshed;
namespace Content.Server.Toolshed.Commands.Misc;
///
/// Used to change an entity's sprite scale.
///
[ToolshedCommand, AdminCommand(AdminFlags.VarEdit)]
public sealed class ScaleCommand : ToolshedCommand
{
private SharedScaleVisualsSystem? _scaleVisuals;
private SharedPhysicsSystem? _physics;
[CommandImplementation("set")]
public IEnumerable Set([PipedArgument] IEnumerable input, Vector2 scale)
{
_scaleVisuals ??= GetSys();
foreach (var ent in input)
{
_scaleVisuals.SetSpriteScale(ent, scale);
yield return ent;
}
}
[CommandImplementation("multiply")]
public IEnumerable Multiply([PipedArgument] IEnumerable input, float factor)
{
_scaleVisuals ??= GetSys();
foreach (var ent in input)
{
var scale = _scaleVisuals.GetSpriteScale(ent) * factor;
_scaleVisuals.SetSpriteScale(ent, scale);
yield return ent;
}
}
[CommandImplementation("multiplyvector")]
public IEnumerable Multiply([PipedArgument] IEnumerable input, Vector2 factor)
{
_scaleVisuals ??= GetSys();
foreach (var ent in input)
{
var scale = _scaleVisuals.GetSpriteScale(ent) * factor;
_scaleVisuals.SetSpriteScale(ent, scale);
yield return ent;
}
}
[CommandImplementation("multiplywithfixture")]
public IEnumerable MultiplyWithFixture([PipedArgument] IEnumerable input, float factor)
{
_scaleVisuals ??= GetSys();
_physics ??= GetSys();
foreach (var ent in input)
{
var scale = _scaleVisuals.GetSpriteScale(ent) * factor;
_scaleVisuals.SetSpriteScale(ent, scale);
_physics.ScaleFixtures(ent, factor);
yield return ent;
}
}
[CommandImplementation("get")]
public IEnumerable Get([PipedArgument] IEnumerable input)
{
_scaleVisuals ??= GetSys();
foreach (var ent in input)
{
yield return _scaleVisuals.GetSpriteScale(ent);
}
}
}