room positioning and door generator

This commit is contained in:
Marco 2025-04-11 18:39:39 +02:00
commit 5bfffc22ad
19 changed files with 571 additions and 17 deletions

View file

@ -0,0 +1,13 @@
[gd_resource type="Resource" script_class="RogueliteRoomResource" load_steps=2 format=3 uid="uid://dn3ai56rrxfnk"]
[ext_resource type="Script" uid="uid://bl2ne8w12e3a" path="res://Scripts/Resources/Roguelite/RogueliteRoomResource.cs" id="1_cyi2x"]
[resource]
script = ExtResource("1_cyi2x")
RoomName = &"Beginning Test 1"
Type = 0
ScenePath = &"uid://24wh7h2dbljf"
Size = Vector2i(1, 1)
DoorGridPositions = Array[Vector2i]([Vector2i(0, -1)])
SpawnableEnemies = null
metadata/_custom_type_script = "uid://bl2ne8w12e3a"

View file

@ -0,0 +1,17 @@
[gd_resource type="Resource" script_class="RogueliteRoomResource" load_steps=6 format=3 uid="uid://bv0mr43vcfrdh"]
[ext_resource type="Resource" uid="uid://cocl3qontm3be" path="res://Resources/Enemies/Base_Fairy.tres" id="1_772cf"]
[ext_resource type="Resource" uid="uid://cqfyuurvqb8m6" path="res://Resources/Enemies/Base_Fairy_Special.tres" id="2_mabih"]
[ext_resource type="Resource" uid="uid://qbo6avc7x64b" path="res://Resources/Enemies/Fairy_Guard.tres" id="3_lq7ck"]
[ext_resource type="Resource" uid="uid://cfdvg162u65sr" path="res://Resources/Enemies/Thermathron.tres" id="4_xqyuw"]
[ext_resource type="Script" uid="uid://bl2ne8w12e3a" path="res://Scripts/Resources/Roguelite/RogueliteRoomResource.cs" id="5_hvrt3"]
[resource]
script = ExtResource("5_hvrt3")
RoomName = &"Big Test"
Type = 1
ScenePath = &"uid://dngwjgs5bhnx7"
Size = Vector2i(2, 2)
DoorGridPositions = Array[Vector2i]([Vector2i(0, -1), Vector2i(0, 1), Vector2i(1, 0), Vector2i(-1, 0)])
SpawnableEnemies = Array[Object]([ExtResource("1_772cf"), ExtResource("2_mabih"), ExtResource("3_lq7ck"), ExtResource("4_xqyuw")])
metadata/_custom_type_script = "uid://bl2ne8w12e3a"

View file

@ -0,0 +1,17 @@
[gd_resource type="Resource" script_class="RogueliteRoomResource" load_steps=6 format=3 uid="uid://cgac12krx7vbf"]
[ext_resource type="Resource" uid="uid://cocl3qontm3be" path="res://Resources/Enemies/Base_Fairy.tres" id="1_j16nh"]
[ext_resource type="Resource" uid="uid://cqfyuurvqb8m6" path="res://Resources/Enemies/Base_Fairy_Special.tres" id="2_dneml"]
[ext_resource type="Resource" uid="uid://qbo6avc7x64b" path="res://Resources/Enemies/Fairy_Guard.tres" id="3_m2ese"]
[ext_resource type="Resource" uid="uid://cfdvg162u65sr" path="res://Resources/Enemies/Thermathron.tres" id="4_fojtq"]
[ext_resource type="Script" uid="uid://bl2ne8w12e3a" path="res://Scripts/Resources/Roguelite/RogueliteRoomResource.cs" id="5_2u7yj"]
[resource]
script = ExtResource("5_2u7yj")
RoomName = &"Boss"
Type = 4
ScenePath = &"uid://da7hmajaaiohm"
Size = Vector2i(1, 1)
DoorGridPositions = Array[Vector2i]([Vector2i(0, 1)])
SpawnableEnemies = Array[Object]([ExtResource("1_j16nh"), ExtResource("2_dneml"), ExtResource("3_m2ese"), ExtResource("4_fojtq")])
metadata/_custom_type_script = "uid://bl2ne8w12e3a"

View file

@ -9,7 +9,9 @@
[resource]
script = ExtResource("1_keg4c")
RoomName = &"Test"
Type = 1
ScenePath = &"uid://da7hmajaaiohm"
Size = Vector2(20, 10)
Size = Vector2i(1, 1)
DoorGridPositions = Array[Vector2i]([Vector2i(0, -1), Vector2i(0, 1), Vector2i(1, 0), Vector2i(-1, 0)])
SpawnableEnemies = Array[Object]([ExtResource("1_qx515"), ExtResource("2_46i28"), ExtResource("3_g4rpe"), ExtResource("4_wvuta")])
metadata/_custom_type_script = "uid://bl2ne8w12e3a"

View file

@ -9,7 +9,9 @@
[resource]
script = ExtResource("5_myanx")
RoomName = &"Test2"
Type = 1
ScenePath = &"uid://dcxrdhq1yw5c7"
Size = Vector2(20, 10)
Size = Vector2i(1, 1)
DoorGridPositions = Array[Vector2i]([Vector2i(0, -1), Vector2i(0, 1), Vector2i(1, 0), Vector2i(-1, 0)])
SpawnableEnemies = Array[Object]([ExtResource("1_1ns8k"), ExtResource("2_8dyfa"), ExtResource("3_3kq4c"), ExtResource("4_010mx")])
metadata/_custom_type_script = "uid://bl2ne8w12e3a"

View file

@ -1,4 +1,4 @@
[gd_scene load_steps=14 format=3 uid="uid://bf1kqr3o6r6d4"]
[gd_scene load_steps=17 format=3 uid="uid://bf1kqr3o6r6d4"]
[ext_resource type="Script" uid="uid://doxmbokehw8ci" path="res://Scripts/GameManager.cs" id="1_wbqvu"]
[ext_resource type="PackedScene" uid="uid://c4pr2707hbeph" path="res://Scenes/Actors/fsm_player.tscn" id="2_3fyis"]
@ -6,7 +6,10 @@
[ext_resource type="Script" uid="uid://bt2qjgnf1wc2r" path="res://Scripts/Controllers/RogueliteRoomManager.cs" id="4_jtlua"]
[ext_resource type="Resource" uid="uid://b5x83li01qrav" path="res://Resources/RogueliteMaps/TestRGMap.tres" id="5_gwtv6"]
[ext_resource type="Resource" uid="uid://ly8l7asedjpx" path="res://Resources/RogueliteMaps/TestRGMap2.tres" id="6_gwtv6"]
[ext_resource type="Resource" uid="uid://dn3ai56rrxfnk" path="res://Resources/RogueliteMaps/Beginner1.tres" id="7_wbqvu"]
[ext_resource type="Resource" uid="uid://cgac12krx7vbf" path="res://Resources/RogueliteMaps/Boss1.tres" id="8_3fyis"]
[ext_resource type="Script" uid="uid://cfya7sndh7vy2" path="res://Scenes/CameraController.gd" id="8_y651a"]
[ext_resource type="Resource" uid="uid://bv0mr43vcfrdh" path="res://Resources/RogueliteMaps/BigMap.tres" id="9_go1yg"]
[ext_resource type="Script" uid="uid://c5nxsq3tyxcx6" path="res://Scripts/InventoryManager.cs" id="9_vhvs2"]
[ext_resource type="PackedScene" uid="uid://dkwi1hu1bixoe" path="res://Scenes/HUD/HUD.tscn" id="10_6gk3e"]
[ext_resource type="Script" uid="uid://bdshph801ac2i" path="res://Scenes/CameraTarget.gd" id="11_4gy5m"]
@ -33,10 +36,11 @@ NavigationRegion = NodePath("NavigationRegion2D")
[node name="Maps" type="Node2D" parent="." groups=["navigation_polygon_source_geometry_group"]]
process_mode = 1
script = ExtResource("4_jtlua")
Rooms = Array[Object]([ExtResource("5_gwtv6"), ExtResource("6_gwtv6")])
Rooms = Array[Object]([ExtResource("5_gwtv6"), ExtResource("6_gwtv6"), ExtResource("7_wbqvu"), ExtResource("8_3fyis"), ExtResource("9_go1yg")])
[node name="CameraController" type="Camera2D" parent="."]
process_mode = 1
zoom = Vector2(0.2, 0.2)
script = ExtResource("8_y651a")
pixel_snap = false
enable_smoothing = false
@ -71,4 +75,4 @@ autoplay = true
[node name="NavigationRegion2D" type="NavigationRegion2D" parent="."]
navigation_polygon = SubResource("NavigationPolygon_jtlua")
[connection signal="ManagerReady" from="." to="Maps" method="SpawnRoomsGrid"]
[connection signal="ManagerReady" from="." to="Maps" method="InitSpawning"]

View file

@ -0,0 +1,59 @@
[gd_scene load_steps=7 format=4 uid="uid://24wh7h2dbljf"]
[ext_resource type="Script" uid="uid://b2j00riayxkit" path="res://Scripts/Controllers/RogueliteRoom.cs" id="1_vhsym"]
[ext_resource type="Resource" uid="uid://dn3ai56rrxfnk" path="res://Resources/RogueliteMaps/Beginner1.tres" id="2_vhsym"]
[ext_resource type="PackedScene" uid="uid://l84on3kv2s52" path="res://Scenes/Door_Horizontal.tscn" id="3_pys6w"]
[ext_resource type="TileSet" uid="uid://6k28roiljylj" path="res://Tilesets/factory_tileset.tres" id="3_u3c1h"]
[ext_resource type="Script" uid="uid://krean0uywtms" path="res://Scripts/TilemapAvoidance.cs" id="4_pys6w"]
[ext_resource type="Script" uid="uid://ddry5kjj3fr6c" path="res://Scripts/Controllers/DoorMarker.cs" id="5_mqiea"]
[node name="Tilemaps" type="Node2D"]
process_mode = 1
script = ExtResource("1_vhsym")
RoomResource = ExtResource("2_vhsym")
DoorPrefab = ExtResource("3_pys6w")
[node name="Floor" type="TileMapLayer" parent="." node_paths=PackedStringArray("_solidLayers") groups=["Solid"]]
tile_map_data = PackedByteArray("AAAAAAIAAAAEAAAAAAAAAAMAAAAEAAAAAAAAAAQAAAAEAAAAAAAAAAUAAAAEAAAAAAAAAAYAAAAEAAAAAAAAAAcAAAAEAAAAAAAAAAgAAAAEAAAAAAAAAAkAAAAEAAAAAAABAAIAAAAEAAAAAAABAAMAAAAEAAAAAAABAAQAAAAEAAAAAAABAAUAAAAEAAAAAAABAAYAAAAEAAAAAAABAAcAAAAEAAAAAAABAAgAAAAEAAAAAAABAAkAAAAEAAAAAAACAAIAAAAEAAAAAAACAAMAAAAEAAAAAAACAAQAAAAFAAIAAAACAAUAAAAFAAIAAAACAAYAAAAFAAIAAAACAAcAAAAEAAAAAAACAAgAAAAFAAIAAAACAAkAAAAEAAAAAAADAAIAAAAEAAAAAAADAAMAAAAEAAAAAAADAAQAAAAFAAIAAAADAAUAAAAEAAAAAAADAAYAAAAFAAIAAAADAAcAAAAEAAAAAAADAAgAAAAFAAIAAAADAAkAAAAEAAAAAAAEAAIAAAAEAAAAAAAEAAMAAAAEAAAAAAAEAAQAAAAFAAIAAAAEAAUAAAAEAAAAAAAEAAYAAAAFAAIAAAAEAAcAAAAFAAIAAAAEAAgAAAAFAAIAAAAEAAkAAAAEAAAAAAAFAAIAAAAEAAAAAAAFAAMAAAAEAAAAAAAFAAQAAAAEAAAAAAAFAAUAAAAEAAAAAAAFAAYAAAAEAAAAAAAFAAcAAAAEAAAAAAAFAAgAAAAEAAAAAAAFAAkAAAAEAAAAAAAGAAIAAAAEAAAAAAAGAAMAAAAEAAAAAAAGAAQAAAAFAAIAAAAGAAUAAAAEAAAAAAAGAAYAAAAEAAAAAAAGAAcAAAAEAAAAAAAGAAgAAAAEAAAAAAAGAAkAAAAEAAAAAAAHAAIAAAAEAAAAAAAHAAMAAAAEAAAAAAAHAAQAAAAFAAIAAAAHAAUAAAAFAAIAAAAHAAYAAAAFAAIAAAAHAAcAAAAFAAIAAAAHAAgAAAAFAAIAAAAHAAkAAAAEAAAAAAAIAAIAAAAEAAAAAAAIAAMAAAAEAAAAAAAIAAQAAAAFAAIAAAAIAAUAAAAEAAAAAAAIAAYAAAAEAAAAAAAIAAcAAAAEAAAAAAAIAAgAAAAEAAAAAAAIAAkAAAAEAAAAAAAJAAIAAAAEAAAAAAAJAAMAAAAEAAAAAAAJAAQAAAAEAAAAAAAJAAUAAAAEAAAAAAAJAAYAAAAEAAAAAAAJAAcAAAAEAAAAAAAJAAgAAAAEAAAAAAAJAAkAAAAEAAAAAAAKAAIAAAAEAAAAAAAKAAMAAAAEAAAAAAAKAAQAAAAFAAIAAAAKAAUAAAAFAAIAAAAKAAYAAAAFAAIAAAAKAAcAAAAFAAIAAAAKAAgAAAAFAAIAAAAKAAkAAAAEAAAAAAALAAIAAAAEAAAAAAALAAUAAAAEAAAAAAALAAYAAAAFAAIAAAALAAcAAAAEAAAAAAALAAgAAAAEAAAAAAALAAkAAAAEAAAAAAAMAAIAAAAEAAAAAAAMAAUAAAAFAAIAAAAMAAYAAAAFAAIAAAAMAAcAAAAFAAIAAAAMAAgAAAAFAAIAAAAMAAkAAAAEAAAAAAANAAIAAAAEAAAAAAANAAMAAAAEAAAAAAANAAQAAAAEAAAAAAANAAUAAAAEAAAAAAANAAYAAAAEAAAAAAANAAcAAAAEAAAAAAANAAgAAAAEAAAAAAANAAkAAAAEAAAAAAAOAAIAAAAEAAAAAAAOAAMAAAAEAAAAAAAOAAQAAAAFAAIAAAAOAAUAAAAFAAIAAAAOAAYAAAAFAAIAAAAOAAcAAAAFAAIAAAAOAAgAAAAFAAIAAAAOAAkAAAAEAAAAAAAPAAIAAAAEAAAAAAAPAAMAAAAEAAAAAAAPAAQAAAAFAAIAAAAPAAUAAAAEAAAAAAAPAAYAAAAFAAIAAAAPAAcAAAAEAAAAAAAPAAgAAAAEAAAAAAAPAAkAAAAEAAAAAAAQAAIAAAAEAAAAAAAQAAMAAAAEAAAAAAAQAAQAAAAEAAAAAAAQAAUAAAAFAAIAAAAQAAYAAAAEAAAAAAAQAAcAAAAFAAIAAAAQAAgAAAAFAAIAAAAQAAkAAAAEAAAAAAARAAIAAAAEAAAAAAARAAMAAAAEAAAAAAARAAQAAAAEAAAAAAARAAUAAAAEAAAAAAARAAYAAAAEAAAAAAARAAcAAAAEAAAAAAARAAgAAAAEAAAAAAARAAkAAAAEAAAAAAASAAIAAAAEAAAAAAASAAMAAAAEAAAAAAASAAQAAAAFAAIAAAASAAUAAAAEAAAAAAASAAYAAAAEAAAAAAASAAcAAAAEAAAAAAASAAgAAAAEAAAAAAASAAkAAAAEAAAAAAATAAIAAAAEAAAAAAATAAMAAAAEAAAAAAATAAQAAAAEAAAAAAATAAUAAAAFAAIAAAATAAYAAAAEAAAAAAATAAcAAAAEAAAAAAATAAgAAAAEAAAAAAATAAkAAAAEAAAAAAAAAAAAAAAEAAAAAAAAAAEAAAAEAAAAAAABAAAAAAAEAAAAAAABAAEAAAAEAAAAAAACAAAAAAAEAAAAAAACAAEAAAAEAAAAAAADAAAAAAAEAAAAAAADAAEAAAAEAAAAAAAEAAAAAAAEAAAAAAAEAAEAAAAEAAAAAAAFAAAAAAAEAAAAAAAFAAEAAAAEAAAAAAAGAAAAAAAEAAAAAAAGAAEAAAAEAAAAAAAHAAAAAAAEAAAAAAAHAAEAAAAEAAAAAAAIAAAAAAAEAAAAAAAIAAEAAAAEAAAAAAAJAAAAAAAEAAAAAAAJAAEAAAAEAAAAAAAKAAAAAAAEAAAAAAAKAAEAAAAEAAAAAAALAAAAAAAEAAAAAAALAAEAAAAEAAAAAAALAAMAAAAEAAAAAAALAAQAAAAFAAIAAAAMAAAAAAAEAAAAAAAMAAEAAAAEAAAAAAAMAAMAAAAEAAAAAAAMAAQAAAAFAAIAAAANAAAAAAAEAAAAAAANAAEAAAAEAAAAAAAOAAAAAAAEAAAAAAAOAAEAAAAEAAAAAAAPAAAAAAAEAAAAAAAPAAEAAAAEAAAAAAAQAAAAAAAEAAAAAAAQAAEAAAAEAAAAAAARAAAAAAAEAAAAAAARAAEAAAAEAAAAAAASAAAAAAAEAAAAAAASAAEAAAAEAAAAAAATAAAAAAAEAAAAAAATAAEAAAAEAAAAAAA=")
tile_set = ExtResource("3_u3c1h")
navigation_enabled = false
script = ExtResource("4_pys6w")
_solidLayers = [NodePath("../Solid"), NodePath("../Props")]
metadata/_edit_lock_ = true
[node name="Solid" type="TileMapLayer" parent="." groups=["Solid"]]
tile_map_data = PackedByteArray("AAATAAAAAAABAAsAAAASAAAAAAABAAQAAAARAAAAAAABAAQAAAAQAAAAAAABAAQAAAAPAAAAAAABAAQAAAAOAAAAAAABAAQAAAANAAAAAAABAAQAAAAMAAAAAAABAAQAAAALAAAAAAACAAQAAAAIAAAAAAADAAQAAAAHAAAAAAABAAQAAAAGAAAAAAABAAQAAAAFAAAAAAABAAQAAAAEAAAAAAABAAQAAAADAAAAAAABAAQAAAACAAAAAAABAAQAAAABAAAAAAABAAQAAAAAAAAAAAAAAAsAAAATAAIAAAAEAAQAAAATAAEAAAAAAAQAAAAAAAIAAAAEAAQAAAAAAAEAAAAAAAQAAAAAAAkAAAAAAAwAAAAAAAgAAAAAAAQAAAAAAAcAAAAAAAQAAAAAAAYAAAAFAAQAAAATAAkAAAABAAwAAAASAAkAAAABAAQAAAARAAkAAAABAAQAAAAQAAkAAAABAAQAAAAPAAkAAAABAAQAAAAOAAkAAAABAAQAAAANAAkAAAABAAQAAAAMAAkAAAABAAQAAAALAAkAAAACAAQAAAAIAAkAAAADAAQAAAAHAAkAAAABAAQAAAAGAAkAAAABAAQAAAAFAAkAAAABAAQAAAAEAAkAAAABAAQAAAADAAkAAAABAAQAAAACAAkAAAABAAQAAAABAAkAAAABAAQAAAATAAgAAAAAAAQAAAATAAcAAAAAAAQAAAATAAYAAAAFAAQAAAATAAMAAAAKAAgAAAATAAQAAAAKAAkAAAALAAEAAAAKAAgAAAALAAIAAAAKAAkAAAAMAAEAAAAKAAgAAAAMAAIAAAAKAAkAAAANAAEAAAAKAAgAAAANAAIAAAAKAAkAAAAOAAEAAAAKAAgAAAAOAAIAAAAKAAkAAAAPAAEAAAAKAAgAAAAPAAIAAAAKAAkAAAAQAAEAAAAKAAgAAAAQAAIAAAAKAAkAAAARAAEAAAAKAAgAAAARAAIAAAAKAAkAAAASAAEAAAAKAAgAAAASAAIAAAAKAAkAAAABAAEAAAAKAAgAAAABAAIAAAAKAAkAAAACAAEAAAAKAAgAAAACAAIAAAAKAAkAAAADAAEAAAAKAAgAAAADAAIAAAAKAAkAAAAEAAEAAAAKAAgAAAAEAAIAAAAKAAkAAAAFAAEAAAAKAAgAAAAFAAIAAAAKAAkAAAAGAAEAAAAKAAgAAAAGAAIAAAAKAAkAAAAHAAEAAAAKAAgAAAAHAAIAAAAKAAkAAAAIAAEAAAAKAAgAAAAIAAIAAAAKAAkAAAAAAAMAAAAKAAgAAAAAAAQAAAAKAAkAAAA=")
tile_set = ExtResource("3_u3c1h")
navigation_enabled = false
metadata/_edit_lock_ = true
[node name="Props" type="TileMapLayer" parent="." groups=["Solid"]]
tile_set = ExtResource("3_u3c1h")
navigation_enabled = false
metadata/_edit_lock_ = true
[node name="Actors" type="Node2D" parent="."]
metadata/_edit_lock_ = true
[node name="EnemySpawners" type="Node2D" parent="."]
[node name="Doors" type="Node2D" parent="."]
[node name="North" type="Marker2D" parent="Doors"]
position = Vector2(159, 23)
script = ExtResource("5_mqiea")
[node name="South" type="Marker2D" parent="Doors"]
position = Vector2(159.196, 149.348)
script = ExtResource("5_mqiea")
Direction = 1
[node name="East" type="Marker2D" parent="Doors"]
position = Vector2(312, 87)
script = ExtResource("5_mqiea")
Direction = 2
[node name="West" type="Marker2D" parent="Doors"]
position = Vector2(8.1806, 87.7693)
script = ExtResource("5_mqiea")
Direction = 3

View file

@ -0,0 +1,68 @@
[gd_scene load_steps=7 format=4 uid="uid://brytwc48xpj78"]
[ext_resource type="Script" uid="uid://b2j00riayxkit" path="res://Scripts/Controllers/RogueliteRoom.cs" id="1_vm1u7"]
[ext_resource type="Resource" uid="uid://cgac12krx7vbf" path="res://Resources/RogueliteMaps/Boss1.tres" id="2_vm1u7"]
[ext_resource type="PackedScene" uid="uid://l84on3kv2s52" path="res://Scenes/Door_Horizontal.tscn" id="3_vo7cb"]
[ext_resource type="TileSet" uid="uid://6k28roiljylj" path="res://Tilesets/factory_tileset.tres" id="3_wmvx8"]
[ext_resource type="Script" uid="uid://krean0uywtms" path="res://Scripts/TilemapAvoidance.cs" id="4_vo7cb"]
[ext_resource type="Script" uid="uid://ddry5kjj3fr6c" path="res://Scripts/Controllers/DoorMarker.cs" id="5_xjj1f"]
[node name="Tilemaps" type="Node2D"]
process_mode = 1
script = ExtResource("1_vm1u7")
RoomResource = ExtResource("2_vm1u7")
DoorPrefab = ExtResource("3_vo7cb")
[node name="Floor" type="TileMapLayer" parent="." node_paths=PackedStringArray("_solidLayers") groups=["Solid"]]
tile_map_data = PackedByteArray("AAAAAAIAAAACAAAAAAAAAAMAAAACAAAAAAAAAAQAAAACAAAAAAAAAAUAAAACAAAAAAAAAAYAAAACAAAAAAAAAAcAAAACAAAAAAAAAAgAAAACAAAAAAAAAAkAAAACAAAAAAABAAIAAAACAAAAAAABAAMAAAACAAAAAAABAAQAAAACAAAAAAABAAUAAAACAAAAAAABAAYAAAACAAAAAAABAAcAAAACAAAAAAABAAgAAAACAAAAAAABAAkAAAACAAAAAAACAAIAAAACAAAAAAACAAMAAAACAAAAAAACAAQAAAAFAAIAAAACAAUAAAAFAAIAAAACAAYAAAAFAAIAAAACAAcAAAAFAAIAAAACAAgAAAAFAAIAAAACAAkAAAACAAAAAAADAAIAAAACAAAAAAADAAMAAAACAAAAAAADAAQAAAAFAAIAAAADAAUAAAACAAAAAAADAAYAAAAFAAIAAAADAAcAAAACAAAAAAADAAgAAAAFAAIAAAADAAkAAAACAAAAAAAEAAIAAAACAAAAAAAEAAMAAAACAAAAAAAEAAQAAAACAAAAAAAEAAUAAAAFAAIAAAAEAAYAAAACAAAAAAAEAAcAAAAFAAIAAAAEAAgAAAACAAAAAAAEAAkAAAACAAAAAAAFAAIAAAACAAAAAAAFAAMAAAACAAAAAAAFAAQAAAACAAAAAAAFAAUAAAACAAAAAAAFAAYAAAACAAAAAAAFAAcAAAACAAAAAAAFAAgAAAACAAAAAAAFAAkAAAACAAAAAAAGAAIAAAACAAAAAAAGAAMAAAACAAAAAAAGAAQAAAAFAAIAAAAGAAUAAAAFAAIAAAAGAAYAAAAFAAIAAAAGAAcAAAAFAAIAAAAGAAgAAAAFAAIAAAAGAAkAAAACAAAAAAAHAAIAAAACAAAAAAAHAAMAAAACAAAAAAAHAAQAAAAFAAIAAAAHAAUAAAACAAAAAAAHAAYAAAACAAAAAAAHAAcAAAACAAAAAAAHAAgAAAAFAAIAAAAHAAkAAAACAAAAAAAIAAIAAAACAAAAAAAIAAMAAAACAAAAAAAIAAQAAAAFAAIAAAAIAAUAAAAFAAIAAAAIAAYAAAAFAAIAAAAIAAcAAAAFAAIAAAAIAAgAAAAFAAIAAAAIAAkAAAACAAAAAAAJAAIAAAACAAAAAAAJAAMAAAACAAAAAAAJAAQAAAACAAAAAAAJAAUAAAACAAAAAAAJAAYAAAACAAAAAAAJAAcAAAACAAAAAAAJAAgAAAACAAAAAAAJAAkAAAACAAAAAAAKAAIAAAACAAAAAAAKAAMAAAACAAAAAAAKAAQAAAAFAAIAAAAKAAUAAAAFAAIAAAAKAAYAAAAFAAIAAAAKAAcAAAACAAAAAAAKAAgAAAAFAAIAAAAKAAkAAAACAAAAAAALAAIAAAACAAAAAAALAAUAAAACAAAAAAALAAYAAAAFAAIAAAALAAcAAAACAAAAAAALAAgAAAAFAAIAAAALAAkAAAACAAAAAAAMAAIAAAACAAAAAAAMAAUAAAACAAAAAAAMAAYAAAAFAAIAAAAMAAcAAAAFAAIAAAAMAAgAAAAFAAIAAAAMAAkAAAACAAAAAAANAAIAAAACAAAAAAANAAMAAAACAAAAAAANAAQAAAACAAAAAAANAAUAAAACAAAAAAANAAYAAAACAAAAAAANAAcAAAACAAAAAAANAAgAAAACAAAAAAANAAkAAAACAAAAAAAOAAIAAAACAAAAAAAOAAMAAAACAAAAAAAOAAQAAAAFAAIAAAAOAAUAAAAFAAIAAAAOAAYAAAAFAAIAAAAOAAcAAAACAAAAAAAOAAgAAAAFAAIAAAAOAAkAAAACAAAAAAAPAAIAAAACAAAAAAAPAAMAAAACAAAAAAAPAAQAAAAFAAIAAAAPAAUAAAACAAAAAAAPAAYAAAAFAAIAAAAPAAcAAAACAAAAAAAPAAgAAAAFAAIAAAAPAAkAAAACAAAAAAAQAAIAAAACAAAAAAAQAAMAAAACAAAAAAAQAAQAAAAFAAIAAAAQAAUAAAACAAAAAAAQAAYAAAAFAAIAAAAQAAcAAAAFAAIAAAAQAAgAAAAFAAIAAAAQAAkAAAACAAAAAAARAAIAAAACAAAAAAARAAMAAAACAAAAAAARAAQAAAACAAAAAAARAAUAAAACAAAAAAARAAYAAAACAAAAAAARAAcAAAACAAAAAAARAAgAAAACAAAAAAARAAkAAAACAAAAAAASAAIAAAACAAAAAAASAAMAAAACAAAAAAASAAQAAAACAAAAAAASAAUAAAACAAAAAAASAAYAAAACAAAAAAASAAcAAAACAAAAAAASAAgAAAACAAAAAAASAAkAAAACAAAAAAATAAIAAAACAAAAAAATAAMAAAACAAAAAAATAAQAAAACAAAAAAATAAUAAAACAAAAAAATAAYAAAACAAAAAAATAAcAAAACAAAAAAATAAgAAAACAAAAAAATAAkAAAACAAAAAAAAAAAAAAACAAAAAAAAAAEAAAACAAAAAAABAAAAAAACAAAAAAABAAEAAAACAAAAAAACAAAAAAACAAAAAAACAAEAAAACAAAAAAADAAAAAAACAAAAAAADAAEAAAACAAAAAAAEAAAAAAACAAAAAAAEAAEAAAACAAAAAAAFAAAAAAACAAAAAAAFAAEAAAACAAAAAAAGAAAAAAACAAAAAAAGAAEAAAACAAAAAAAHAAAAAAACAAAAAAAHAAEAAAACAAAAAAAIAAAAAAACAAAAAAAIAAEAAAACAAAAAAAJAAAAAAACAAAAAAAJAAEAAAACAAAAAAAKAAAAAAACAAAAAAAKAAEAAAACAAAAAAALAAAAAAACAAAAAAALAAEAAAACAAAAAAALAAMAAAACAAAAAAALAAQAAAAFAAIAAAAMAAAAAAACAAAAAAAMAAEAAAACAAAAAAAMAAMAAAACAAAAAAAMAAQAAAAFAAIAAAANAAAAAAACAAAAAAANAAEAAAACAAAAAAAOAAAAAAACAAAAAAAOAAEAAAACAAAAAAAPAAAAAAACAAAAAAAPAAEAAAACAAAAAAAQAAAAAAACAAAAAAAQAAEAAAACAAAAAAARAAAAAAACAAAAAAARAAEAAAACAAAAAAASAAAAAAACAAAAAAASAAEAAAACAAAAAAATAAAAAAACAAAAAAATAAEAAAACAAAAAAA=")
tile_set = ExtResource("3_wmvx8")
navigation_enabled = false
script = ExtResource("4_vo7cb")
_solidLayers = [NodePath("../Solid"), NodePath("../Props")]
metadata/_edit_lock_ = true
[node name="Solid" type="TileMapLayer" parent="." groups=["Solid"]]
tile_map_data = PackedByteArray("AAATAAAAAAABAAsAAAASAAAAAAABAAQAAAARAAAAAAABAAQAAAAQAAAAAAABAAQAAAAPAAAAAAABAAQAAAAOAAAAAAABAAQAAAANAAAAAAABAAQAAAAMAAAAAAABAAQAAAALAAAAAAACAAQAAAAIAAAAAAADAAQAAAAHAAAAAAABAAQAAAAGAAAAAAABAAQAAAAFAAAAAAABAAQAAAAEAAAAAAABAAQAAAADAAAAAAABAAQAAAACAAAAAAABAAQAAAABAAAAAAABAAQAAAAAAAAAAAAAAAsAAAATAAIAAAAEAAQAAAATAAEAAAAAAAQAAAAAAAIAAAAEAAQAAAAAAAEAAAAAAAQAAAAAAAkAAAAAAAwAAAAAAAgAAAAAAAQAAAAAAAcAAAAAAAQAAAAAAAYAAAAFAAQAAAATAAkAAAABAAwAAAASAAkAAAABAAQAAAARAAkAAAABAAQAAAAQAAkAAAABAAQAAAAPAAkAAAABAAQAAAAOAAkAAAABAAQAAAANAAkAAAABAAQAAAAMAAkAAAABAAQAAAALAAkAAAACAAQAAAAIAAkAAAADAAQAAAAHAAkAAAABAAQAAAAGAAkAAAABAAQAAAAFAAkAAAABAAQAAAAEAAkAAAABAAQAAAADAAkAAAABAAQAAAACAAkAAAABAAQAAAABAAkAAAABAAQAAAATAAgAAAAAAAQAAAATAAcAAAAAAAQAAAATAAYAAAAFAAQAAAATAAMAAAALAAAAAAATAAQAAAALAAEAAAALAAEAAAALAAAAAAALAAIAAAALAAEAAAAMAAEAAAALAAAAAAAMAAIAAAALAAEAAAANAAEAAAALAAAAAAANAAIAAAALAAEAAAAOAAEAAAALAAAAAAAOAAIAAAALAAEAAAAPAAEAAAALAAAAAAAPAAIAAAALAAEAAAAQAAEAAAALAAAAAAAQAAIAAAALAAEAAAARAAEAAAALAAAAAAARAAIAAAALAAEAAAASAAEAAAALAAAAAAASAAIAAAALAAEAAAABAAEAAAALAAAAAAABAAIAAAALAAEAAAACAAEAAAALAAAAAAACAAIAAAALAAEAAAADAAEAAAALAAAAAAADAAIAAAALAAEAAAAEAAEAAAALAAAAAAAEAAIAAAALAAEAAAAFAAEAAAALAAAAAAAFAAIAAAALAAEAAAAGAAEAAAALAAAAAAAGAAIAAAALAAEAAAAHAAEAAAALAAAAAAAHAAIAAAALAAEAAAAIAAEAAAALAAAAAAAIAAIAAAALAAEAAAAAAAMAAAALAAAAAAAAAAQAAAALAAEAAAA=")
tile_set = ExtResource("3_wmvx8")
navigation_enabled = false
metadata/_edit_lock_ = true
[node name="Props" type="TileMapLayer" parent="." groups=["Solid"]]
tile_set = ExtResource("3_wmvx8")
navigation_enabled = false
metadata/_edit_lock_ = true
[node name="Actors" type="Node2D" parent="."]
metadata/_edit_lock_ = true
[node name="EnemySpawners" type="Node2D" parent="."]
[node name="RogueliteEnemySpawner" type="Marker2D" parent="EnemySpawners"]
position = Vector2(57, 67)
[node name="RogueliteEnemySpawner2" type="Marker2D" parent="EnemySpawners"]
position = Vector2(88, 126)
[node name="RogueliteEnemySpawner3" type="Marker2D" parent="EnemySpawners"]
position = Vector2(266, 122)
[node name="Doors" type="Node2D" parent="."]
[node name="North" type="Marker2D" parent="Doors"]
position = Vector2(159, 23)
script = ExtResource("5_xjj1f")
[node name="South" type="Marker2D" parent="Doors"]
position = Vector2(159.196, 149.348)
script = ExtResource("5_xjj1f")
Direction = 1
[node name="East" type="Marker2D" parent="Doors"]
position = Vector2(312, 87)
script = ExtResource("5_xjj1f")
Direction = 2
[node name="West" type="Marker2D" parent="Doors"]
position = Vector2(8.1806, 87.7693)
script = ExtResource("5_xjj1f")
Direction = 3

View file

@ -1,14 +1,17 @@
[gd_scene load_steps=5 format=4 uid="uid://da7hmajaaiohm"]
[gd_scene load_steps=7 format=4 uid="uid://da7hmajaaiohm"]
[ext_resource type="Script" uid="uid://b2j00riayxkit" path="res://Scripts/Controllers/RogueliteRoom.cs" id="1_dm6kf"]
[ext_resource type="Resource" uid="uid://b5x83li01qrav" path="res://Resources/RogueliteMaps/TestRGMap.tres" id="2_5s4nm"]
[ext_resource type="PackedScene" uid="uid://l84on3kv2s52" path="res://Scenes/Door_Horizontal.tscn" id="3_sid7o"]
[ext_resource type="TileSet" uid="uid://6k28roiljylj" path="res://Tilesets/factory_tileset.tres" id="5_q5p8k"]
[ext_resource type="Script" uid="uid://krean0uywtms" path="res://Scripts/TilemapAvoidance.cs" id="6_81nvh"]
[ext_resource type="Script" uid="uid://ddry5kjj3fr6c" path="res://Scripts/Controllers/DoorMarker.cs" id="6_b5lqw"]
[node name="Tilemaps" type="Node2D"]
process_mode = 1
script = ExtResource("1_dm6kf")
RoomResource = ExtResource("2_5s4nm")
DoorPrefab = ExtResource("3_sid7o")
[node name="Floor" type="TileMapLayer" parent="." node_paths=PackedStringArray("_solidLayers") groups=["Solid"]]
tile_map_data = PackedByteArray("AAAAAAIAAAAEAAIAAAAAAAMAAAAEAAIAAAAAAAQAAAAEAAIAAAAAAAUAAAAEAAIAAAAAAAYAAAAEAAIAAAAAAAcAAAAEAAIAAAAAAAgAAAAEAAIAAAAAAAkAAAAEAAIAAAABAAIAAAAEAAIAAAABAAMAAAAEAAIAAAABAAQAAAAEAAIAAAABAAUAAAAEAAIAAAABAAYAAAAEAAIAAAABAAcAAAAEAAIAAAABAAgAAAAEAAIAAAABAAkAAAAEAAIAAAACAAIAAAAEAAIAAAACAAMAAAAEAAIAAAACAAQAAAAEAAIAAAACAAUAAAAEAAIAAAACAAYAAAAEAAIAAAACAAcAAAAEAAIAAAACAAgAAAAEAAIAAAACAAkAAAAEAAIAAAADAAIAAAAEAAIAAAADAAMAAAAEAAIAAAADAAQAAAAEAAIAAAADAAUAAAAEAAIAAAADAAYAAAAEAAIAAAADAAcAAAAEAAIAAAADAAgAAAAEAAIAAAADAAkAAAAEAAIAAAAEAAIAAAAEAAIAAAAEAAMAAAAEAAIAAAAEAAQAAAAEAAIAAAAEAAUAAAAEAAIAAAAEAAYAAAAEAAIAAAAEAAcAAAAEAAIAAAAEAAgAAAAEAAIAAAAEAAkAAAAEAAIAAAAFAAIAAAAEAAIAAAAFAAMAAAAEAAIAAAAFAAQAAAAEAAIAAAAFAAUAAAAEAAIAAAAFAAYAAAAEAAIAAAAFAAcAAAAEAAIAAAAFAAgAAAAEAAIAAAAFAAkAAAAEAAIAAAAGAAIAAAAEAAIAAAAGAAMAAAAEAAIAAAAGAAQAAAAEAAIAAAAGAAUAAAAEAAIAAAAGAAYAAAAEAAIAAAAGAAcAAAAEAAIAAAAGAAgAAAAEAAIAAAAGAAkAAAAEAAIAAAAHAAIAAAAEAAIAAAAHAAMAAAAEAAIAAAAHAAQAAAAEAAIAAAAHAAUAAAAEAAIAAAAHAAYAAAAEAAIAAAAHAAcAAAAEAAIAAAAHAAgAAAAEAAIAAAAHAAkAAAAEAAIAAAAIAAIAAAAEAAIAAAAIAAMAAAAEAAIAAAAIAAQAAAAEAAIAAAAIAAUAAAAEAAIAAAAIAAYAAAAEAAIAAAAIAAcAAAAEAAIAAAAIAAgAAAAEAAIAAAAIAAkAAAAEAAIAAAAJAAIAAAAEAAIAAAAJAAMAAAAEAAIAAAAJAAQAAAAEAAIAAAAJAAUAAAAEAAIAAAAJAAYAAAAEAAIAAAAJAAcAAAAEAAIAAAAJAAgAAAAEAAIAAAAJAAkAAAAEAAIAAAAKAAIAAAAEAAIAAAAKAAMAAAAEAAIAAAAKAAQAAAAEAAIAAAAKAAUAAAAEAAIAAAAKAAYAAAAEAAIAAAAKAAcAAAAEAAIAAAAKAAgAAAAEAAIAAAAKAAkAAAAEAAIAAAALAAIAAAAEAAIAAAALAAUAAAAEAAIAAAALAAYAAAAEAAIAAAALAAcAAAAEAAIAAAALAAgAAAAEAAIAAAALAAkAAAAEAAIAAAAMAAIAAAAEAAIAAAAMAAUAAAAEAAIAAAAMAAYAAAAEAAIAAAAMAAcAAAAEAAIAAAAMAAgAAAAEAAIAAAAMAAkAAAAEAAIAAAANAAIAAAAEAAIAAAANAAMAAAAEAAIAAAANAAQAAAAEAAIAAAANAAUAAAAEAAIAAAANAAYAAAAEAAIAAAANAAcAAAAEAAIAAAANAAgAAAAEAAIAAAANAAkAAAAEAAIAAAAOAAIAAAAEAAIAAAAOAAMAAAAEAAIAAAAOAAQAAAAEAAIAAAAOAAUAAAAEAAIAAAAOAAYAAAAEAAIAAAAOAAcAAAAEAAIAAAAOAAgAAAAEAAIAAAAOAAkAAAAEAAIAAAAPAAIAAAAEAAIAAAAPAAMAAAAEAAIAAAAPAAQAAAAEAAIAAAAPAAUAAAAEAAIAAAAPAAYAAAAEAAIAAAAPAAcAAAAEAAIAAAAPAAgAAAAEAAIAAAAPAAkAAAAEAAIAAAAQAAIAAAAEAAIAAAAQAAMAAAAEAAIAAAAQAAQAAAAEAAIAAAAQAAUAAAAEAAIAAAAQAAYAAAAEAAIAAAAQAAcAAAAEAAIAAAAQAAgAAAAEAAIAAAAQAAkAAAAEAAIAAAARAAIAAAAEAAIAAAARAAMAAAAEAAIAAAARAAQAAAAEAAIAAAARAAUAAAAEAAIAAAARAAYAAAAEAAIAAAARAAcAAAAEAAIAAAARAAgAAAAEAAIAAAARAAkAAAAEAAIAAAASAAIAAAAEAAIAAAASAAMAAAAEAAIAAAASAAQAAAAEAAIAAAASAAUAAAAEAAIAAAASAAYAAAAEAAIAAAASAAcAAAAEAAIAAAASAAgAAAAEAAIAAAASAAkAAAAEAAIAAAATAAIAAAAEAAIAAAATAAMAAAAEAAIAAAATAAQAAAAEAAIAAAATAAUAAAAEAAIAAAATAAYAAAAEAAIAAAATAAcAAAAEAAIAAAATAAgAAAAEAAIAAAATAAkAAAAEAAIAAAAAAAAAAAAEAAIAAAAAAAEAAAAEAAIAAAABAAAAAAAEAAIAAAABAAEAAAAEAAIAAAACAAAAAAAEAAIAAAACAAEAAAAEAAIAAAADAAAAAAAEAAIAAAADAAEAAAAEAAIAAAAEAAAAAAAEAAIAAAAEAAEAAAAEAAIAAAAFAAAAAAAEAAIAAAAFAAEAAAAEAAIAAAAGAAAAAAAEAAIAAAAGAAEAAAAEAAIAAAAHAAAAAAAEAAIAAAAHAAEAAAAEAAIAAAAIAAAAAAAEAAIAAAAIAAEAAAAEAAIAAAAJAAAAAAAEAAIAAAAJAAEAAAAEAAIAAAAKAAAAAAAEAAIAAAAKAAEAAAAEAAIAAAALAAAAAAAEAAIAAAALAAEAAAAEAAIAAAALAAMAAAAEAAIAAAALAAQAAAAEAAIAAAAMAAAAAAAEAAIAAAAMAAEAAAAEAAIAAAAMAAMAAAAEAAIAAAAMAAQAAAAEAAIAAAANAAAAAAAEAAIAAAANAAEAAAAEAAIAAAAOAAAAAAAEAAIAAAAOAAEAAAAEAAIAAAAPAAAAAAAEAAIAAAAPAAEAAAAEAAIAAAAQAAAAAAAEAAIAAAAQAAEAAAAEAAIAAAARAAAAAAAEAAIAAAARAAEAAAAEAAIAAAASAAAAAAAEAAIAAAASAAEAAAAEAAIAAAATAAAAAAAEAAIAAAATAAEAAAAEAAIAAAA=")
@ -44,3 +47,22 @@ position = Vector2(88, 126)
position = Vector2(266, 122)
[node name="Doors" type="Node2D" parent="."]
[node name="North" type="Marker2D" parent="Doors"]
position = Vector2(159, 23)
script = ExtResource("6_b5lqw")
[node name="South" type="Marker2D" parent="Doors"]
position = Vector2(159.196, 149.348)
script = ExtResource("6_b5lqw")
Direction = 1
[node name="East" type="Marker2D" parent="Doors"]
position = Vector2(312, 87)
script = ExtResource("6_b5lqw")
Direction = 2
[node name="West" type="Marker2D" parent="Doors"]
position = Vector2(8.1806, 87.7693)
script = ExtResource("6_b5lqw")
Direction = 3

View file

@ -1,14 +1,17 @@
[gd_scene load_steps=5 format=4 uid="uid://dcxrdhq1yw5c7"]
[gd_scene load_steps=7 format=4 uid="uid://dcxrdhq1yw5c7"]
[ext_resource type="Script" uid="uid://b2j00riayxkit" path="res://Scripts/Controllers/RogueliteRoom.cs" id="1_cak6m"]
[ext_resource type="Resource" uid="uid://ly8l7asedjpx" path="res://Resources/RogueliteMaps/TestRGMap2.tres" id="2_cak6m"]
[ext_resource type="TileSet" uid="uid://6k28roiljylj" path="res://Tilesets/factory_tileset.tres" id="3_f7qjl"]
[ext_resource type="PackedScene" uid="uid://l84on3kv2s52" path="res://Scenes/Door_Horizontal.tscn" id="3_wtdf1"]
[ext_resource type="Script" uid="uid://krean0uywtms" path="res://Scripts/TilemapAvoidance.cs" id="4_wtdf1"]
[ext_resource type="Script" uid="uid://ddry5kjj3fr6c" path="res://Scripts/Controllers/DoorMarker.cs" id="5_2djm0"]
[node name="Tilemaps" type="Node2D"]
process_mode = 1
script = ExtResource("1_cak6m")
RoomResource = ExtResource("2_cak6m")
DoorPrefab = ExtResource("3_wtdf1")
[node name="Floor" type="TileMapLayer" parent="." node_paths=PackedStringArray("_solidLayers") groups=["Solid"]]
tile_map_data = PackedByteArray("AAAAAAIAAAAFAAAAAAAAAAMAAAAFAAAAAAAAAAQAAAAFAAAAAAAAAAUAAAAFAAAAAAAAAAYAAAAFAAAAAAAAAAcAAAAFAAAAAAAAAAgAAAAFAAAAAAAAAAkAAAAFAAAAAAABAAIAAAAFAAAAAAABAAMAAAAFAAAAAAABAAQAAAAFAAAAAAABAAUAAAAFAAAAAAABAAYAAAAFAAAAAAABAAcAAAAFAAAAAAABAAgAAAAFAAAAAAABAAkAAAAFAAAAAAACAAIAAAAFAAAAAAACAAMAAAAFAAAAAAACAAQAAAAFAAAAAAACAAUAAAAFAAAAAAACAAYAAAAFAAAAAAACAAcAAAAFAAAAAAACAAgAAAAFAAAAAAACAAkAAAAFAAAAAAADAAIAAAAFAAAAAAADAAMAAAAFAAAAAAADAAQAAAAFAAAAAAADAAUAAAAFAAAAAAADAAYAAAAFAAAAAAADAAcAAAAFAAAAAAADAAgAAAAFAAAAAAADAAkAAAAFAAAAAAAEAAIAAAAFAAAAAAAEAAMAAAAFAAAAAAAEAAQAAAAFAAAAAAAEAAUAAAAFAAAAAAAEAAYAAAAFAAAAAAAEAAcAAAAFAAAAAAAEAAgAAAAFAAAAAAAEAAkAAAAFAAAAAAAFAAIAAAAFAAAAAAAFAAMAAAAFAAAAAAAFAAQAAAAFAAAAAAAFAAUAAAAFAAAAAAAFAAYAAAAFAAAAAAAFAAcAAAAFAAAAAAAFAAgAAAAFAAAAAAAFAAkAAAAFAAAAAAAGAAIAAAAFAAAAAAAGAAMAAAAFAAAAAAAGAAQAAAAFAAAAAAAGAAUAAAAFAAAAAAAGAAYAAAAFAAAAAAAGAAcAAAAFAAAAAAAGAAgAAAAFAAAAAAAGAAkAAAAFAAAAAAAHAAIAAAAFAAAAAAAHAAMAAAAFAAAAAAAHAAQAAAAFAAAAAAAHAAUAAAAFAAAAAAAHAAYAAAAFAAAAAAAHAAcAAAAFAAAAAAAHAAgAAAAFAAAAAAAHAAkAAAAFAAAAAAAIAAIAAAAFAAAAAAAIAAMAAAAFAAAAAAAIAAQAAAAFAAAAAAAIAAUAAAAFAAAAAAAIAAYAAAAFAAAAAAAIAAcAAAAFAAAAAAAIAAgAAAAFAAAAAAAIAAkAAAAFAAAAAAAJAAIAAAAFAAAAAAAJAAMAAAAFAAAAAAAJAAQAAAAFAAAAAAAJAAgAAAAFAAAAAAAJAAkAAAAFAAAAAAAKAAIAAAAFAAAAAAAKAAMAAAAFAAAAAAAKAAQAAAAFAAAAAAAKAAgAAAAFAAAAAAAKAAkAAAAFAAAAAAALAAIAAAAFAAAAAAALAAUAAAAFAAAAAAALAAYAAAAFAAAAAAALAAcAAAAFAAAAAAALAAgAAAAFAAAAAAALAAkAAAAFAAAAAAAMAAIAAAAFAAAAAAAMAAUAAAAFAAAAAAAMAAYAAAAFAAAAAAAMAAcAAAAFAAAAAAAMAAgAAAAFAAAAAAAMAAkAAAAFAAAAAAANAAIAAAAFAAAAAAANAAMAAAAFAAAAAAANAAQAAAAFAAAAAAANAAUAAAAFAAAAAAANAAYAAAAFAAAAAAANAAcAAAAFAAAAAAANAAgAAAAFAAAAAAANAAkAAAAFAAAAAAAOAAIAAAAFAAAAAAAOAAMAAAAFAAAAAAAOAAQAAAAFAAAAAAAOAAUAAAAFAAAAAAAOAAYAAAAFAAAAAAAOAAcAAAAFAAAAAAAOAAgAAAAFAAAAAAAOAAkAAAAFAAAAAAAPAAIAAAAFAAAAAAAPAAMAAAAFAAAAAAAPAAQAAAAFAAAAAAAPAAUAAAAFAAAAAAAPAAYAAAAFAAAAAAAPAAcAAAAFAAAAAAAPAAgAAAAFAAAAAAAPAAkAAAAFAAAAAAAQAAIAAAAFAAAAAAAQAAMAAAAFAAAAAAAQAAQAAAAFAAAAAAAQAAUAAAAFAAAAAAAQAAYAAAAFAAAAAAAQAAcAAAAFAAAAAAAQAAgAAAAFAAAAAAAQAAkAAAAFAAAAAAARAAIAAAAFAAAAAAARAAMAAAAFAAAAAAARAAQAAAAFAAAAAAARAAUAAAAFAAAAAAARAAYAAAAFAAAAAAARAAcAAAAFAAAAAAARAAgAAAAFAAAAAAARAAkAAAAFAAAAAAASAAIAAAAFAAAAAAASAAMAAAAFAAAAAAASAAQAAAAFAAAAAAASAAUAAAAFAAAAAAASAAYAAAAFAAAAAAASAAcAAAAFAAAAAAASAAgAAAAFAAAAAAASAAkAAAAFAAAAAAATAAIAAAAFAAAAAAATAAMAAAAFAAAAAAATAAQAAAAFAAAAAAATAAUAAAAFAAAAAAATAAYAAAAFAAAAAAATAAcAAAAFAAAAAAATAAgAAAAFAAAAAAATAAkAAAAFAAAAAAAAAAAAAAAFAAAAAAAAAAEAAAAFAAAAAAABAAAAAAAFAAAAAAABAAEAAAAFAAAAAAACAAAAAAAFAAAAAAACAAEAAAAFAAAAAAADAAAAAAAFAAAAAAADAAEAAAAFAAAAAAAEAAAAAAAFAAAAAAAEAAEAAAAFAAAAAAAFAAAAAAAFAAAAAAAFAAEAAAAFAAAAAAAGAAAAAAAFAAAAAAAGAAEAAAAFAAAAAAAHAAAAAAAFAAAAAAAHAAEAAAAFAAAAAAAIAAAAAAAFAAAAAAAIAAEAAAAFAAAAAAAJAAAAAAAFAAAAAAAJAAEAAAAFAAAAAAAKAAAAAAAFAAAAAAAKAAEAAAAFAAAAAAALAAAAAAAFAAAAAAALAAEAAAAFAAAAAAALAAMAAAAFAAAAAAALAAQAAAAFAAAAAAAMAAAAAAAFAAAAAAAMAAEAAAAFAAAAAAAMAAMAAAAFAAAAAAAMAAQAAAAFAAAAAAANAAAAAAAFAAAAAAANAAEAAAAFAAAAAAAOAAAAAAAFAAAAAAAOAAEAAAAFAAAAAAAPAAAAAAAFAAAAAAAPAAEAAAAFAAAAAAAQAAAAAAAFAAAAAAAQAAEAAAAFAAAAAAARAAAAAAAFAAAAAAARAAEAAAAFAAAAAAASAAAAAAAFAAAAAAASAAEAAAAFAAAAAAATAAAAAAAFAAAAAAATAAEAAAAFAAAAAAAJAAUAAAAFAAAAAAAJAAYAAAAFAAAAAAAJAAcAAAAFAAAAAAAKAAUAAAAFAAAAAAAKAAYAAAAFAAAAAAAKAAcAAAAFAAAAAAA=")
@ -45,3 +48,22 @@ position = Vector2(233, 63)
position = Vector2(266, 122)
[node name="Doors" type="Node2D" parent="."]
[node name="North" type="Marker2D" parent="Doors"]
position = Vector2(159, 23)
script = ExtResource("5_2djm0")
[node name="South" type="Marker2D" parent="Doors"]
position = Vector2(159.196, 149.348)
script = ExtResource("5_2djm0")
Direction = 1
[node name="East" type="Marker2D" parent="Doors"]
position = Vector2(312, 87)
script = ExtResource("5_2djm0")
Direction = 2
[node name="West" type="Marker2D" parent="Doors"]
position = Vector2(8.1806, 87.7693)
script = ExtResource("5_2djm0")
Direction = 3

File diff suppressed because one or more lines are too long

View file

@ -0,0 +1,38 @@
using Godot;
namespace Cirno.Scripts.Controllers;
// [Tool]
public partial class DoorMarker : Marker2D
{
[Export] public RoomDirection Direction { get; set; } = RoomDirection.North;
[Export] public int WallIndex { get; set; } = 0; // Useful if there are multiple along a wall
public Vector2I GetWorldDirection()
{
return Direction switch
{
RoomDirection.North => new Vector2I(0, -1),
RoomDirection.South => new Vector2I(0, 1),
RoomDirection.East => new Vector2I(1, 0),
RoomDirection.West => new Vector2I(-1, 0),
_ => Vector2I.Zero
};
}
// public override void _Draw()
// {
// if (!Engine.IsEditorHint()) return;
//
// DrawLine(Vector2.Zero, Vector2.Up * 16, Colors.Orange, 2);
// DrawString(GetFont("font", "Label"), new Vector2(10, -10), Direction.ToString(), HAlign.Left);
// }
}
public enum RoomDirection
{
North,
South,
East,
West
}

View file

@ -0,0 +1 @@
uid://ddry5kjj3fr6c

View file

@ -1,4 +1,5 @@
using System.Linq;
using System;
using System.Linq;
using Cirno.Scripts.Resources;
using Cirno.Scripts.Resources.Roguelite;
using Godot;
@ -9,11 +10,74 @@ namespace Cirno.Scripts.Controllers;
public partial class RogueliteRoom : Node2D
{
[Export] public RogueliteRoomResource RoomResource { get; set; }
public Vector2I GridPosition { get; set; } // Set by dungeon manager
[Export] public PackedScene DoorPrefab { get; private set; }
private static readonly Dictionary<string, Vector2I> DirectionMap = new()
{
{ "North", new Vector2I(0, -1) },
{ "South", new Vector2I(0, 1) },
{ "East", new Vector2I(1, 0) },
{ "West", new Vector2I(-1, 0) },
};
private Array<EnemyResource> SpawnableEnemies => RoomResource.SpawnableEnemies;
public void Spawn()
public RogueliteRoom Spawn(Func<Vector2I, bool> connectionChecker)
{
SpawnEnemies();
HandleDoors(connectionChecker);
return this;
}
private void HandleDoors(Func<Vector2I, bool> connectionChecker)
{
if (!HasNode("Doors")) return;
var doorsNode = GetNode("Doors");
foreach (Node child in doorsNode.GetChildren())
{
if (child is not DoorMarker marker) continue;
var baseDir = marker.GetWorldDirection();
// 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),
_ => Vector2I.Zero
};
// Combine GridPosition + offset to locate where this door aligns
Vector2I doorEdge = GridPosition + offset;
Vector2I neighborPos = doorEdge + baseDir;
bool connected = connectionChecker.Invoke(neighborPos);
if (!connected) continue;
var door = this.CreateChild<Door>(DoorPrefab, marker.GlobalPosition);
door.State = DoorState.Open;
// PackedScene prefab = hasConnection
// ? GD.Load<PackedScene>("res://Prefabs/Door.tscn")
// : GD.Load<PackedScene>("res://Prefabs/Wall.tscn");
//
// var instance = prefab.Instantiate<Node2D>();
// AddChild(instance);
// instance.GlobalPosition = ((Node2D)child).GlobalPosition;
// instance.Rotation = ((Node2D)child).GlobalRotation;
}
}
private void SpawnEnemies()
{
if (SpawnableEnemies is null || !SpawnableEnemies.Any()) return;
var enemySpawners = this.GetNode("EnemySpawners").GetChildren().Cast<Marker2D>();
foreach (var spawner in enemySpawners)
@ -26,6 +90,5 @@ public partial class RogueliteRoom : Node2D
var enemyScene = GD.Load<PackedScene>(e.PrefabPath);
var spawnedEnemy = spawner.CreateChild<Node2D>(enemyScene);
}
}
}

View file

@ -1,4 +1,6 @@
using System.Linq;
using System.Collections.Generic;
using System.Linq;
using Cirno.Scripts.Enums;
using Cirno.Scripts.Resources.Roguelite;
using Godot;
using Godot.Collections;
@ -10,13 +12,27 @@ public partial class RogueliteRoomManager : Node2D
[Export] public Array<RogueliteRoomResource> Rooms { get; set; }
[Export] public Node2D SceneContainer { get; set; }
private Godot.Collections.Dictionary<Vector2I, RogueliteRoomResource> _grid = new();
[Export] public int DungeonWidth = 10;
[Export] public int DungeonHeight = 10;
[Export] public int MaxRooms = 12;
//[Export] public int Seed = -1;
[Export] public Vector2I TileSize { get; set; } = new Vector2I(16, 16);
[Export] public Vector2I RoomSizeInTiles { get; set; } = new Vector2I(20, 10);
public override void _Ready()
{
// Spawn first room
}
public void InitSpawning()
{
SpawnRoomsBinaryTree();
}
private void SpawnRoomsGrid()
{
//var firstRoom = Rooms.FirstOrDefault();
@ -30,12 +46,70 @@ public partial class RogueliteRoomManager : Node2D
{
var roomIndex = GD.RandRange(0, Rooms.Count - 1);
var room = Rooms[roomIndex];
SpawnRoom(room, origin + (room.Size * new Vector2(i, j) * tileSize));
//SpawnRoom(room, origin + (room.Size * new Vector2(i, j) * tileSize));
}
}
//CallDeferred(MethodName.RebakeNavigationDeferred);
}
private void SpawnRoomsBinaryTree()
{
var directions = new List<Vector2I>
{
new Vector2I(0, -1), // North
new Vector2I(0, 1), // South
new Vector2I(1, 0), // East
new Vector2I(-1, 0), // West
};
var origin = Vector2I.Zero;
var tileSize = new Vector2(16, 16);
var gridRoomSizeInTiles = new Vector2(20, 10);
var starterRooms = Rooms.Where(x => x.Type is RoomType.Starter).ToList();
var regularRooms = Rooms.Where(x => x.Type == RoomType.Regular).ToList();
var starterRoom = starterRooms[GD.RandRange(0, starterRooms.Count - 1)];
var spawnedStartRoom = SpawnRoom(starterRoom, origin);
MarkRoom(origin, starterRoom.Size, starterRoom);
Queue<(Vector2I Position, RogueliteRoomResource Room)> queue = new();
queue.Enqueue((origin, starterRoom));
int spawnedRoomCount = 1;
while (spawnedRoomCount < MaxRooms && queue.Count > 0)
{
var (currentPos, currentRoom) = queue.Dequeue();
foreach (var dir in directions)
{
var offsetPos = currentPos + dir;
// Avoid placing rooms in occupied space
if (_grid.ContainsKey(offsetPos)) continue;
var nextRoom = regularRooms[GD.RandRange(0, regularRooms.Count - 1)];
var roomSize = nextRoom.Size;
// Multi-tile room placement validation
if (!CanPlaceRoom(offsetPos, roomSize)) continue;
SpawnRoom(nextRoom, offsetPos);
MarkRoom(offsetPos, roomSize, nextRoom);
queue.Enqueue((offsetPos, nextRoom));
spawnedRoomCount++;
if (spawnedRoomCount >= MaxRooms)
break;
}
}
//SpawnSpecialRooms(rng);
}
private void RebakeNavigationDeferred()
@ -43,12 +117,46 @@ public partial class RogueliteRoomManager : Node2D
GameManager.Instance.RebakeNavigation();
}
private void SpawnRoom(RogueliteRoomResource room, Vector2 position)
private RogueliteRoom SpawnRoom(RogueliteRoomResource room, Vector2I gridPos)
{
var roomScene = GD.Load<PackedScene>(room.ScenePath);
var position = gridPos * TileSize * RoomSizeInTiles;
var roomScene = GD.Load<PackedScene>(room.ScenePath);
var spawnedScene = this.CreateChild<RogueliteRoom>(roomScene, position);
spawnedScene.Spawn();
// for reference
//SpawnRoom(room, origin + (room.Size * new Vector2(i, j) * tileSize));
return spawnedScene.Spawn(CheckConnection);
}
private bool CheckConnection(Vector2I pos)
{
return _grid.ContainsKey(pos); // <- this is your dungeon grid dictionary
}
private bool CanPlaceRoom(Vector2I origin, Vector2I size)
{
for (int x = 0; x < size.X; x++)
{
for (int y = 0; y < size.Y; y++)
{
var pos = origin + new Vector2I(x, y);
if (_grid.ContainsKey(pos)) return false;
}
}
return true;
}
private void MarkRoom(Vector2I origin, Vector2I size, RogueliteRoomResource room)
{
for (int x = 0; x < size.X; x++)
{
for (int y = 0; y < size.Y; y++)
{
var pos = origin + new Vector2I(x, y);
_grid[pos] = room;
}
}
}
}

View file

@ -0,0 +1,12 @@
using System;
namespace Cirno.Scripts.Enums;
[Flags]
public enum DoorDirections
{
North = 1 << 1,
South = 1 << 2,
East = 1 << 3,
West = 1 << 4,
}

10
Scripts/Enums/RoomType.cs Normal file
View file

@ -0,0 +1,10 @@
namespace Cirno.Scripts.Enums;
public enum RoomType
{
Starter,
Regular,
Secret,
Shop,
Boss
}

View file

@ -0,0 +1 @@
uid://bt7u3v4hlqmsd

View file

@ -1,4 +1,5 @@
using Godot;
using Cirno.Scripts.Enums;
using Godot;
using Godot.Collections;
namespace Cirno.Scripts.Resources.Roguelite;
@ -7,8 +8,11 @@ namespace Cirno.Scripts.Resources.Roguelite;
public partial class RogueliteRoomResource : Resource
{
[Export] public StringName RoomName { get; set; }
[Export] public RoomType Type { get; set; } = RoomType.Regular;
[Export] public StringName ScenePath { get; set; }
[Export] public Vector2 Size { get; set; } = new(20, 10);
[Export] public Vector2I Size { get; set; } = new(1, 1);
[Export] public Array<Vector2I> DoorGridPositions { get; set; } = [];
[Export] public Array<EnemyResource> SpawnableEnemies { get; set; }
}