using Content.Shared.Database; using Content.Shared.Emp; using Robust.Shared.Prototypes; namespace Content.Shared.EntityEffects.Effects.Transform; /// /// Creates an EMP at this entity's coordinates. /// Range is modified by scale. /// /// public sealed partial class EmpEntityEffectSystem : EntityEffectSystem { [Dependency] private readonly SharedEmpSystem _emp = default!; [Dependency] private readonly SharedTransformSystem _xform = default!; protected override void Effect(Entity entity, ref EntityEffectEvent args) { var range = MathF.Min(args.Effect.RangeModifier * args.Scale, args.Effect.MaxRange); _emp.EmpPulse(_xform.GetMapCoordinates(entity, xform: entity.Comp), range, args.Effect.EnergyConsumption, args.Effect.Duration); } } /// public sealed partial class Emp : EntityEffectBase { /// /// Impulse range per unit of quantity /// [DataField] public float RangeModifier = 0.5f; /// /// Maximum impulse range /// [DataField] public float MaxRange = 10; /// /// How much energy will be drain from sources /// [DataField] public float EnergyConsumption = 12500; /// /// Amount of time entities will be disabled /// [DataField] public TimeSpan Duration = TimeSpan.FromSeconds(15); public override bool Scaling => true; public override string EntityEffectGuidebookText(IPrototypeManager prototype, IEntitySystemManager entSys) => Loc.GetString("entity-effect-guidebook-emp-reaction-effect", ("chance", Probability)); public override LogImpact? Impact => LogImpact.Medium; }