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:
committed by
GitHub
parent
475ae26ca7
commit
16a9aeb9c0
@@ -495,7 +495,8 @@ namespace Content.Server.Atmos
|
||||
foreach (var prototype in _atmosphereSystem.GasReactions)
|
||||
{
|
||||
if (energy < prototype.MinimumEnergyRequirement ||
|
||||
temperature < prototype.MinimumTemperatureRequirement)
|
||||
temperature < prototype.MinimumTemperatureRequirement ||
|
||||
temperature > prototype.MaximumTemperatureRequirement)
|
||||
continue;
|
||||
|
||||
var doReaction = true;
|
||||
|
||||
@@ -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>
|
||||
|
||||
44
Content.Server/Atmos/Reactions/WaterVaporReaction.cs
Normal file
44
Content.Server/Atmos/Reactions/WaterVaporReaction.cs
Normal 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;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -22,3 +22,19 @@
|
||||
- 0.01 # tritium
|
||||
effects:
|
||||
- !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
|
||||
|
||||
Reference in New Issue
Block a user