ECS Atmos Part 4: Moves all atmos logic from TileAtmosphere to AtmosphereSystem. (#4295)

* Moves all atmos logic from TileAtmosphere to AtmosphereSystem.

* Atmos uses grid anchoring to check for firelocks instead of grid tile lookups.

* CVar for space wind sound

* CVar for explosive depressurization
This commit is contained in:
Vera Aguilera Puerto
2021-07-20 18:03:49 +02:00
committed by GitHub
parent e1fdd902bb
commit fcafa8f439
17 changed files with 1165 additions and 1121 deletions

View File

@@ -163,15 +163,15 @@ namespace Content.Server.Atmos.EntitySystems
if (ComponentManager.TryGetComponent(mapGrid.GridEntityId, out GridAtmosphereComponent? gridAtmosphere))
{
foreach (var tileAtmos in gridAtmosphere)
foreach (var tile in gridAtmosphere)
{
if (tileAtmos?.Air == null)
if (tile?.Air == null)
continue;
if(invalidate)
tileAtmos.Invalidate();
gridAtmosphere.Invalidate(tile.GridIndices);
yield return tileAtmos.Air;
yield return tile.Air;
}
}
}
@@ -560,7 +560,7 @@ namespace Content.Server.Atmos.EntitySystems
{
var tileAtmos = gridAtmosphere.GetTile(tile)!;
for (var i = 0; i < tileAtmos.AdjacentTiles.Count; i++)
for (var i = 0; i < tileAtmos.AdjacentTiles.Length; i++)
{
var adjacentTile = tileAtmos.AdjacentTiles[i];
// TileAtmosphere has nullable disabled, so just in case...
@@ -634,7 +634,7 @@ namespace Content.Server.Atmos.EntitySystems
{
var tileAtmos = gridAtmosphere.GetTile(tile)!;
for (var i = 0; i < tileAtmos.AdjacentTiles.Count; i++)
for (var i = 0; i < tileAtmos.AdjacentTiles.Length; i++)
{
var adjacentTile = tileAtmos.AdjacentTiles[i];
@@ -651,7 +651,7 @@ namespace Content.Server.Atmos.EntitySystems
}
if (invalidate)
adjacentTile.Invalidate();
gridAtmosphere.Invalidate(adjacentTile.GridIndices);
yield return adjacentTile.Air;
}
@@ -747,7 +747,12 @@ namespace Content.Server.Atmos.EntitySystems
if (ComponentManager.TryGetComponent(mapGrid.GridEntityId, out GridAtmosphereComponent? gridAtmosphere))
{
gridAtmosphere.GetTile(tile, false)?.HotspotExpose(exposedTemperature, exposedVolume, soh);
var tileAtmosphere = gridAtmosphere.GetTile(tile, false);
if (tileAtmosphere == null)
return;
HotspotExpose(gridAtmosphere, tileAtmosphere, exposedTemperature, exposedVolume, soh);
gridAtmosphere.Invalidate(tile);
return;
}