CVars for atmos (#2633)
* Monstermos is a word! * Atmos CVars * Cache CVars in AtmosphereSystem. Co-authored-by: Pieter-Jan Briers <pieterjan.briers+git@gmail.com>
This commit is contained in:
committed by
GitHub
parent
8177be3061
commit
6bb1e9fa5d
@@ -636,7 +636,7 @@ namespace Content.Server.Atmos
|
|||||||
}
|
}
|
||||||
|
|
||||||
[MethodImpl(MethodImplOptions.AggressiveInlining)]
|
[MethodImpl(MethodImplOptions.AggressiveInlining)]
|
||||||
public void ProcessCell(int fireCount)
|
public void ProcessCell(int fireCount, bool spaceWind = true)
|
||||||
{
|
{
|
||||||
// Can't process a tile without air
|
// Can't process a tile without air
|
||||||
if (Air == null)
|
if (Air == null)
|
||||||
@@ -708,14 +708,16 @@ namespace Content.Server.Atmos
|
|||||||
{
|
{
|
||||||
var difference = Air.Share(enemyTile.Air, adjacentTileLength);
|
var difference = Air.Share(enemyTile.Air, adjacentTileLength);
|
||||||
|
|
||||||
// Space wind!
|
if (spaceWind)
|
||||||
if (difference > 0)
|
|
||||||
{
|
{
|
||||||
ConsiderPressureDifference(enemyTile, difference);
|
if (difference > 0)
|
||||||
}
|
{
|
||||||
else
|
ConsiderPressureDifference(enemyTile, difference);
|
||||||
{
|
}
|
||||||
enemyTile.ConsiderPressureDifference(this, -difference);
|
else
|
||||||
|
{
|
||||||
|
enemyTile.ConsiderPressureDifference(this, -difference);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
LastShareCheck();
|
LastShareCheck();
|
||||||
|
|||||||
@@ -9,6 +9,7 @@ using Content.Server.GameObjects.Components.Atmos.Piping;
|
|||||||
using Content.Server.GameObjects.Components.NodeContainer.NodeGroups;
|
using Content.Server.GameObjects.Components.NodeContainer.NodeGroups;
|
||||||
using Content.Server.GameObjects.EntitySystems;
|
using Content.Server.GameObjects.EntitySystems;
|
||||||
using Content.Server.GameObjects.EntitySystems.Atmos;
|
using Content.Server.GameObjects.EntitySystems.Atmos;
|
||||||
|
using Content.Shared;
|
||||||
using Content.Shared.Atmos;
|
using Content.Shared.Atmos;
|
||||||
using Content.Shared.Maps;
|
using Content.Shared.Maps;
|
||||||
using Robust.Server.GameObjects.EntitySystems.TileLookup;
|
using Robust.Server.GameObjects.EntitySystems.TileLookup;
|
||||||
@@ -16,10 +17,9 @@ using Robust.Server.Interfaces.GameObjects;
|
|||||||
using Robust.Shared.GameObjects;
|
using Robust.Shared.GameObjects;
|
||||||
using Robust.Shared.GameObjects.ComponentDependencies;
|
using Robust.Shared.GameObjects.ComponentDependencies;
|
||||||
using Robust.Shared.GameObjects.Components.Map;
|
using Robust.Shared.GameObjects.Components.Map;
|
||||||
using Robust.Shared.GameObjects.Components.Transform;
|
|
||||||
using Robust.Shared.GameObjects.Systems;
|
using Robust.Shared.GameObjects.Systems;
|
||||||
|
using Robust.Shared.Interfaces.Configuration;
|
||||||
using Robust.Shared.Interfaces.Map;
|
using Robust.Shared.Interfaces.Map;
|
||||||
using Robust.Shared.IoC;
|
|
||||||
using Robust.Shared.Log;
|
using Robust.Shared.Log;
|
||||||
using Robust.Shared.Map;
|
using Robust.Shared.Map;
|
||||||
using Robust.Shared.Maths;
|
using Robust.Shared.Maths;
|
||||||
@@ -49,16 +49,6 @@ namespace Content.Server.GameObjects.Components.Atmos
|
|||||||
/// </summary>
|
/// </summary>
|
||||||
private const int LagCheckIterations = 30;
|
private const int LagCheckIterations = 30;
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Max milliseconds allowed for atmos updates.
|
|
||||||
/// </summary>
|
|
||||||
private const float LagCheckMaxMilliseconds = 5f;
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// How much time before atmos updates are ran.
|
|
||||||
/// </summary>
|
|
||||||
private const float AtmosTime = 1/26f;
|
|
||||||
|
|
||||||
public override string Name => "GridAtmosphere";
|
public override string Name => "GridAtmosphere";
|
||||||
|
|
||||||
private bool _paused = false;
|
private bool _paused = false;
|
||||||
@@ -256,7 +246,12 @@ namespace Content.Server.GameObjects.Components.Atmos
|
|||||||
tile.Air ??= new GasMixture(GetVolumeForCells(1), AtmosphereSystem){Temperature = Atmospherics.T20C};
|
tile.Air ??= new GasMixture(GetVolumeForCells(1), AtmosphereSystem){Temperature = Atmospherics.T20C};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// By removing the active tile, we effectively remove its excited group, if any.
|
||||||
|
RemoveActiveTile(tile);
|
||||||
|
|
||||||
|
// Then we activate the tile again.
|
||||||
AddActiveTile(tile);
|
AddActiveTile(tile);
|
||||||
|
|
||||||
tile.BlockedAirflow = GetBlockedDirections(indices);
|
tile.BlockedAirflow = GetBlockedDirections(indices);
|
||||||
|
|
||||||
// TODO ATMOS: Query all the contents of this tile (like walls) and calculate the correct thermal conductivity
|
// TODO ATMOS: Query all the contents of this tile (like walls) and calculate the correct thermal conductivity
|
||||||
@@ -478,20 +473,23 @@ namespace Content.Server.GameObjects.Components.Atmos
|
|||||||
public virtual void Update(float frameTime)
|
public virtual void Update(float frameTime)
|
||||||
{
|
{
|
||||||
_timer += frameTime;
|
_timer += frameTime;
|
||||||
|
var atmosTime = 1f/AtmosphereSystem.AtmosTickRate;
|
||||||
|
|
||||||
if (_invalidatedCoords.Count != 0)
|
if (_invalidatedCoords.Count != 0)
|
||||||
Revalidate();
|
Revalidate();
|
||||||
|
|
||||||
if (_timer < AtmosTime)
|
if (_timer < atmosTime)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
// We subtract it so it takes lost time into account.
|
// We subtract it so it takes lost time into account.
|
||||||
_timer -= AtmosTime;
|
_timer -= atmosTime;
|
||||||
|
|
||||||
|
var maxProcessTime = AtmosphereSystem.AtmosMaxProcessTime;
|
||||||
|
|
||||||
switch (_state)
|
switch (_state)
|
||||||
{
|
{
|
||||||
case ProcessState.TileEqualize:
|
case ProcessState.TileEqualize:
|
||||||
if (!ProcessTileEqualize(_paused))
|
if (!ProcessTileEqualize(_paused, maxProcessTime))
|
||||||
{
|
{
|
||||||
_paused = true;
|
_paused = true;
|
||||||
return;
|
return;
|
||||||
@@ -501,7 +499,7 @@ namespace Content.Server.GameObjects.Components.Atmos
|
|||||||
_state = ProcessState.ActiveTiles;
|
_state = ProcessState.ActiveTiles;
|
||||||
return;
|
return;
|
||||||
case ProcessState.ActiveTiles:
|
case ProcessState.ActiveTiles:
|
||||||
if (!ProcessActiveTiles(_paused))
|
if (!ProcessActiveTiles(_paused, maxProcessTime))
|
||||||
{
|
{
|
||||||
_paused = true;
|
_paused = true;
|
||||||
return;
|
return;
|
||||||
@@ -511,7 +509,7 @@ namespace Content.Server.GameObjects.Components.Atmos
|
|||||||
_state = ProcessState.ExcitedGroups;
|
_state = ProcessState.ExcitedGroups;
|
||||||
return;
|
return;
|
||||||
case ProcessState.ExcitedGroups:
|
case ProcessState.ExcitedGroups:
|
||||||
if (!ProcessExcitedGroups(_paused))
|
if (!ProcessExcitedGroups(_paused, maxProcessTime))
|
||||||
{
|
{
|
||||||
_paused = true;
|
_paused = true;
|
||||||
return;
|
return;
|
||||||
@@ -521,7 +519,7 @@ namespace Content.Server.GameObjects.Components.Atmos
|
|||||||
_state = ProcessState.HighPressureDelta;
|
_state = ProcessState.HighPressureDelta;
|
||||||
return;
|
return;
|
||||||
case ProcessState.HighPressureDelta:
|
case ProcessState.HighPressureDelta:
|
||||||
if (!ProcessHighPressureDelta(_paused))
|
if (!ProcessHighPressureDelta(_paused, maxProcessTime))
|
||||||
{
|
{
|
||||||
_paused = true;
|
_paused = true;
|
||||||
return;
|
return;
|
||||||
@@ -531,7 +529,7 @@ namespace Content.Server.GameObjects.Components.Atmos
|
|||||||
_state = ProcessState.Hotspots;
|
_state = ProcessState.Hotspots;
|
||||||
break;
|
break;
|
||||||
case ProcessState.Hotspots:
|
case ProcessState.Hotspots:
|
||||||
if (!ProcessHotspots(_paused))
|
if (!ProcessHotspots(_paused, maxProcessTime))
|
||||||
{
|
{
|
||||||
_paused = true;
|
_paused = true;
|
||||||
return;
|
return;
|
||||||
@@ -541,7 +539,7 @@ namespace Content.Server.GameObjects.Components.Atmos
|
|||||||
_state = ProcessState.Superconductivity;
|
_state = ProcessState.Superconductivity;
|
||||||
break;
|
break;
|
||||||
case ProcessState.Superconductivity:
|
case ProcessState.Superconductivity:
|
||||||
if (!ProcessSuperconductivity(_paused))
|
if (!ProcessSuperconductivity(_paused, maxProcessTime))
|
||||||
{
|
{
|
||||||
_paused = true;
|
_paused = true;
|
||||||
return;
|
return;
|
||||||
@@ -551,7 +549,7 @@ namespace Content.Server.GameObjects.Components.Atmos
|
|||||||
_state = ProcessState.PipeNet;
|
_state = ProcessState.PipeNet;
|
||||||
break;
|
break;
|
||||||
case ProcessState.PipeNet:
|
case ProcessState.PipeNet:
|
||||||
if (!ProcessPipeNets(_paused))
|
if (!ProcessPipeNets(_paused, maxProcessTime))
|
||||||
{
|
{
|
||||||
_paused = true;
|
_paused = true;
|
||||||
return;
|
return;
|
||||||
@@ -561,21 +559,24 @@ namespace Content.Server.GameObjects.Components.Atmos
|
|||||||
_state = ProcessState.PipeNetDevices;
|
_state = ProcessState.PipeNetDevices;
|
||||||
break;
|
break;
|
||||||
case ProcessState.PipeNetDevices:
|
case ProcessState.PipeNetDevices:
|
||||||
if (!ProcessPipeNetDevices(_paused))
|
if (!ProcessPipeNetDevices(_paused, maxProcessTime))
|
||||||
{
|
{
|
||||||
_paused = true;
|
_paused = true;
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
_paused = false;
|
_paused = false;
|
||||||
_state = ProcessState.TileEqualize;
|
// Next state depends on whether monstermos equalization is enabled or not.
|
||||||
|
// Note: We do this here instead of on the tile equalization step to prevent ending it early.
|
||||||
|
// Therefore, a change to this CVar might only be applied after that step is over.
|
||||||
|
_state = AtmosphereSystem.MonstermosEqualization ? ProcessState.TileEqualize : ProcessState.ActiveTiles;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
UpdateCounter++;
|
UpdateCounter++;
|
||||||
}
|
}
|
||||||
|
|
||||||
public virtual bool ProcessTileEqualize(bool resumed = false)
|
public virtual bool ProcessTileEqualize(bool resumed = false, float lagCheck = 5f)
|
||||||
{
|
{
|
||||||
_stopwatch.Restart();
|
_stopwatch.Restart();
|
||||||
|
|
||||||
@@ -591,7 +592,7 @@ namespace Content.Server.GameObjects.Components.Atmos
|
|||||||
if (number++ < LagCheckIterations) continue;
|
if (number++ < LagCheckIterations) continue;
|
||||||
number = 0;
|
number = 0;
|
||||||
// Process the rest next time.
|
// Process the rest next time.
|
||||||
if (_stopwatch.Elapsed.TotalMilliseconds >= LagCheckMaxMilliseconds)
|
if (_stopwatch.Elapsed.TotalMilliseconds >= lagCheck)
|
||||||
{
|
{
|
||||||
_tileEqualizeLastProcess = _stopwatch.Elapsed.TotalMilliseconds;
|
_tileEqualizeLastProcess = _stopwatch.Elapsed.TotalMilliseconds;
|
||||||
return false;
|
return false;
|
||||||
@@ -602,10 +603,12 @@ namespace Content.Server.GameObjects.Components.Atmos
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
public virtual bool ProcessActiveTiles(bool resumed = false)
|
public virtual bool ProcessActiveTiles(bool resumed = false, float lagCheck = 5f)
|
||||||
{
|
{
|
||||||
_stopwatch.Restart();
|
_stopwatch.Restart();
|
||||||
|
|
||||||
|
var spaceWind = AtmosphereSystem.SpaceWind;
|
||||||
|
|
||||||
if(!resumed)
|
if(!resumed)
|
||||||
_currentRunTiles = new Queue<TileAtmosphere>(_activeTiles);
|
_currentRunTiles = new Queue<TileAtmosphere>(_activeTiles);
|
||||||
|
|
||||||
@@ -613,12 +616,12 @@ namespace Content.Server.GameObjects.Components.Atmos
|
|||||||
while (_currentRunTiles.Count > 0)
|
while (_currentRunTiles.Count > 0)
|
||||||
{
|
{
|
||||||
var tile = _currentRunTiles.Dequeue();
|
var tile = _currentRunTiles.Dequeue();
|
||||||
tile.ProcessCell(UpdateCounter);
|
tile.ProcessCell(UpdateCounter, spaceWind);
|
||||||
|
|
||||||
if (number++ < LagCheckIterations) continue;
|
if (number++ < LagCheckIterations) continue;
|
||||||
number = 0;
|
number = 0;
|
||||||
// Process the rest next time.
|
// Process the rest next time.
|
||||||
if (_stopwatch.Elapsed.TotalMilliseconds >= LagCheckMaxMilliseconds)
|
if (_stopwatch.Elapsed.TotalMilliseconds >= lagCheck)
|
||||||
{
|
{
|
||||||
_activeTilesLastProcess = _stopwatch.Elapsed.TotalMilliseconds;
|
_activeTilesLastProcess = _stopwatch.Elapsed.TotalMilliseconds;
|
||||||
return false;
|
return false;
|
||||||
@@ -629,10 +632,12 @@ namespace Content.Server.GameObjects.Components.Atmos
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
public virtual bool ProcessExcitedGroups(bool resumed = false)
|
public virtual bool ProcessExcitedGroups(bool resumed = false, float lagCheck = 5f)
|
||||||
{
|
{
|
||||||
_stopwatch.Restart();
|
_stopwatch.Restart();
|
||||||
|
|
||||||
|
var spaceIsAllConsuming = AtmosphereSystem.ExcitedGroupsSpaceIsAllConsuming;
|
||||||
|
|
||||||
if(!resumed)
|
if(!resumed)
|
||||||
_currentRunExcitedGroups = new Queue<ExcitedGroup>(_excitedGroups);
|
_currentRunExcitedGroups = new Queue<ExcitedGroup>(_excitedGroups);
|
||||||
|
|
||||||
@@ -644,7 +649,7 @@ namespace Content.Server.GameObjects.Components.Atmos
|
|||||||
excitedGroup.DismantleCooldown++;
|
excitedGroup.DismantleCooldown++;
|
||||||
|
|
||||||
if(excitedGroup.BreakdownCooldown > Atmospherics.ExcitedGroupBreakdownCycles)
|
if(excitedGroup.BreakdownCooldown > Atmospherics.ExcitedGroupBreakdownCycles)
|
||||||
excitedGroup.SelfBreakdown();
|
excitedGroup.SelfBreakdown(spaceIsAllConsuming);
|
||||||
|
|
||||||
else if(excitedGroup.DismantleCooldown > Atmospherics.ExcitedGroupsDismantleCycles)
|
else if(excitedGroup.DismantleCooldown > Atmospherics.ExcitedGroupsDismantleCycles)
|
||||||
excitedGroup.Dismantle();
|
excitedGroup.Dismantle();
|
||||||
@@ -652,7 +657,7 @@ namespace Content.Server.GameObjects.Components.Atmos
|
|||||||
if (number++ < LagCheckIterations) continue;
|
if (number++ < LagCheckIterations) continue;
|
||||||
number = 0;
|
number = 0;
|
||||||
// Process the rest next time.
|
// Process the rest next time.
|
||||||
if (_stopwatch.Elapsed.TotalMilliseconds >= LagCheckMaxMilliseconds)
|
if (_stopwatch.Elapsed.TotalMilliseconds >= lagCheck)
|
||||||
{
|
{
|
||||||
_excitedGroupLastProcess = _stopwatch.Elapsed.TotalMilliseconds;
|
_excitedGroupLastProcess = _stopwatch.Elapsed.TotalMilliseconds;
|
||||||
return false;
|
return false;
|
||||||
@@ -663,7 +668,7 @@ namespace Content.Server.GameObjects.Components.Atmos
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
public virtual bool ProcessHighPressureDelta(bool resumed = false)
|
public virtual bool ProcessHighPressureDelta(bool resumed = false, float lagCheck = 5f)
|
||||||
{
|
{
|
||||||
_stopwatch.Restart();
|
_stopwatch.Restart();
|
||||||
|
|
||||||
@@ -682,7 +687,7 @@ namespace Content.Server.GameObjects.Components.Atmos
|
|||||||
if (number++ < LagCheckIterations) continue;
|
if (number++ < LagCheckIterations) continue;
|
||||||
number = 0;
|
number = 0;
|
||||||
// Process the rest next time.
|
// Process the rest next time.
|
||||||
if (_stopwatch.Elapsed.TotalMilliseconds >= LagCheckMaxMilliseconds)
|
if (_stopwatch.Elapsed.TotalMilliseconds >= lagCheck)
|
||||||
{
|
{
|
||||||
_highPressureDeltaLastProcess = _stopwatch.Elapsed.TotalMilliseconds;
|
_highPressureDeltaLastProcess = _stopwatch.Elapsed.TotalMilliseconds;
|
||||||
return false;
|
return false;
|
||||||
@@ -693,7 +698,7 @@ namespace Content.Server.GameObjects.Components.Atmos
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
protected virtual bool ProcessHotspots(bool resumed = false)
|
protected virtual bool ProcessHotspots(bool resumed = false, float lagCheck = 5f)
|
||||||
{
|
{
|
||||||
_stopwatch.Restart();
|
_stopwatch.Restart();
|
||||||
|
|
||||||
@@ -709,7 +714,7 @@ namespace Content.Server.GameObjects.Components.Atmos
|
|||||||
if (number++ < LagCheckIterations) continue;
|
if (number++ < LagCheckIterations) continue;
|
||||||
number = 0;
|
number = 0;
|
||||||
// Process the rest next time.
|
// Process the rest next time.
|
||||||
if (_stopwatch.Elapsed.TotalMilliseconds >= LagCheckMaxMilliseconds)
|
if (_stopwatch.Elapsed.TotalMilliseconds >= lagCheck)
|
||||||
{
|
{
|
||||||
_hotspotsLastProcess = _stopwatch.Elapsed.TotalMilliseconds;
|
_hotspotsLastProcess = _stopwatch.Elapsed.TotalMilliseconds;
|
||||||
return false;
|
return false;
|
||||||
@@ -720,7 +725,7 @@ namespace Content.Server.GameObjects.Components.Atmos
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
protected virtual bool ProcessSuperconductivity(bool resumed = false)
|
protected virtual bool ProcessSuperconductivity(bool resumed = false, float lagCheck = 5f)
|
||||||
{
|
{
|
||||||
_stopwatch.Restart();
|
_stopwatch.Restart();
|
||||||
|
|
||||||
@@ -736,7 +741,7 @@ namespace Content.Server.GameObjects.Components.Atmos
|
|||||||
if (number++ < LagCheckIterations) continue;
|
if (number++ < LagCheckIterations) continue;
|
||||||
number = 0;
|
number = 0;
|
||||||
// Process the rest next time.
|
// Process the rest next time.
|
||||||
if (_stopwatch.Elapsed.TotalMilliseconds >= LagCheckMaxMilliseconds)
|
if (_stopwatch.Elapsed.TotalMilliseconds >= lagCheck)
|
||||||
{
|
{
|
||||||
_superconductivityLastProcess = _stopwatch.Elapsed.TotalMilliseconds;
|
_superconductivityLastProcess = _stopwatch.Elapsed.TotalMilliseconds;
|
||||||
return false;
|
return false;
|
||||||
@@ -747,7 +752,7 @@ namespace Content.Server.GameObjects.Components.Atmos
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
protected virtual bool ProcessPipeNets(bool resumed = false)
|
protected virtual bool ProcessPipeNets(bool resumed = false, float lagCheck = 5f)
|
||||||
{
|
{
|
||||||
_stopwatch.Restart();
|
_stopwatch.Restart();
|
||||||
|
|
||||||
@@ -763,7 +768,7 @@ namespace Content.Server.GameObjects.Components.Atmos
|
|||||||
if (number++ < LagCheckIterations) continue;
|
if (number++ < LagCheckIterations) continue;
|
||||||
number = 0;
|
number = 0;
|
||||||
// Process the rest next time.
|
// Process the rest next time.
|
||||||
if (_stopwatch.Elapsed.TotalMilliseconds >= LagCheckMaxMilliseconds)
|
if (_stopwatch.Elapsed.TotalMilliseconds >= lagCheck)
|
||||||
{
|
{
|
||||||
_pipeNetLastProcess = _stopwatch.Elapsed.TotalMilliseconds;
|
_pipeNetLastProcess = _stopwatch.Elapsed.TotalMilliseconds;
|
||||||
return false;
|
return false;
|
||||||
@@ -774,7 +779,7 @@ namespace Content.Server.GameObjects.Components.Atmos
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
protected virtual bool ProcessPipeNetDevices(bool resumed = false)
|
protected virtual bool ProcessPipeNetDevices(bool resumed = false, float lagCheck = 5f)
|
||||||
{
|
{
|
||||||
_stopwatch.Restart();
|
_stopwatch.Restart();
|
||||||
|
|
||||||
@@ -790,7 +795,7 @@ namespace Content.Server.GameObjects.Components.Atmos
|
|||||||
if (number++ < LagCheckIterations) continue;
|
if (number++ < LagCheckIterations) continue;
|
||||||
number = 0;
|
number = 0;
|
||||||
// Process the rest next time.
|
// Process the rest next time.
|
||||||
if (_stopwatch.Elapsed.TotalMilliseconds >= LagCheckMaxMilliseconds)
|
if (_stopwatch.Elapsed.TotalMilliseconds >= lagCheck)
|
||||||
{
|
{
|
||||||
_pipeNetDevicesLastProcess = _stopwatch.Elapsed.TotalMilliseconds;
|
_pipeNetDevicesLastProcess = _stopwatch.Elapsed.TotalMilliseconds;
|
||||||
return false;
|
return false;
|
||||||
|
|||||||
@@ -71,42 +71,42 @@ namespace Content.Server.GameObjects.Components.Atmos
|
|||||||
|
|
||||||
public override void Update(float frameTime) { }
|
public override void Update(float frameTime) { }
|
||||||
|
|
||||||
public override bool ProcessTileEqualize(bool resumed = false)
|
public override bool ProcessTileEqualize(bool resumed = false, float lagCheck = 5f)
|
||||||
{
|
{
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
public override bool ProcessActiveTiles(bool resumed = false)
|
public override bool ProcessActiveTiles(bool resumed = false, float lagCheck = 5f)
|
||||||
{
|
{
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
public override bool ProcessExcitedGroups(bool resumed = false)
|
public override bool ProcessExcitedGroups(bool resumed = false, float lagCheck = 5f)
|
||||||
{
|
{
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
public override bool ProcessHighPressureDelta(bool resumed = false)
|
public override bool ProcessHighPressureDelta(bool resumed = false, float lagCheck = 5f)
|
||||||
{
|
{
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
protected override bool ProcessHotspots(bool resumed = false)
|
protected override bool ProcessHotspots(bool resumed = false, float lagCheck = 5f)
|
||||||
{
|
{
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
protected override bool ProcessSuperconductivity(bool resumed = false)
|
protected override bool ProcessSuperconductivity(bool resumed = false, float lagCheck = 5f)
|
||||||
{
|
{
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
protected override bool ProcessPipeNets(bool resumed = false)
|
protected override bool ProcessPipeNets(bool resumed = false, float lagCheck = 5f)
|
||||||
{
|
{
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
protected override bool ProcessPipeNetDevices(bool resumed = false)
|
protected override bool ProcessPipeNetDevices(bool resumed = false, float lagCheck = 5f)
|
||||||
{
|
{
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -5,6 +5,7 @@ using System.Linq;
|
|||||||
using Content.Server.Atmos;
|
using Content.Server.Atmos;
|
||||||
using Content.Server.Atmos.Reactions;
|
using Content.Server.Atmos.Reactions;
|
||||||
using Content.Server.GameObjects.Components.Atmos;
|
using Content.Server.GameObjects.Components.Atmos;
|
||||||
|
using Content.Shared;
|
||||||
using Content.Shared.Atmos;
|
using Content.Shared.Atmos;
|
||||||
using Content.Shared.GameObjects.EntitySystems.Atmos;
|
using Content.Shared.GameObjects.EntitySystems.Atmos;
|
||||||
using Content.Shared.Maps;
|
using Content.Shared.Maps;
|
||||||
@@ -15,6 +16,7 @@ using Robust.Shared.GameObjects;
|
|||||||
using Robust.Shared.GameObjects.Components.Map;
|
using Robust.Shared.GameObjects.Components.Map;
|
||||||
using Robust.Shared.GameObjects.Components.Transform;
|
using Robust.Shared.GameObjects.Components.Transform;
|
||||||
using Robust.Shared.GameObjects.Systems;
|
using Robust.Shared.GameObjects.Systems;
|
||||||
|
using Robust.Shared.Interfaces.Configuration;
|
||||||
using Robust.Shared.Interfaces.GameObjects;
|
using Robust.Shared.Interfaces.GameObjects;
|
||||||
using Robust.Shared.Interfaces.Map;
|
using Robust.Shared.Interfaces.Map;
|
||||||
using Robust.Shared.IoC;
|
using Robust.Shared.IoC;
|
||||||
@@ -30,6 +32,7 @@ namespace Content.Server.GameObjects.EntitySystems
|
|||||||
[Dependency] private readonly IPrototypeManager _protoMan = default!;
|
[Dependency] private readonly IPrototypeManager _protoMan = default!;
|
||||||
[Dependency] private readonly IMapManager _mapManager = default!;
|
[Dependency] private readonly IMapManager _mapManager = default!;
|
||||||
[Dependency] private readonly IPauseManager _pauseManager = default!;
|
[Dependency] private readonly IPauseManager _pauseManager = default!;
|
||||||
|
[Dependency] private readonly IConfigurationManager _cfg = default!;
|
||||||
|
|
||||||
private GasReactionPrototype[] _gasReactions = Array.Empty<GasReactionPrototype>();
|
private GasReactionPrototype[] _gasReactions = Array.Empty<GasReactionPrototype>();
|
||||||
|
|
||||||
@@ -68,6 +71,43 @@ namespace Content.Server.GameObjects.EntitySystems
|
|||||||
|
|
||||||
// Required for airtight components.
|
// Required for airtight components.
|
||||||
EntityManager.EventBus.SubscribeEvent<RotateEvent>(EventSource.Local, this, RotateEvent);
|
EntityManager.EventBus.SubscribeEvent<RotateEvent>(EventSource.Local, this, RotateEvent);
|
||||||
|
|
||||||
|
_cfg.OnValueChanged(CCVars.SpaceWind, OnSpaceWindChanged, true);
|
||||||
|
_cfg.OnValueChanged(CCVars.MonstermosEqualization, OnMonstermosEqualizationChanged, true);
|
||||||
|
_cfg.OnValueChanged(CCVars.AtmosMaxProcessTime, OnAtmosMaxProcessTimeChanged, true);
|
||||||
|
_cfg.OnValueChanged(CCVars.AtmosTickRate, OnAtmosTickRateChanged, true);
|
||||||
|
_cfg.OnValueChanged(CCVars.ExcitedGroupsSpaceIsAllConsuming, OnExcitedGroupsSpaceIsAllConsumingChanged, true);
|
||||||
|
}
|
||||||
|
|
||||||
|
public bool SpaceWind { get; private set; }
|
||||||
|
public bool MonstermosEqualization { get; private set; }
|
||||||
|
public bool ExcitedGroupsSpaceIsAllConsuming { get; private set; }
|
||||||
|
public float AtmosMaxProcessTime { get; private set; }
|
||||||
|
public float AtmosTickRate { get; private set; }
|
||||||
|
|
||||||
|
private void OnExcitedGroupsSpaceIsAllConsumingChanged(bool obj)
|
||||||
|
{
|
||||||
|
ExcitedGroupsSpaceIsAllConsuming = obj;
|
||||||
|
}
|
||||||
|
|
||||||
|
private void OnAtmosTickRateChanged(float obj)
|
||||||
|
{
|
||||||
|
AtmosTickRate = obj;
|
||||||
|
}
|
||||||
|
|
||||||
|
private void OnAtmosMaxProcessTimeChanged(float obj)
|
||||||
|
{
|
||||||
|
AtmosMaxProcessTime = obj;
|
||||||
|
}
|
||||||
|
|
||||||
|
private void OnMonstermosEqualizationChanged(bool obj)
|
||||||
|
{
|
||||||
|
MonstermosEqualization = obj;
|
||||||
|
}
|
||||||
|
|
||||||
|
private void OnSpaceWindChanged(bool obj)
|
||||||
|
{
|
||||||
|
SpaceWind = obj;
|
||||||
}
|
}
|
||||||
|
|
||||||
public override void Shutdown()
|
public override void Shutdown()
|
||||||
|
|||||||
@@ -151,6 +151,36 @@ namespace Content.Shared
|
|||||||
public static readonly CVarDef<bool> AdminAnnounceLogout =
|
public static readonly CVarDef<bool> AdminAnnounceLogout =
|
||||||
CVarDef.Create("admin.announce_logout", true, CVar.SERVERONLY);
|
CVarDef.Create("admin.announce_logout", true, CVar.SERVERONLY);
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Atmos
|
||||||
|
*/
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Whether gas differences will move entities.
|
||||||
|
/// </summary>
|
||||||
|
public static readonly CVarDef<bool> SpaceWind =
|
||||||
|
CVarDef.Create("atmos.space_wind", true, CVar.SERVERONLY);
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Whether monstermos tile equalization is enabled.
|
||||||
|
/// </summary>
|
||||||
|
public static readonly CVarDef<bool> MonstermosEqualization =
|
||||||
|
CVarDef.Create("atmos.monstermos_equalization", true, CVar.SERVERONLY);
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Maximum time in milliseconds that atmos can take processing.
|
||||||
|
/// </summary>
|
||||||
|
public static readonly CVarDef<float> AtmosMaxProcessTime =
|
||||||
|
CVarDef.Create("atmos.max_process_time", 5f, CVar.SERVERONLY);
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Atmos tickrate in TPS. Atmos processing will happen every 1/TPS seconds.
|
||||||
|
/// </summary>
|
||||||
|
public static readonly CVarDef<float> AtmosTickRate =
|
||||||
|
CVarDef.Create("atmos.tickrate", 26f, CVar.SERVERONLY);
|
||||||
|
|
||||||
|
public static readonly CVarDef<bool> ExcitedGroupsSpaceIsAllConsuming =
|
||||||
|
CVarDef.Create("atmos.excited_groups_space_is_all_consuming", false, CVar.SERVERONLY);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Branding stuff
|
* Branding stuff
|
||||||
|
|||||||
@@ -118,6 +118,7 @@
|
|||||||
<s:Boolean x:Key="/Default/UserDictionary/Words/=lerping/@EntryIndexedValue">True</s:Boolean>
|
<s:Boolean x:Key="/Default/UserDictionary/Words/=lerping/@EntryIndexedValue">True</s:Boolean>
|
||||||
<s:Boolean x:Key="/Default/UserDictionary/Words/=metabolizable/@EntryIndexedValue">True</s:Boolean>
|
<s:Boolean x:Key="/Default/UserDictionary/Words/=metabolizable/@EntryIndexedValue">True</s:Boolean>
|
||||||
<s:Boolean x:Key="/Default/UserDictionary/Words/=mommi/@EntryIndexedValue">True</s:Boolean>
|
<s:Boolean x:Key="/Default/UserDictionary/Words/=mommi/@EntryIndexedValue">True</s:Boolean>
|
||||||
|
<s:Boolean x:Key="/Default/UserDictionary/Words/=Monstermos/@EntryIndexedValue">True</s:Boolean>
|
||||||
<s:Boolean x:Key="/Default/UserDictionary/Words/=Noto/@EntryIndexedValue">True</s:Boolean>
|
<s:Boolean x:Key="/Default/UserDictionary/Words/=Noto/@EntryIndexedValue">True</s:Boolean>
|
||||||
<s:Boolean x:Key="/Default/UserDictionary/Words/=occluder/@EntryIndexedValue">True</s:Boolean>
|
<s:Boolean x:Key="/Default/UserDictionary/Words/=occluder/@EntryIndexedValue">True</s:Boolean>
|
||||||
<s:Boolean x:Key="/Default/UserDictionary/Words/=Occluders/@EntryIndexedValue">True</s:Boolean>
|
<s:Boolean x:Key="/Default/UserDictionary/Words/=Occluders/@EntryIndexedValue">True</s:Boolean>
|
||||||
@@ -151,6 +152,7 @@
|
|||||||
<s:Boolean x:Key="/Default/UserDictionary/Words/=Teleporter/@EntryIndexedValue">True</s:Boolean>
|
<s:Boolean x:Key="/Default/UserDictionary/Words/=Teleporter/@EntryIndexedValue">True</s:Boolean>
|
||||||
<s:Boolean x:Key="/Default/UserDictionary/Words/=Thermite/@EntryIndexedValue">True</s:Boolean>
|
<s:Boolean x:Key="/Default/UserDictionary/Words/=Thermite/@EntryIndexedValue">True</s:Boolean>
|
||||||
<s:Boolean x:Key="/Default/UserDictionary/Words/=Thonk/@EntryIndexedValue">True</s:Boolean>
|
<s:Boolean x:Key="/Default/UserDictionary/Words/=Thonk/@EntryIndexedValue">True</s:Boolean>
|
||||||
|
<s:Boolean x:Key="/Default/UserDictionary/Words/=tickrate/@EntryIndexedValue">True</s:Boolean>
|
||||||
<s:Boolean x:Key="/Default/UserDictionary/Words/=Transen/@EntryIndexedValue">True</s:Boolean>
|
<s:Boolean x:Key="/Default/UserDictionary/Words/=Transen/@EntryIndexedValue">True</s:Boolean>
|
||||||
<s:Boolean x:Key="/Default/UserDictionary/Words/=unanchor/@EntryIndexedValue">True</s:Boolean>
|
<s:Boolean x:Key="/Default/UserDictionary/Words/=unanchor/@EntryIndexedValue">True</s:Boolean>
|
||||||
<s:Boolean x:Key="/Default/UserDictionary/Words/=Uncuff/@EntryIndexedValue">True</s:Boolean>
|
<s:Boolean x:Key="/Default/UserDictionary/Words/=Uncuff/@EntryIndexedValue">True</s:Boolean>
|
||||||
|
|||||||
Reference in New Issue
Block a user