| 123456789101112131415161718192021222324252627282930313233343536373839404142434445 |
- using Content.Server.Atmos.EntitySystems;
- using Content.Server.Fluids.EntitySystems;
- using Content.Shared.Atmos;
- using Content.Shared.Atmos.Reactions;
- using Content.Shared.Chemistry.Components;
- using Content.Shared.FixedPoint;
- using Content.Shared.Maps;
- using JetBrains.Annotations;
- namespace Content.Server.Atmos.Reactions
- {
- [UsedImplicitly]
- [DataDefinition]
- public sealed partial class WaterVaporReaction : IGasReactionEffect
- {
- [DataField("reagent")] public string? Reagent { get; private set; } = null;
- [DataField("gas")] public int GasId { get; private set; } = 0;
- [DataField("molesPerUnit")] public float MolesPerUnit { get; private set; } = 1;
- public ReactionResult React(GasMixture mixture, IGasMixtureHolder? holder, AtmosphereSystem atmosphereSystem, float heatScale)
- {
- // If any of the prototypes is invalid, we do nothing.
- if (string.IsNullOrEmpty(Reagent))
- return ReactionResult.NoReaction;
- // If we're not reacting on a tile, do nothing.
- if (holder is not TileAtmosphere tile)
- return ReactionResult.NoReaction;
- // If we don't have enough moles of the specified gas, do nothing.
- if (mixture.GetMoles(GasId) < MolesPerUnit)
- return ReactionResult.NoReaction;
- // Remove the moles from the mixture...
- mixture.AdjustMoles(GasId, -MolesPerUnit);
- var tileRef = atmosphereSystem.GetTileRef(tile);
- atmosphereSystem.Puddle.TrySpillAt(tileRef, new Solution(Reagent, FixedPoint2.New(MolesPerUnit)), out _, sound: false);
- return ReactionResult.Reacting;
- }
- }
- }
|