protected override void Split(RoomGenerator roomGenerator) { var minAreaHeight = roomGenerator.MinHeight + 2; var maxAreaHeight = roomGenerator.MaxHeight + 2; if (Bounds.Height < minAreaHeight) { return; } else if (Bounds.Height > maxAreaHeight) { var splitRow = Random.Next(minAreaHeight, Bounds.Height - minAreaHeight + 1); var height1 = splitRow; var height2 = Bounds.Height - splitRow + 1; if (height1 >= minAreaHeight) { SubArea1 = new HorizontalArea(roomGenerator, Random, Bounds.X, Bounds.Y, Bounds.Width, height1); } if (height2 >= minAreaHeight) { SubArea2 = new HorizontalArea(roomGenerator, Random, Bounds.X, Bounds.Y + splitRow - 1, Bounds.Width, height2); } } }
public TileMap Generate(int seed, TextWriter logStream) { var random = new Random(seed); var tileMap = new TileMap(_rows, _columns); tileMap.Fill(TileRegistry.Wall); _roomGenerator.Reset(); var dungeonArea = new HorizontalArea(_roomGenerator, random, 0, 0, _columns, _rows); RenderRooms(tileMap, dungeonArea, logStream); RenderCorridors(tileMap, dungeonArea, logStream); DecorateWithDoors(tileMap, dungeonArea, logStream); return(tileMap); }