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:
@@ -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 =>
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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)
|
||||
{
|
||||
|
||||
@@ -13,6 +13,7 @@ public enum AirAlarmMode
|
||||
{
|
||||
None,
|
||||
Filtering,
|
||||
WideFiltering,
|
||||
Fill,
|
||||
Panic,
|
||||
}
|
||||
|
||||
@@ -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,
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user