Linear room spawner

This commit is contained in:
MaddoScientisto 2025-04-14 23:04:41 +02:00
commit c6a0b73ed2
5 changed files with 90 additions and 20 deletions

View file

@ -37,7 +37,7 @@ public partial class RogueliteRoomManager : Node2D
public void InitSpawning()
{
GenerateDungeon();
GenerateStraightLineDungeon();
}
private void SpawnRoomsGrid()
@ -67,6 +67,64 @@ public partial class RogueliteRoomManager : Node2D
private List<Vector2I> _mainPath = new();
private List<RoomConnection> _connections = new();
private void GenerateStraightLineDungeon()
{
Vector2I origin = Vector2I.Zero;
var starterRoom = Rooms.Where(r => r.Type == RoomType.Starter).PickRandom();
SpawnRoom(starterRoom, origin);
_mainPath.Add(origin);
var currentPos = origin;
Vector2I nextPos;
for (int i = 0; i < DungeonLength; i++)
{
nextPos = currentPos + new Vector2I(0, 1);
var roomToSpawn = Rooms.Where(x => x.Type == RoomType.Regular).PickRandom();
if (!SpawnRoom(roomToSpawn, nextPos)) break;
_mainPath.Add(nextPos);
if (roomToSpawn.Size.Y > 1)
{
nextPos += new Vector2I(0, roomToSpawn.Size.Y - 1);
}
_connections.Add(new RoomConnection(currentPos, nextPos));
currentPos = nextPos;
}
nextPos = currentPos + new Vector2I(0, 1);
var bossRoom = BossRooms.PickRandom();
if (SpawnRoom(bossRoom, nextPos))
{
_mainPath.Add(nextPos);
if (bossRoom.Size.Y > 1)
{
nextPos += new Vector2I(0, bossRoom.Size.Y - 1);
}
_connections.Add(new RoomConnection(currentPos, nextPos));
}
foreach (var roomEntry in _roomGrid)
{
var room = roomEntry.Value;
room.HandleDoors(pos =>
{
var neighborPos = room.GridPosition + pos;
return _roomGrid.ContainsKey(neighborPos);
});
}
}
private void GenerateDungeon()
{
Vector2I origin = Vector2I.Zero;