Add atmos stuff for mapping Vox environments (#31320)

This commit is contained in:
Partmedia
2024-08-24 14:51:32 -08:00
committed by GitHub
7 changed files with 99 additions and 31 deletions

View File

@@ -36,7 +36,7 @@ public sealed partial class AtmosphereSystem
return;
}
var mixtures = new GasMixture[7];
var mixtures = new GasMixture[8];
for (var i = 0; i < mixtures.Length; i++)
mixtures[i] = new GasMixture(Atmospherics.CellVolume) { Temperature = Atmospherics.T20C };
@@ -65,6 +65,9 @@ public sealed partial class AtmosphereSystem
mixtures[6].AdjustMoles(Gas.Nitrogen, Atmospherics.NitrogenMolesStandard);
mixtures[6].Temperature = 235f; // Little colder than an actual freezer but gives a grace period to get e.g. themomachines set up, should keep warm for a few door openings
// 7: Nitrogen (101kpa) for vox rooms
mixtures[7].AdjustMoles(Gas.Nitrogen, Atmospherics.MolesCellStandard);
foreach (var arg in args)
{
if (!NetEntity.TryParse(arg, out var netEntity) || !TryGetEntity(netEntity, out var euid))

View File

@@ -11,8 +11,8 @@ namespace Content.Server.Atmos.Monitor.Components;
[RegisterComponent]
public sealed partial class AirAlarmComponent : Component
{
[ViewVariables] public AirAlarmMode CurrentMode { get; set; } = AirAlarmMode.Filtering;
[ViewVariables] public bool AutoMode { get; set; } = true;
[DataField] public AirAlarmMode CurrentMode { get; set; } = AirAlarmMode.Filtering;
[DataField] public bool AutoMode { get; set; } = true;
// Remember to null this afterwards.
[ViewVariables] public IAirAlarmModeUpdate? CurrentModeUpdater { get; set; }

View File

@@ -5,31 +5,25 @@ namespace Content.Server.Atmos.Piping.Trinary.Components
[RegisterComponent]
public sealed partial class GasFilterComponent : Component
{
[ViewVariables(VVAccess.ReadWrite)]
[DataField("enabled")]
public bool Enabled { get; set; } = true;
[DataField]
public bool Enabled = true;
[ViewVariables(VVAccess.ReadWrite)]
[DataField("inlet")]
public string InletName { get; set; } = "inlet";
public string InletName = "inlet";
[ViewVariables(VVAccess.ReadWrite)]
[DataField("filter")]
public string FilterName { get; set; } = "filter";
public string FilterName = "filter";
[ViewVariables(VVAccess.ReadWrite)]
[DataField("outlet")]
public string OutletName { get; set; } = "outlet";
public string OutletName = "outlet";
[ViewVariables(VVAccess.ReadWrite)]
[DataField]
public float TransferRate = Atmospherics.MaxTransferRate;
[DataField("transferRate")]
public float TransferRate { get; set; } = Atmospherics.MaxTransferRate;
[DataField]
public float MaxTransferRate = Atmospherics.MaxTransferRate;
[DataField("maxTransferRate")]
public float MaxTransferRate { get; set; } = Atmospherics.MaxTransferRate;
[ViewVariables(VVAccess.ReadWrite)]
public Gas? FilteredGas { get; set; }
[DataField]
public Gas? FilteredGas;
}
}

View File

@@ -9,26 +9,25 @@ namespace Content.Server.Atmos.Piping.Unary.Components
[Access(typeof(GasVentScrubberSystem))]
public sealed partial class GasVentScrubberComponent : Component
{
[ViewVariables(VVAccess.ReadWrite)]
[DataField]
public bool Enabled { get; set; } = false;
[ViewVariables]
[DataField]
public bool IsDirty { get; set; } = false;
[ViewVariables(VVAccess.ReadWrite)]
[DataField("outlet")]
public string OutletName { get; set; } = "pipe";
[ViewVariables]
public readonly HashSet<Gas> FilterGases = new(GasVentScrubberData.DefaultFilterGases);
[DataField]
public HashSet<Gas> FilterGases = new(GasVentScrubberData.DefaultFilterGases);
[ViewVariables(VVAccess.ReadWrite)]
[DataField]
public ScrubberPumpDirection PumpDirection { get; set; } = ScrubberPumpDirection.Scrubbing;
/// <summary>
/// Target volume to transfer. If <see cref="WideNet"/> is enabled, actual transfer rate will be much higher.
/// </summary>
[ViewVariables(VVAccess.ReadWrite)]
[DataField]
public float TransferRate
{
get => _transferRate;
@@ -37,18 +36,17 @@ namespace Content.Server.Atmos.Piping.Unary.Components
private float _transferRate = Atmospherics.MaxTransferRate;
[ViewVariables(VVAccess.ReadWrite)]
[DataField("maxTransferRate")]
[DataField]
public float MaxTransferRate = Atmospherics.MaxTransferRate;
/// <summary>
/// As pressure difference approaches this number, the effective volume rate may be smaller than <see
/// cref="TransferRate"/>
/// </summary>
[DataField("maxPressure")]
[DataField]
public float MaxPressure = Atmospherics.MaxOutputPressure;
[ViewVariables(VVAccess.ReadWrite)]
[DataField]
public bool WideNet { get; set; } = false;
public GasVentScrubberData ToAirAlarmData()

View File

@@ -89,3 +89,17 @@
id: danger # just any gas you don't want at all
upperBound: !type:AlarmThresholdSetting
threshold: 0.0001
- type: alarmThreshold
id: voxOxygen
upperBound: !type:AlarmThresholdSetting
threshold: 0.02 # 2%
upperWarnAround: !type:AlarmThresholdSetting
threshold: 0.5 # 1%
- type: alarmThreshold
id: voxNitrogen
lowerBound: !type:AlarmThresholdSetting
threshold: 0.8 # danger below 80% nitrogen
lowerWarnAround: !type:AlarmThresholdSetting
threshold: 1.125 # warning below 90%

View File

@@ -99,3 +99,12 @@
state: freeze
- type: AtmosFixMarker
mode: 6
- type: entity
parent: AtmosFixNitrogenMarker
id: AtmosFixVoxMarker
suffix: Vox Atmosphere
description: "Nitrogen @ 101 kPa, 20C"
components:
- type: AtmosFixMarker
mode: 7

View File

@@ -0,0 +1,50 @@
- type: entity
abstract: true
parent: AirSensorBase
id: AirSensorVoxBase
suffix: Vox Atmosphere
components:
- type: AtmosMonitor
gasThresholdPrototypes:
Oxygen: voxOxygen
Nitrogen: voxNitrogen
CarbonDioxide: stationCO2
Plasma: stationPlasma
Tritium: stationTritium
WaterVapor: stationWaterVapor
Ammonia: stationAmmonia
NitrousOxide: stationNO
Frezon: danger
- type: entity
parent: [AirSensorVoxBase, AirSensor]
id: AirSensorVox
- type: entity
parent: [AirSensorVoxBase, GasVentPump]
id: GasVentPumpVox
- type: entity
parent: [AirSensorVoxBase, GasVentScrubber]
id: GasVentScrubberVox
components:
- type: GasVentScrubber
wideNet: true # Air alarm with auto mode overrides filters with hardcoded defaults so default to widenet
filterGases:
- Oxygen # filter out oxygen as well as regular harmful gases
- CarbonDioxide
- Plasma
- Tritium
- WaterVapor
- Ammonia
- NitrousOxide
- Frezon
# use this to prevent overriding filters with hardcoded defaults
- type: entity
parent: AirAlarm
id: AirAlarmVox
suffix: Vox Atmosphere, auto mode disabled
components:
- type: AirAlarm
autoMode: false