mirror of
https://gitlab.com/MaddoScientisto/cirnogodot.git
synced 2026-06-08 04:25:53 +00:00
Linear room spawner
This commit is contained in:
parent
794368dde6
commit
c6a0b73ed2
5 changed files with 90 additions and 20 deletions
|
|
@ -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;
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue