Water vapor now makes puddles under 100ºC above 1 moles (#3489)

* 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>
This commit is contained in:
Vera Aguilera Puerto
2021-03-05 22:15:37 +01:00
committed by GitHub
parent 475ae26ca7
commit 16a9aeb9c0
5 changed files with 69 additions and 2 deletions

View File

@@ -36,6 +36,12 @@ namespace Content.Server.Atmos.Reactions
[DataField("minimumRequirements")]
public float[] MinimumRequirements { get; private set; } = new float[Atmospherics.TotalNumberOfGases];
/// <summary>
/// Maximum temperature requirement.
/// </summary>
[DataField("maximumTemperature")]
public float MaximumTemperatureRequirement { get; private set; }
/// <summary>
/// Minimum temperature requirement.
/// </summary>

View File

@@ -42,7 +42,7 @@ namespace Content.Server.Atmos.Reactions
if (burnedFuel > 0)
{
energyReleased += (Atmospherics.FireHydrogenEnergyReleased * burnedFuel);
// TODO ATMOS Radiation pulse here!
// Conservation of mass is important.

View File

@@ -0,0 +1,44 @@
#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;
}
}
}