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;
}
}
}