using Content.Shared.Explosion.EntitySystems; using Robust.Shared.Prototypes; namespace Content.Shared.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, Access(typeof(SharedExplosionSystem))] public sealed partial 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). /// [DataField(required: true)] public ProtoId 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. /// [DataField] public float MaxIntensity = 4; /// /// How quickly the intensity drops off as you move away from the epicenter. /// [DataField] 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 . /// [DataField] public float TotalIntensity = 10; /// /// Factor used to scale the explosion intensity when calculating tile break chances. Allows for stronger /// explosives that don't space tiles, without having to create a new explosion-type prototype. /// [DataField] public float TileBreakScale = 1f; /// /// Maximum number of times that an explosive can break a tile. Currently, for normal space stations breaking a /// tile twice will generally result in a vacuum. /// [DataField] public int MaxTileBreak = int.MaxValue; /// /// Whether this explosive should be able to create a vacuum by breaking tiles. /// [DataField] public bool CanCreateVacuum = true; /// /// An override for whether or not the entity should be deleted after it explodes. /// If null, the system calling the explode method handles it. /// [DataField] public bool? DeleteAfterExplosion; /// /// Whether to not set to true, allowing it to explode multiple times. /// This should never be used if it is damageable. /// [DataField] public bool Repeatable; /// /// Avoid somehow double-triggering this explosion (e.g. by damaging this entity from its own explosion. /// public bool Exploded; }