From 1be963cfa58e4c5e564bafcabbcd932ccfcefb62 Mon Sep 17 00:00:00 2001 From: Kevin Zheng Date: Sat, 9 Sep 2023 10:48:34 -0800 Subject: [PATCH] Add method for real atmos tick rate (#19861) Atmos takes a variable number of atmos sub-ticks to complete processing depending on the configuration options. --- .../AtmosphereSystem.Processing.cs | 19 ++++++++++++++++++- 1 file changed, 18 insertions(+), 1 deletion(-) diff --git a/Content.Server/Atmos/EntitySystems/AtmosphereSystem.Processing.cs b/Content.Server/Atmos/EntitySystems/AtmosphereSystem.Processing.cs index ea25874db7..38b66a73fa 100644 --- a/Content.Server/Atmos/EntitySystems/AtmosphereSystem.Processing.cs +++ b/Content.Server/Atmos/EntitySystems/AtmosphereSystem.Processing.cs @@ -327,6 +327,23 @@ namespace Content.Server.Atmos.EntitySystems return true; } + /** + * UpdateProcessing() takes a different number of calls to go through all of atmos + * processing depending on what options are enabled. This returns the actual effective time + * between atmos updates that devices actually experience. + */ + public float RealAtmosTime() + { + int num = (int)AtmosphereProcessingState.NumStates; + if (!MonstermosEqualization) + num--; + if (!ExcitedGroups) + num--; + if (!Superconduction) + num--; + return num * AtmosTime; + } + private bool ProcessAtmosDevices(GridAtmosphereComponent atmosphere) { if(!atmosphere.ProcessingPaused) @@ -336,7 +353,7 @@ namespace Content.Server.Atmos.EntitySystems var number = 0; while (atmosphere.CurrentRunAtmosDevices.TryDequeue(out var device)) { - RaiseLocalEvent(device.Owner, new AtmosDeviceUpdateEvent(AtmosTime * (int)AtmosphereProcessingState.NumStates), false); + RaiseLocalEvent(device.Owner, new AtmosDeviceUpdateEvent(RealAtmosTime()), false); device.LastProcess = time; if (number++ < LagCheckIterations) continue;