diff --git a/Resources/RogueliteMaps/Beginner1.tres b/Resources/RogueliteMaps/Beginner1.tres new file mode 100644 index 00000000..880f8953 --- /dev/null +++ b/Resources/RogueliteMaps/Beginner1.tres @@ -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" diff --git a/Resources/RogueliteMaps/BigMap.tres b/Resources/RogueliteMaps/BigMap.tres new file mode 100644 index 00000000..a2d1469e --- /dev/null +++ b/Resources/RogueliteMaps/BigMap.tres @@ -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" diff --git a/Resources/RogueliteMaps/Boss1.tres b/Resources/RogueliteMaps/Boss1.tres new file mode 100644 index 00000000..25b8b5af --- /dev/null +++ b/Resources/RogueliteMaps/Boss1.tres @@ -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" diff --git a/Resources/RogueliteMaps/TestRGMap.tres b/Resources/RogueliteMaps/TestRGMap.tres index bd58b981..4d567767 100644 --- a/Resources/RogueliteMaps/TestRGMap.tres +++ b/Resources/RogueliteMaps/TestRGMap.tres @@ -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" diff --git a/Resources/RogueliteMaps/TestRGMap2.tres b/Resources/RogueliteMaps/TestRGMap2.tres index c7e67d0b..c879c04f 100644 --- a/Resources/RogueliteMaps/TestRGMap2.tres +++ b/Resources/RogueliteMaps/TestRGMap2.tres @@ -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" diff --git a/Scenes/Maps/Roguelike.tscn b/Scenes/Maps/Roguelike.tscn index 6db70ba9..300a2b7e 100644 --- a/Scenes/Maps/Roguelike.tscn +++ b/Scenes/Maps/Roguelike.tscn @@ -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"] diff --git a/Scenes/Maps/RogueliteMaps/Beginner1.tscn b/Scenes/Maps/RogueliteMaps/Beginner1.tscn new file mode 100644 index 00000000..52d477d6 --- /dev/null +++ b/Scenes/Maps/RogueliteMaps/Beginner1.tscn @@ -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 diff --git a/Scenes/Maps/RogueliteMaps/Boss1.tscn b/Scenes/Maps/RogueliteMaps/Boss1.tscn new file mode 100644 index 00000000..cad26c60 --- /dev/null +++ b/Scenes/Maps/RogueliteMaps/Boss1.tscn @@ -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 diff --git a/Scenes/Maps/RogueliteMaps/Rg1.tscn b/Scenes/Maps/RogueliteMaps/Rg1.tscn index a0683e19..dcf05bd5 100644 --- a/Scenes/Maps/RogueliteMaps/Rg1.tscn +++ b/Scenes/Maps/RogueliteMaps/Rg1.tscn @@ -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 diff --git a/Scenes/Maps/RogueliteMaps/Rg2.tscn b/Scenes/Maps/RogueliteMaps/Rg2.tscn index 93697ba3..798c07d5 100644 --- a/Scenes/Maps/RogueliteMaps/Rg2.tscn +++ b/Scenes/Maps/RogueliteMaps/Rg2.tscn @@ -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 diff --git a/Scenes/Maps/RogueliteMaps/RgBig.tscn b/Scenes/Maps/RogueliteMaps/RgBig.tscn new file mode 100644 index 00000000..11adb23f --- /dev/null +++ b/Scenes/Maps/RogueliteMaps/RgBig.tscn @@ -0,0 +1,91 @@ +[gd_scene load_steps=7 format=4 uid="uid://dngwjgs5bhnx7"] + +[ext_resource type="Script" uid="uid://b2j00riayxkit" path="res://Scripts/Controllers/RogueliteRoom.cs" id="1_xsqjb"] +[ext_resource type="Resource" uid="uid://bv0mr43vcfrdh" path="res://Resources/RogueliteMaps/BigMap.tres" id="2_xsqjb"] +[ext_resource type="PackedScene" uid="uid://l84on3kv2s52" path="res://Scenes/Door_Horizontal.tscn" id="3_cgxuy"] +[ext_resource type="TileSet" uid="uid://6k28roiljylj" path="res://Tilesets/factory_tileset.tres" id="4_tyndx"] +[ext_resource type="Script" uid="uid://krean0uywtms" path="res://Scripts/TilemapAvoidance.cs" id="5_lrgk6"] +[ext_resource type="Script" uid="uid://ddry5kjj3fr6c" path="res://Scripts/Controllers/DoorMarker.cs" id="6_x7fb3"] + +[node name="Tilemaps" type="Node2D"] +process_mode = 1 +script = ExtResource("1_xsqjb") +RoomResource = ExtResource("2_xsqjb") +DoorPrefab = ExtResource("3_cgxuy") + +[node name="Floor" type="TileMapLayer" parent="." node_paths=PackedStringArray("_solidLayers") groups=["Solid"]] +tile_map_data = PackedByteArray("AAAAAAIAAAALAAcAAAAAAAMAAAALAAcAAAAAAAQAAAALAAcAAAAAAAUAAAALAAcAAAAAAAYAAAALAAcAAAAAAAcAAAALAAcAAAAAAAgAAAALAAcAAAAAAAkAAAALAAcAAAABAAIAAAALAAcAAAABAAMAAAALAAcAAAABAAQAAAALAAcAAAABAAUAAAALAAcAAAABAAYAAAALAAcAAAABAAcAAAALAAcAAAABAAgAAAALAAcAAAABAAkAAAALAAcAAAACAAIAAAALAAcAAAACAAMAAAALAAcAAAACAAQAAAALAAcAAAACAAUAAAALAAcAAAACAAYAAAALAAcAAAACAAcAAAALAAcAAAACAAgAAAALAAcAAAACAAkAAAALAAcAAAADAAIAAAALAAcAAAADAAMAAAALAAcAAAADAAQAAAALAAcAAAADAAUAAAALAAcAAAADAAYAAAALAAcAAAADAAcAAAALAAcAAAADAAgAAAALAAcAAAADAAkAAAALAAcAAAAEAAIAAAALAAcAAAAEAAMAAAALAAcAAAAEAAQAAAALAAcAAAAEAAUAAAALAAcAAAAEAAYAAAALAAcAAAAEAAcAAAALAAcAAAAEAAgAAAALAAcAAAAEAAkAAAALAAcAAAAFAAIAAAALAAcAAAAFAAMAAAALAAcAAAAFAAQAAAALAAcAAAAFAAUAAAALAAcAAAAFAAYAAAALAAcAAAAFAAcAAAALAAcAAAAFAAgAAAALAAcAAAAFAAkAAAALAAcAAAAGAAIAAAALAAcAAAAGAAMAAAALAAcAAAAGAAQAAAALAAcAAAAGAAUAAAALAAcAAAAGAAYAAAALAAcAAAAGAAcAAAALAAcAAAAGAAgAAAALAAcAAAAGAAkAAAALAAcAAAAHAAIAAAALAAcAAAAHAAMAAAALAAcAAAAHAAQAAAALAAcAAAAHAAUAAAALAAcAAAAHAAYAAAALAAcAAAAHAAcAAAALAAcAAAAHAAgAAAALAAcAAAAHAAkAAAALAAcAAAAIAAIAAAALAAcAAAAIAAMAAAALAAcAAAAIAAQAAAALAAcAAAAIAAUAAAALAAcAAAAIAAYAAAALAAcAAAAIAAcAAAALAAcAAAAIAAgAAAALAAcAAAAIAAkAAAALAAcAAAAJAAIAAAALAAcAAAAJAAMAAAALAAcAAAAJAAQAAAALAAcAAAAJAAUAAAALAAcAAAAJAAYAAAALAAcAAAAJAAcAAAALAAcAAAAJAAgAAAALAAcAAAAJAAkAAAALAAcAAAAKAAIAAAALAAcAAAAKAAMAAAALAAcAAAAKAAQAAAALAAcAAAAKAAUAAAALAAcAAAAKAAYAAAALAAcAAAAKAAcAAAALAAcAAAAKAAgAAAALAAcAAAAKAAkAAAALAAcAAAALAAIAAAALAAcAAAALAAUAAAALAAcAAAALAAYAAAALAAcAAAALAAcAAAALAAcAAAALAAgAAAALAAcAAAALAAkAAAALAAcAAAAMAAIAAAALAAcAAAAMAAUAAAALAAcAAAAMAAYAAAALAAcAAAAMAAcAAAALAAcAAAAMAAgAAAALAAcAAAAMAAkAAAALAAcAAAANAAIAAAALAAcAAAANAAMAAAALAAcAAAANAAQAAAALAAcAAAANAAUAAAALAAcAAAANAAYAAAALAAcAAAANAAcAAAALAAcAAAANAAgAAAALAAcAAAANAAkAAAALAAcAAAAOAAIAAAALAAcAAAAOAAMAAAALAAcAAAAOAAQAAAALAAcAAAAOAAUAAAALAAcAAAAOAAYAAAALAAcAAAAOAAcAAAALAAcAAAAOAAgAAAALAAcAAAAOAAkAAAALAAcAAAAPAAIAAAALAAcAAAAPAAMAAAALAAcAAAAPAAQAAAALAAcAAAAPAAUAAAALAAcAAAAPAAYAAAALAAcAAAAPAAcAAAALAAcAAAAPAAgAAAALAAcAAAAPAAkAAAALAAcAAAAQAAIAAAALAAcAAAAQAAMAAAALAAcAAAAQAAQAAAALAAcAAAAQAAUAAAALAAcAAAAQAAYAAAALAAcAAAAQAAcAAAALAAcAAAAQAAgAAAALAAcAAAAQAAkAAAALAAcAAAARAAIAAAALAAcAAAARAAMAAAALAAcAAAARAAQAAAALAAcAAAARAAUAAAALAAcAAAARAAYAAAALAAcAAAARAAcAAAALAAcAAAARAAgAAAALAAcAAAARAAkAAAALAAcAAAASAAIAAAALAAcAAAASAAMAAAALAAcAAAASAAQAAAALAAcAAAASAAUAAAALAAcAAAASAAYAAAALAAcAAAASAAcAAAALAAcAAAASAAgAAAALAAcAAAASAAkAAAALAAcAAAATAAIAAAALAAcAAAATAAMAAAAEAAIAAAATAAQAAAAEAAIAAAATAAUAAAAEAAIAAAATAAYAAAAEAAIAAAATAAcAAAAEAAIAAAATAAgAAAAEAAIAAAATAAkAAAAEAAIAAAAAAAAAAAALAAcAAAAAAAEAAAALAAcAAAABAAAAAAALAAcAAAABAAEAAAALAAcAAAACAAAAAAALAAcAAAACAAEAAAALAAcAAAADAAAAAAALAAcAAAADAAEAAAALAAcAAAAEAAAAAAALAAcAAAAEAAEAAAALAAcAAAAFAAAAAAALAAcAAAAFAAEAAAALAAcAAAAGAAAAAAALAAcAAAAGAAEAAAALAAcAAAAHAAAAAAALAAcAAAAHAAEAAAALAAcAAAAIAAAAAAALAAcAAAAIAAEAAAALAAcAAAAJAAAAAAALAAcAAAAJAAEAAAALAAcAAAAKAAAAAAALAAcAAAAKAAEAAAALAAcAAAALAAAAAAALAAcAAAALAAEAAAALAAcAAAALAAMAAAALAAcAAAALAAQAAAALAAcAAAAMAAAAAAALAAcAAAAMAAEAAAALAAcAAAAMAAMAAAALAAcAAAAMAAQAAAALAAcAAAANAAAAAAALAAcAAAANAAEAAAALAAcAAAAOAAAAAAALAAcAAAAOAAEAAAALAAcAAAAPAAAAAAALAAcAAAAPAAEAAAALAAcAAAAQAAAAAAALAAcAAAAQAAEAAAALAAcAAAARAAAAAAALAAcAAAARAAEAAAALAAcAAAASAAAAAAALAAcAAAASAAEAAAALAAcAAAATAAAAAAALAAcAAAATAAEAAAALAAcAAAAAAAoAAAALAAcAAAAAAAsAAAALAAcAAAAAAAwAAAALAAcAAAAAAA0AAAALAAcAAAAAAA4AAAALAAcAAAAAAA8AAAALAAcAAAAAABAAAAALAAcAAAAAABEAAAALAAcAAAAAABIAAAALAAcAAAABAAoAAAAEAAIAAAABAAsAAAALAAcAAAABAAwAAAALAAcAAAABAA0AAAALAAcAAAABAA4AAAALAAcAAAABAA8AAAALAAcAAAABABAAAAALAAcAAAABABEAAAALAAcAAAABABIAAAALAAcAAAACAAoAAAAEAAIAAAACAAsAAAALAAcAAAACAAwAAAALAAcAAAACAA0AAAALAAcAAAACAA4AAAALAAcAAAACAA8AAAALAAcAAAACABAAAAALAAcAAAACABEAAAALAAcAAAACABIAAAALAAcAAAADAAoAAAAEAAIAAAADAAsAAAALAAcAAAADAAwAAAALAAcAAAADAA0AAAALAAcAAAADAA4AAAALAAcAAAADAA8AAAALAAcAAAADABAAAAALAAcAAAADABEAAAALAAcAAAADABIAAAALAAcAAAAEAAoAAAAEAAIAAAAEAAsAAAALAAcAAAAEAAwAAAALAAcAAAAEAA0AAAALAAcAAAAEAA4AAAALAAcAAAAEAA8AAAALAAcAAAAEABAAAAALAAcAAAAEABEAAAALAAcAAAAEABIAAAALAAcAAAAFAAoAAAAEAAIAAAAFAAsAAAALAAcAAAAFAAwAAAALAAcAAAAFAA0AAAALAAcAAAAFAA4AAAALAAcAAAAFAA8AAAALAAcAAAAFABAAAAALAAcAAAAFABEAAAALAAcAAAAFABIAAAALAAcAAAAGAAoAAAAEAAIAAAAGAAsAAAALAAcAAAAGAAwAAAALAAcAAAAGAA0AAAALAAcAAAAGAA4AAAALAAcAAAAGAA8AAAALAAcAAAAGABAAAAALAAcAAAAGABEAAAALAAcAAAAGABIAAAALAAcAAAAHAAoAAAAEAAIAAAAHAAsAAAALAAcAAAAHAAwAAAALAAcAAAAHAA0AAAALAAcAAAAHAA4AAAALAAcAAAAHAA8AAAALAAcAAAAHABAAAAALAAcAAAAHABEAAAALAAcAAAAHABIAAAALAAcAAAAIAAoAAAAEAAIAAAAIAAsAAAALAAcAAAAIAAwAAAALAAcAAAAIAA0AAAALAAcAAAAIAA4AAAALAAcAAAAIAA8AAAALAAcAAAAIABAAAAALAAcAAAAIABEAAAALAAcAAAAIABIAAAALAAcAAAAJAAoAAAAEAAIAAAAJAAsAAAALAAcAAAAJAAwAAAALAAcAAAAJAA0AAAALAAcAAAAJAA4AAAALAAcAAAAJAA8AAAALAAcAAAAJABAAAAALAAcAAAAJABEAAAALAAcAAAAJABIAAAALAAcAAAAKAAoAAAAEAAIAAAAKAAsAAAALAAcAAAAKAAwAAAALAAcAAAAKAA0AAAALAAcAAAAKAA4AAAALAAcAAAAKAA8AAAALAAcAAAAKABAAAAALAAcAAAAKABEAAAALAAcAAAAKABIAAAALAAcAAAALAAoAAAAEAAIAAAALAAsAAAALAAcAAAALAAwAAAALAAcAAAALAA0AAAALAAcAAAALAA4AAAALAAcAAAALAA8AAAALAAcAAAALABAAAAALAAcAAAALABEAAAALAAcAAAALABIAAAALAAcAAAAMAAoAAAAEAAIAAAAMAAsAAAALAAcAAAAMAAwAAAALAAcAAAAMAA0AAAALAAcAAAAMAA4AAAALAAcAAAAMAA8AAAALAAcAAAAMABAAAAALAAcAAAAMABEAAAALAAcAAAAMABIAAAALAAcAAAANAAoAAAAEAAIAAAANAAsAAAALAAcAAAANAAwAAAALAAcAAAANAA0AAAALAAcAAAANAA4AAAALAAcAAAANAA8AAAALAAcAAAANABAAAAALAAcAAAANABEAAAALAAcAAAANABIAAAALAAcAAAAOAAoAAAAEAAIAAAAOAAsAAAALAAcAAAAOAAwAAAALAAcAAAAOAA0AAAALAAcAAAAOAA4AAAALAAcAAAAOAA8AAAALAAcAAAAOABAAAAALAAcAAAAOABEAAAALAAcAAAAOABIAAAALAAcAAAAPAAoAAAAEAAIAAAAPAAsAAAALAAcAAAAPAAwAAAALAAcAAAAPAA0AAAALAAcAAAAPAA4AAAALAAcAAAAPAA8AAAALAAcAAAAPABAAAAALAAcAAAAPABEAAAALAAcAAAAPABIAAAALAAcAAAAQAAoAAAAEAAIAAAAQAAsAAAALAAcAAAAQAAwAAAALAAcAAAAQAA0AAAALAAcAAAAQAA4AAAALAAcAAAAQAA8AAAALAAcAAAAQABAAAAALAAcAAAAQABEAAAALAAcAAAAQABIAAAALAAcAAAARAAoAAAAEAAIAAAARAAsAAAALAAcAAAARAAwAAAALAAcAAAARAA0AAAALAAcAAAARAA4AAAALAAcAAAARAA8AAAALAAcAAAARABAAAAALAAcAAAARABEAAAALAAcAAAARABIAAAALAAcAAAASAAoAAAAEAAIAAAASAAsAAAALAAcAAAASAAwAAAALAAcAAAASAA0AAAALAAcAAAASAA4AAAALAAcAAAASAA8AAAALAAcAAAASABAAAAALAAcAAAASABEAAAALAAcAAAASABIAAAALAAcAAAATAAoAAAAEAAIAAAATAAsAAAAEAAIAAAATAAwAAAAEAAIAAAATAA0AAAAEAAIAAAATAA4AAAAEAAIAAAATAA8AAAAEAAIAAAATABAAAAAEAAIAAAATABEAAAAEAAIAAAATABIAAAAEAAIAAAAUAAAAAAALAAcAAAAUAAEAAAALAAcAAAAUAAIAAAALAAcAAAAUAAMAAAAEAAIAAAAUAAQAAAAEAAIAAAAUAAUAAAAEAAIAAAAUAAYAAAAEAAIAAAAUAAcAAAAEAAIAAAAUAAgAAAAEAAIAAAAUAAkAAAAEAAIAAAAUAAoAAAAEAAIAAAAUAAsAAAAEAAIAAAAUAAwAAAAEAAIAAAAUAA0AAAAEAAIAAAAUAA4AAAAEAAIAAAAUAA8AAAAEAAIAAAAUABAAAAAEAAIAAAAUABEAAAAEAAIAAAAUABIAAAAEAAIAAAAVAAAAAAALAAcAAAAVAAEAAAALAAcAAAAVAAIAAAALAAcAAAAVAAMAAAALAAcAAAAVAAQAAAALAAcAAAAVAAUAAAALAAcAAAAVAAYAAAALAAcAAAAVAAcAAAALAAcAAAAVAAgAAAALAAcAAAAVAAkAAAALAAcAAAAVAAoAAAAEAAIAAAAVAAsAAAALAAcAAAAVAAwAAAALAAcAAAAVAA0AAAALAAcAAAAVAA4AAAALAAcAAAAVAA8AAAALAAcAAAAVABAAAAALAAcAAAAVABEAAAALAAcAAAAVABIAAAALAAcAAAAWAAAAAAALAAcAAAAWAAEAAAALAAcAAAAWAAIAAAALAAcAAAAWAAMAAAALAAcAAAAWAAQAAAALAAcAAAAWAAUAAAALAAcAAAAWAAYAAAALAAcAAAAWAAcAAAALAAcAAAAWAAgAAAALAAcAAAAWAAkAAAALAAcAAAAWAAoAAAAEAAIAAAAWAAsAAAALAAcAAAAWAAwAAAALAAcAAAAWAA0AAAALAAcAAAAWAA4AAAALAAcAAAAWAA8AAAALAAcAAAAWABAAAAALAAcAAAAWABEAAAALAAcAAAAWABIAAAALAAcAAAAXAAAAAAALAAcAAAAXAAEAAAALAAcAAAAXAAIAAAALAAcAAAAXAAMAAAALAAcAAAAXAAQAAAALAAcAAAAXAAUAAAALAAcAAAAXAAYAAAALAAcAAAAXAAcAAAALAAcAAAAXAAgAAAALAAcAAAAXAAkAAAALAAcAAAAXAAoAAAAEAAIAAAAXAAsAAAALAAcAAAAXAAwAAAALAAcAAAAXAA0AAAALAAcAAAAXAA4AAAALAAcAAAAXAA8AAAALAAcAAAAXABAAAAALAAcAAAAXABEAAAALAAcAAAAXABIAAAALAAcAAAAYAAAAAAALAAcAAAAYAAEAAAALAAcAAAAYAAIAAAALAAcAAAAYAAMAAAALAAcAAAAYAAQAAAALAAcAAAAYAAUAAAALAAcAAAAYAAYAAAALAAcAAAAYAAcAAAALAAcAAAAYAAgAAAALAAcAAAAYAAkAAAALAAcAAAAYAAoAAAAEAAIAAAAYAAsAAAALAAcAAAAYAAwAAAALAAcAAAAYAA0AAAALAAcAAAAYAA4AAAALAAcAAAAYAA8AAAALAAcAAAAYABAAAAALAAcAAAAYABEAAAALAAcAAAAYABIAAAALAAcAAAAZAAAAAAALAAcAAAAZAAEAAAALAAcAAAAZAAIAAAALAAcAAAAZAAMAAAALAAcAAAAZAAQAAAALAAcAAAAZAAUAAAALAAcAAAAZAAYAAAALAAcAAAAZAAcAAAALAAcAAAAZAAgAAAALAAcAAAAZAAkAAAALAAcAAAAZAAoAAAAEAAIAAAAZAAsAAAALAAcAAAAZAAwAAAALAAcAAAAZAA0AAAALAAcAAAAZAA4AAAALAAcAAAAZAA8AAAALAAcAAAAZABAAAAALAAcAAAAZABEAAAALAAcAAAAZABIAAAALAAcAAAAaAAAAAAALAAcAAAAaAAEAAAALAAcAAAAaAAIAAAALAAcAAAAaAAMAAAALAAcAAAAaAAQAAAALAAcAAAAaAAUAAAALAAcAAAAaAAYAAAALAAcAAAAaAAcAAAALAAcAAAAaAAgAAAALAAcAAAAaAAkAAAALAAcAAAAaAAoAAAAEAAIAAAAaAAsAAAALAAcAAAAaAAwAAAALAAcAAAAaAA0AAAALAAcAAAAaAA4AAAALAAcAAAAaAA8AAAALAAcAAAAaABAAAAALAAcAAAAaABEAAAALAAcAAAAaABIAAAALAAcAAAAbAAAAAAALAAcAAAAbAAEAAAALAAcAAAAbAAIAAAALAAcAAAAbAAMAAAALAAcAAAAbAAQAAAALAAcAAAAbAAUAAAALAAcAAAAbAAYAAAALAAcAAAAbAAcAAAALAAcAAAAbAAgAAAALAAcAAAAbAAkAAAALAAcAAAAbAAoAAAAEAAIAAAAbAAsAAAALAAcAAAAbAAwAAAALAAcAAAAbAA0AAAALAAcAAAAbAA4AAAALAAcAAAAbAA8AAAALAAcAAAAbABAAAAALAAcAAAAbABEAAAALAAcAAAAbABIAAAALAAcAAAAcAAAAAAALAAcAAAAcAAEAAAALAAcAAAAcAAIAAAALAAcAAAAcAAMAAAALAAcAAAAcAAQAAAALAAcAAAAcAAUAAAALAAcAAAAcAAYAAAALAAcAAAAcAAcAAAALAAcAAAAcAAgAAAALAAcAAAAcAAkAAAALAAcAAAAcAAoAAAAEAAIAAAAcAAsAAAALAAcAAAAcAAwAAAALAAcAAAAcAA0AAAALAAcAAAAcAA4AAAALAAcAAAAcAA8AAAALAAcAAAAcABAAAAALAAcAAAAcABEAAAALAAcAAAAcABIAAAALAAcAAAAdAAAAAAALAAcAAAAdAAEAAAALAAcAAAAdAAIAAAALAAcAAAAdAAMAAAALAAcAAAAdAAQAAAALAAcAAAAdAAUAAAALAAcAAAAdAAYAAAALAAcAAAAdAAcAAAALAAcAAAAdAAgAAAALAAcAAAAdAAkAAAALAAcAAAAdAAoAAAAEAAIAAAAdAAsAAAALAAcAAAAdAAwAAAALAAcAAAAdAA0AAAALAAcAAAAdAA4AAAALAAcAAAAdAA8AAAALAAcAAAAdABAAAAALAAcAAAAdABEAAAALAAcAAAAdABIAAAALAAcAAAAeAAAAAAALAAcAAAAeAAEAAAALAAcAAAAeAAIAAAALAAcAAAAeAAMAAAALAAcAAAAeAAQAAAALAAcAAAAeAAUAAAALAAcAAAAeAAYAAAALAAcAAAAeAAcAAAALAAcAAAAeAAgAAAALAAcAAAAeAAkAAAALAAcAAAAeAAoAAAAEAAIAAAAeAAsAAAALAAcAAAAeAAwAAAALAAcAAAAeAA0AAAALAAcAAAAeAA4AAAALAAcAAAAeAA8AAAALAAcAAAAeABAAAAALAAcAAAAeABEAAAALAAcAAAAeABIAAAALAAcAAAAfAAAAAAALAAcAAAAfAAEAAAALAAcAAAAfAAIAAAALAAcAAAAfAAMAAAALAAcAAAAfAAQAAAALAAcAAAAfAAUAAAALAAcAAAAfAAYAAAALAAcAAAAfAAcAAAALAAcAAAAfAAgAAAALAAcAAAAfAAkAAAALAAcAAAAfAAoAAAAEAAIAAAAfAAsAAAALAAcAAAAfAAwAAAALAAcAAAAfAA0AAAALAAcAAAAfAA4AAAALAAcAAAAfAA8AAAALAAcAAAAfABAAAAALAAcAAAAfABEAAAALAAcAAAAfABIAAAALAAcAAAAgAAAAAAALAAcAAAAgAAEAAAALAAcAAAAgAAIAAAALAAcAAAAgAAMAAAALAAcAAAAgAAQAAAALAAcAAAAgAAUAAAALAAcAAAAgAAYAAAALAAcAAAAgAAcAAAALAAcAAAAgAAgAAAALAAcAAAAgAAkAAAALAAcAAAAgAAoAAAAEAAIAAAAgAAsAAAALAAcAAAAgAAwAAAALAAcAAAAgAA0AAAALAAcAAAAgAA4AAAALAAcAAAAgAA8AAAALAAcAAAAgABAAAAALAAcAAAAgABEAAAALAAcAAAAgABIAAAALAAcAAAAhAAAAAAALAAcAAAAhAAEAAAALAAcAAAAhAAIAAAALAAcAAAAhAAMAAAALAAcAAAAhAAQAAAALAAcAAAAhAAUAAAALAAcAAAAhAAYAAAALAAcAAAAhAAcAAAALAAcAAAAhAAgAAAALAAcAAAAhAAkAAAALAAcAAAAhAAoAAAAEAAIAAAAhAAsAAAALAAcAAAAhAAwAAAALAAcAAAAhAA0AAAALAAcAAAAhAA4AAAALAAcAAAAhAA8AAAALAAcAAAAhABAAAAALAAcAAAAhABEAAAALAAcAAAAhABIAAAALAAcAAAAiAAAAAAALAAcAAAAiAAEAAAALAAcAAAAiAAIAAAALAAcAAAAiAAMAAAALAAcAAAAiAAQAAAALAAcAAAAiAAUAAAALAAcAAAAiAAYAAAALAAcAAAAiAAcAAAALAAcAAAAiAAgAAAALAAcAAAAiAAkAAAALAAcAAAAiAAoAAAAEAAIAAAAiAAsAAAALAAcAAAAiAAwAAAALAAcAAAAiAA0AAAALAAcAAAAiAA4AAAALAAcAAAAiAA8AAAALAAcAAAAiABAAAAALAAcAAAAiABEAAAALAAcAAAAiABIAAAALAAcAAAAjAAAAAAALAAcAAAAjAAEAAAALAAcAAAAjAAIAAAALAAcAAAAjAAMAAAALAAcAAAAjAAQAAAALAAcAAAAjAAUAAAALAAcAAAAjAAYAAAALAAcAAAAjAAcAAAALAAcAAAAjAAgAAAALAAcAAAAjAAkAAAALAAcAAAAjAAoAAAAEAAIAAAAjAAsAAAALAAcAAAAjAAwAAAALAAcAAAAjAA0AAAALAAcAAAAjAA4AAAALAAcAAAAjAA8AAAALAAcAAAAjABAAAAALAAcAAAAjABEAAAALAAcAAAAjABIAAAALAAcAAAAkAAAAAAALAAcAAAAkAAEAAAALAAcAAAAkAAIAAAALAAcAAAAkAAMAAAALAAcAAAAkAAQAAAALAAcAAAAkAAUAAAALAAcAAAAkAAYAAAALAAcAAAAkAAcAAAALAAcAAAAkAAgAAAALAAcAAAAkAAkAAAALAAcAAAAkAAoAAAAEAAIAAAAkAAsAAAALAAcAAAAkAAwAAAALAAcAAAAkAA0AAAALAAcAAAAkAA4AAAALAAcAAAAkAA8AAAALAAcAAAAkABAAAAALAAcAAAAkABEAAAALAAcAAAAkABIAAAALAAcAAAAlAAAAAAALAAcAAAAlAAEAAAALAAcAAAAlAAIAAAALAAcAAAAlAAMAAAALAAcAAAAlAAQAAAALAAcAAAAlAAUAAAALAAcAAAAlAAYAAAALAAcAAAAlAAcAAAALAAcAAAAlAAgAAAALAAcAAAAlAAkAAAALAAcAAAAlAAoAAAAEAAIAAAAlAAsAAAALAAcAAAAlAAwAAAALAAcAAAAlAA0AAAALAAcAAAAlAA4AAAALAAcAAAAlAA8AAAALAAcAAAAlABAAAAALAAcAAAAlABEAAAALAAcAAAAlABIAAAALAAcAAAAmAAAAAAALAAcAAAAmAAEAAAALAAcAAAAmAAIAAAALAAcAAAAmAAMAAAALAAcAAAAmAAQAAAALAAcAAAAmAAUAAAALAAcAAAAmAAYAAAALAAcAAAAmAAcAAAALAAcAAAAmAAgAAAALAAcAAAAmAAkAAAALAAcAAAAmAAoAAAAEAAIAAAAmAAsAAAALAAcAAAAmAAwAAAALAAcAAAAmAA0AAAALAAcAAAAmAA4AAAALAAcAAAAmAA8AAAALAAcAAAAmABAAAAALAAcAAAAmABEAAAALAAcAAAAmABIAAAALAAcAAAADABMAAAALAAcAAAAEABMAAAALAAcAAAAFABMAAAALAAcAAAAGABMAAAALAAcAAAAHABMAAAALAAcAAAAIABMAAAALAAcAAAAJABMAAAALAAcAAAAKABMAAAALAAcAAAALABMAAAALAAcAAAAMABMAAAALAAcAAAANABMAAAALAAcAAAAOABMAAAALAAcAAAAPABMAAAALAAcAAAAQABMAAAALAAcAAAARABMAAAALAAcAAAASABMAAAALAAcAAAATABMAAAALAAcAAAAUABMAAAALAAcAAAAVABMAAAALAAcAAAAWABMAAAALAAcAAAAXABMAAAALAAcAAAAYABMAAAALAAcAAAAZABMAAAALAAcAAAAaABMAAAALAAcAAAAbABMAAAALAAcAAAAcABMAAAALAAcAAAAdABMAAAALAAcAAAAeABMAAAALAAcAAAAfABMAAAALAAcAAAAgABMAAAALAAcAAAAhABMAAAALAAcAAAAiABMAAAALAAcAAAAjABMAAAALAAcAAAAkABMAAAALAAcAAAAlABMAAAALAAcAAAAmABMAAAALAAcAAAAnAAsAAAALAAcAAAAnAAwAAAALAAcAAAAnAA0AAAALAAcAAAAnAA4AAAALAAcAAAAnAA8AAAALAAcAAAAnABAAAAALAAcAAAAnABEAAAALAAcAAAAnABIAAAALAAcAAAAnABMAAAALAAcAAAAnAAUAAAALAAcAAAA=") +tile_set = ExtResource("4_tyndx") +navigation_enabled = false +script = ExtResource("5_lrgk6") +_solidLayers = [NodePath("../Solid"), NodePath("../Props")] +metadata/_edit_lock_ = true + +[node name="Solid" type="TileMapLayer" parent="." groups=["Solid"]] +tile_map_data = PackedByteArray("AAATAAAAAAAAAAsAAAASAAAAAAABAAQAAAARAAAAAAABAAQAAAAQAAAAAAABAAQAAAAPAAAAAAABAAQAAAAOAAAAAAABAAQAAAANAAAAAAABAAQAAAAMAAAAAAABAAQAAAALAAAAAAACAAQAAAAIAAAAAAADAAQAAAAHAAAAAAABAAQAAAAGAAAAAAABAAQAAAAFAAAAAAABAAQAAAAEAAAAAAABAAQAAAADAAAAAAABAAQAAAACAAAAAAABAAQAAAABAAAAAAABAAQAAAAAAAAAAAAAAAsAAAATAAIAAAAEAAQAAAATAAEAAAAAAAQAAAAAAAIAAAAEAAQAAAAAAAEAAAAAAAQAAAAAAAkAAAAAAAsAAAAAAAgAAAAAAAQAAAAAAAcAAAAAAAQAAAAAAAYAAAAFAAQAAAALAAEAAAAKAAgAAAALAAIAAAAKAAkAAAAMAAEAAAAKAAgAAAAMAAIAAAAKAAkAAAANAAEAAAAKAAgAAAANAAIAAAAKAAkAAAAOAAEAAAAKAAgAAAAOAAIAAAAKAAkAAAAPAAEAAAAKAAgAAAAPAAIAAAAKAAkAAAAQAAEAAAAKAAgAAAAQAAIAAAAKAAkAAAARAAEAAAAKAAgAAAARAAIAAAAKAAkAAAASAAEAAAAKAAgAAAASAAIAAAAKAAkAAAABAAEAAAAKAAgAAAABAAIAAAAKAAkAAAACAAEAAAAKAAgAAAACAAIAAAAKAAkAAAADAAEAAAAKAAgAAAADAAIAAAAKAAkAAAAEAAEAAAAKAAgAAAAEAAIAAAAKAAkAAAAFAAEAAAAKAAgAAAAFAAIAAAAKAAkAAAAGAAEAAAAKAAgAAAAGAAIAAAAKAAkAAAAHAAEAAAAKAAgAAAAHAAIAAAAKAAkAAAAIAAEAAAAKAAgAAAAIAAIAAAAKAAkAAAAAAAMAAAAKAAgAAAAAAAQAAAAKAAkAAAAAAAoAAAAAAAQAAAAAAAsAAAAAAAQAAAAAAAwAAAAEAAQAAAAAAA0AAAAKAAgAAAAAABAAAAAFAAQAAAAAABEAAAAAAAQAAAAAABIAAAAAAAQAAAAUAAAAAAABAAQAAAAUAAEAAAAKAAgAAAAUAAIAAAAKAAkAAAAVAAAAAAABAAQAAAAVAAEAAAAKAAgAAAAVAAIAAAAKAAkAAAAWAAAAAAABAAQAAAAWAAEAAAAKAAgAAAAWAAIAAAAKAAkAAAAXAAAAAAABAAQAAAAXAAEAAAAKAAgAAAAXAAIAAAAKAAkAAAAYAAAAAAABAAQAAAAYAAEAAAAKAAgAAAAYAAIAAAAKAAkAAAAZAAAAAAABAAQAAAAZAAEAAAAKAAgAAAAZAAIAAAAKAAkAAAAaAAAAAAABAAQAAAAaAAEAAAAKAAgAAAAaAAIAAAAKAAkAAAAbAAAAAAABAAQAAAAbAAEAAAAKAAgAAAAbAAIAAAAKAAkAAAAfAAAAAAABAAQAAAAfAAEAAAAKAAgAAAAfAAIAAAAKAAkAAAAgAAAAAAABAAQAAAAgAAEAAAAKAAgAAAAgAAIAAAAKAAkAAAAhAAAAAAABAAQAAAAhAAEAAAAKAAgAAAAhAAIAAAAKAAkAAAAiAAAAAAABAAQAAAAiAAEAAAAKAAgAAAAiAAIAAAAKAAkAAAAjAAAAAAABAAQAAAAjAAEAAAAKAAgAAAAjAAIAAAAKAAkAAAAkAAAAAAABAAQAAAAkAAEAAAAKAAgAAAAkAAIAAAAKAAkAAAAlAAAAAAABAAQAAAAlAAEAAAAKAAgAAAAlAAIAAAAKAAkAAAAmAAAAAAABAAQAAAAAABMAAAAAAAwAAAABABMAAAABAAQAAAACABMAAAABAAQAAAADABMAAAABAAQAAAAEABMAAAABAAQAAAAFABMAAAABAAQAAAAGABMAAAABAAQAAAAHABMAAAABAAQAAAAIABMAAAADAAQAAAALABMAAAACAAQAAAAMABMAAAABAAQAAAANABMAAAABAAQAAAAaABMAAAABAAQAAAAbABMAAAABAAQAAAAZABMAAAABAAQAAAAYABMAAAABAAQAAAAWABMAAAABAAQAAAAXABMAAAABAAQAAAAVABMAAAABAAQAAAAUABMAAAABAAQAAAATABMAAAABAAQAAAASABMAAAABAAQAAAARABMAAAABAAQAAAAQABMAAAABAAQAAAAPABMAAAABAAQAAAAOABMAAAABAAQAAAAmABMAAAABAAQAAAAlABMAAAABAAQAAAAkABMAAAABAAQAAAAjABMAAAABAAQAAAAiABMAAAABAAQAAAAhABMAAAABAAQAAAAgABMAAAABAAQAAAAfABMAAAACAAQAAAAnABMAAAABAAwAAAAnABIAAAAAAAQAAAAnABEAAAAAAAQAAAAnABAAAAAFAAQAAAAnAAIAAAAEAAQAAAAnAAEAAAAAAAQAAAAnAAAAAAABAAsAAAAnAAwAAAAEAAQAAAAnAAsAAAAAAAQAAAAnAAoAAAAAAAQAAAAnAAkAAAAAAAQAAAAnAAgAAAAAAAQAAAAnAAcAAAAAAAQAAAAnAAYAAAAFAAQAAAAnAAMAAAAKAAgAAAAnAAQAAAAKAAkAAAAmAAEAAAAKAAgAAAAmAAIAAAAKAAkAAAAAAA4AAAAKAAkAAAAnAA0AAAAKAAgAAAAnAA4AAAAKAAkAAAAcAAAAAAADAAQAAAAcABMAAAADAAQAAAAcAAEAAAAKAAgAAAAcAAIAAAAKAAkAAAA=") +tile_set = ExtResource("4_tyndx") +navigation_enabled = false +metadata/_edit_lock_ = true + +[node name="Props" type="TileMapLayer" parent="." groups=["Solid"]] +tile_set = ExtResource("4_tyndx") +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, 34) +script = ExtResource("6_x7fb3") + +[node name="North2" type="Marker2D" parent="Doors"] +position = Vector2(479, 35) +script = ExtResource("6_x7fb3") +WallIndex = 1 + +[node name="South" type="Marker2D" parent="Doors"] +position = Vector2(160, 311) +script = ExtResource("6_x7fb3") +Direction = 1 + +[node name="South2" type="Marker2D" parent="Doors"] +position = Vector2(477, 312) +script = ExtResource("6_x7fb3") +Direction = 1 +WallIndex = 1 + +[node name="East" type="Marker2D" parent="Doors"] +position = Vector2(630, 88) +script = ExtResource("6_x7fb3") +Direction = 2 + +[node name="East2" type="Marker2D" parent="Doors"] +position = Vector2(629, 248) +script = ExtResource("6_x7fb3") +Direction = 2 +WallIndex = 1 + +[node name="West" type="Marker2D" parent="Doors"] +position = Vector2(8.1806, 87.7693) +script = ExtResource("6_x7fb3") +Direction = 3 + +[node name="West2" type="Marker2D" parent="Doors"] +position = Vector2(6, 247) +script = ExtResource("6_x7fb3") +Direction = 3 +WallIndex = 1 diff --git a/Scripts/Controllers/DoorMarker.cs b/Scripts/Controllers/DoorMarker.cs new file mode 100644 index 00000000..47721b0e --- /dev/null +++ b/Scripts/Controllers/DoorMarker.cs @@ -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 +} \ No newline at end of file diff --git a/Scripts/Controllers/DoorMarker.cs.uid b/Scripts/Controllers/DoorMarker.cs.uid new file mode 100644 index 00000000..64042c70 --- /dev/null +++ b/Scripts/Controllers/DoorMarker.cs.uid @@ -0,0 +1 @@ +uid://ddry5kjj3fr6c diff --git a/Scripts/Controllers/RogueliteRoom.cs b/Scripts/Controllers/RogueliteRoom.cs index 85b1ebe2..5c7cd533 100644 --- a/Scripts/Controllers/RogueliteRoom.cs +++ b/Scripts/Controllers/RogueliteRoom.cs @@ -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 DirectionMap = new() + { + { "North", new Vector2I(0, -1) }, + { "South", new Vector2I(0, 1) }, + { "East", new Vector2I(1, 0) }, + { "West", new Vector2I(-1, 0) }, + }; private Array SpawnableEnemies => RoomResource.SpawnableEnemies; - public void Spawn() + public RogueliteRoom Spawn(Func connectionChecker) { + SpawnEnemies(); + HandleDoors(connectionChecker); + return this; + } + + private void HandleDoors(Func 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(DoorPrefab, marker.GlobalPosition); + + door.State = DoorState.Open; + + // PackedScene prefab = hasConnection + // ? GD.Load("res://Prefabs/Door.tscn") + // : GD.Load("res://Prefabs/Wall.tscn"); + // + // var instance = prefab.Instantiate(); + // 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(); foreach (var spawner in enemySpawners) @@ -26,6 +90,5 @@ public partial class RogueliteRoom : Node2D var enemyScene = GD.Load(e.PrefabPath); var spawnedEnemy = spawner.CreateChild(enemyScene); } - } } \ No newline at end of file diff --git a/Scripts/Controllers/RogueliteRoomManager.cs b/Scripts/Controllers/RogueliteRoomManager.cs index c44bcb4a..4a6ec13d 100644 --- a/Scripts/Controllers/RogueliteRoomManager.cs +++ b/Scripts/Controllers/RogueliteRoomManager.cs @@ -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 Rooms { get; set; } [Export] public Node2D SceneContainer { get; set; } + + private Godot.Collections.Dictionary _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 + { + 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(room.ScenePath); + var position = gridPos * TileSize * RoomSizeInTiles; + var roomScene = GD.Load(room.ScenePath); var spawnedScene = this.CreateChild(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; + } + } } } \ No newline at end of file diff --git a/Scripts/Enums/DoorDirections.cs b/Scripts/Enums/DoorDirections.cs new file mode 100644 index 00000000..ccd6b14c --- /dev/null +++ b/Scripts/Enums/DoorDirections.cs @@ -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, +} \ No newline at end of file diff --git a/Scripts/Enums/RoomType.cs b/Scripts/Enums/RoomType.cs new file mode 100644 index 00000000..9ced044f --- /dev/null +++ b/Scripts/Enums/RoomType.cs @@ -0,0 +1,10 @@ +namespace Cirno.Scripts.Enums; + +public enum RoomType +{ + Starter, + Regular, + Secret, + Shop, + Boss +} \ No newline at end of file diff --git a/Scripts/Enums/RoomType.cs.uid b/Scripts/Enums/RoomType.cs.uid new file mode 100644 index 00000000..7ab74bed --- /dev/null +++ b/Scripts/Enums/RoomType.cs.uid @@ -0,0 +1 @@ +uid://bt7u3v4hlqmsd diff --git a/Scripts/Resources/Roguelite/RogueliteRoomResource.cs b/Scripts/Resources/Roguelite/RogueliteRoomResource.cs index 2625739b..f9c97715 100644 --- a/Scripts/Resources/Roguelite/RogueliteRoomResource.cs +++ b/Scripts/Resources/Roguelite/RogueliteRoomResource.cs @@ -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 DoorGridPositions { get; set; } = []; [Export] public Array SpawnableEnemies { get; set; } } \ No newline at end of file