using Content.Server.Atmos.EntitySystems; using Content.Shared.Atmos; using Content.Shared.Atmos.Reactions; using Robust.Shared.Prototypes; namespace Content.Server.Atmos.Reactions { [Prototype] public sealed partial class GasReactionPrototype : IPrototype { [ViewVariables] [IdDataField] public string ID { get; private set; } = default!; /// /// Minimum gas amount requirements. /// [DataField("minimumRequirements")] public float[] MinimumRequirements { get; private set; } = new float[Atmospherics.TotalNumberOfGases]; /// /// Maximum temperature requirement. /// [DataField("maximumTemperature")] public float MaximumTemperatureRequirement { get; private set; } = float.MaxValue; /// /// Minimum temperature requirement. /// [DataField("minimumTemperature")] public float MinimumTemperatureRequirement { get; private set; } = Atmospherics.TCMB; /// /// Minimum energy requirement. /// [DataField("minimumEnergy")] public float MinimumEnergyRequirement { get; private set; } = 0f; /// /// Lower numbers are checked/react later than higher numbers. /// If two reactions have the same priority, they may happen in either order. /// [DataField("priority")] public int Priority { get; private set; } = int.MinValue; /// /// A list of effects this will produce. /// [DataField("effects")] private List _effects = new(); /// /// Process all reaction effects. /// /// The gas mixture to react /// The container of this gas mixture /// The atmosphere system /// Scaling factor that should be applied to all heat input or outputs. public ReactionResult React(GasMixture mixture, IGasMixtureHolder? holder, AtmosphereSystem atmosphereSystem, float heatScale) { var result = ReactionResult.NoReaction; foreach (var effect in _effects) { result |= effect.React(mixture, holder, atmosphereSystem, heatScale); } return result; } } }