using Content.Server.Atmos.EntitySystems; using Content.Shared.Anomaly.Components; using Content.Shared.Anomaly.Effects.Components; using Content.Shared.Atmos.Components; using Robust.Shared.Map; namespace Content.Server.Anomaly.Effects; /// /// This handles and the events from /// public sealed class PyroclasticAnomalySystem : EntitySystem { [Dependency] private readonly EntityLookupSystem _lookup = default!; [Dependency] private readonly FlammableSystem _flammable = default!; /// public override void Initialize() { SubscribeLocalEvent(OnPulse); SubscribeLocalEvent(OnSupercritical); } private void OnPulse(EntityUid uid, PyroclasticAnomalyComponent component, ref AnomalyPulseEvent args) { var xform = Transform(uid); var ignitionRadius = component.MaximumIgnitionRadius * args.Stability * args.PowerModifier; IgniteNearby(uid, xform.Coordinates, args.Severity, ignitionRadius); } private void OnSupercritical(EntityUid uid, PyroclasticAnomalyComponent component, ref AnomalySupercriticalEvent args) { var xform = Transform(uid); IgniteNearby(uid, xform.Coordinates, 1, component.MaximumIgnitionRadius * 2 * args.PowerModifier); } public void IgniteNearby(EntityUid uid, EntityCoordinates coordinates, float severity, float radius) { var flammables = new HashSet>(); _lookup.GetEntitiesInRange(coordinates, radius, flammables); foreach (var flammable in flammables) { var ent = flammable.Owner; var stackAmount = 1 + (int) (severity / 0.15f); _flammable.AdjustFireStacks(ent, stackAmount, flammable); _flammable.Ignite(ent, uid, flammable); } } }