Air alarm balancing (#11063)

* threshold balancing, restores none mode on atmos alarm

dear lord, panic mode with unbalanced thresholds was a nightmare

* that was 10%, not 1%

* adds widenet mode for scrubbers

* adds the vents to wide filter as well
This commit is contained in:
Flipp Syder
2022-09-05 19:35:36 -07:00
committed by GitHub
parent 57a19a7480
commit 0882d85176
7 changed files with 56 additions and 5 deletions

View File

@@ -51,7 +51,16 @@ public sealed partial class AirAlarmWindow : DefaultWindow
foreach (var mode in Enum.GetValues<AirAlarmMode>())
{
_modes.AddItem($"{mode}", (int) mode);
var text = mode switch
{
AirAlarmMode.Filtering => "air-alarm-ui-mode-filtering",
AirAlarmMode.WideFiltering => "air-alarm-ui-mode-wide-filtering",
AirAlarmMode.Fill => "air-alarm-ui-mode-fill",
AirAlarmMode.Panic => "air-alarm-ui-mode-panic",
AirAlarmMode.None => "air-alarm-ui-mode-none",
_ => "error"
};
_modes.AddItem(Loc.GetString(text));
}
_modes.OnItemSelected += args =>

View File

@@ -56,6 +56,7 @@ public interface IAirAlarmModeUpdate
public sealed class AirAlarmModeFactory
{
private static IAirAlarmMode _filterMode = new AirAlarmFilterMode();
private static IAirAlarmMode _wideFilterMode = new AirAlarmWideFilterMode();
private static IAirAlarmMode _fillMode = new AirAlarmFillMode();
private static IAirAlarmMode _panicMode = new AirAlarmPanicMode();
private static IAirAlarmMode _noneMode = new AirAlarmNoneMode();
@@ -67,6 +68,7 @@ public sealed class AirAlarmModeFactory
return mode switch
{
AirAlarmMode.Filtering => _filterMode,
AirAlarmMode.WideFiltering => _wideFilterMode,
AirAlarmMode.Fill => _fillMode,
AirAlarmMode.Panic => _panicMode,
AirAlarmMode.None => _noneMode,
@@ -133,6 +135,25 @@ public sealed class AirAlarmFilterMode : AirAlarmModeExecutor
}
}
public sealed class AirAlarmWideFilterMode : AirAlarmModeExecutor
{
public override void Execute(EntityUid uid)
{
if (!EntityManager.TryGetComponent(uid, out AirAlarmComponent? alarm))
return;
foreach (var (addr, device) in alarm.VentData)
{
AirAlarmSystem.SetData(uid, addr, GasVentPumpData.FilterModePreset);
}
foreach (var (addr, device) in alarm.ScrubberData)
{
AirAlarmSystem.SetData(uid, addr, GasVentScrubberData.WideFilterModePreset);
}
}
}
public sealed class AirAlarmPanicMode : AirAlarmModeExecutor
{
public override void Execute(EntityUid uid)

View File

@@ -299,7 +299,7 @@ public sealed class AirAlarmSystem : EntitySystem
if (args.AlarmType == AtmosAlarmType.Danger)
{
SetMode(uid, addr, AirAlarmMode.Panic, true, false);
SetMode(uid, addr, AirAlarmMode.WideFiltering, true, false);
}
else if (args.AlarmType == AtmosAlarmType.Normal || args.AlarmType == AtmosAlarmType.Warning)
{

View File

@@ -13,6 +13,7 @@ public enum AirAlarmMode
{
None,
Filtering,
WideFiltering,
Fill,
Panic,
}

View File

@@ -36,6 +36,15 @@ namespace Content.Shared.Atmos.Piping.Unary.Components
WideNet = false
};
public static GasVentScrubberData WideFilterModePreset = new GasVentScrubberData
{
Enabled = true,
FilterGases = new(GasVentScrubberData.DefaultFilterGases),
PumpDirection = ScrubberPumpDirection.Scrubbing,
VolumeRate = 200f,
WideNet = true
};
public static GasVentScrubberData FillModePreset = new GasVentScrubberData
{
Enabled = false,

View File

@@ -24,6 +24,12 @@ air-alarm-ui-window-tab-sensors = Sensors
air-alarm-ui-gases = {$gas}: {$amount} mol ({$percentage}%)
air-alarm-ui-mode-filtering = Filtering
air-alarm-ui-mode-wide-filtering = Filtering (wide)
air-alarm-ui-mode-fill = Fill
air-alarm-ui-mode-panic = Panic
air-alarm-ui-mode-none = None
## Widgets
### General

View File

@@ -2,7 +2,7 @@
id: stationTemperature
upperBound: 393.15 # T20C + 200
lowerBound: 193.15 # T20C - 100
upperWarnAround: 0.7
upperWarnAround: 0.8
lowerWarnAround: 1.1
- type: alarmThreshold
@@ -12,6 +12,11 @@
upperWarnAround: 0.7
lowerWarnAround: 2.5
# a reminder that all of these are percentages (where 1 is 100%),
# so 0.01 is 1%,
# 0.0001 is 0.01%
# etc.
- type: alarmThreshold
id: stationOxygen
lowerBound: 0.10
@@ -24,12 +29,12 @@
- type: alarmThreshold
id: stationNO
upperBound: 0.0025
upperBound: 0.01
upperWarnAround: 0.5
- type: alarmThreshold
id: stationMiasma
upperBound: 0.0025
upperBound: 0.05
upperWarnAround: 0.5
- type: alarmThreshold