using Content.Server.Explosion.EntitySystems; using Content.Shared.Explosion; using Robust.Shared.Serialization.TypeSerializers.Implementations.Custom.Prototype; namespace Content.Server.Explosion.Components; /// /// Specifies an explosion that can be spawned by this entity. The explosion itself is spawned via . /// /// /// The total intensity may be overridden by whatever system actually calls TriggerExplosive(), but this /// component still determines the explosion type and other properties. /// [RegisterComponent] public sealed class ExplosiveComponent : Component { /// /// The explosion prototype. This determines the damage types, the tile-break chance, and some visual /// information (e.g., the light that the explosion gives off). /// [ViewVariables(VVAccess.ReadWrite)] [DataField("explosionType", required: true, customTypeSerializer: typeof(PrototypeIdSerializer))] public string ExplosionType = default!; /// /// The maximum intensity the explosion can have on a single tile. This limits the maximum damage and tile /// break chance the explosion can achieve at any given location. /// [ViewVariables(VVAccess.ReadWrite)] [DataField("maxIntensity")] public float MaxIntensity = 4; /// /// How quickly the intensity drops off as you move away from the epicenter. /// [ViewVariables(VVAccess.ReadWrite)] [DataField("intensitySlope")] public float IntensitySlope = 1; /// /// The total intensity of this explosion. The radius of the explosion scales like the cube root of this /// number (see ). /// /// /// This number can be overridden by passing optional argument to . /// [ViewVariables(VVAccess.ReadWrite)] [DataField("totalIntensity")] public float TotalIntensity = 10; /// /// Avoid somehow double-triggering this explosion (e.g. by damaging this entity from its own explosion. /// public bool Exploded; }