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

@@ -495,7 +495,8 @@ namespace Content.Server.Atmos
foreach (var prototype in _atmosphereSystem.GasReactions) foreach (var prototype in _atmosphereSystem.GasReactions)
{ {
if (energy < prototype.MinimumEnergyRequirement || if (energy < prototype.MinimumEnergyRequirement ||
temperature < prototype.MinimumTemperatureRequirement) temperature < prototype.MinimumTemperatureRequirement ||
temperature > prototype.MaximumTemperatureRequirement)
continue; continue;
var doReaction = true; var doReaction = true;

View File

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

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

View File

@@ -22,3 +22,19 @@
- 0.01 # tritium - 0.01 # tritium
effects: effects:
- !type:TritiumFireReaction {} - !type:TritiumFireReaction {}
- type: gasReaction
id: WaterVaporPuddle
priority: 1
maximumTemperature: 373.13 # Boiling point of water.
minimumRequirements: # In this case, same as minimum mole count.
- 0 # oxygen
- 0 # nitrogen
- 0 # carbon dioxide
- 0 # plasma
- 0 # tritium
- 1 # water vapor
effects:
- !type:WaterVaporReaction
gasId: 5
reagent: chem.Water