From b9b9b84bea91a93c2ac5436069f1a96a1b54238b Mon Sep 17 00:00:00 2001 From: vulppine Date: Fri, 19 Aug 2022 04:40:50 -0700 Subject: [PATCH] fixes up air alarm modes --- .../Atmos/Monitor/Systems/AirAlarmModes.cs | 101 +++++++----------- .../Atmos/Monitor/Systems/AirAlarmSystem.cs | 4 +- .../Components/SharedVentPumpComponent.cs | 11 ++ .../Components/SharedVentScrubberComponent.cs | 11 ++ 4 files changed, 63 insertions(+), 64 deletions(-) diff --git a/Content.Server/Atmos/Monitor/Systems/AirAlarmModes.cs b/Content.Server/Atmos/Monitor/Systems/AirAlarmModes.cs index 4c9557fe88..beb16cdd72 100644 --- a/Content.Server/Atmos/Monitor/Systems/AirAlarmModes.cs +++ b/Content.Server/Atmos/Monitor/Systems/AirAlarmModes.cs @@ -98,7 +98,13 @@ namespace Content.Server.Atmos.Monitor if (!EntityManager.TryGetComponent(uid, out AirAlarmComponent? alarm)) return; - foreach (var (addr, device) in alarm.DeviceData) + foreach (var (addr, device) in alarm.VentData) + { + device.Enabled = false; + AirAlarmSystem.SetData(uid, addr, device); + } + + foreach (var (addr, device) in alarm.ScrubberData) { device.Enabled = false; AirAlarmSystem.SetData(uid, addr, device); @@ -113,17 +119,14 @@ namespace Content.Server.Atmos.Monitor if (!EntityManager.TryGetComponent(uid, out AirAlarmComponent? alarm)) return; - foreach (var (addr, device) in alarm.DeviceData) + foreach (var (addr, device) in alarm.VentData) { - switch (device) - { - case GasVentPumpData pumpData: - AirAlarmSystem.SetData(uid, addr, GasVentPumpData.FilterModePreset); - break; - case GasVentScrubberData scrubberData: - AirAlarmSystem.SetData(uid, addr, GasVentScrubberData.FilterModePreset); - break; - } + AirAlarmSystem.SetData(uid, addr, GasVentPumpData.FilterModePreset); + } + + foreach (var (addr, device) in alarm.ScrubberData) + { + AirAlarmSystem.SetData(uid, addr, GasVentScrubberData.FilterModePreset); } } } @@ -135,17 +138,14 @@ namespace Content.Server.Atmos.Monitor if (!EntityManager.TryGetComponent(uid, out AirAlarmComponent? alarm)) return; - foreach (var (addr, device) in alarm.DeviceData) + foreach (var (addr, device) in alarm.VentData) { - switch (device) - { - case GasVentPumpData pumpData: - AirAlarmSystem.SetData(uid, addr, GasVentPumpData.PanicModePreset); - break; - case GasVentScrubberData scrubberData: - AirAlarmSystem.SetData(uid, addr, GasVentScrubberData.PanicModePreset); - break; - } + AirAlarmSystem.SetData(uid, addr, GasVentPumpData.PanicModePreset); + } + + foreach (var (addr, device) in alarm.ScrubberData) + { + AirAlarmSystem.SetData(uid, addr, GasVentScrubberData.PanicModePreset); } } } @@ -157,81 +157,58 @@ namespace Content.Server.Atmos.Monitor if (!EntityManager.TryGetComponent(uid, out AirAlarmComponent? alarm)) return; - foreach (var (addr, device) in alarm.DeviceData) + foreach (var (addr, device) in alarm.VentData) { - switch (device) - { - case GasVentPumpData pumpData: - AirAlarmSystem.SetData(uid, addr, GasVentPumpData.FillModePreset); - break; - case GasVentScrubberData scrubberData: - AirAlarmSystem.SetData(uid, addr, GasVentScrubberData.FillModePreset); - break; - } + AirAlarmSystem.SetData(uid, addr, GasVentPumpData.FillModePreset); + } + + foreach (var (addr, device) in alarm.ScrubberData) + { + AirAlarmSystem.SetData(uid, addr, GasVentScrubberData.FillModePreset); } } } public sealed class AirAlarmReplaceMode : AirAlarmModeExecutor, IAirAlarmModeUpdate { - private Dictionary _devices = new(); + private AirAlarmComponent? _alarm; private float _lastPressure = Atmospherics.OneAtmosphere; - private AtmosMonitorComponent? _monitor; - private AtmosAlarmableComponent? _alarmable; public string NetOwner { get; set; } = string.Empty; public override void Execute(EntityUid uid) { - if (!EntityManager.TryGetComponent(uid, out AirAlarmComponent? alarm) - || !EntityManager.TryGetComponent(uid, out AtmosMonitorComponent? monitor) - || !EntityManager.TryGetComponent(uid, out AtmosAlarmableComponent? alarmable)) + if (!EntityManager.TryGetComponent(uid, out _alarm)) return; - _devices = alarm.DeviceData; - _monitor = monitor; - _alarmable = alarmable; - _alarmable.IgnoreAlarms = true; SetSiphon(uid); } public void Update(EntityUid uid) { - if (_monitor == null - || _alarmable == null - || _monitor.TileGas == null) + if (_alarm == null) return; // just a little pointer - var mixture = _monitor.TileGas; - _lastPressure = mixture.Pressure; + _lastPressure = AirAlarmSystem.CalculatePressureAverage(_alarm); if (_lastPressure <= 0.2f) // anything below and it might get stuck { - _alarmable.IgnoreAlarms = false; AirAlarmSystem.SetMode(uid, NetOwner!, AirAlarmMode.Filtering, false, false); } } private void SetSiphon(EntityUid uid) { - foreach (var (addr, device) in _devices) + foreach (var (addr, device) in _alarm!.VentData) { - switch (device) - { - case GasVentPumpData pumpData: - pumpData = GasVentPumpData.PanicModePreset; - pumpData.IgnoreAlarms = true; - AirAlarmSystem.SetData(uid, addr, pumpData); - break; - case GasVentScrubberData scrubberData: - scrubberData = GasVentScrubberData.PanicModePreset; - scrubberData.IgnoreAlarms = true; - AirAlarmSystem.SetData(uid, addr, scrubberData); - break; - } + AirAlarmSystem.SetData(uid, addr, GasVentPumpData.ReplaceModePreset); + } + + foreach (var (addr, device) in _alarm!.ScrubberData) + { + AirAlarmSystem.SetData(uid, addr, GasVentScrubberData.ReplaceModePreset); } } - } } diff --git a/Content.Server/Atmos/Monitor/Systems/AirAlarmSystem.cs b/Content.Server/Atmos/Monitor/Systems/AirAlarmSystem.cs index eb8753882d..2a3e7e285d 100644 --- a/Content.Server/Atmos/Monitor/Systems/AirAlarmSystem.cs +++ b/Content.Server/Atmos/Monitor/Systems/AirAlarmSystem.cs @@ -514,14 +514,14 @@ namespace Content.Server.Atmos.Monitor.Systems alarm.CurrentModeUpdater.Update(uid); } - private float CalculatePressureAverage(AirAlarmComponent alarm) + public float CalculatePressureAverage(AirAlarmComponent alarm) { return alarm.SensorData.Count != 0 ? alarm.SensorData.Values.Select(v => v.Pressure).Average() : 0f; } - private float CalculateTemperatureAverage(AirAlarmComponent alarm) + public float CalculateTemperatureAverage(AirAlarmComponent alarm) { return alarm.SensorData.Count != 0 ? alarm.SensorData.Values.Select(v => v.Temperature).Average() diff --git a/Content.Shared/Atmos/Piping/Unary/Components/SharedVentPumpComponent.cs b/Content.Shared/Atmos/Piping/Unary/Components/SharedVentPumpComponent.cs index ccad630dfa..404c197868 100644 --- a/Content.Shared/Atmos/Piping/Unary/Components/SharedVentPumpComponent.cs +++ b/Content.Shared/Atmos/Piping/Unary/Components/SharedVentPumpComponent.cs @@ -44,6 +44,17 @@ namespace Content.Shared.Atmos.Piping.Unary.Components ExternalPressureBound = Atmospherics.OneAtmosphere, InternalPressureBound = 0f }; + + public static GasVentPumpData ReplaceModePreset = new GasVentPumpData + { + Enabled = false, + IgnoreAlarms = true, + Dirty = true, + PumpDirection = VentPumpDirection.Releasing, + PressureChecks = VentPressureBound.ExternalBound, + ExternalPressureBound = Atmospherics.OneAtmosphere, + InternalPressureBound = 0f + }; } [Serializable, NetSerializable] diff --git a/Content.Shared/Atmos/Piping/Unary/Components/SharedVentScrubberComponent.cs b/Content.Shared/Atmos/Piping/Unary/Components/SharedVentScrubberComponent.cs index d95ef117f0..d574e4cfd1 100644 --- a/Content.Shared/Atmos/Piping/Unary/Components/SharedVentScrubberComponent.cs +++ b/Content.Shared/Atmos/Piping/Unary/Components/SharedVentScrubberComponent.cs @@ -55,6 +55,17 @@ namespace Content.Shared.Atmos.Piping.Unary.Components VolumeRate = 200f, WideNet = false }; + + public static GasVentScrubberData ReplaceModePreset = new GasVentScrubberData + { + Enabled = true, + IgnoreAlarms = true, + Dirty = true, + FilterGases = GasVentScrubberData.DefaultFilterGases, + PumpDirection = ScrubberPumpDirection.Siphoning, + VolumeRate = 200f, + WideNet = false + }; } [Serializable, NetSerializable]