Fixes that annoying atmos zero pressure bug I've constantly been pinged and nagged about for like the past few days.

This commit is contained in:
Vera Aguilera Puerto
2021-11-11 16:15:14 +01:00
parent 7b4da352df
commit 1b01247c5f
4 changed files with 21 additions and 10 deletions

View File

@@ -42,12 +42,7 @@ namespace Content.Server.Atmos.EntitySystems
{ {
SetAirblocked(airtight, false); SetAirblocked(airtight, false);
InvalidatePosition(airtight.LastPosition.Item1, airtight.LastPosition.Item2); InvalidatePosition(airtight.LastPosition.Item1, airtight.LastPosition.Item2, airtight.FixVacuum);
if (airtight.FixVacuum)
{
_atmosphereSystem.FixVacuum(airtight.LastPosition.Item1, airtight.LastPosition.Item2);
}
} }
private void OnMapInit(EntityUid uid, AirtightComponent airtight, MapInitEvent args) private void OnMapInit(EntityUid uid, AirtightComponent airtight, MapInitEvent args)
@@ -89,16 +84,19 @@ namespace Content.Server.Atmos.EntitySystems
var grid = _mapManager.GetGrid(airtight.Owner.Transform.GridID); var grid = _mapManager.GetGrid(airtight.Owner.Transform.GridID);
airtight.LastPosition = (airtight.Owner.Transform.GridID, grid.TileIndicesFor(airtight.Owner.Transform.Coordinates)); airtight.LastPosition = (airtight.Owner.Transform.GridID, grid.TileIndicesFor(airtight.Owner.Transform.Coordinates));
InvalidatePosition(airtight.LastPosition.Item1, airtight.LastPosition.Item2); InvalidatePosition(airtight.LastPosition.Item1, airtight.LastPosition.Item2, airtight.FixVacuum && !airtight.AirBlocked);
} }
public void InvalidatePosition(GridId gridId, Vector2i pos) public void InvalidatePosition(GridId gridId, Vector2i pos, bool fixVacuum = false)
{ {
if (!gridId.IsValid()) if (!gridId.IsValid())
return; return;
_atmosphereSystem.UpdateAdjacent(gridId, pos); _atmosphereSystem.UpdateAdjacent(gridId, pos);
_atmosphereSystem.InvalidateTile(gridId, pos); _atmosphereSystem.InvalidateTile(gridId, pos);
if(fixVacuum)
_atmosphereSystem.FixVacuum(gridId, pos);
} }
private AtmosDirection Rotate(AtmosDirection myDirection, Angle myAngle) private AtmosDirection Rotate(AtmosDirection myDirection, Angle myAngle)

View File

@@ -988,6 +988,7 @@ namespace Content.Server.Atmos.EntitySystems
private void UpdateAdjacent(IMapGrid mapGrid, GridAtmosphereComponent gridAtmosphere, TileAtmosphere tileAtmosphere) private void UpdateAdjacent(IMapGrid mapGrid, GridAtmosphereComponent gridAtmosphere, TileAtmosphere tileAtmosphere)
{ {
tileAtmosphere.AdjacentBits = AtmosDirection.Invalid; tileAtmosphere.AdjacentBits = AtmosDirection.Invalid;
tileAtmosphere.BlockedAirflow = GetBlockedDirections(mapGrid, tileAtmosphere.GridIndices);
for (var i = 0; i < Atmospherics.Directions; i++) for (var i = 0; i < Atmospherics.Directions; i++)
{ {
@@ -1006,6 +1007,9 @@ namespace Content.Server.Atmos.EntitySystems
tileAtmosphere.AdjacentBits |= direction; tileAtmosphere.AdjacentBits |= direction;
} }
} }
if (!tileAtmosphere.AdjacentBits.IsFlagSet(tileAtmosphere.MonstermosInfo.CurrentTransferDirection))
tileAtmosphere.MonstermosInfo.CurrentTransferDirection = AtmosDirection.Invalid;
} }
/// <summary> /// <summary>
@@ -1071,6 +1075,9 @@ namespace Content.Server.Atmos.EntitySystems
{ {
tile.AdjacentBits &= ~direction; tile.AdjacentBits &= ~direction;
} }
if (!tile.AdjacentBits.IsFlagSet(tile.MonstermosInfo.CurrentTransferDirection))
tile.MonstermosInfo.CurrentTransferDirection = AtmosDirection.Invalid;
} }
#endregion #endregion

View File

@@ -65,7 +65,6 @@ namespace Content.Server.Atmos.EntitySystems
var isAirBlocked = IsTileAirBlocked(mapGrid, indices); var isAirBlocked = IsTileAirBlocked(mapGrid, indices);
tile.BlockedAirflow = GetBlockedDirections(mapGrid, indices);
UpdateAdjacent(mapGrid, atmosphere, tile); UpdateAdjacent(mapGrid, atmosphere, tile);
if (IsTileSpace(mapGrid, indices) && !isAirBlocked) if (IsTileSpace(mapGrid, indices) && !isAirBlocked)

View File

@@ -366,6 +366,11 @@ namespace Content.Server.Doors.Components
occluder.Enabled = false; occluder.Enabled = false;
} }
if (Owner.TryGetComponent(out AirtightComponent? airtight))
{
EntitySystem.Get<AirtightSystem>().SetAirblocked(airtight, false);
}
_stateChangeCancelTokenSource?.Cancel(); _stateChangeCancelTokenSource?.Cancel();
_stateChangeCancelTokenSource = new(); _stateChangeCancelTokenSource = new();
@@ -387,11 +392,13 @@ namespace Content.Server.Doors.Components
protected override void OnPartialOpen() protected override void OnPartialOpen()
{ {
base.OnPartialOpen();
if (Owner.TryGetComponent(out AirtightComponent? airtight)) if (Owner.TryGetComponent(out AirtightComponent? airtight))
{ {
EntitySystem.Get<AirtightSystem>().SetAirblocked(airtight, false); EntitySystem.Get<AirtightSystem>().SetAirblocked(airtight, false);
} }
base.OnPartialOpen();
Owner.EntityManager.EventBus.RaiseEvent(EventSource.Local, new AccessReaderChangeMessage(Owner, false)); Owner.EntityManager.EventBus.RaiseEvent(EventSource.Local, new AccessReaderChangeMessage(Owner, false));
} }