diff --git a/Scenes/Maps/Roguelike.tscn b/Scenes/Maps/Roguelike.tscn index 6a691ac1..cc08c8d5 100644 --- a/Scenes/Maps/Roguelike.tscn +++ b/Scenes/Maps/Roguelike.tscn @@ -34,6 +34,8 @@ SpawnMarkers = Dictionary[int, NodePath]({ process_mode = 1 script = ExtResource("4_jtlua") Rooms = Array[Object]([ExtResource("5_gwtv6"), ExtResource("6_gwtv6"), ExtResource("7_wbqvu"), ExtResource("8_3fyis"), ExtResource("9_go1yg"), ExtResource("5_pfafs"), ExtResource("11_68lig"), ExtResource("12_83bvc"), ExtResource("13_y651a")]) +DungeonLength = 12 +Seed = 1 [node name="CameraController" type="Camera2D" parent="."] process_mode = 1 diff --git a/Scripts/Controllers/RogueliteRoom.cs b/Scripts/Controllers/RogueliteRoom.cs index 8e73f0e6..7c6491fd 100644 --- a/Scripts/Controllers/RogueliteRoom.cs +++ b/Scripts/Controllers/RogueliteRoom.cs @@ -14,7 +14,7 @@ public partial class RogueliteRoom : Node2D public Vector2I GridPosition { get; set; } // Set by dungeon manager [Export] public PackedScene DoorPrefab { get; private set; } - [Export] public PackedScene WallPrefab { get; private set; } + [Export] public PackedScene WallPrefab { get; private set; } private static readonly Dictionary DirectionMap = new() { @@ -30,10 +30,26 @@ public partial class RogueliteRoom : Node2D { SpawnEnemies(); //HandleDoors(connectionChecker); + AddDebugLabel(); return this; } - public void HandleDoors(Func connectionChecker) + private void AddDebugLabel() + { + for (int i = 0; i < RoomResource.Size.X; i++) + { + for (int j = 0; j < RoomResource.Size.Y; j++) + { + var label = new Label(); + label.Text = $"{GridPosition + new Vector2I(i, j)}"; + label.ZIndex = 11; + label.Position = (new Vector2(i, j) * new Vector2(320, 160)) + new Vector2(160, 80); + this.AddChild(label); + } + } + } + + public void HandleDoors(Func connectionChecker) { if (!HasNode("Doors")) return; var doorsNode = GetNode("Doors"); @@ -47,8 +63,10 @@ public partial class RogueliteRoom : Node2D // WallIndex determines the offset *along* the edge of the room Vector2I offset = marker.Direction switch { - RoomDirection.North or RoomDirection.South => new Vector2I(marker.WallIndex, 0), - RoomDirection.East or RoomDirection.West => new Vector2I(0, marker.WallIndex), + RoomDirection.North => new Vector2I(marker.WallIndex, 0), + RoomDirection.South => new Vector2I(marker.WallIndex, RoomResource.Size.Y - 1), + RoomDirection.East => new Vector2I(RoomResource.Size.X - 1, marker.WallIndex), + RoomDirection.West => new Vector2I(0, marker.WallIndex), _ => Vector2I.Zero }; @@ -56,17 +74,31 @@ public partial class RogueliteRoom : Node2D Vector2I doorEdge = GridPosition + offset; Vector2I neighborPos = doorEdge + baseDir; - bool connected = connectionChecker.Invoke(neighborPos); - + var connection = connectionChecker.Invoke(doorEdge, neighborPos); + + var connected = connection is not null; + if (connected) { var door = this.CreateChild(DoorPrefab, marker.GlobalPosition); - door.State = DoorState.Open; + door.State = DoorState.Closed; + + // var label = new Label(); + // label.Text = $"Door Edge: {doorEdge}, {connection}"; + // label.ZIndex = 10; + // + // door.AddChild(label); } else { var wall = this.CreateChild(WallPrefab, marker.GlobalPosition); + + // var label = new Label(); + // label.Text = $"Door Edge: {doorEdge}, Neighbor: {neighborPos}"; + // label.ZIndex = 10; + // + // marker.AddChild(label); } // PackedScene prefab = hasConnection diff --git a/Scripts/Controllers/RogueliteRoomManager.cs b/Scripts/Controllers/RogueliteRoomManager.cs index 6182640d..c42d300e 100644 --- a/Scripts/Controllers/RogueliteRoomManager.cs +++ b/Scripts/Controllers/RogueliteRoomManager.cs @@ -126,8 +126,6 @@ public partial class RogueliteRoomManager : Node2D break; } - ; - _mainPath.Add(nextPos); // Place cursor at bottom of room @@ -174,10 +172,11 @@ public partial class RogueliteRoomManager : Node2D foreach (var roomEntry in _roomGrid) { var room = roomEntry.Value; - room.HandleDoors(pos => + room.HandleDoors((doorEdge, pos) => { - var neighborPos = room.GridPosition + pos; - return _roomGrid.ContainsKey(neighborPos); + //var neighborPos = room.GridPosition + pos; + return _connections.FirstOrDefault(x => (x.From == doorEdge && x.To == pos) || (x.From == pos && x.To == doorEdge)); + //return _roomGrid.ContainsKey(neighborPos); }); } @@ -413,20 +412,4 @@ public partial class RogueliteRoomManager : Node2D } } } -} - -public class RoomConnection -{ - public Vector2I From; - public Vector2I To; - public bool IsLocked; - public bool IsSecret; - - public RoomConnection(Vector2I from, Vector2I to, bool isLocked = false, bool isSecret = false) - { - From = from; - To = to; - IsLocked = isLocked; - IsSecret = isSecret; - } } \ No newline at end of file diff --git a/Scripts/Controllers/RoomConnection.cs b/Scripts/Controllers/RoomConnection.cs new file mode 100644 index 00000000..1b88498e --- /dev/null +++ b/Scripts/Controllers/RoomConnection.cs @@ -0,0 +1,24 @@ +using Godot; + +namespace Cirno.Scripts.Controllers; + +public class RoomConnection +{ + public Vector2I From; + public Vector2I To; + public bool IsLocked; + public bool IsSecret; + + public RoomConnection(Vector2I from, Vector2I to, bool isLocked = false, bool isSecret = false) + { + From = from; + To = to; + IsLocked = isLocked; + IsSecret = isSecret; + } + + public override string ToString() + { + return $"From {From} to {To}, IsLocked: {IsLocked}, IsSecret: {IsSecret}"; + } +} \ No newline at end of file diff --git a/Scripts/UI/Minimap.cs b/Scripts/UI/Minimap.cs index 878d7a5d..2d057c96 100644 --- a/Scripts/UI/Minimap.cs +++ b/Scripts/UI/Minimap.cs @@ -15,7 +15,7 @@ public partial class Minimap : CanvasLayer private List SpawnedRooms => RoomManager.SpawnedRooms; private List Connections => RoomManager.Connections; - + [Export] public int CellSize { get; private set; } = 16; [Export] public Vector2 Padding { get; private set; } = new Vector2(20, 20); @@ -91,20 +91,32 @@ public partial class Minimap : CanvasLayer RenderingServer.CanvasItemAddRect(_canvasItemRid, new Rect2(drawPos, drawSize), color); } + + DrawRoomConnections(Connections, min, offset); - DrawRoomConnections( Connections, min, offset); + //DrawDebugGrid(); } - + + private void DrawDebugGrid() + { + foreach (var room in SpawnedRooms) + { + var rect = new Rect2(room.GridPosition * RoomManager.TileSize * RoomManager.RoomSizeInTiles, RoomManager.TileSize * RoomManager.RoomSizeInTiles); + + RenderingServer.CanvasItemAddRect(_canvasItemRid, rect, new Color(0, 120,0, 125)); + } + } + private void DrawRoomConnections(List connections, Vector2I minGrid, Vector2 baseOffset) { int spacing = (int)Separation; - + foreach (var connection in connections) { // Skip if either room is missing if (!RoomGrid.ContainsKey(connection.From) || !RoomGrid.ContainsKey(connection.To)) continue; - + // Convert grid coordinates to local minimap grid (relative to min) Vector2I fromGrid = connection.From - minGrid; Vector2I toGrid = connection.To - minGrid;