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 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). /// [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; /// /// 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. /// [ViewVariables(VVAccess.ReadWrite)] [DataField("tileBreakScale")] 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. /// [ViewVariables(VVAccess.ReadWrite)] [DataField("maxTileBreak")] public int MaxTileBreak = int.MaxValue; /// /// Whether this explosive should be able to create a vacuum by breaking tiles. /// [ViewVariables(VVAccess.ReadWrite)] [DataField("canCreateVacuum")] 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("deleteAfterExplosion")] public bool? DeleteAfterExplosion; /// /// Avoid somehow double-triggering this explosion (e.g. by damaging this entity from its own explosion. /// public bool Exploded; }