using Content.Server.Emp;
using Content.Shared.EntityEffects;
using Content.Shared.Chemistry.Reagent;
using Robust.Server.GameObjects;
using Robust.Shared.Prototypes;
namespace Content.Server.EntityEffects.Effects;
[DataDefinition]
public sealed partial class EmpReactionEffect : EntityEffect
{
///
/// Impulse range per unit of quantity
///
[DataField("rangePerUnit")]
public float EmpRangePerUnit = 0.5f;
///
/// Maximum impulse range
///
[DataField("maxRange")]
public float EmpMaxRange = 10;
///
/// How much energy will be drain from sources
///
[DataField]
public float EnergyConsumption = 12500;
///
/// Amount of time entities will be disabled
///
[DataField("duration")]
public float DisableDuration = 15;
protected override string? ReagentEffectGuidebookText(IPrototypeManager prototype, IEntitySystemManager entSys)
=> Loc.GetString("reagent-effect-guidebook-emp-reaction-effect", ("chance", Probability));
public override void Effect(EntityEffectBaseArgs args)
{
var tSys = args.EntityManager.System();
var transform = args.EntityManager.GetComponent(args.TargetEntity);
var range = EmpRangePerUnit;
if (args is EntityEffectReagentArgs reagentArgs)
{
range = MathF.Min((float) (reagentArgs.Quantity * EmpRangePerUnit), EmpMaxRange);
}
args.EntityManager.System()
.EmpPulse(tSys.GetMapCoordinates(args.TargetEntity, xform: transform),
range,
EnergyConsumption,
DisableDuration);
}
}