* Water vapor now makes puddles under 100ºC above 1 moles * serv3 moment * Update Content.Server/Atmos/Reactions/GasReactionPrototype.cs Co-authored-by: Clyybber <darkmine956@gmail.com> Co-authored-by: Clyybber <darkmine956@gmail.com>
45 lines
1.7 KiB
C#
45 lines
1.7 KiB
C#
#nullable enable
|
|
using Content.Server.GameObjects.Components.Fluids;
|
|
using Content.Server.Interfaces;
|
|
using Content.Shared.Chemistry;
|
|
using Content.Shared.Maps;
|
|
using JetBrains.Annotations;
|
|
using Robust.Server.GameObjects;
|
|
using Robust.Shared.Serialization;
|
|
using Robust.Shared.Serialization.Manager.Attributes;
|
|
|
|
namespace Content.Server.Atmos.Reactions
|
|
{
|
|
[UsedImplicitly]
|
|
public class WaterVaporReaction : IGasReactionEffect
|
|
{
|
|
[field: DataField("reagent")] public string? Reagent { get; } = null;
|
|
|
|
[field: DataField("gas")] public int GasId { get; } = 0;
|
|
|
|
[field: DataField("molesPerUnit")] public float MolesPerUnit { get; } = 1;
|
|
|
|
[field: DataField("puddlePrototype")] public string? PuddlePrototype { get; } = "PuddleSmear";
|
|
|
|
public ReactionResult React(GasMixture mixture, IGasMixtureHolder? holder, GridTileLookupSystem gridTileLookup)
|
|
{
|
|
// If any of the prototypes is invalid, we do nothing.
|
|
if (string.IsNullOrEmpty(Reagent) || string.IsNullOrEmpty(PuddlePrototype)) 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 = tile.GridIndices.GetTileRef(tile.GridIndex);
|
|
tileRef.SpillAt(new Solution(Reagent, ReagentUnit.New(MolesPerUnit)), PuddlePrototype, sound: false);
|
|
|
|
return ReactionResult.Reacting;
|
|
}
|
|
}
|
|
}
|