From ef460cb59c0e4686e635d303806fc64036231cad Mon Sep 17 00:00:00 2001 From: Ed <96445749+TheShuEd@users.noreply.github.com> Date: Wed, 17 Jul 2024 18:30:28 +0300 Subject: [PATCH] mask tile filtering --- .../Procedural/DungeonSystem.Rooms.cs | 17 +++++++++++++---- .../RoomSpawner/CP14RoomSpawnerComponent.cs | 10 ++++++++-- .../RoomSpawner/CP14RoomSpawnerSystem.cs | 4 ++-- 3 files changed, 23 insertions(+), 8 deletions(-) diff --git a/Content.Server/Procedural/DungeonSystem.Rooms.cs b/Content.Server/Procedural/DungeonSystem.Rooms.cs index 9765a7722d..7956874dbf 100644 --- a/Content.Server/Procedural/DungeonSystem.Rooms.cs +++ b/Content.Server/Procedural/DungeonSystem.Rooms.cs @@ -66,7 +66,8 @@ public sealed partial class DungeonSystem Random random, HashSet? reservedTiles, bool clearExisting = false, - bool rotation = false) + bool rotation = false, + List? ignoreTiles = null) //CP14 ignoring atlas mask tiles { var originTransform = Matrix3Helpers.CreateTranslation(origin.X, origin.Y); var roomRotation = Angle.Zero; @@ -79,7 +80,7 @@ public sealed partial class DungeonSystem var roomTransform = Matrix3Helpers.CreateTransform((Vector2) room.Size / 2f, roomRotation); var finalTransform = Matrix3x2.Multiply(roomTransform, originTransform); - SpawnRoom(gridUid, grid, finalTransform, room, reservedTiles, clearExisting); + SpawnRoom(gridUid, grid, finalTransform, room, reservedTiles, clearExisting, ignoreTiles); //CP14 ignoring atlas mask tiles } public Angle GetRoomRotation(DungeonRoomPrototype room, Random random) @@ -105,7 +106,8 @@ public sealed partial class DungeonSystem Matrix3x2 roomTransform, DungeonRoomPrototype room, HashSet? reservedTiles = null, - bool clearExisting = false) + bool clearExisting = false, + List? ignoreTiles = null) //CP14 ignoring atlas mask tiles { // Ensure the underlying template exists. var roomMap = GetOrCreateTemplate(room); @@ -155,7 +157,14 @@ public sealed partial class DungeonSystem if (!clearExisting && reservedTiles?.Contains(rounded) == true) continue; - + //CP14 ignoring atlas mask tiles + if (ignoreTiles is not null) + { + var tileDef = _tileDefManager[tileRef.Tile.TypeId]; + if (ignoreTiles.Contains(tileDef.ID)) + continue; + } + //CP14 ignoring atlas mask tiles end _tiles.Add((rounded, tileRef.Tile)); } } diff --git a/Content.Server/_CP14/Procedural/RoomSpawner/CP14RoomSpawnerComponent.cs b/Content.Server/_CP14/Procedural/RoomSpawner/CP14RoomSpawnerComponent.cs index ccaa681dce..56852318e4 100644 --- a/Content.Server/_CP14/Procedural/RoomSpawner/CP14RoomSpawnerComponent.cs +++ b/Content.Server/_CP14/Procedural/RoomSpawner/CP14RoomSpawnerComponent.cs @@ -1,11 +1,10 @@ -using Content.Shared.Procedural; using Content.Shared.Random; using Robust.Shared.Prototypes; namespace Content.Server._CP14.Procedural.RoomSpawner; /// -/// +/// allows you to spawn one of the rooms during initialization /// [RegisterComponent, Access(typeof(CP14RoomSpawnerSystem))] public sealed partial class CP14RoomSpawnerComponent : Component @@ -18,4 +17,11 @@ public sealed partial class CP14RoomSpawnerComponent : Component [DataField] public bool ClearExisting = true; + + [DataField] + public List IgnoreTiles = new() + { + "CP14FloorAtlasMask", + "CP14FloorAtlasMask2", + }; } diff --git a/Content.Server/_CP14/Procedural/RoomSpawner/CP14RoomSpawnerSystem.cs b/Content.Server/_CP14/Procedural/RoomSpawner/CP14RoomSpawnerSystem.cs index 1355dfb1c0..be0e70f2ca 100644 --- a/Content.Server/_CP14/Procedural/RoomSpawner/CP14RoomSpawnerSystem.cs +++ b/Content.Server/_CP14/Procedural/RoomSpawner/CP14RoomSpawnerSystem.cs @@ -1,7 +1,6 @@ using Content.Server.Procedural; using Content.Shared.Procedural; using Content.Shared.Random.Helpers; -using Robust.Server.GameObjects; using Robust.Shared.Map.Components; using Robust.Shared.Prototypes; using Robust.Shared.Random; @@ -51,6 +50,7 @@ public sealed class CP14RoomSpawnerSystem : EntitySystem random, null, spawner.Comp.ClearExisting, - spawner.Comp.Rotation); + spawner.Comp.Rotation, + ignoreTiles: spawner.Comp.IgnoreTiles); } }