using System.Threading.Tasks; using Content.Shared.Procedural; using Content.Shared.Procedural.DungeonGenerators; using Content.Shared.Procedural.PostGeneration; namespace Content.Server.Procedural.DungeonJob; public sealed partial class DungeonJob { /// /// /// private async Task PostGen(ChunkDunGen dunGen, HashSet reservedTiles, Random random) { var dungeon = new Dungeon(); var tiles = new HashSet(); var tr = _position + new Vector2i(dunGen.Size, dunGen.Size); var oldSeed = dunGen.Noise?.GetSeed() ?? 0; dunGen.Noise?.SetSeed(_seed + oldSeed); for (var x = 0; x < dunGen.Size; x++) { for (var y = 0; y < dunGen.Size; y++) { var index = new Vector2i(_position.X + x, _position.Y + y); if (reservedTiles.Contains(index)) continue; if (dunGen.Noise?.GetNoise(x, y) < dunGen.Threshold) continue; tiles.Add(index); } } dunGen.Noise?.SetSeed(oldSeed); var room = new DungeonRoom(tiles, (tr - _position) / 2 + _position, new Box2i(_position, tr), new HashSet()); dungeon.AddRoom(room); return dungeon; } }