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.
This commit is contained in:
Kevin Zheng
2023-09-09 10:48:34 -08:00
committed by GitHub
parent e773d8c09f
commit 1be963cfa5

View File

@@ -327,6 +327,23 @@ namespace Content.Server.Atmos.EntitySystems
return true; 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) private bool ProcessAtmosDevices(GridAtmosphereComponent atmosphere)
{ {
if(!atmosphere.ProcessingPaused) if(!atmosphere.ProcessingPaused)
@@ -336,7 +353,7 @@ namespace Content.Server.Atmos.EntitySystems
var number = 0; var number = 0;
while (atmosphere.CurrentRunAtmosDevices.TryDequeue(out var device)) 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; device.LastProcess = time;
if (number++ < LagCheckIterations) continue; if (number++ < LagCheckIterations) continue;