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); } } }