]> git.smokeofanarchy.ru Git - space-station-14.git/commitdiff
improve BiomeDunGen (#33113)
authorEd <96445749+TheShuEd@users.noreply.github.com>
Tue, 12 Nov 2024 05:19:54 +0000 (08:19 +0300)
committerGitHub <noreply@github.com>
Tue, 12 Nov 2024 05:19:54 +0000 (23:19 -0600)
* improve BiomeDunGen

* forgot lol

* Update DungeonJob.PostGenBiome.cs

* Update DungeonJob.PostGenBiome.cs

Content.Server/Procedural/DungeonJob/DungeonJob.PostGenBiome.cs
Content.Shared/Parallax/Biomes/SharedBiomeSystem.cs
Content.Shared/Procedural/PostGeneration/BiomeDunGen.cs

index 65f6d2d14f9506a489aba8b86c3fca7972f2b3e8..fdadcb7849d80f6fb3f9b4e9821121fadb97ad07 100644 (file)
@@ -1,5 +1,6 @@
 using System.Threading.Tasks;
 using Content.Server.Parallax;
+using Content.Shared.Maps;
 using Content.Shared.Parallax.Biomes;
 using Content.Shared.Procedural;
 using Content.Shared.Procedural.PostGeneration;
@@ -15,27 +16,35 @@ public sealed partial class DungeonJob
     /// </summary>
     private async Task PostGen(BiomeDunGen dunGen, DungeonData data, Dungeon dungeon, HashSet<Vector2i> reservedTiles, Random random)
     {
-        if (_entManager.TryGetComponent(_gridUid, out BiomeComponent? biomeComp))
+        if (!_prototype.TryIndex(dunGen.BiomeTemplate, out var indexedBiome))
             return;
 
-        biomeComp = _entManager.AddComponent<BiomeComponent>(_gridUid);
         var biomeSystem = _entManager.System<BiomeSystem>();
-        biomeSystem.SetTemplate(_gridUid, biomeComp, _prototype.Index(dunGen.BiomeTemplate));
+
         var seed = random.Next();
         var xformQuery = _entManager.GetEntityQuery<TransformComponent>();
 
-        foreach (var node in dungeon.RoomTiles)
+        var tiles = _maps.GetAllTilesEnumerator(_gridUid, _grid);
+        while (tiles.MoveNext(out var tileRef))
         {
+            var node = tileRef.Value.GridIndices;
+
             if (reservedTiles.Contains(node))
                 continue;
+            
+            if (dunGen.TileMask is not null)
+            {
+                if (!dunGen.TileMask.Contains(((ContentTileDefinition) _tileDefManager[tileRef.Value.Tile.TypeId]).ID))
+                    continue;
+            }
 
             // Need to set per-tile to override data.
-            if (biomeSystem.TryGetTile(node, biomeComp.Layers, seed, _grid, out var tile))
+            if (biomeSystem.TryGetTile(node, indexedBiome.Layers, seed, _grid, out var tile))
             {
                 _maps.SetTile(_gridUid, _grid, node, tile.Value);
             }
 
-            if (biomeSystem.TryGetDecals(node, biomeComp.Layers, seed, _grid, out var decals))
+            if (biomeSystem.TryGetDecals(node, indexedBiome.Layers, seed, _grid, out var decals))
             {
                 foreach (var decal in decals)
                 {
@@ -43,7 +52,7 @@ public sealed partial class DungeonJob
                 }
             }
 
-            if (biomeSystem.TryGetEntity(node, biomeComp, _grid, out var entityProto))
+            if (tile is not null && biomeSystem.TryGetEntity(node, indexedBiome.Layers, tile.Value, seed, _grid, out var entityProto))
             {
                 var ent = _entManager.SpawnEntity(entityProto, new EntityCoordinates(_gridUid, node + _grid.TileSizeHalfVector));
                 var xform = xformQuery.Get(ent);
@@ -61,7 +70,5 @@ public sealed partial class DungeonJob
             if (!ValidateResume())
                 return;
         }
-
-        biomeComp.Enabled = false;
     }
 }
index b14baba98173b49d2a805775fe76f748568c777c..250b0f70a54e08254c65a76f35dd41ecb8994524 100644 (file)
@@ -183,7 +183,7 @@ public abstract class SharedBiomeSystem : EntitySystem
     }
 
 
-    private bool TryGetEntity(Vector2i indices, List<IBiomeLayer> layers, Tile tileRef, int seed, MapGridComponent grid,
+    public bool TryGetEntity(Vector2i indices, List<IBiomeLayer> layers, Tile tileRef, int seed, MapGridComponent grid,
         [NotNullWhen(true)] out string? entity)
     {
         var tileId = TileDefManager[tileRef.TypeId].ID;
index 833cf2dec769a9894097e0334bc8c223eae465cd..e21e582211b2a1725e8291f29045a8df3a757a1d 100644 (file)
@@ -1,3 +1,4 @@
+using Content.Shared.Maps;
 using Content.Shared.Parallax.Biomes;
 using Robust.Shared.Prototypes;
 
@@ -11,4 +12,10 @@ public sealed partial class BiomeDunGen : IDunGenLayer
 {
     [DataField(required: true)]
     public ProtoId<BiomeTemplatePrototype> BiomeTemplate;
+
+    /// <summary>
+    /// creates a biome only on the specified tiles
+    /// </summary>
+    [DataField]
+    public HashSet<ProtoId<ContentTileDefinition>>? TileMask;
 }