Files
tbd-station-14/Content.Server/Atmos/Reactions/WaterVaporReaction.cs
Jezithyr 6869adfa78 Move GasMixture to shared (#27480)
* Moved GasMixture to shared

* Temp Fix for sandbox violation, idk why Array.Resize isn't working properly. It's already sandboxed.

* The most powerful webedit in history
2024-04-30 14:31:05 -07:00

46 lines
1.7 KiB
C#

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