diff --git a/Content.Server/Atmos/EntitySystems/AtmosphereSystem.HighPressureDelta.cs b/Content.Server/Atmos/EntitySystems/AtmosphereSystem.HighPressureDelta.cs index 757aef743edb..01e1f5ccd959 100644 --- a/Content.Server/Atmos/EntitySystems/AtmosphereSystem.HighPressureDelta.cs +++ b/Content.Server/Atmos/EntitySystems/AtmosphereSystem.HighPressureDelta.cs @@ -104,6 +104,19 @@ private void HighPressureMovements(GridAtmosphereComponent gridAtmosphere, TileA } } + + if (tile.PressureDifference > 100) + { + // TODO ATMOS Do space wind graphics here! + } + + if (_spaceWindSoundCooldown++ > SpaceWindSoundCooldownCycles) + _spaceWindSoundCooldown = 0; + + // No atmos yeets, return early. + if (!SpaceWind) + return; + // Used by ExperiencePressureDifference to correct push/throw directions from tile-relative to physics world. var gridWorldRotation = xforms.GetComponent(gridAtmosphere.Owner).WorldRotation; @@ -134,25 +147,18 @@ private void HighPressureMovements(GridAtmosphereComponent gridAtmosphere, TileA } } - - if (tile.PressureDifference > 100) - { - // TODO ATMOS Do space wind graphics here! - } - - if (_spaceWindSoundCooldown++ > SpaceWindSoundCooldownCycles) - _spaceWindSoundCooldown = 0; } // Called from AtmosphereSystem.LINDA.cs with SpaceWind CVar check handled there. - private void ConsiderPressureDifference(GridAtmosphereComponent gridAtmosphere, TileAtmosphere tile, TileAtmosphere other, float difference) + private void ConsiderPressureDifference(GridAtmosphereComponent gridAtmosphere, TileAtmosphere tile, AtmosDirection differenceDirection, float difference) { gridAtmosphere.HighPressureDelta.Add(tile); - if (difference > tile.PressureDifference) - { - tile.PressureDifference = difference; - tile.PressureDirection = (tile.GridIndices - other.GridIndices).GetDir().ToAtmosDirection(); - } + + if (difference <= tile.PressureDifference) + return; + + tile.PressureDifference = difference; + tile.PressureDirection = differenceDirection; } public void ExperiencePressureDifference( diff --git a/Content.Server/Atmos/EntitySystems/AtmosphereSystem.LINDA.cs b/Content.Server/Atmos/EntitySystems/AtmosphereSystem.LINDA.cs index b43df3a3eedc..e6b76bb9a14b 100644 --- a/Content.Server/Atmos/EntitySystems/AtmosphereSystem.LINDA.cs +++ b/Content.Server/Atmos/EntitySystems/AtmosphereSystem.LINDA.cs @@ -80,15 +80,16 @@ private void ProcessCell(GridAtmosphereComponent gridAtmosphere, TileAtmosphere { var difference = Share(tile.Air!, enemyTile.Air!, adjacentTileLength); - if (SpaceWind) + // Monstermos already handles this, so let's not handle it ourselves. + if (!MonstermosEqualization) { - if (difference > 0) + if (difference >= 0) { - ConsiderPressureDifference(gridAtmosphere, tile, enemyTile, difference); + ConsiderPressureDifference(gridAtmosphere, tile, direction, difference); } else { - ConsiderPressureDifference(gridAtmosphere, enemyTile, tile, -difference); + ConsiderPressureDifference(gridAtmosphere, enemyTile, direction.GetOpposite(), -difference); } } diff --git a/Content.Server/Atmos/EntitySystems/AtmosphereSystem.Monstermos.cs b/Content.Server/Atmos/EntitySystems/AtmosphereSystem.Monstermos.cs index 25b7abc5d216..186f32eb0efe 100644 --- a/Content.Server/Atmos/EntitySystems/AtmosphereSystem.Monstermos.cs +++ b/Content.Server/Atmos/EntitySystems/AtmosphereSystem.Monstermos.cs @@ -547,18 +547,17 @@ private void FinalizeEq(GridAtmosphereComponent gridAtmosphere, TileAtmosphere t var amount = transferDirections[i]; var otherTile = tile.AdjacentTiles[i]; if (otherTile?.Air == null) continue; - if (amount > 0) - { - // Everything that calls this method already ensures that Air will not be null. - if (tile.Air!.TotalMoles < amount) - FinalizeEqNeighbors(gridAtmosphere, tile, transferDirections); - - otherTile.MonstermosInfo[direction.GetOpposite()] = 0; - Merge(otherTile.Air, tile.Air.Remove(amount)); - InvalidateVisuals(tile.GridIndex, tile.GridIndices); - InvalidateVisuals(otherTile.GridIndex, otherTile.GridIndices); - ConsiderPressureDifference(gridAtmosphere, tile, otherTile, amount); - } + if (amount <= 0) continue; + + // Everything that calls this method already ensures that Air will not be null. + if (tile.Air!.TotalMoles < amount) + FinalizeEqNeighbors(gridAtmosphere, tile, transferDirections); + + otherTile.MonstermosInfo[direction.GetOpposite()] = 0; + Merge(otherTile.Air, tile.Air.Remove(amount)); + InvalidateVisuals(tile.GridIndex, tile.GridIndices); + InvalidateVisuals(otherTile.GridIndex, otherTile.GridIndices); + ConsiderPressureDifference(gridAtmosphere, tile, direction, amount); } } diff --git a/Content.Server/Atmos/EntitySystems/AtmosphereSystem.Processing.cs b/Content.Server/Atmos/EntitySystems/AtmosphereSystem.Processing.cs index 19924c74c0a9..b7fe0207bcd9 100644 --- a/Content.Server/Atmos/EntitySystems/AtmosphereSystem.Processing.cs +++ b/Content.Server/Atmos/EntitySystems/AtmosphereSystem.Processing.cs @@ -219,6 +219,8 @@ private bool ProcessHighPressureDelta(GridAtmosphereComponent atmosphere) if(!atmosphere.ProcessingPaused) atmosphere.CurrentRunTiles = new Queue(atmosphere.HighPressureDelta); + // Note: This is still processed even if space wind is turned off since this handles playing the sounds. + var number = 0; var bodies = EntityManager.GetEntityQuery(); var xforms = EntityManager.GetEntityQuery();