Fix deconstructing walls creating an atmos void.

This caused a lot of high pressure movements.
This commit is contained in:
Víctor Aguilera Puerto
2020-08-15 16:36:51 +02:00
parent 898e278266
commit 67fbdb96b3
4 changed files with 31 additions and 23 deletions

View File

@@ -175,18 +175,7 @@ namespace Content.Server.GameObjects.Components.Atmos
{
if (tile.Air == null && obs.FixVacuum)
{
var adjacent = GetAdjacentTiles(indices);
tile.Air = new GasMixture(GetVolumeForCells(1)){Temperature = Atmospherics.T20C};
_tiles[indices] = tile;
var ratio = 1f / adjacent.Count;
foreach (var (direction, adj) in adjacent)
{
var mix = adj.Air.RemoveRatio(ratio);
tile.Air.Merge(mix);
adj.Air.Merge(mix);
}
FixVacuum(tile.GridIndices);
}
}
@@ -208,6 +197,25 @@ namespace Content.Server.GameObjects.Components.Atmos
_invalidatedCoords.Clear();
}
/// <inheritdoc />
public void FixVacuum(MapIndices indices)
{
var tile = GetTile(indices);
if (tile?.GridIndex != _grid.Index) return;
var adjacent = GetAdjacentTiles(indices);
tile.Air = new GasMixture(GetVolumeForCells(1)){Temperature = Atmospherics.T20C};
_tiles[indices] = tile;
var ratio = 1f / adjacent.Count;
foreach (var (direction, adj) in adjacent)
{
var mix = adj.Air.RemoveRatio(ratio);
tile.Air.Merge(mix);
adj.Air.Merge(mix);
}
}
/// <inheritdoc />
[MethodImpl(MethodImplOptions.AggressiveInlining)]
public void AddActiveTile(TileAtmosphere tile)