diff --git a/Content.Server/Atmos/Components/MovedByPressureComponent.cs b/Content.Server/Atmos/Components/MovedByPressureComponent.cs index bd231a4ac4..dc85ca7dde 100644 --- a/Content.Server/Atmos/Components/MovedByPressureComponent.cs +++ b/Content.Server/Atmos/Components/MovedByPressureComponent.cs @@ -110,18 +110,4 @@ namespace Content.Server.Atmos.Components } } } - - public static class MovedByPressureExtensions - { - public static bool IsMovedByPressure(this EntityUid entity) - { - return entity.IsMovedByPressure(out _); - } - - public static bool IsMovedByPressure(this EntityUid entity, [NotNullWhen(true)] out MovedByPressureComponent? moved) - { - return IoCManager.Resolve().TryGetComponent(entity, out moved) && - moved.Enabled; - } - } } diff --git a/Content.Server/Atmos/EntitySystems/AtmosphereSystem.HighPressureDelta.cs b/Content.Server/Atmos/EntitySystems/AtmosphereSystem.HighPressureDelta.cs index 09a2a47446..a164de3b1b 100644 --- a/Content.Server/Atmos/EntitySystems/AtmosphereSystem.HighPressureDelta.cs +++ b/Content.Server/Atmos/EntitySystems/AtmosphereSystem.HighPressureDelta.cs @@ -2,12 +2,9 @@ using Content.Server.Atmos.Components; using Content.Shared.Atmos; using Content.Shared.Audio; using Robust.Shared.Audio; -using Robust.Shared.Containers; using Robust.Shared.GameObjects; -using Robust.Shared.IoC; using Robust.Shared.Map; using Robust.Shared.Maths; -using Robust.Shared.Physics; using Robust.Shared.Player; using Robust.Shared.ViewVariables; @@ -22,7 +19,7 @@ namespace Content.Server.Atmos.EntitySystems [ViewVariables(VVAccess.ReadWrite)] public string? SpaceWindSound { get; private set; } = "/Audio/Effects/space_wind.ogg"; - private void HighPressureMovements(GridAtmosphereComponent gridAtmosphere, TileAtmosphere tile) + private void HighPressureMovements(GridAtmosphereComponent gridAtmosphere, TileAtmosphere tile, EntityQuery bodies, EntityQuery xforms, EntityQuery pressureQuery) { // TODO ATMOS finish this @@ -39,9 +36,10 @@ namespace Content.Server.Atmos.EntitySystems foreach (var entity in _lookup.GetEntitiesIntersecting(tile.GridIndex, tile.GridIndices)) { - if (!HasComp(entity) - || !entity.IsMovedByPressure(out var pressure) - || entity.IsInContainer()) + // Ideally containers would have their own EntityQuery internally or something given recursively it may need to slam GetComp anyway. + if (!bodies.HasComponent(entity) + || !pressureQuery.TryGetComponent(entity, out var pressure) || !pressure.Enabled + || _containers.IsEntityInContainer(entity, xforms.GetComponent(entity))) continue; var pressureMovements = EnsureComp(entity); diff --git a/Content.Server/Atmos/EntitySystems/AtmosphereSystem.Processing.cs b/Content.Server/Atmos/EntitySystems/AtmosphereSystem.Processing.cs index 7271e138ab..5a8b21f99a 100644 --- a/Content.Server/Atmos/EntitySystems/AtmosphereSystem.Processing.cs +++ b/Content.Server/Atmos/EntitySystems/AtmosphereSystem.Processing.cs @@ -220,9 +220,13 @@ namespace Content.Server.Atmos.EntitySystems atmosphere.CurrentRunTiles = new Queue(atmosphere.HighPressureDelta); var number = 0; + var bodies = EntityManager.GetEntityQuery(); + var xforms = EntityManager.GetEntityQuery(); + var pressureQuery = EntityManager.GetEntityQuery(); + while (atmosphere.CurrentRunTiles.TryDequeue(out var tile)) { - HighPressureMovements(atmosphere, tile); + HighPressureMovements(atmosphere, tile, bodies, xforms, pressureQuery); tile.PressureDifference = 0f; tile.PressureSpecificTarget = null; atmosphere.HighPressureDelta.Remove(tile); diff --git a/Content.Server/Atmos/EntitySystems/AtmosphereSystem.cs b/Content.Server/Atmos/EntitySystems/AtmosphereSystem.cs index 0231049cde..782f32d762 100644 --- a/Content.Server/Atmos/EntitySystems/AtmosphereSystem.cs +++ b/Content.Server/Atmos/EntitySystems/AtmosphereSystem.cs @@ -10,6 +10,7 @@ using Content.Shared.Atmos.EntitySystems; using Content.Shared.Maps; using JetBrains.Annotations; using Robust.Shared.Console; +using Robust.Shared.Containers; using Robust.Shared.GameObjects; using Robust.Shared.IoC; using Robust.Shared.Map; @@ -24,6 +25,7 @@ namespace Content.Server.Atmos.EntitySystems { [Dependency] private readonly IMapManager _mapManager = default!; [Dependency] private readonly AdminLogSystem _adminLog = default!; + [Dependency] private readonly SharedContainerSystem _containers = default!; private const float ExposedUpdateDelay = 1f; private float _exposedTimer = 0f;