diff --git a/Content.Server/Procedural/DungeonJob/DungeonJob.BoundaryWall.cs b/Content.Server/Procedural/DungeonJob/DungeonJob.BoundaryWall.cs index b56a97d40b..1c48a84cce 100644 --- a/Content.Server/Procedural/DungeonJob/DungeonJob.BoundaryWall.cs +++ b/Content.Server/Procedural/DungeonJob/DungeonJob.BoundaryWall.cs @@ -29,7 +29,7 @@ public sealed partial class DungeonJob if (dungeon.Entrances.Contains(neighbor)) continue; - if (!_anchorable.TileFree(_grid, neighbor, DungeonSystem.CollisionLayer, DungeonSystem.CollisionMask)) + if (!_anchorable.TileFree((_gridUid, _grid), neighbor, DungeonSystem.CollisionLayer, DungeonSystem.CollisionMask)) continue; tiles.Add((neighbor, _tile.GetVariantTile((ContentTileDefinition) tileDef, random))); @@ -40,7 +40,7 @@ public sealed partial class DungeonJob if (dungeon.RoomTiles.Contains(index)) continue; - if (!_anchorable.TileFree(_grid, index, DungeonSystem.CollisionLayer, DungeonSystem.CollisionMask)) + if (!_anchorable.TileFree((_gridUid, _grid), index, DungeonSystem.CollisionLayer, DungeonSystem.CollisionMask)) continue; tiles.Add((index, _tile.GetVariantTile((ContentTileDefinition)tileDef, random))); @@ -53,7 +53,7 @@ public sealed partial class DungeonJob { var index = tiles[i]; - if (!_anchorable.TileFree(_grid, index.Index, DungeonSystem.CollisionLayer, DungeonSystem.CollisionMask)) + if (!_anchorable.TileFree((_gridUid, _grid), index.Index, DungeonSystem.CollisionLayer, DungeonSystem.CollisionMask)) continue; // If no cardinal neighbors in dungeon then we're a corner. diff --git a/Content.Server/Procedural/DungeonJob/DungeonJob.CornerClutter.cs b/Content.Server/Procedural/DungeonJob/DungeonJob.CornerClutter.cs index e653ad4a4d..918e5efa0d 100644 --- a/Content.Server/Procedural/DungeonJob/DungeonJob.CornerClutter.cs +++ b/Content.Server/Procedural/DungeonJob/DungeonJob.CornerClutter.cs @@ -19,7 +19,7 @@ public sealed partial class DungeonJob if (reservedTiles.Contains(tile)) continue; - var blocked = _anchorable.TileFree(_grid, tile, DungeonSystem.CollisionLayer, DungeonSystem.CollisionMask); + var blocked = _anchorable.TileFree((_gridUid, _grid), tile, DungeonSystem.CollisionLayer, DungeonSystem.CollisionMask); if (blocked) continue; diff --git a/Content.Server/Procedural/DungeonJob/DungeonJob.DungeonEntrance.cs b/Content.Server/Procedural/DungeonJob/DungeonJob.DungeonEntrance.cs index ef84fb77df..dceeac3f12 100644 --- a/Content.Server/Procedural/DungeonJob/DungeonJob.DungeonEntrance.cs +++ b/Content.Server/Procedural/DungeonJob/DungeonJob.DungeonEntrance.cs @@ -56,13 +56,13 @@ public sealed partial class DungeonJob } // Check if exterior spot free. - if (!_anchorable.TileFree(_grid, tile, DungeonSystem.CollisionLayer, DungeonSystem.CollisionMask)) + if (!_anchorable.TileFree((_gridUid, _grid), tile, DungeonSystem.CollisionLayer, DungeonSystem.CollisionMask)) { continue; } // Check if interior spot free (no guarantees on exterior but ClearDoor should handle it) - if (!_anchorable.TileFree(_grid, dirVec, DungeonSystem.CollisionLayer, DungeonSystem.CollisionMask)) + if (!_anchorable.TileFree((_gridUid, _grid), dirVec, DungeonSystem.CollisionLayer, DungeonSystem.CollisionMask)) { continue; } diff --git a/Content.Server/Procedural/DungeonJob/DungeonJob.EntityTableDunGen.cs b/Content.Server/Procedural/DungeonJob/DungeonJob.EntityTableDunGen.cs index 05d33a4b8c..6483448240 100644 --- a/Content.Server/Procedural/DungeonJob/DungeonJob.EntityTableDunGen.cs +++ b/Content.Server/Procedural/DungeonJob/DungeonJob.EntityTableDunGen.cs @@ -39,7 +39,7 @@ public sealed partial class DungeonJob if (reservedTiles.Contains(tile)) continue; - if (!_anchorable.TileFree(_grid, + if (!_anchorable.TileFree((_gridUid, _grid), tile, (int) CollisionGroup.MachineLayer, (int) CollisionGroup.MachineLayer)) diff --git a/Content.Server/Procedural/DungeonJob/DungeonJob.ExternalWindow.cs b/Content.Server/Procedural/DungeonJob/DungeonJob.ExternalWindow.cs index f390620186..482cb34a56 100644 --- a/Content.Server/Procedural/DungeonJob/DungeonJob.ExternalWindow.cs +++ b/Content.Server/Procedural/DungeonJob/DungeonJob.ExternalWindow.cs @@ -49,7 +49,7 @@ public sealed partial class DungeonJob break; // Room tile / already used. - if (!_anchorable.TileFree(_grid, tile, DungeonSystem.CollisionLayer, DungeonSystem.CollisionMask) || + if (!_anchorable.TileFree((_gridUid, _grid), tile, DungeonSystem.CollisionLayer, DungeonSystem.CollisionMask) || takenTiles.Contains(tile)) { continue; @@ -69,7 +69,7 @@ public sealed partial class DungeonJob if (!allExterior.Contains(neighbor) || takenTiles.Contains(neighbor) || - !_anchorable.TileFree(_grid, neighbor, DungeonSystem.CollisionLayer, DungeonSystem.CollisionMask)) + !_anchorable.TileFree((_gridUid, _grid), neighbor, DungeonSystem.CollisionLayer, DungeonSystem.CollisionMask)) { isValid = false; break; @@ -84,7 +84,7 @@ public sealed partial class DungeonJob if (allExterior.Contains(perpTile) || takenTiles.Contains(neighbor) || - !_anchorable.TileFree(_grid, perpTile, DungeonSystem.CollisionLayer, DungeonSystem.CollisionMask)) + !_anchorable.TileFree((_gridUid, _grid), perpTile, DungeonSystem.CollisionLayer, DungeonSystem.CollisionMask)) { isValid = false; break; diff --git a/Content.Server/Procedural/DungeonJob/DungeonJob.Fill.cs b/Content.Server/Procedural/DungeonJob/DungeonJob.Fill.cs index 43f453f29a..b579d4e5a1 100644 --- a/Content.Server/Procedural/DungeonJob/DungeonJob.Fill.cs +++ b/Content.Server/Procedural/DungeonJob/DungeonJob.Fill.cs @@ -24,7 +24,7 @@ public sealed partial class DungeonJob if (fill.AllowedTiles != null && !fill.AllowedTiles.Contains(tileDef.ID)) continue; - if (!_anchorable.TileFree(_grid, tile, DungeonSystem.CollisionLayer, DungeonSystem.CollisionMask)) + if (!_anchorable.TileFree((_gridUid, _grid), tile, DungeonSystem.CollisionLayer, DungeonSystem.CollisionMask)) continue; var gridPos = _maps.GridTileToLocal(_gridUid, _grid, tile); diff --git a/Content.Server/Procedural/DungeonJob/DungeonJob.InternalWindow.cs b/Content.Server/Procedural/DungeonJob/DungeonJob.InternalWindow.cs index c9b1481450..f80b3face7 100644 --- a/Content.Server/Procedural/DungeonJob/DungeonJob.InternalWindow.cs +++ b/Content.Server/Procedural/DungeonJob/DungeonJob.InternalWindow.cs @@ -69,7 +69,7 @@ public sealed partial class DungeonJob if (reservedTiles.Contains(windowTile)) continue; - if (!_anchorable.TileFree(_grid, windowTile, DungeonSystem.CollisionLayer, DungeonSystem.CollisionMask)) + if (!_anchorable.TileFree((_gridUid, _grid), windowTile, DungeonSystem.CollisionLayer, DungeonSystem.CollisionMask)) continue; validTiles.Add(windowTile); diff --git a/Content.Server/Procedural/DungeonJob/DungeonJob.Junction.cs b/Content.Server/Procedural/DungeonJob/DungeonJob.Junction.cs index b491f3df27..28cbc9b208 100644 --- a/Content.Server/Procedural/DungeonJob/DungeonJob.Junction.cs +++ b/Content.Server/Procedural/DungeonJob/DungeonJob.Junction.cs @@ -20,7 +20,7 @@ public sealed partial class DungeonJob // N-wide junctions foreach (var tile in dungeon.CorridorTiles) { - if (!_anchorable.TileFree(_grid, tile, DungeonSystem.CollisionLayer, DungeonSystem.CollisionMask)) + if (!_anchorable.TileFree((_gridUid, _grid), tile, DungeonSystem.CollisionLayer, DungeonSystem.CollisionMask)) continue; // Check each direction: @@ -57,7 +57,7 @@ public sealed partial class DungeonJob } // If we're not at the end tile then check it + perpendicular are free. - if (!_anchorable.TileFree(_grid, neighbor, DungeonSystem.CollisionLayer, DungeonSystem.CollisionMask)) + if (!_anchorable.TileFree((_gridUid, _grid), neighbor, DungeonSystem.CollisionLayer, DungeonSystem.CollisionMask)) { isValid = false; break; @@ -66,13 +66,13 @@ public sealed partial class DungeonJob var perp1 = tile + neighborVec * j + ((Direction) ((i * 2 + 2) % 8)).ToIntVec(); var perp2 = tile + neighborVec * j + ((Direction) ((i * 2 + 6) % 8)).ToIntVec(); - if (!_anchorable.TileFree(_grid, perp1, DungeonSystem.CollisionLayer, DungeonSystem.CollisionMask)) + if (!_anchorable.TileFree((_gridUid, _grid), perp1, DungeonSystem.CollisionLayer, DungeonSystem.CollisionMask)) { isValid = false; break; } - if (!_anchorable.TileFree(_grid, perp2, DungeonSystem.CollisionLayer, DungeonSystem.CollisionMask)) + if (!_anchorable.TileFree((_gridUid, _grid), perp2, DungeonSystem.CollisionLayer, DungeonSystem.CollisionMask)) { isValid = false; break; @@ -94,7 +94,7 @@ public sealed partial class DungeonJob var cornerVec = cornerDir.ToIntVec(); var cornerNeighbor = tile + neighborVec * j + cornerVec; - if (_anchorable.TileFree(_grid, cornerNeighbor, DungeonSystem.CollisionLayer, DungeonSystem.CollisionMask)) + if (_anchorable.TileFree((_gridUid, _grid), cornerNeighbor, DungeonSystem.CollisionLayer, DungeonSystem.CollisionMask)) { freeCount++; } diff --git a/Content.Server/Procedural/DungeonJob/DungeonJob.MiddleConnection.cs b/Content.Server/Procedural/DungeonJob/DungeonJob.MiddleConnection.cs index f2ea97b6e6..d6e3c09d62 100644 --- a/Content.Server/Procedural/DungeonJob/DungeonJob.MiddleConnection.cs +++ b/Content.Server/Procedural/DungeonJob/DungeonJob.MiddleConnection.cs @@ -41,7 +41,7 @@ public sealed partial class DungeonJob if (dungeon.RoomTiles.Contains(neighbor)) continue; - if (!_anchorable.TileFree(_grid, neighbor, DungeonSystem.CollisionLayer, DungeonSystem.CollisionMask)) + if (!_anchorable.TileFree((_gridUid, _grid), neighbor, DungeonSystem.CollisionLayer, DungeonSystem.CollisionMask)) continue; roomEdges.Add(neighbor); @@ -103,7 +103,7 @@ public sealed partial class DungeonJob { var node = nodeDistances[i].Node; var gridPos = _maps.GridTileToLocal(_gridUid, _grid, node); - if (!_anchorable.TileFree(_grid, node, DungeonSystem.CollisionLayer, DungeonSystem.CollisionMask)) + if (!_anchorable.TileFree((_gridUid, _grid), node, DungeonSystem.CollisionLayer, DungeonSystem.CollisionMask)) continue; width--; diff --git a/Content.Server/Procedural/DungeonJob/DungeonJob.Mobs.cs b/Content.Server/Procedural/DungeonJob/DungeonJob.Mobs.cs index cf1c239b0e..caf6828e43 100644 --- a/Content.Server/Procedural/DungeonJob/DungeonJob.Mobs.cs +++ b/Content.Server/Procedural/DungeonJob/DungeonJob.Mobs.cs @@ -35,7 +35,7 @@ public sealed partial class DungeonJob { var tile = availableTiles.RemoveSwap(random.Next(availableTiles.Count)); - if (!_anchorable.TileFree(_grid, tile, (int) CollisionGroup.MachineLayer, + if (!_anchorable.TileFree((_gridUid, _grid), tile, (int) CollisionGroup.MachineLayer, (int) CollisionGroup.MachineLayer)) { continue; diff --git a/Content.Server/Procedural/DungeonJob/DungeonJob.WallMount.cs b/Content.Server/Procedural/DungeonJob/DungeonJob.WallMount.cs index e01fa9b947..e5bb32bd0c 100644 --- a/Content.Server/Procedural/DungeonJob/DungeonJob.WallMount.cs +++ b/Content.Server/Procedural/DungeonJob/DungeonJob.WallMount.cs @@ -23,7 +23,7 @@ public sealed partial class DungeonJob foreach (var neighbor in allExterior) { // Occupado - if (dungeon.RoomTiles.Contains(neighbor) || checkedTiles.Contains(neighbor) || !_anchorable.TileFree(_grid, neighbor, DungeonSystem.CollisionLayer, DungeonSystem.CollisionMask)) + if (dungeon.RoomTiles.Contains(neighbor) || checkedTiles.Contains(neighbor) || !_anchorable.TileFree((_gridUid, _grid), neighbor, DungeonSystem.CollisionLayer, DungeonSystem.CollisionMask)) continue; if (!random.Prob(gen.Prob) || !checkedTiles.Add(neighbor)) diff --git a/Content.Shared/Construction/EntitySystems/AnchorableSystem.cs b/Content.Shared/Construction/EntitySystems/AnchorableSystem.cs index ec8edea474..cd0996a017 100644 --- a/Content.Shared/Construction/EntitySystems/AnchorableSystem.cs +++ b/Content.Shared/Construction/EntitySystems/AnchorableSystem.cs @@ -9,7 +9,6 @@ using Content.Shared.Interaction; using Content.Shared.Movement.Pulling.Components; using Content.Shared.Movement.Pulling.Systems; using Content.Shared.Popups; -using Content.Shared.Tools; using Content.Shared.Tools.Components; using Robust.Shared.Map; using Robust.Shared.Map.Components; @@ -28,9 +27,10 @@ public sealed partial class AnchorableSystem : EntitySystem [Dependency] private readonly ISharedAdminLogManager _adminLogger = default!; [Dependency] private readonly SharedPopupSystem _popup = default!; [Dependency] private readonly PullingSystem _pulling = default!; + [Dependency] private readonly SharedMapSystem _map = default!; [Dependency] private readonly SharedToolSystem _tool = default!; [Dependency] private readonly SharedTransformSystem _transformSystem = default!; - [Dependency] private readonly TagSystem _tagSystem = default!; + [Dependency] private readonly TagSystem _tagSystem = default!; [Dependency] private readonly SharedAppearanceSystem _appearance = default!; private EntityQuery _physicsQuery; @@ -268,9 +268,9 @@ public sealed partial class AnchorableSystem : EntitySystem // Need to cast the event or it will be raised as BaseAnchoredAttemptEvent. if (anchoring) - RaiseLocalEvent(uid, (AnchorAttemptEvent) attempt); + RaiseLocalEvent(uid, (AnchorAttemptEvent)attempt); else - RaiseLocalEvent(uid, (UnanchorAttemptEvent) attempt); + RaiseLocalEvent(uid, (UnanchorAttemptEvent)attempt); anchorable.Delay += attempt.Delay; @@ -288,17 +288,17 @@ public sealed partial class AnchorableSystem : EntitySystem if (!TryComp(gridUid, out var grid)) return false; - var tileIndices = grid.TileIndicesFor(coordinates); - return TileFree(grid, tileIndices, anchorBody.CollisionLayer, anchorBody.CollisionMask); + var tileIndices = _map.TileIndicesFor((gridUid.Value, grid), coordinates); + return TileFree((gridUid.Value, grid), tileIndices, anchorBody.CollisionLayer, anchorBody.CollisionMask); } /// /// Returns true if no hard anchored entities match the collision layer or mask specified. /// /// - public bool TileFree(MapGridComponent grid, Vector2i gridIndices, int collisionLayer = 0, int collisionMask = 0) + public bool TileFree(Entity grid, Vector2i gridIndices, int collisionLayer = 0, int collisionMask = 0) { - var enumerator = grid.GetAnchoredEntitiesEnumerator(gridIndices); + var enumerator = _map.GetAnchoredEntitiesEnumerator(grid, grid.Comp, gridIndices); while (enumerator.MoveNext(out var ent)) { @@ -319,6 +319,12 @@ public sealed partial class AnchorableSystem : EntitySystem return true; } + [Obsolete("Use the Entity version")] + public bool TileFree(MapGridComponent grid, Vector2i gridIndices, int collisionLayer = 0, int collisionMask = 0) + { + return TileFree((grid.Owner, grid), gridIndices, collisionLayer, collisionMask); + } + /// /// Returns true if any unstackables are also on the corresponding tile. /// @@ -337,7 +343,7 @@ public sealed partial class AnchorableSystem : EntitySystem if (!TryComp(gridUid, out var grid)) return false; - var enumerator = grid.GetAnchoredEntitiesEnumerator(grid.LocalToTile(location)); + var enumerator = _map.GetAnchoredEntitiesEnumerator(gridUid.Value, grid, _map.LocalToTile(gridUid.Value, grid, location)); while (enumerator.MoveNext(out var entity)) {