diff --git a/Content.Server/Explosion/EntitySystems/ExplosionGridTileFlood.cs b/Content.Server/Explosion/EntitySystems/ExplosionGridTileFlood.cs index fd5a895481..da3ce635af 100644 --- a/Content.Server/Explosion/EntitySystems/ExplosionGridTileFlood.cs +++ b/Content.Server/Explosion/EntitySystems/ExplosionGridTileFlood.cs @@ -11,7 +11,7 @@ namespace Content.Server.Explosion.EntitySystems; /// public sealed class ExplosionGridTileFlood : ExplosionTileFlood { - public MapGridComponent Grid; + public Entity Grid; private bool _needToTransform = false; private Matrix3x2 _matrix = Matrix3x2.Identity; @@ -37,7 +37,7 @@ public sealed class ExplosionGridTileFlood : ExplosionTileFlood private Dictionary _edgeTiles; public ExplosionGridTileFlood( - MapGridComponent grid, + Entity grid, Dictionary airtightMap, float maxIntensity, float intensityStepSize, @@ -73,7 +73,7 @@ public sealed class ExplosionGridTileFlood : ExplosionTileFlood var transformSystem = entityManager.System(); var transform = entityManager.GetComponent(Grid.Owner); - var size = (float)Grid.TileSize; + var size = (float)Grid.Comp.TileSize; _matrix.M31 = size / 2; _matrix.M32 = size / 2; diff --git a/Content.Server/Explosion/EntitySystems/ExplosionSystem.GridMap.cs b/Content.Server/Explosion/EntitySystems/ExplosionSystem.GridMap.cs index 1b68338eca..b067b2b626 100644 --- a/Content.Server/Explosion/EntitySystems/ExplosionSystem.GridMap.cs +++ b/Content.Server/Explosion/EntitySystems/ExplosionSystem.GridMap.cs @@ -31,7 +31,7 @@ public sealed partial class ExplosionSystem foreach (var tileRef in _map.GetAllTiles(ev.EntityUid, grid)) { - if (IsEdge(grid, tileRef.GridIndices, out var dir)) + if (IsEdge((ev.EntityUid, grid), tileRef.GridIndices, out var dir)) edges.Add(tileRef.GridIndices, dir); } } @@ -290,7 +290,7 @@ public sealed partial class ExplosionSystem } // finally check if the new tile is itself an edge tile - if (IsEdge(grid, change.GridIndices, out var spaceDir)) + if (IsEdge((ev.Entity, grid), change.GridIndices, out var spaceDir)) edges.Add(change.GridIndices, spaceDir); } } @@ -302,12 +302,12 @@ public sealed partial class ExplosionSystem /// Optionally ignore a specific Vector2i. Used by when we already know that a /// given tile is not space. This avoids unnecessary TryGetTileRef calls. /// - private bool IsEdge(MapGridComponent grid, Vector2i index, out NeighborFlag spaceDirections) + private bool IsEdge(Entity grid, Vector2i index, out NeighborFlag spaceDirections) { spaceDirections = NeighborFlag.Invalid; for (var i = 0; i < NeighbourVectors.Length; i++) { - if (!grid.TryGetTileRef(index + NeighbourVectors[i], out var neighborTile) || neighborTile.Tile.IsEmpty) + if (!_mapSystem.TryGetTileRef(grid, grid.Comp, index + NeighbourVectors[i], out var neighborTile) || neighborTile.Tile.IsEmpty) spaceDirections |= (NeighborFlag) (1 << i); } diff --git a/Content.Server/Explosion/EntitySystems/ExplosionSystem.Processing.cs b/Content.Server/Explosion/EntitySystems/ExplosionSystem.Processing.cs index 5909bd14ad..3f08532e37 100644 --- a/Content.Server/Explosion/EntitySystems/ExplosionSystem.Processing.cs +++ b/Content.Server/Explosion/EntitySystems/ExplosionSystem.Processing.cs @@ -300,7 +300,7 @@ public sealed partial class ExplosionSystem /// /// Same as , but for SPAAAAAAACE. /// - internal void ExplodeSpace(BroadphaseComponent lookup, + internal void ExplodeSpace(Entity lookup, Matrix3x2 spaceMatrix, Matrix3x2 invSpaceMatrix, Vector2i tile, @@ -318,10 +318,10 @@ public sealed partial class ExplosionSystem var state = (list, processed, invSpaceMatrix, lookup.Owner, EntityManager.TransformQuery, gridBox, _transformSystem); // get entities: - lookup.DynamicTree.QueryAabb(ref state, SpaceQueryCallback, worldBox, true); - lookup.StaticTree.QueryAabb(ref state, SpaceQueryCallback, worldBox, true); - lookup.SundriesTree.QueryAabb(ref state, SpaceQueryCallback, worldBox, true); - lookup.StaticSundriesTree.QueryAabb(ref state, SpaceQueryCallback, worldBox, true); + lookup.Comp.DynamicTree.QueryAabb(ref state, SpaceQueryCallback, worldBox, true); + lookup.Comp.StaticTree.QueryAabb(ref state, SpaceQueryCallback, worldBox, true); + lookup.Comp.SundriesTree.QueryAabb(ref state, SpaceQueryCallback, worldBox, true); + lookup.Comp.StaticSundriesTree.QueryAabb(ref state, SpaceQueryCallback, worldBox, true); foreach (var (uid, xform) in state.Item1) { @@ -335,8 +335,8 @@ public sealed partial class ExplosionSystem // Also, throw any entities that were spawned as shrapnel. Compared to entity spawning & destruction, this extra // lookup is relatively minor computational cost, and throwing is disabled for nukes anyways. list.Clear(); - lookup.DynamicTree.QueryAabb(ref state, SpaceQueryCallback, worldBox, true); - lookup.SundriesTree.QueryAabb(ref state, SpaceQueryCallback, worldBox, true); + lookup.Comp.DynamicTree.QueryAabb(ref state, SpaceQueryCallback, worldBox, true); + lookup.Comp.SundriesTree.QueryAabb(ref state, SpaceQueryCallback, worldBox, true); foreach (var (uid, xform) in list) { @@ -569,12 +569,12 @@ sealed class Explosion /// /// Lookup component for this grid (or space/map). /// - public BroadphaseComponent Lookup; + public Entity Lookup; /// /// The actual grid that this corresponds to. If null, this implies space. /// - public MapGridComponent? MapGrid; + public Entity? MapGrid; } private readonly List _explosionData = new(); @@ -625,8 +625,8 @@ sealed class Explosion #if DEBUG private DamageSpecifier? _expectedDamage; #endif - private BroadphaseComponent _currentLookup = default!; - private MapGridComponent? _currentGrid; + private Entity _currentLookup = default!; + private Entity? _currentGrid; private float _currentIntensity; private float _currentThrowForce; private List.Enumerator _currentEnumerator; @@ -636,7 +636,7 @@ sealed class Explosion /// The set of tiles that need to be updated when the explosion has finished processing. Used to avoid having /// the explosion trigger chunk regeneration & shuttle-system processing every tick. /// - private readonly Dictionary> _tileUpdateDict = new(); + private readonly Dictionary, List<(Vector2i, Tile)>> _tileUpdateDict = new(); // Entity Queries private readonly EntityQuery _xformQuery; @@ -720,7 +720,7 @@ sealed class Explosion _explosionData.Add(new() { TileLists = spaceData.TileLists, - Lookup = entMan.GetComponent(mapUid), + Lookup = (mapUid, entMan.GetComponent(mapUid)), MapGrid = null }); @@ -733,7 +733,7 @@ sealed class Explosion _explosionData.Add(new ExplosionData { TileLists = grid.TileLists, - Lookup = entMan.GetComponent(grid.Grid.Owner), + Lookup = (grid.Grid, entMan.GetComponent(grid.Grid)), MapGrid = grid.Grid, }); } @@ -784,7 +784,7 @@ sealed class Explosion _currentDataIndex++; // sanity checks, in case something changed while the explosion was being processed over several ticks. - if (_currentLookup.Deleted || _currentGrid != null && !_entMan.EntityExists(_currentGrid.Owner)) + if (_currentLookup.Comp.Deleted || _currentGrid != null && !_entMan.EntityExists(_currentGrid.Value)) continue; return true; @@ -839,20 +839,20 @@ sealed class Explosion } // Is the current tile on a grid (instead of in space)? - if (_currentGrid != null && - _currentGrid.TryGetTileRef(_currentEnumerator.Current, out var tileRef) && + if (_currentGrid is { } currentGrid && + _mapSystem.TryGetTileRef(currentGrid, currentGrid.Comp, _currentEnumerator.Current, out var tileRef) && !tileRef.Tile.IsEmpty) { - if (!_tileUpdateDict.TryGetValue(_currentGrid, out var tileUpdateList)) + if (!_tileUpdateDict.TryGetValue(currentGrid, out var tileUpdateList)) { tileUpdateList = new(); - _tileUpdateDict[_currentGrid] = tileUpdateList; + _tileUpdateDict[currentGrid] = tileUpdateList; } // damage entities on the tile. Also figures out whether there are any solid entities blocking the floor // from being destroyed. var canDamageFloor = _system.ExplodeTile(_currentLookup, - (_currentGrid.Owner, _currentGrid), + currentGrid, _currentEnumerator.Current, _currentThrowForce, _currentDamage, diff --git a/Content.Server/Explosion/EntitySystems/ExplosionSystem.TileFill.cs b/Content.Server/Explosion/EntitySystems/ExplosionSystem.TileFill.cs index 05608cda40..61e0ff50b7 100644 --- a/Content.Server/Explosion/EntitySystems/ExplosionSystem.TileFill.cs +++ b/Content.Server/Explosion/EntitySystems/ExplosionSystem.TileFill.cs @@ -107,7 +107,7 @@ public sealed partial class ExplosionSystem airtightMap = new(); var initialGridData = new ExplosionGridTileFlood( - Comp(epicentreGrid.Value), + (epicentreGrid.Value, Comp(epicentreGrid.Value)), airtightMap, maxIntensity, stepSize, @@ -196,7 +196,7 @@ public sealed partial class ExplosionSystem airtightMap = new(); data = new ExplosionGridTileFlood( - Comp(grid), + (grid, Comp(grid)), airtightMap, maxIntensity, stepSize,