From 9331876637ff6d289ab8cf348762de13c38406b1 Mon Sep 17 00:00:00 2001 From: Marco Date: Fri, 18 Apr 2025 17:32:12 +0200 Subject: [PATCH] Starts of offshoots --- Scripts/Controllers/RogueliteRoomManager.cs | 38 ++++++++++++++++----- Scripts/Enums/OffshootType.cs | 9 +++++ 2 files changed, 39 insertions(+), 8 deletions(-) create mode 100644 Scripts/Enums/OffshootType.cs diff --git a/Scripts/Controllers/RogueliteRoomManager.cs b/Scripts/Controllers/RogueliteRoomManager.cs index 6492db69..a3f0c671 100644 --- a/Scripts/Controllers/RogueliteRoomManager.cs +++ b/Scripts/Controllers/RogueliteRoomManager.cs @@ -96,18 +96,25 @@ public partial class RogueliteRoomManager : Node2D _connections.Add(new RoomConnection(origin, currentPos + new Vector2I(0, 1))); Vector2I nextPos; + var offshoots = new List() + { + OffshootType.Item, + OffshootType.Secret, + OffshootType.Shop, + OffshootType.Key + }; + var shuffledOffshoots = offshoots.Shuffle().ToList(); + + int currentOffshoot = 0; + for (int i = 0; i < DungeonLength; i++) { nextPos = currentPos + new Vector2I(0, 1); //var roomToSpawn = Rooms.Where(x => x.Type == RoomType.Regular).PickRandom(); var roomToSpawn = randomRoomsList[i]; - - // First pick a random door on the from room - //var doorOffset = Math.Min(0, GD.RandRange(0, currentRoom.Size.X - 1)); - + // We're already in the new room position, we do not care about previous anymore - var offset = 0; // Place it at a random X position @@ -142,10 +149,25 @@ public partial class RogueliteRoomManager : Node2D // nextPos is now the end of the room at the current exit _connections.Add(new RoomConnection(nextPos, nextPos + new Vector2I(0, 1))); - //+ new Vector2I(0, roomToSpawn.Size.Y -1) - // Reset X offset - //nextPos = new Vector2I(0, nextPos.Y); + // Spawn offshoot here + + var offshootToSpawn = shuffledOffshoots[currentOffshoot % shuffledOffshoots.Count()]; + + int roomsInOffshot = GD.RandRange(0, MaxBranchLength); + + for (int j = 0; j < roomsInOffshot; j++) + { + // Get a random door on right or left side + // spawn + // Add path + // Move cursor + // if last room generate final room + // Continue + } + + // Offshoot over + currentPos = nextPos; } diff --git a/Scripts/Enums/OffshootType.cs b/Scripts/Enums/OffshootType.cs new file mode 100644 index 00000000..868e0e94 --- /dev/null +++ b/Scripts/Enums/OffshootType.cs @@ -0,0 +1,9 @@ +namespace Cirno.Scripts.Enums; + +public enum OffshootType +{ + Item, + Key, + Secret, + Shop +} \ No newline at end of file