From 794368dde6a2751a60675e580ba908ec1d7930a3 Mon Sep 17 00:00:00 2001 From: Marco Date: Mon, 14 Apr 2025 16:50:58 +0200 Subject: [PATCH] Non working procedural generation --- Scenes/Maps/Roguelike.tscn | 14 +- Scenes/Maps/RogueliteMaps/Boss1.tscn | 4 +- Scenes/Maps/RogueliteMaps/Rg1.tscn | 26 +- Scenes/Maps/RogueliteMaps/Rg2.tscn | 26 +- Scenes/Maps/RogueliteMaps/RgBig.tscn | 48 +++- Scenes/test.tscn | 2 +- Scripts/Controllers/RogueliteRoom.cs | 43 +-- Scripts/Controllers/RogueliteRoomManager.cs | 287 +++++++++++++++----- Scripts/Enums/DoorDirections.cs.uid | 1 + Scripts/Tools.cs | 9 + 10 files changed, 341 insertions(+), 119 deletions(-) create mode 100644 Scripts/Enums/DoorDirections.cs.uid diff --git a/Scenes/Maps/Roguelike.tscn b/Scenes/Maps/Roguelike.tscn index 300a2b7e..8b5b5c5a 100644 --- a/Scenes/Maps/Roguelike.tscn +++ b/Scenes/Maps/Roguelike.tscn @@ -1,4 +1,4 @@ -[gd_scene load_steps=17 format=3 uid="uid://bf1kqr3o6r6d4"] +[gd_scene load_steps=16 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"] @@ -16,13 +16,6 @@ [ext_resource type="Script" uid="uid://cnkipcolyj61w" path="res://Scripts/AlarmManager.cs" id="12_eoca5"] [ext_resource type="PackedScene" uid="uid://b3tyacxxw88lx" path="res://Scenes/Utils/StreamPlayerWithName.tscn" id="13_4n7t6"] -[sub_resource type="NavigationPolygon" id="NavigationPolygon_jtlua"] -vertices = PackedVector2Array(-69.1094, 193.477, -146.813, 182.609, -132, 117.898, -69.8906, 117.117) -polygons = Array[PackedInt32Array]([PackedInt32Array(0, 1, 2, 3)]) -outlines = Array[PackedVector2Array]([PackedVector2Array(-159, 191, -140, 108, -60, 107, -59, 205)]) -parsed_collision_mask = 353 -source_geometry_mode = 1 - [node name="GameScene" type="Node2D" node_paths=PackedStringArray("NavigationRegion")] process_mode = 3 script = ExtResource("1_wbqvu") @@ -31,7 +24,7 @@ PlayerTemplate = ExtResource("2_3fyis") SpawnMarkers = Dictionary[int, NodePath]({ 0: NodePath("PlayerStartPosition") }) -NavigationRegion = NodePath("NavigationRegion2D") +NavigationRegion = NodePath("") [node name="Maps" type="Node2D" parent="." groups=["navigation_polygon_source_geometry_group"]] process_mode = 1 @@ -72,7 +65,4 @@ script = ExtResource("12_eoca5") process_mode = 3 autoplay = true -[node name="NavigationRegion2D" type="NavigationRegion2D" parent="."] -navigation_polygon = SubResource("NavigationPolygon_jtlua") - [connection signal="ManagerReady" from="." to="Maps" method="InitSpawning"] diff --git a/Scenes/Maps/RogueliteMaps/Boss1.tscn b/Scenes/Maps/RogueliteMaps/Boss1.tscn index cad26c60..836b7abb 100644 --- a/Scenes/Maps/RogueliteMaps/Boss1.tscn +++ b/Scenes/Maps/RogueliteMaps/Boss1.tscn @@ -1,9 +1,10 @@ -[gd_scene load_steps=7 format=4 uid="uid://brytwc48xpj78"] +[gd_scene load_steps=8 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="PackedScene" uid="uid://b0k2grrc8xp1l" path="res://Scenes/Props/BigTank.tscn" id="4_5nx6x"] [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"] @@ -12,6 +13,7 @@ process_mode = 1 script = ExtResource("1_vm1u7") RoomResource = ExtResource("2_vm1u7") DoorPrefab = ExtResource("3_vo7cb") +WallPrefab = ExtResource("4_5nx6x") [node name="Floor" type="TileMapLayer" parent="." node_paths=PackedStringArray("_solidLayers") groups=["Solid"]] tile_map_data = PackedByteArray("AAAAAAIAAAACAAAAAAAAAAMAAAACAAAAAAAAAAQAAAACAAAAAAAAAAUAAAACAAAAAAAAAAYAAAACAAAAAAAAAAcAAAACAAAAAAAAAAgAAAACAAAAAAAAAAkAAAACAAAAAAABAAIAAAACAAAAAAABAAMAAAACAAAAAAABAAQAAAACAAAAAAABAAUAAAACAAAAAAABAAYAAAACAAAAAAABAAcAAAACAAAAAAABAAgAAAACAAAAAAABAAkAAAACAAAAAAACAAIAAAACAAAAAAACAAMAAAACAAAAAAACAAQAAAAFAAIAAAACAAUAAAAFAAIAAAACAAYAAAAFAAIAAAACAAcAAAAFAAIAAAACAAgAAAAFAAIAAAACAAkAAAACAAAAAAADAAIAAAACAAAAAAADAAMAAAACAAAAAAADAAQAAAAFAAIAAAADAAUAAAACAAAAAAADAAYAAAAFAAIAAAADAAcAAAACAAAAAAADAAgAAAAFAAIAAAADAAkAAAACAAAAAAAEAAIAAAACAAAAAAAEAAMAAAACAAAAAAAEAAQAAAACAAAAAAAEAAUAAAAFAAIAAAAEAAYAAAACAAAAAAAEAAcAAAAFAAIAAAAEAAgAAAACAAAAAAAEAAkAAAACAAAAAAAFAAIAAAACAAAAAAAFAAMAAAACAAAAAAAFAAQAAAACAAAAAAAFAAUAAAACAAAAAAAFAAYAAAACAAAAAAAFAAcAAAACAAAAAAAFAAgAAAACAAAAAAAFAAkAAAACAAAAAAAGAAIAAAACAAAAAAAGAAMAAAACAAAAAAAGAAQAAAAFAAIAAAAGAAUAAAAFAAIAAAAGAAYAAAAFAAIAAAAGAAcAAAAFAAIAAAAGAAgAAAAFAAIAAAAGAAkAAAACAAAAAAAHAAIAAAACAAAAAAAHAAMAAAACAAAAAAAHAAQAAAAFAAIAAAAHAAUAAAACAAAAAAAHAAYAAAACAAAAAAAHAAcAAAACAAAAAAAHAAgAAAAFAAIAAAAHAAkAAAACAAAAAAAIAAIAAAACAAAAAAAIAAMAAAACAAAAAAAIAAQAAAAFAAIAAAAIAAUAAAAFAAIAAAAIAAYAAAAFAAIAAAAIAAcAAAAFAAIAAAAIAAgAAAAFAAIAAAAIAAkAAAACAAAAAAAJAAIAAAACAAAAAAAJAAMAAAACAAAAAAAJAAQAAAACAAAAAAAJAAUAAAACAAAAAAAJAAYAAAACAAAAAAAJAAcAAAACAAAAAAAJAAgAAAACAAAAAAAJAAkAAAACAAAAAAAKAAIAAAACAAAAAAAKAAMAAAACAAAAAAAKAAQAAAAFAAIAAAAKAAUAAAAFAAIAAAAKAAYAAAAFAAIAAAAKAAcAAAACAAAAAAAKAAgAAAAFAAIAAAAKAAkAAAACAAAAAAALAAIAAAACAAAAAAALAAUAAAACAAAAAAALAAYAAAAFAAIAAAALAAcAAAACAAAAAAALAAgAAAAFAAIAAAALAAkAAAACAAAAAAAMAAIAAAACAAAAAAAMAAUAAAACAAAAAAAMAAYAAAAFAAIAAAAMAAcAAAAFAAIAAAAMAAgAAAAFAAIAAAAMAAkAAAACAAAAAAANAAIAAAACAAAAAAANAAMAAAACAAAAAAANAAQAAAACAAAAAAANAAUAAAACAAAAAAANAAYAAAACAAAAAAANAAcAAAACAAAAAAANAAgAAAACAAAAAAANAAkAAAACAAAAAAAOAAIAAAACAAAAAAAOAAMAAAACAAAAAAAOAAQAAAAFAAIAAAAOAAUAAAAFAAIAAAAOAAYAAAAFAAIAAAAOAAcAAAACAAAAAAAOAAgAAAAFAAIAAAAOAAkAAAACAAAAAAAPAAIAAAACAAAAAAAPAAMAAAACAAAAAAAPAAQAAAAFAAIAAAAPAAUAAAACAAAAAAAPAAYAAAAFAAIAAAAPAAcAAAACAAAAAAAPAAgAAAAFAAIAAAAPAAkAAAACAAAAAAAQAAIAAAACAAAAAAAQAAMAAAACAAAAAAAQAAQAAAAFAAIAAAAQAAUAAAACAAAAAAAQAAYAAAAFAAIAAAAQAAcAAAAFAAIAAAAQAAgAAAAFAAIAAAAQAAkAAAACAAAAAAARAAIAAAACAAAAAAARAAMAAAACAAAAAAARAAQAAAACAAAAAAARAAUAAAACAAAAAAARAAYAAAACAAAAAAARAAcAAAACAAAAAAARAAgAAAACAAAAAAARAAkAAAACAAAAAAASAAIAAAACAAAAAAASAAMAAAACAAAAAAASAAQAAAACAAAAAAASAAUAAAACAAAAAAASAAYAAAACAAAAAAASAAcAAAACAAAAAAASAAgAAAACAAAAAAASAAkAAAACAAAAAAATAAIAAAACAAAAAAATAAMAAAACAAAAAAATAAQAAAACAAAAAAATAAUAAAACAAAAAAATAAYAAAACAAAAAAATAAcAAAACAAAAAAATAAgAAAACAAAAAAATAAkAAAACAAAAAAAAAAAAAAACAAAAAAAAAAEAAAACAAAAAAABAAAAAAACAAAAAAABAAEAAAACAAAAAAACAAAAAAACAAAAAAACAAEAAAACAAAAAAADAAAAAAACAAAAAAADAAEAAAACAAAAAAAEAAAAAAACAAAAAAAEAAEAAAACAAAAAAAFAAAAAAACAAAAAAAFAAEAAAACAAAAAAAGAAAAAAACAAAAAAAGAAEAAAACAAAAAAAHAAAAAAACAAAAAAAHAAEAAAACAAAAAAAIAAAAAAACAAAAAAAIAAEAAAACAAAAAAAJAAAAAAACAAAAAAAJAAEAAAACAAAAAAAKAAAAAAACAAAAAAAKAAEAAAACAAAAAAALAAAAAAACAAAAAAALAAEAAAACAAAAAAALAAMAAAACAAAAAAALAAQAAAAFAAIAAAAMAAAAAAACAAAAAAAMAAEAAAACAAAAAAAMAAMAAAACAAAAAAAMAAQAAAAFAAIAAAANAAAAAAACAAAAAAANAAEAAAACAAAAAAAOAAAAAAACAAAAAAAOAAEAAAACAAAAAAAPAAAAAAACAAAAAAAPAAEAAAACAAAAAAAQAAAAAAACAAAAAAAQAAEAAAACAAAAAAARAAAAAAACAAAAAAARAAEAAAACAAAAAAASAAAAAAACAAAAAAASAAEAAAACAAAAAAATAAAAAAACAAAAAAATAAEAAAACAAAAAAA=") diff --git a/Scenes/Maps/RogueliteMaps/Rg1.tscn b/Scenes/Maps/RogueliteMaps/Rg1.tscn index dcf05bd5..7375a344 100644 --- a/Scenes/Maps/RogueliteMaps/Rg1.tscn +++ b/Scenes/Maps/RogueliteMaps/Rg1.tscn @@ -1,19 +1,30 @@ -[gd_scene load_steps=7 format=4 uid="uid://da7hmajaaiohm"] +[gd_scene load_steps=9 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="PackedScene" uid="uid://b0k2grrc8xp1l" path="res://Scenes/Props/BigTank.tscn" id="4_rlq0q"] [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"] +[sub_resource type="NavigationPolygon" id="NavigationPolygon_rlq0q"] +vertices = PackedVector2Array(166, 58, 294, 58, 294, 134, 166, 134, 166, 150, 154, 150, 154, 134, 154, 58, 26, 134, 26, 58, 166, 10, 154, 10) +polygons = Array[PackedInt32Array]([PackedInt32Array(0, 1, 2, 3), PackedInt32Array(3, 4, 5, 6), PackedInt32Array(0, 3, 6, 7), PackedInt32Array(6, 8, 9, 7), PackedInt32Array(10, 0, 7, 11)]) +outlines = Array[PackedVector2Array]([PackedVector2Array(17, 36, 14, 12, 47, 15, 49, 34)]) +parsed_collision_mask = 353 +source_geometry_mode = 1 + +[node name="Map" type="Node2D"] process_mode = 1 script = ExtResource("1_dm6kf") RoomResource = ExtResource("2_5s4nm") DoorPrefab = ExtResource("3_sid7o") +WallPrefab = ExtResource("4_rlq0q") -[node name="Floor" type="TileMapLayer" parent="." node_paths=PackedStringArray("_solidLayers") groups=["Solid"]] +[node name="Tilemaps" type="Node2D" parent="." groups=["navigation_polygon_source_geometry_group"]] + +[node name="Floor" type="TileMapLayer" parent="Tilemaps" node_paths=PackedStringArray("_solidLayers") groups=["Solid"]] tile_map_data = PackedByteArray("AAAAAAIAAAAEAAIAAAAAAAMAAAAEAAIAAAAAAAQAAAAEAAIAAAAAAAUAAAAEAAIAAAAAAAYAAAAEAAIAAAAAAAcAAAAEAAIAAAAAAAgAAAAEAAIAAAAAAAkAAAAEAAIAAAABAAIAAAAEAAIAAAABAAMAAAAEAAIAAAABAAQAAAAEAAIAAAABAAUAAAAEAAIAAAABAAYAAAAEAAIAAAABAAcAAAAEAAIAAAABAAgAAAAEAAIAAAABAAkAAAAEAAIAAAACAAIAAAAEAAIAAAACAAMAAAAEAAIAAAACAAQAAAAEAAIAAAACAAUAAAAEAAIAAAACAAYAAAAEAAIAAAACAAcAAAAEAAIAAAACAAgAAAAEAAIAAAACAAkAAAAEAAIAAAADAAIAAAAEAAIAAAADAAMAAAAEAAIAAAADAAQAAAAEAAIAAAADAAUAAAAEAAIAAAADAAYAAAAEAAIAAAADAAcAAAAEAAIAAAADAAgAAAAEAAIAAAADAAkAAAAEAAIAAAAEAAIAAAAEAAIAAAAEAAMAAAAEAAIAAAAEAAQAAAAEAAIAAAAEAAUAAAAEAAIAAAAEAAYAAAAEAAIAAAAEAAcAAAAEAAIAAAAEAAgAAAAEAAIAAAAEAAkAAAAEAAIAAAAFAAIAAAAEAAIAAAAFAAMAAAAEAAIAAAAFAAQAAAAEAAIAAAAFAAUAAAAEAAIAAAAFAAYAAAAEAAIAAAAFAAcAAAAEAAIAAAAFAAgAAAAEAAIAAAAFAAkAAAAEAAIAAAAGAAIAAAAEAAIAAAAGAAMAAAAEAAIAAAAGAAQAAAAEAAIAAAAGAAUAAAAEAAIAAAAGAAYAAAAEAAIAAAAGAAcAAAAEAAIAAAAGAAgAAAAEAAIAAAAGAAkAAAAEAAIAAAAHAAIAAAAEAAIAAAAHAAMAAAAEAAIAAAAHAAQAAAAEAAIAAAAHAAUAAAAEAAIAAAAHAAYAAAAEAAIAAAAHAAcAAAAEAAIAAAAHAAgAAAAEAAIAAAAHAAkAAAAEAAIAAAAIAAIAAAAEAAIAAAAIAAMAAAAEAAIAAAAIAAQAAAAEAAIAAAAIAAUAAAAEAAIAAAAIAAYAAAAEAAIAAAAIAAcAAAAEAAIAAAAIAAgAAAAEAAIAAAAIAAkAAAAEAAIAAAAJAAIAAAAEAAIAAAAJAAMAAAAEAAIAAAAJAAQAAAAEAAIAAAAJAAUAAAAEAAIAAAAJAAYAAAAEAAIAAAAJAAcAAAAEAAIAAAAJAAgAAAAEAAIAAAAJAAkAAAAEAAIAAAAKAAIAAAAEAAIAAAAKAAMAAAAEAAIAAAAKAAQAAAAEAAIAAAAKAAUAAAAEAAIAAAAKAAYAAAAEAAIAAAAKAAcAAAAEAAIAAAAKAAgAAAAEAAIAAAAKAAkAAAAEAAIAAAALAAIAAAAEAAIAAAALAAUAAAAEAAIAAAALAAYAAAAEAAIAAAALAAcAAAAEAAIAAAALAAgAAAAEAAIAAAALAAkAAAAEAAIAAAAMAAIAAAAEAAIAAAAMAAUAAAAEAAIAAAAMAAYAAAAEAAIAAAAMAAcAAAAEAAIAAAAMAAgAAAAEAAIAAAAMAAkAAAAEAAIAAAANAAIAAAAEAAIAAAANAAMAAAAEAAIAAAANAAQAAAAEAAIAAAANAAUAAAAEAAIAAAANAAYAAAAEAAIAAAANAAcAAAAEAAIAAAANAAgAAAAEAAIAAAANAAkAAAAEAAIAAAAOAAIAAAAEAAIAAAAOAAMAAAAEAAIAAAAOAAQAAAAEAAIAAAAOAAUAAAAEAAIAAAAOAAYAAAAEAAIAAAAOAAcAAAAEAAIAAAAOAAgAAAAEAAIAAAAOAAkAAAAEAAIAAAAPAAIAAAAEAAIAAAAPAAMAAAAEAAIAAAAPAAQAAAAEAAIAAAAPAAUAAAAEAAIAAAAPAAYAAAAEAAIAAAAPAAcAAAAEAAIAAAAPAAgAAAAEAAIAAAAPAAkAAAAEAAIAAAAQAAIAAAAEAAIAAAAQAAMAAAAEAAIAAAAQAAQAAAAEAAIAAAAQAAUAAAAEAAIAAAAQAAYAAAAEAAIAAAAQAAcAAAAEAAIAAAAQAAgAAAAEAAIAAAAQAAkAAAAEAAIAAAARAAIAAAAEAAIAAAARAAMAAAAEAAIAAAARAAQAAAAEAAIAAAARAAUAAAAEAAIAAAARAAYAAAAEAAIAAAARAAcAAAAEAAIAAAARAAgAAAAEAAIAAAARAAkAAAAEAAIAAAASAAIAAAAEAAIAAAASAAMAAAAEAAIAAAASAAQAAAAEAAIAAAASAAUAAAAEAAIAAAASAAYAAAAEAAIAAAASAAcAAAAEAAIAAAASAAgAAAAEAAIAAAASAAkAAAAEAAIAAAATAAIAAAAEAAIAAAATAAMAAAAEAAIAAAATAAQAAAAEAAIAAAATAAUAAAAEAAIAAAATAAYAAAAEAAIAAAATAAcAAAAEAAIAAAATAAgAAAAEAAIAAAATAAkAAAAEAAIAAAAAAAAAAAAEAAIAAAAAAAEAAAAEAAIAAAABAAAAAAAEAAIAAAABAAEAAAAEAAIAAAACAAAAAAAEAAIAAAACAAEAAAAEAAIAAAADAAAAAAAEAAIAAAADAAEAAAAEAAIAAAAEAAAAAAAEAAIAAAAEAAEAAAAEAAIAAAAFAAAAAAAEAAIAAAAFAAEAAAAEAAIAAAAGAAAAAAAEAAIAAAAGAAEAAAAEAAIAAAAHAAAAAAAEAAIAAAAHAAEAAAAEAAIAAAAIAAAAAAAEAAIAAAAIAAEAAAAEAAIAAAAJAAAAAAAEAAIAAAAJAAEAAAAEAAIAAAAKAAAAAAAEAAIAAAAKAAEAAAAEAAIAAAALAAAAAAAEAAIAAAALAAEAAAAEAAIAAAALAAMAAAAEAAIAAAALAAQAAAAEAAIAAAAMAAAAAAAEAAIAAAAMAAEAAAAEAAIAAAAMAAMAAAAEAAIAAAAMAAQAAAAEAAIAAAANAAAAAAAEAAIAAAANAAEAAAAEAAIAAAAOAAAAAAAEAAIAAAAOAAEAAAAEAAIAAAAPAAAAAAAEAAIAAAAPAAEAAAAEAAIAAAAQAAAAAAAEAAIAAAAQAAEAAAAEAAIAAAARAAAAAAAEAAIAAAARAAEAAAAEAAIAAAASAAAAAAAEAAIAAAASAAEAAAAEAAIAAAATAAAAAAAEAAIAAAATAAEAAAAEAAIAAAA=") tile_set = ExtResource("5_q5p8k") navigation_enabled = false @@ -21,18 +32,18 @@ script = ExtResource("6_81nvh") _solidLayers = [NodePath("../Solid"), NodePath("../Props")] metadata/_edit_lock_ = true -[node name="Solid" type="TileMapLayer" parent="." groups=["Solid"]] +[node name="Solid" type="TileMapLayer" parent="Tilemaps" groups=["Solid"]] tile_map_data = PackedByteArray("AAATAAAAAAABAAsAAAASAAAAAAABAAQAAAARAAAAAAABAAQAAAAQAAAAAAABAAQAAAAPAAAAAAABAAQAAAAOAAAAAAABAAQAAAANAAAAAAABAAQAAAAMAAAAAAABAAQAAAALAAAAAAACAAQAAAAIAAAAAAADAAQAAAAHAAAAAAABAAQAAAAGAAAAAAABAAQAAAAFAAAAAAABAAQAAAAEAAAAAAABAAQAAAADAAAAAAABAAQAAAACAAAAAAABAAQAAAABAAAAAAABAAQAAAAAAAAAAAAAAAsAAAATAAIAAAAEAAQAAAATAAEAAAAAAAQAAAAAAAIAAAAEAAQAAAAAAAEAAAAAAAQAAAAAAAkAAAAAAAwAAAAAAAgAAAAAAAQAAAAAAAcAAAAAAAQAAAAAAAYAAAAFAAQAAAATAAkAAAABAAwAAAASAAkAAAABAAQAAAARAAkAAAABAAQAAAAQAAkAAAABAAQAAAAPAAkAAAABAAQAAAAOAAkAAAABAAQAAAANAAkAAAABAAQAAAAMAAkAAAABAAQAAAALAAkAAAACAAQAAAAIAAkAAAADAAQAAAAHAAkAAAABAAQAAAAGAAkAAAABAAQAAAAFAAkAAAABAAQAAAAEAAkAAAABAAQAAAADAAkAAAABAAQAAAACAAkAAAABAAQAAAABAAkAAAABAAQAAAATAAgAAAAAAAQAAAATAAcAAAAAAAQAAAATAAYAAAAFAAQAAAATAAMAAAAKAAgAAAATAAQAAAAKAAkAAAALAAEAAAAKAAgAAAALAAIAAAAKAAkAAAAMAAEAAAAKAAgAAAAMAAIAAAAKAAkAAAANAAEAAAAKAAgAAAANAAIAAAAKAAkAAAAOAAEAAAAKAAgAAAAOAAIAAAAKAAkAAAAPAAEAAAAKAAgAAAAPAAIAAAAKAAkAAAAQAAEAAAAKAAgAAAAQAAIAAAAKAAkAAAARAAEAAAAKAAgAAAARAAIAAAAKAAkAAAASAAEAAAAKAAgAAAASAAIAAAAKAAkAAAABAAEAAAAKAAgAAAABAAIAAAAKAAkAAAACAAEAAAAKAAgAAAACAAIAAAAKAAkAAAADAAEAAAAKAAgAAAADAAIAAAAKAAkAAAAEAAEAAAAKAAgAAAAEAAIAAAAKAAkAAAAFAAEAAAAKAAgAAAAFAAIAAAAKAAkAAAAGAAEAAAAKAAgAAAAGAAIAAAAKAAkAAAAHAAEAAAAKAAgAAAAHAAIAAAAKAAkAAAAIAAEAAAAKAAgAAAAIAAIAAAAKAAkAAAAAAAMAAAAKAAgAAAAAAAQAAAAKAAkAAAA=") tile_set = ExtResource("5_q5p8k") navigation_enabled = false metadata/_edit_lock_ = true -[node name="Props" type="TileMapLayer" parent="." groups=["Solid"]] +[node name="Props" type="TileMapLayer" parent="Tilemaps" groups=["Solid"]] tile_set = ExtResource("5_q5p8k") navigation_enabled = false metadata/_edit_lock_ = true -[node name="Actors" type="Node2D" parent="."] +[node name="Actors" type="Node2D" parent="Tilemaps"] metadata/_edit_lock_ = true [node name="EnemySpawners" type="Node2D" parent="."] @@ -66,3 +77,6 @@ Direction = 2 position = Vector2(8.1806, 87.7693) script = ExtResource("6_b5lqw") Direction = 3 + +[node name="NavigationRegion2D" type="NavigationRegion2D" parent="."] +navigation_polygon = SubResource("NavigationPolygon_rlq0q") diff --git a/Scenes/Maps/RogueliteMaps/Rg2.tscn b/Scenes/Maps/RogueliteMaps/Rg2.tscn index 798c07d5..5a200c57 100644 --- a/Scenes/Maps/RogueliteMaps/Rg2.tscn +++ b/Scenes/Maps/RogueliteMaps/Rg2.tscn @@ -1,19 +1,30 @@ -[gd_scene load_steps=7 format=4 uid="uid://dcxrdhq1yw5c7"] +[gd_scene load_steps=9 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="PackedScene" uid="uid://b0k2grrc8xp1l" path="res://Scenes/Props/BigTank.tscn" id="4_hgeju"] [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"] +[sub_resource type="NavigationPolygon" id="NavigationPolygon_f7qjl"] +vertices = PackedVector2Array(186, 122, 186, 58, 294, 58, 294, 134, 166, 134, 134, 122, 166, 150, 154, 150, 154, 134, 26, 134, 26, 58, 134, 58, 166, 54, 154, 54, 154, 10, 166, 10) +polygons = Array[PackedInt32Array]([PackedInt32Array(0, 1, 2, 3), PackedInt32Array(0, 3, 4, 5), PackedInt32Array(4, 6, 7, 8), PackedInt32Array(5, 4, 8), PackedInt32Array(5, 8, 9, 10), PackedInt32Array(11, 5, 10), PackedInt32Array(12, 13, 14, 15)]) +outlines = Array[PackedVector2Array]([PackedVector2Array(17, 36, 14, 12, 47, 15, 49, 34)]) +parsed_collision_mask = 353 +source_geometry_mode = 1 + +[node name="Map" type="Node2D"] process_mode = 1 script = ExtResource("1_cak6m") RoomResource = ExtResource("2_cak6m") DoorPrefab = ExtResource("3_wtdf1") +WallPrefab = ExtResource("4_hgeju") -[node name="Floor" type="TileMapLayer" parent="." node_paths=PackedStringArray("_solidLayers") groups=["Solid"]] +[node name="Tilemaps" type="Node2D" parent="." groups=["navigation_polygon_source_geometry_group"]] + +[node name="Floor" type="TileMapLayer" parent="Tilemaps" node_paths=PackedStringArray("_solidLayers") groups=["Solid"]] tile_map_data = PackedByteArray("AAAAAAIAAAAFAAAAAAAAAAMAAAAFAAAAAAAAAAQAAAAFAAAAAAAAAAUAAAAFAAAAAAAAAAYAAAAFAAAAAAAAAAcAAAAFAAAAAAAAAAgAAAAFAAAAAAAAAAkAAAAFAAAAAAABAAIAAAAFAAAAAAABAAMAAAAFAAAAAAABAAQAAAAFAAAAAAABAAUAAAAFAAAAAAABAAYAAAAFAAAAAAABAAcAAAAFAAAAAAABAAgAAAAFAAAAAAABAAkAAAAFAAAAAAACAAIAAAAFAAAAAAACAAMAAAAFAAAAAAACAAQAAAAFAAAAAAACAAUAAAAFAAAAAAACAAYAAAAFAAAAAAACAAcAAAAFAAAAAAACAAgAAAAFAAAAAAACAAkAAAAFAAAAAAADAAIAAAAFAAAAAAADAAMAAAAFAAAAAAADAAQAAAAFAAAAAAADAAUAAAAFAAAAAAADAAYAAAAFAAAAAAADAAcAAAAFAAAAAAADAAgAAAAFAAAAAAADAAkAAAAFAAAAAAAEAAIAAAAFAAAAAAAEAAMAAAAFAAAAAAAEAAQAAAAFAAAAAAAEAAUAAAAFAAAAAAAEAAYAAAAFAAAAAAAEAAcAAAAFAAAAAAAEAAgAAAAFAAAAAAAEAAkAAAAFAAAAAAAFAAIAAAAFAAAAAAAFAAMAAAAFAAAAAAAFAAQAAAAFAAAAAAAFAAUAAAAFAAAAAAAFAAYAAAAFAAAAAAAFAAcAAAAFAAAAAAAFAAgAAAAFAAAAAAAFAAkAAAAFAAAAAAAGAAIAAAAFAAAAAAAGAAMAAAAFAAAAAAAGAAQAAAAFAAAAAAAGAAUAAAAFAAAAAAAGAAYAAAAFAAAAAAAGAAcAAAAFAAAAAAAGAAgAAAAFAAAAAAAGAAkAAAAFAAAAAAAHAAIAAAAFAAAAAAAHAAMAAAAFAAAAAAAHAAQAAAAFAAAAAAAHAAUAAAAFAAAAAAAHAAYAAAAFAAAAAAAHAAcAAAAFAAAAAAAHAAgAAAAFAAAAAAAHAAkAAAAFAAAAAAAIAAIAAAAFAAAAAAAIAAMAAAAFAAAAAAAIAAQAAAAFAAAAAAAIAAUAAAAFAAAAAAAIAAYAAAAFAAAAAAAIAAcAAAAFAAAAAAAIAAgAAAAFAAAAAAAIAAkAAAAFAAAAAAAJAAIAAAAFAAAAAAAJAAMAAAAFAAAAAAAJAAQAAAAFAAAAAAAJAAgAAAAFAAAAAAAJAAkAAAAFAAAAAAAKAAIAAAAFAAAAAAAKAAMAAAAFAAAAAAAKAAQAAAAFAAAAAAAKAAgAAAAFAAAAAAAKAAkAAAAFAAAAAAALAAIAAAAFAAAAAAALAAUAAAAFAAAAAAALAAYAAAAFAAAAAAALAAcAAAAFAAAAAAALAAgAAAAFAAAAAAALAAkAAAAFAAAAAAAMAAIAAAAFAAAAAAAMAAUAAAAFAAAAAAAMAAYAAAAFAAAAAAAMAAcAAAAFAAAAAAAMAAgAAAAFAAAAAAAMAAkAAAAFAAAAAAANAAIAAAAFAAAAAAANAAMAAAAFAAAAAAANAAQAAAAFAAAAAAANAAUAAAAFAAAAAAANAAYAAAAFAAAAAAANAAcAAAAFAAAAAAANAAgAAAAFAAAAAAANAAkAAAAFAAAAAAAOAAIAAAAFAAAAAAAOAAMAAAAFAAAAAAAOAAQAAAAFAAAAAAAOAAUAAAAFAAAAAAAOAAYAAAAFAAAAAAAOAAcAAAAFAAAAAAAOAAgAAAAFAAAAAAAOAAkAAAAFAAAAAAAPAAIAAAAFAAAAAAAPAAMAAAAFAAAAAAAPAAQAAAAFAAAAAAAPAAUAAAAFAAAAAAAPAAYAAAAFAAAAAAAPAAcAAAAFAAAAAAAPAAgAAAAFAAAAAAAPAAkAAAAFAAAAAAAQAAIAAAAFAAAAAAAQAAMAAAAFAAAAAAAQAAQAAAAFAAAAAAAQAAUAAAAFAAAAAAAQAAYAAAAFAAAAAAAQAAcAAAAFAAAAAAAQAAgAAAAFAAAAAAAQAAkAAAAFAAAAAAARAAIAAAAFAAAAAAARAAMAAAAFAAAAAAARAAQAAAAFAAAAAAARAAUAAAAFAAAAAAARAAYAAAAFAAAAAAARAAcAAAAFAAAAAAARAAgAAAAFAAAAAAARAAkAAAAFAAAAAAASAAIAAAAFAAAAAAASAAMAAAAFAAAAAAASAAQAAAAFAAAAAAASAAUAAAAFAAAAAAASAAYAAAAFAAAAAAASAAcAAAAFAAAAAAASAAgAAAAFAAAAAAASAAkAAAAFAAAAAAATAAIAAAAFAAAAAAATAAMAAAAFAAAAAAATAAQAAAAFAAAAAAATAAUAAAAFAAAAAAATAAYAAAAFAAAAAAATAAcAAAAFAAAAAAATAAgAAAAFAAAAAAATAAkAAAAFAAAAAAAAAAAAAAAFAAAAAAAAAAEAAAAFAAAAAAABAAAAAAAFAAAAAAABAAEAAAAFAAAAAAACAAAAAAAFAAAAAAACAAEAAAAFAAAAAAADAAAAAAAFAAAAAAADAAEAAAAFAAAAAAAEAAAAAAAFAAAAAAAEAAEAAAAFAAAAAAAFAAAAAAAFAAAAAAAFAAEAAAAFAAAAAAAGAAAAAAAFAAAAAAAGAAEAAAAFAAAAAAAHAAAAAAAFAAAAAAAHAAEAAAAFAAAAAAAIAAAAAAAFAAAAAAAIAAEAAAAFAAAAAAAJAAAAAAAFAAAAAAAJAAEAAAAFAAAAAAAKAAAAAAAFAAAAAAAKAAEAAAAFAAAAAAALAAAAAAAFAAAAAAALAAEAAAAFAAAAAAALAAMAAAAFAAAAAAALAAQAAAAFAAAAAAAMAAAAAAAFAAAAAAAMAAEAAAAFAAAAAAAMAAMAAAAFAAAAAAAMAAQAAAAFAAAAAAANAAAAAAAFAAAAAAANAAEAAAAFAAAAAAAOAAAAAAAFAAAAAAAOAAEAAAAFAAAAAAAPAAAAAAAFAAAAAAAPAAEAAAAFAAAAAAAQAAAAAAAFAAAAAAAQAAEAAAAFAAAAAAARAAAAAAAFAAAAAAARAAEAAAAFAAAAAAASAAAAAAAFAAAAAAASAAEAAAAFAAAAAAATAAAAAAAFAAAAAAATAAEAAAAFAAAAAAAJAAUAAAAFAAAAAAAJAAYAAAAFAAAAAAAJAAcAAAAFAAAAAAAKAAUAAAAFAAAAAAAKAAYAAAAFAAAAAAAKAAcAAAAFAAAAAAA=") tile_set = ExtResource("3_f7qjl") navigation_enabled = false @@ -21,19 +32,19 @@ script = ExtResource("4_wtdf1") _solidLayers = [NodePath("../Solid"), NodePath("../Props")] metadata/_edit_lock_ = true -[node name="Solid" type="TileMapLayer" parent="." groups=["Solid"]] +[node name="Solid" type="TileMapLayer" parent="Tilemaps" groups=["Solid"]] tile_map_data = PackedByteArray("AAATAAAAAAABAAsAAAASAAAAAAABAAQAAAARAAAAAAABAAQAAAAQAAAAAAABAAQAAAAPAAAAAAABAAQAAAAOAAAAAAABAAQAAAANAAAAAAABAAQAAAAMAAAAAAABAAQAAAALAAAAAAACAAQAAAAIAAAAAAADAAQAAAAHAAAAAAABAAQAAAAGAAAAAAABAAQAAAAFAAAAAAABAAQAAAAEAAAAAAABAAQAAAADAAAAAAABAAQAAAACAAAAAAABAAQAAAABAAAAAAABAAQAAAAAAAAAAAAAAAsAAAATAAIAAAAEAAQAAAATAAEAAAAAAAQAAAAAAAIAAAAEAAQAAAAAAAEAAAAAAAQAAAAAAAkAAAAAAAwAAAAAAAgAAAAAAAQAAAAAAAcAAAAAAAQAAAAAAAYAAAAFAAQAAAATAAkAAAABAAwAAAASAAkAAAABAAQAAAARAAkAAAABAAQAAAAQAAkAAAABAAQAAAAPAAkAAAABAAQAAAAOAAkAAAABAAQAAAANAAkAAAABAAQAAAAMAAkAAAABAAQAAAALAAkAAAACAAQAAAAIAAkAAAADAAQAAAAHAAkAAAABAAQAAAAGAAkAAAABAAQAAAAFAAkAAAABAAQAAAAEAAkAAAABAAQAAAADAAkAAAABAAQAAAACAAkAAAABAAQAAAABAAkAAAABAAQAAAATAAgAAAAAAAQAAAATAAcAAAAAAAQAAAATAAYAAAAFAAQAAAATAAMAAAAMAAAAAAATAAQAAAAMAAEAAAALAAEAAAAMAAAAAAALAAIAAAAMAAEAAAAMAAEAAAAMAAAAAAAMAAIAAAAMAAEAAAANAAEAAAAMAAAAAAANAAIAAAAMAAEAAAAOAAEAAAAMAAAAAAAOAAIAAAAMAAEAAAAPAAEAAAAMAAAAAAAPAAIAAAAMAAEAAAAQAAEAAAAMAAAAAAAQAAIAAAAMAAEAAAARAAEAAAAMAAAAAAARAAIAAAAMAAEAAAASAAEAAAAMAAAAAAASAAIAAAAMAAEAAAABAAEAAAAMAAAAAAABAAIAAAAMAAEAAAACAAEAAAAMAAAAAAACAAIAAAAMAAEAAAADAAEAAAAMAAAAAAADAAIAAAAMAAEAAAAEAAEAAAAMAAAAAAAEAAIAAAAMAAEAAAAFAAEAAAAMAAAAAAAFAAIAAAAMAAEAAAAGAAEAAAAMAAAAAAAGAAIAAAAMAAEAAAAHAAEAAAAMAAAAAAAHAAIAAAAMAAEAAAAIAAEAAAAMAAAAAAAIAAIAAAAMAAEAAAAAAAMAAAAMAAAAAAAAAAQAAAAMAAEAAAAJAAUAAAAMAAAAAAAJAAYAAAAMAAEAAAAKAAUAAAAMAAAAAAAKAAYAAAAMAAEAAAAJAAQAAAACAAQAAAAKAAQAAAADAAQAAAA=") tile_set = ExtResource("3_f7qjl") navigation_enabled = false metadata/_edit_lock_ = true -[node name="Props" type="TileMapLayer" parent="." groups=["Solid"]] +[node name="Props" type="TileMapLayer" parent="Tilemaps" groups=["Solid"]] tile_map_data = PackedByteArray("AAAJAAUAAAAJAAwAAAAJAAYAAAAJAA0AAAAKAAUAAAAKAAwAAAAKAAYAAAAKAA0AAAAAAAMAAAAKAAwAAAAAAAQAAAAKAA0AAAAIAAEAAAAKAAwAAAAIAAIAAAAKAA0AAAALAAEAAAAJAAwAAAALAAIAAAAJAA0AAAATAAMAAAAJAAwAAAATAAQAAAAJAA0AAAA=") tile_set = ExtResource("3_f7qjl") navigation_enabled = false metadata/_edit_lock_ = true -[node name="Actors" type="Node2D" parent="."] +[node name="Actors" type="Node2D" parent="Tilemaps"] metadata/_edit_lock_ = true [node name="EnemySpawners" type="Node2D" parent="."] @@ -67,3 +78,6 @@ Direction = 2 position = Vector2(8.1806, 87.7693) script = ExtResource("5_2djm0") Direction = 3 + +[node name="NavigationRegion2D" type="NavigationRegion2D" parent="."] +navigation_polygon = SubResource("NavigationPolygon_f7qjl") diff --git a/Scenes/Maps/RogueliteMaps/RgBig.tscn b/Scenes/Maps/RogueliteMaps/RgBig.tscn index 11adb23f..695e7558 100644 --- a/Scenes/Maps/RogueliteMaps/RgBig.tscn +++ b/Scenes/Maps/RogueliteMaps/RgBig.tscn @@ -1,19 +1,31 @@ -[gd_scene load_steps=7 format=4 uid="uid://dngwjgs5bhnx7"] +[gd_scene load_steps=10 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="PackedScene" uid="uid://dcbcyp1qogcl0" path="res://Scenes/Props/BigTankHorizontal.tscn" id="6_cgxuy"] [ext_resource type="Script" uid="uid://ddry5kjj3fr6c" path="res://Scripts/Controllers/DoorMarker.cs" id="6_x7fb3"] +[ext_resource type="PackedScene" uid="uid://b0k2grrc8xp1l" path="res://Scenes/Props/BigTank.tscn" id="8_tyndx"] -[node name="Tilemaps" type="Node2D"] +[sub_resource type="NavigationPolygon" id="NavigationPolygon_lrgk6"] +vertices = PackedVector2Array(474, 58, 474, 10, 486, 10, 486, 58, 614, 58, 614, 294, 486, 294, 474, 294, 486, 310, 474, 310, 166, 58, 166, 294, 166, 310, 154, 310, 154, 294, 154, 58, 26, 294, 26, 58, 166, 10, 154, 10) +polygons = Array[PackedInt32Array]([PackedInt32Array(0, 1, 2, 3), PackedInt32Array(3, 4, 5, 6), PackedInt32Array(0, 3, 6, 7), PackedInt32Array(6, 8, 9, 7), PackedInt32Array(10, 0, 7, 11), PackedInt32Array(11, 12, 13, 14), PackedInt32Array(10, 11, 14, 15), PackedInt32Array(14, 16, 17, 15), PackedInt32Array(18, 10, 15, 19)]) +outlines = Array[PackedVector2Array]([PackedVector2Array(32, 42, 30, 31, 62, 27, 61, 38)]) +parsed_collision_mask = 353 +source_geometry_mode = 1 + +[node name="Map" type="Node2D"] process_mode = 1 script = ExtResource("1_xsqjb") RoomResource = ExtResource("2_xsqjb") DoorPrefab = ExtResource("3_cgxuy") +WallPrefab = ExtResource("8_tyndx") -[node name="Floor" type="TileMapLayer" parent="." node_paths=PackedStringArray("_solidLayers") groups=["Solid"]] +[node name="Tilemaps" type="Node2D" parent="." groups=["navigation_polygon_source_geometry_group"]] + +[node name="Floor" type="TileMapLayer" parent="Tilemaps" node_paths=PackedStringArray("_solidLayers") groups=["Solid"]] tile_map_data = PackedByteArray("AAAAAAIAAAALAAcAAAAAAAMAAAALAAcAAAAAAAQAAAALAAcAAAAAAAUAAAALAAcAAAAAAAYAAAALAAcAAAAAAAcAAAALAAcAAAAAAAgAAAALAAcAAAAAAAkAAAALAAcAAAABAAIAAAALAAcAAAABAAMAAAALAAcAAAABAAQAAAALAAcAAAABAAUAAAALAAcAAAABAAYAAAALAAcAAAABAAcAAAALAAcAAAABAAgAAAALAAcAAAABAAkAAAALAAcAAAACAAIAAAALAAcAAAACAAMAAAALAAcAAAACAAQAAAALAAcAAAACAAUAAAALAAcAAAACAAYAAAALAAcAAAACAAcAAAALAAcAAAACAAgAAAALAAcAAAACAAkAAAALAAcAAAADAAIAAAALAAcAAAADAAMAAAALAAcAAAADAAQAAAALAAcAAAADAAUAAAALAAcAAAADAAYAAAALAAcAAAADAAcAAAALAAcAAAADAAgAAAALAAcAAAADAAkAAAALAAcAAAAEAAIAAAALAAcAAAAEAAMAAAALAAcAAAAEAAQAAAALAAcAAAAEAAUAAAALAAcAAAAEAAYAAAALAAcAAAAEAAcAAAALAAcAAAAEAAgAAAALAAcAAAAEAAkAAAALAAcAAAAFAAIAAAALAAcAAAAFAAMAAAALAAcAAAAFAAQAAAALAAcAAAAFAAUAAAALAAcAAAAFAAYAAAALAAcAAAAFAAcAAAALAAcAAAAFAAgAAAALAAcAAAAFAAkAAAALAAcAAAAGAAIAAAALAAcAAAAGAAMAAAALAAcAAAAGAAQAAAALAAcAAAAGAAUAAAALAAcAAAAGAAYAAAALAAcAAAAGAAcAAAALAAcAAAAGAAgAAAALAAcAAAAGAAkAAAALAAcAAAAHAAIAAAALAAcAAAAHAAMAAAALAAcAAAAHAAQAAAALAAcAAAAHAAUAAAALAAcAAAAHAAYAAAALAAcAAAAHAAcAAAALAAcAAAAHAAgAAAALAAcAAAAHAAkAAAALAAcAAAAIAAIAAAALAAcAAAAIAAMAAAALAAcAAAAIAAQAAAALAAcAAAAIAAUAAAALAAcAAAAIAAYAAAALAAcAAAAIAAcAAAALAAcAAAAIAAgAAAALAAcAAAAIAAkAAAALAAcAAAAJAAIAAAALAAcAAAAJAAMAAAALAAcAAAAJAAQAAAALAAcAAAAJAAUAAAALAAcAAAAJAAYAAAALAAcAAAAJAAcAAAALAAcAAAAJAAgAAAALAAcAAAAJAAkAAAALAAcAAAAKAAIAAAALAAcAAAAKAAMAAAALAAcAAAAKAAQAAAALAAcAAAAKAAUAAAALAAcAAAAKAAYAAAALAAcAAAAKAAcAAAALAAcAAAAKAAgAAAALAAcAAAAKAAkAAAALAAcAAAALAAIAAAALAAcAAAALAAUAAAALAAcAAAALAAYAAAALAAcAAAALAAcAAAALAAcAAAALAAgAAAALAAcAAAALAAkAAAALAAcAAAAMAAIAAAALAAcAAAAMAAUAAAALAAcAAAAMAAYAAAALAAcAAAAMAAcAAAALAAcAAAAMAAgAAAALAAcAAAAMAAkAAAALAAcAAAANAAIAAAALAAcAAAANAAMAAAALAAcAAAANAAQAAAALAAcAAAANAAUAAAALAAcAAAANAAYAAAALAAcAAAANAAcAAAALAAcAAAANAAgAAAALAAcAAAANAAkAAAALAAcAAAAOAAIAAAALAAcAAAAOAAMAAAALAAcAAAAOAAQAAAALAAcAAAAOAAUAAAALAAcAAAAOAAYAAAALAAcAAAAOAAcAAAALAAcAAAAOAAgAAAALAAcAAAAOAAkAAAALAAcAAAAPAAIAAAALAAcAAAAPAAMAAAALAAcAAAAPAAQAAAALAAcAAAAPAAUAAAALAAcAAAAPAAYAAAALAAcAAAAPAAcAAAALAAcAAAAPAAgAAAALAAcAAAAPAAkAAAALAAcAAAAQAAIAAAALAAcAAAAQAAMAAAALAAcAAAAQAAQAAAALAAcAAAAQAAUAAAALAAcAAAAQAAYAAAALAAcAAAAQAAcAAAALAAcAAAAQAAgAAAALAAcAAAAQAAkAAAALAAcAAAARAAIAAAALAAcAAAARAAMAAAALAAcAAAARAAQAAAALAAcAAAARAAUAAAALAAcAAAARAAYAAAALAAcAAAARAAcAAAALAAcAAAARAAgAAAALAAcAAAARAAkAAAALAAcAAAASAAIAAAALAAcAAAASAAMAAAALAAcAAAASAAQAAAALAAcAAAASAAUAAAALAAcAAAASAAYAAAALAAcAAAASAAcAAAALAAcAAAASAAgAAAALAAcAAAASAAkAAAALAAcAAAATAAIAAAALAAcAAAATAAMAAAAEAAIAAAATAAQAAAAEAAIAAAATAAUAAAAEAAIAAAATAAYAAAAEAAIAAAATAAcAAAAEAAIAAAATAAgAAAAEAAIAAAATAAkAAAAEAAIAAAAAAAAAAAALAAcAAAAAAAEAAAALAAcAAAABAAAAAAALAAcAAAABAAEAAAALAAcAAAACAAAAAAALAAcAAAACAAEAAAALAAcAAAADAAAAAAALAAcAAAADAAEAAAALAAcAAAAEAAAAAAALAAcAAAAEAAEAAAALAAcAAAAFAAAAAAALAAcAAAAFAAEAAAALAAcAAAAGAAAAAAALAAcAAAAGAAEAAAALAAcAAAAHAAAAAAALAAcAAAAHAAEAAAALAAcAAAAIAAAAAAALAAcAAAAIAAEAAAALAAcAAAAJAAAAAAALAAcAAAAJAAEAAAALAAcAAAAKAAAAAAALAAcAAAAKAAEAAAALAAcAAAALAAAAAAALAAcAAAALAAEAAAALAAcAAAALAAMAAAALAAcAAAALAAQAAAALAAcAAAAMAAAAAAALAAcAAAAMAAEAAAALAAcAAAAMAAMAAAALAAcAAAAMAAQAAAALAAcAAAANAAAAAAALAAcAAAANAAEAAAALAAcAAAAOAAAAAAALAAcAAAAOAAEAAAALAAcAAAAPAAAAAAALAAcAAAAPAAEAAAALAAcAAAAQAAAAAAALAAcAAAAQAAEAAAALAAcAAAARAAAAAAALAAcAAAARAAEAAAALAAcAAAASAAAAAAALAAcAAAASAAEAAAALAAcAAAATAAAAAAALAAcAAAATAAEAAAALAAcAAAAAAAoAAAALAAcAAAAAAAsAAAALAAcAAAAAAAwAAAALAAcAAAAAAA0AAAALAAcAAAAAAA4AAAALAAcAAAAAAA8AAAALAAcAAAAAABAAAAALAAcAAAAAABEAAAALAAcAAAAAABIAAAALAAcAAAABAAoAAAAEAAIAAAABAAsAAAALAAcAAAABAAwAAAALAAcAAAABAA0AAAALAAcAAAABAA4AAAALAAcAAAABAA8AAAALAAcAAAABABAAAAALAAcAAAABABEAAAALAAcAAAABABIAAAALAAcAAAACAAoAAAAEAAIAAAACAAsAAAALAAcAAAACAAwAAAALAAcAAAACAA0AAAALAAcAAAACAA4AAAALAAcAAAACAA8AAAALAAcAAAACABAAAAALAAcAAAACABEAAAALAAcAAAACABIAAAALAAcAAAADAAoAAAAEAAIAAAADAAsAAAALAAcAAAADAAwAAAALAAcAAAADAA0AAAALAAcAAAADAA4AAAALAAcAAAADAA8AAAALAAcAAAADABAAAAALAAcAAAADABEAAAALAAcAAAADABIAAAALAAcAAAAEAAoAAAAEAAIAAAAEAAsAAAALAAcAAAAEAAwAAAALAAcAAAAEAA0AAAALAAcAAAAEAA4AAAALAAcAAAAEAA8AAAALAAcAAAAEABAAAAALAAcAAAAEABEAAAALAAcAAAAEABIAAAALAAcAAAAFAAoAAAAEAAIAAAAFAAsAAAALAAcAAAAFAAwAAAALAAcAAAAFAA0AAAALAAcAAAAFAA4AAAALAAcAAAAFAA8AAAALAAcAAAAFABAAAAALAAcAAAAFABEAAAALAAcAAAAFABIAAAALAAcAAAAGAAoAAAAEAAIAAAAGAAsAAAALAAcAAAAGAAwAAAALAAcAAAAGAA0AAAALAAcAAAAGAA4AAAALAAcAAAAGAA8AAAALAAcAAAAGABAAAAALAAcAAAAGABEAAAALAAcAAAAGABIAAAALAAcAAAAHAAoAAAAEAAIAAAAHAAsAAAALAAcAAAAHAAwAAAALAAcAAAAHAA0AAAALAAcAAAAHAA4AAAALAAcAAAAHAA8AAAALAAcAAAAHABAAAAALAAcAAAAHABEAAAALAAcAAAAHABIAAAALAAcAAAAIAAoAAAAEAAIAAAAIAAsAAAALAAcAAAAIAAwAAAALAAcAAAAIAA0AAAALAAcAAAAIAA4AAAALAAcAAAAIAA8AAAALAAcAAAAIABAAAAALAAcAAAAIABEAAAALAAcAAAAIABIAAAALAAcAAAAJAAoAAAAEAAIAAAAJAAsAAAALAAcAAAAJAAwAAAALAAcAAAAJAA0AAAALAAcAAAAJAA4AAAALAAcAAAAJAA8AAAALAAcAAAAJABAAAAALAAcAAAAJABEAAAALAAcAAAAJABIAAAALAAcAAAAKAAoAAAAEAAIAAAAKAAsAAAALAAcAAAAKAAwAAAALAAcAAAAKAA0AAAALAAcAAAAKAA4AAAALAAcAAAAKAA8AAAALAAcAAAAKABAAAAALAAcAAAAKABEAAAALAAcAAAAKABIAAAALAAcAAAALAAoAAAAEAAIAAAALAAsAAAALAAcAAAALAAwAAAALAAcAAAALAA0AAAALAAcAAAALAA4AAAALAAcAAAALAA8AAAALAAcAAAALABAAAAALAAcAAAALABEAAAALAAcAAAALABIAAAALAAcAAAAMAAoAAAAEAAIAAAAMAAsAAAALAAcAAAAMAAwAAAALAAcAAAAMAA0AAAALAAcAAAAMAA4AAAALAAcAAAAMAA8AAAALAAcAAAAMABAAAAALAAcAAAAMABEAAAALAAcAAAAMABIAAAALAAcAAAANAAoAAAAEAAIAAAANAAsAAAALAAcAAAANAAwAAAALAAcAAAANAA0AAAALAAcAAAANAA4AAAALAAcAAAANAA8AAAALAAcAAAANABAAAAALAAcAAAANABEAAAALAAcAAAANABIAAAALAAcAAAAOAAoAAAAEAAIAAAAOAAsAAAALAAcAAAAOAAwAAAALAAcAAAAOAA0AAAALAAcAAAAOAA4AAAALAAcAAAAOAA8AAAALAAcAAAAOABAAAAALAAcAAAAOABEAAAALAAcAAAAOABIAAAALAAcAAAAPAAoAAAAEAAIAAAAPAAsAAAALAAcAAAAPAAwAAAALAAcAAAAPAA0AAAALAAcAAAAPAA4AAAALAAcAAAAPAA8AAAALAAcAAAAPABAAAAALAAcAAAAPABEAAAALAAcAAAAPABIAAAALAAcAAAAQAAoAAAAEAAIAAAAQAAsAAAALAAcAAAAQAAwAAAALAAcAAAAQAA0AAAALAAcAAAAQAA4AAAALAAcAAAAQAA8AAAALAAcAAAAQABAAAAALAAcAAAAQABEAAAALAAcAAAAQABIAAAALAAcAAAARAAoAAAAEAAIAAAARAAsAAAALAAcAAAARAAwAAAALAAcAAAARAA0AAAALAAcAAAARAA4AAAALAAcAAAARAA8AAAALAAcAAAARABAAAAALAAcAAAARABEAAAALAAcAAAARABIAAAALAAcAAAASAAoAAAAEAAIAAAASAAsAAAALAAcAAAASAAwAAAALAAcAAAASAA0AAAALAAcAAAASAA4AAAALAAcAAAASAA8AAAALAAcAAAASABAAAAALAAcAAAASABEAAAALAAcAAAASABIAAAALAAcAAAATAAoAAAAEAAIAAAATAAsAAAAEAAIAAAATAAwAAAAEAAIAAAATAA0AAAAEAAIAAAATAA4AAAAEAAIAAAATAA8AAAAEAAIAAAATABAAAAAEAAIAAAATABEAAAAEAAIAAAATABIAAAAEAAIAAAAUAAAAAAALAAcAAAAUAAEAAAALAAcAAAAUAAIAAAALAAcAAAAUAAMAAAAEAAIAAAAUAAQAAAAEAAIAAAAUAAUAAAAEAAIAAAAUAAYAAAAEAAIAAAAUAAcAAAAEAAIAAAAUAAgAAAAEAAIAAAAUAAkAAAAEAAIAAAAUAAoAAAAEAAIAAAAUAAsAAAAEAAIAAAAUAAwAAAAEAAIAAAAUAA0AAAAEAAIAAAAUAA4AAAAEAAIAAAAUAA8AAAAEAAIAAAAUABAAAAAEAAIAAAAUABEAAAAEAAIAAAAUABIAAAAEAAIAAAAVAAAAAAALAAcAAAAVAAEAAAALAAcAAAAVAAIAAAALAAcAAAAVAAMAAAALAAcAAAAVAAQAAAALAAcAAAAVAAUAAAALAAcAAAAVAAYAAAALAAcAAAAVAAcAAAALAAcAAAAVAAgAAAALAAcAAAAVAAkAAAALAAcAAAAVAAoAAAAEAAIAAAAVAAsAAAALAAcAAAAVAAwAAAALAAcAAAAVAA0AAAALAAcAAAAVAA4AAAALAAcAAAAVAA8AAAALAAcAAAAVABAAAAALAAcAAAAVABEAAAALAAcAAAAVABIAAAALAAcAAAAWAAAAAAALAAcAAAAWAAEAAAALAAcAAAAWAAIAAAALAAcAAAAWAAMAAAALAAcAAAAWAAQAAAALAAcAAAAWAAUAAAALAAcAAAAWAAYAAAALAAcAAAAWAAcAAAALAAcAAAAWAAgAAAALAAcAAAAWAAkAAAALAAcAAAAWAAoAAAAEAAIAAAAWAAsAAAALAAcAAAAWAAwAAAALAAcAAAAWAA0AAAALAAcAAAAWAA4AAAALAAcAAAAWAA8AAAALAAcAAAAWABAAAAALAAcAAAAWABEAAAALAAcAAAAWABIAAAALAAcAAAAXAAAAAAALAAcAAAAXAAEAAAALAAcAAAAXAAIAAAALAAcAAAAXAAMAAAALAAcAAAAXAAQAAAALAAcAAAAXAAUAAAALAAcAAAAXAAYAAAALAAcAAAAXAAcAAAALAAcAAAAXAAgAAAALAAcAAAAXAAkAAAALAAcAAAAXAAoAAAAEAAIAAAAXAAsAAAALAAcAAAAXAAwAAAALAAcAAAAXAA0AAAALAAcAAAAXAA4AAAALAAcAAAAXAA8AAAALAAcAAAAXABAAAAALAAcAAAAXABEAAAALAAcAAAAXABIAAAALAAcAAAAYAAAAAAALAAcAAAAYAAEAAAALAAcAAAAYAAIAAAALAAcAAAAYAAMAAAALAAcAAAAYAAQAAAALAAcAAAAYAAUAAAALAAcAAAAYAAYAAAALAAcAAAAYAAcAAAALAAcAAAAYAAgAAAALAAcAAAAYAAkAAAALAAcAAAAYAAoAAAAEAAIAAAAYAAsAAAALAAcAAAAYAAwAAAALAAcAAAAYAA0AAAALAAcAAAAYAA4AAAALAAcAAAAYAA8AAAALAAcAAAAYABAAAAALAAcAAAAYABEAAAALAAcAAAAYABIAAAALAAcAAAAZAAAAAAALAAcAAAAZAAEAAAALAAcAAAAZAAIAAAALAAcAAAAZAAMAAAALAAcAAAAZAAQAAAALAAcAAAAZAAUAAAALAAcAAAAZAAYAAAALAAcAAAAZAAcAAAALAAcAAAAZAAgAAAALAAcAAAAZAAkAAAALAAcAAAAZAAoAAAAEAAIAAAAZAAsAAAALAAcAAAAZAAwAAAALAAcAAAAZAA0AAAALAAcAAAAZAA4AAAALAAcAAAAZAA8AAAALAAcAAAAZABAAAAALAAcAAAAZABEAAAALAAcAAAAZABIAAAALAAcAAAAaAAAAAAALAAcAAAAaAAEAAAALAAcAAAAaAAIAAAALAAcAAAAaAAMAAAALAAcAAAAaAAQAAAALAAcAAAAaAAUAAAALAAcAAAAaAAYAAAALAAcAAAAaAAcAAAALAAcAAAAaAAgAAAALAAcAAAAaAAkAAAALAAcAAAAaAAoAAAAEAAIAAAAaAAsAAAALAAcAAAAaAAwAAAALAAcAAAAaAA0AAAALAAcAAAAaAA4AAAALAAcAAAAaAA8AAAALAAcAAAAaABAAAAALAAcAAAAaABEAAAALAAcAAAAaABIAAAALAAcAAAAbAAAAAAALAAcAAAAbAAEAAAALAAcAAAAbAAIAAAALAAcAAAAbAAMAAAALAAcAAAAbAAQAAAALAAcAAAAbAAUAAAALAAcAAAAbAAYAAAALAAcAAAAbAAcAAAALAAcAAAAbAAgAAAALAAcAAAAbAAkAAAALAAcAAAAbAAoAAAAEAAIAAAAbAAsAAAALAAcAAAAbAAwAAAALAAcAAAAbAA0AAAALAAcAAAAbAA4AAAALAAcAAAAbAA8AAAALAAcAAAAbABAAAAALAAcAAAAbABEAAAALAAcAAAAbABIAAAALAAcAAAAcAAAAAAALAAcAAAAcAAEAAAALAAcAAAAcAAIAAAALAAcAAAAcAAMAAAALAAcAAAAcAAQAAAALAAcAAAAcAAUAAAALAAcAAAAcAAYAAAALAAcAAAAcAAcAAAALAAcAAAAcAAgAAAALAAcAAAAcAAkAAAALAAcAAAAcAAoAAAAEAAIAAAAcAAsAAAALAAcAAAAcAAwAAAALAAcAAAAcAA0AAAALAAcAAAAcAA4AAAALAAcAAAAcAA8AAAALAAcAAAAcABAAAAALAAcAAAAcABEAAAALAAcAAAAcABIAAAALAAcAAAAdAAAAAAALAAcAAAAdAAEAAAALAAcAAAAdAAIAAAALAAcAAAAdAAMAAAALAAcAAAAdAAQAAAALAAcAAAAdAAUAAAALAAcAAAAdAAYAAAALAAcAAAAdAAcAAAALAAcAAAAdAAgAAAALAAcAAAAdAAkAAAALAAcAAAAdAAoAAAAEAAIAAAAdAAsAAAALAAcAAAAdAAwAAAALAAcAAAAdAA0AAAALAAcAAAAdAA4AAAALAAcAAAAdAA8AAAALAAcAAAAdABAAAAALAAcAAAAdABEAAAALAAcAAAAdABIAAAALAAcAAAAeAAAAAAALAAcAAAAeAAEAAAALAAcAAAAeAAIAAAALAAcAAAAeAAMAAAALAAcAAAAeAAQAAAALAAcAAAAeAAUAAAALAAcAAAAeAAYAAAALAAcAAAAeAAcAAAALAAcAAAAeAAgAAAALAAcAAAAeAAkAAAALAAcAAAAeAAoAAAAEAAIAAAAeAAsAAAALAAcAAAAeAAwAAAALAAcAAAAeAA0AAAALAAcAAAAeAA4AAAALAAcAAAAeAA8AAAALAAcAAAAeABAAAAALAAcAAAAeABEAAAALAAcAAAAeABIAAAALAAcAAAAfAAAAAAALAAcAAAAfAAEAAAALAAcAAAAfAAIAAAALAAcAAAAfAAMAAAALAAcAAAAfAAQAAAALAAcAAAAfAAUAAAALAAcAAAAfAAYAAAALAAcAAAAfAAcAAAALAAcAAAAfAAgAAAALAAcAAAAfAAkAAAALAAcAAAAfAAoAAAAEAAIAAAAfAAsAAAALAAcAAAAfAAwAAAALAAcAAAAfAA0AAAALAAcAAAAfAA4AAAALAAcAAAAfAA8AAAALAAcAAAAfABAAAAALAAcAAAAfABEAAAALAAcAAAAfABIAAAALAAcAAAAgAAAAAAALAAcAAAAgAAEAAAALAAcAAAAgAAIAAAALAAcAAAAgAAMAAAALAAcAAAAgAAQAAAALAAcAAAAgAAUAAAALAAcAAAAgAAYAAAALAAcAAAAgAAcAAAALAAcAAAAgAAgAAAALAAcAAAAgAAkAAAALAAcAAAAgAAoAAAAEAAIAAAAgAAsAAAALAAcAAAAgAAwAAAALAAcAAAAgAA0AAAALAAcAAAAgAA4AAAALAAcAAAAgAA8AAAALAAcAAAAgABAAAAALAAcAAAAgABEAAAALAAcAAAAgABIAAAALAAcAAAAhAAAAAAALAAcAAAAhAAEAAAALAAcAAAAhAAIAAAALAAcAAAAhAAMAAAALAAcAAAAhAAQAAAALAAcAAAAhAAUAAAALAAcAAAAhAAYAAAALAAcAAAAhAAcAAAALAAcAAAAhAAgAAAALAAcAAAAhAAkAAAALAAcAAAAhAAoAAAAEAAIAAAAhAAsAAAALAAcAAAAhAAwAAAALAAcAAAAhAA0AAAALAAcAAAAhAA4AAAALAAcAAAAhAA8AAAALAAcAAAAhABAAAAALAAcAAAAhABEAAAALAAcAAAAhABIAAAALAAcAAAAiAAAAAAALAAcAAAAiAAEAAAALAAcAAAAiAAIAAAALAAcAAAAiAAMAAAALAAcAAAAiAAQAAAALAAcAAAAiAAUAAAALAAcAAAAiAAYAAAALAAcAAAAiAAcAAAALAAcAAAAiAAgAAAALAAcAAAAiAAkAAAALAAcAAAAiAAoAAAAEAAIAAAAiAAsAAAALAAcAAAAiAAwAAAALAAcAAAAiAA0AAAALAAcAAAAiAA4AAAALAAcAAAAiAA8AAAALAAcAAAAiABAAAAALAAcAAAAiABEAAAALAAcAAAAiABIAAAALAAcAAAAjAAAAAAALAAcAAAAjAAEAAAALAAcAAAAjAAIAAAALAAcAAAAjAAMAAAALAAcAAAAjAAQAAAALAAcAAAAjAAUAAAALAAcAAAAjAAYAAAALAAcAAAAjAAcAAAALAAcAAAAjAAgAAAALAAcAAAAjAAkAAAALAAcAAAAjAAoAAAAEAAIAAAAjAAsAAAALAAcAAAAjAAwAAAALAAcAAAAjAA0AAAALAAcAAAAjAA4AAAALAAcAAAAjAA8AAAALAAcAAAAjABAAAAALAAcAAAAjABEAAAALAAcAAAAjABIAAAALAAcAAAAkAAAAAAALAAcAAAAkAAEAAAALAAcAAAAkAAIAAAALAAcAAAAkAAMAAAALAAcAAAAkAAQAAAALAAcAAAAkAAUAAAALAAcAAAAkAAYAAAALAAcAAAAkAAcAAAALAAcAAAAkAAgAAAALAAcAAAAkAAkAAAALAAcAAAAkAAoAAAAEAAIAAAAkAAsAAAALAAcAAAAkAAwAAAALAAcAAAAkAA0AAAALAAcAAAAkAA4AAAALAAcAAAAkAA8AAAALAAcAAAAkABAAAAALAAcAAAAkABEAAAALAAcAAAAkABIAAAALAAcAAAAlAAAAAAALAAcAAAAlAAEAAAALAAcAAAAlAAIAAAALAAcAAAAlAAMAAAALAAcAAAAlAAQAAAALAAcAAAAlAAUAAAALAAcAAAAlAAYAAAALAAcAAAAlAAcAAAALAAcAAAAlAAgAAAALAAcAAAAlAAkAAAALAAcAAAAlAAoAAAAEAAIAAAAlAAsAAAALAAcAAAAlAAwAAAALAAcAAAAlAA0AAAALAAcAAAAlAA4AAAALAAcAAAAlAA8AAAALAAcAAAAlABAAAAALAAcAAAAlABEAAAALAAcAAAAlABIAAAALAAcAAAAmAAAAAAALAAcAAAAmAAEAAAALAAcAAAAmAAIAAAALAAcAAAAmAAMAAAALAAcAAAAmAAQAAAALAAcAAAAmAAUAAAALAAcAAAAmAAYAAAALAAcAAAAmAAcAAAALAAcAAAAmAAgAAAALAAcAAAAmAAkAAAALAAcAAAAmAAoAAAAEAAIAAAAmAAsAAAALAAcAAAAmAAwAAAALAAcAAAAmAA0AAAALAAcAAAAmAA4AAAALAAcAAAAmAA8AAAALAAcAAAAmABAAAAALAAcAAAAmABEAAAALAAcAAAAmABIAAAALAAcAAAADABMAAAALAAcAAAAEABMAAAALAAcAAAAFABMAAAALAAcAAAAGABMAAAALAAcAAAAHABMAAAALAAcAAAAIABMAAAALAAcAAAAJABMAAAALAAcAAAAKABMAAAALAAcAAAALABMAAAALAAcAAAAMABMAAAALAAcAAAANABMAAAALAAcAAAAOABMAAAALAAcAAAAPABMAAAALAAcAAAAQABMAAAALAAcAAAARABMAAAALAAcAAAASABMAAAALAAcAAAATABMAAAALAAcAAAAUABMAAAALAAcAAAAVABMAAAALAAcAAAAWABMAAAALAAcAAAAXABMAAAALAAcAAAAYABMAAAALAAcAAAAZABMAAAALAAcAAAAaABMAAAALAAcAAAAbABMAAAALAAcAAAAcABMAAAALAAcAAAAdABMAAAALAAcAAAAeABMAAAALAAcAAAAfABMAAAALAAcAAAAgABMAAAALAAcAAAAhABMAAAALAAcAAAAiABMAAAALAAcAAAAjABMAAAALAAcAAAAkABMAAAALAAcAAAAlABMAAAALAAcAAAAmABMAAAALAAcAAAAnAAsAAAALAAcAAAAnAAwAAAALAAcAAAAnAA0AAAALAAcAAAAnAA4AAAALAAcAAAAnAA8AAAALAAcAAAAnABAAAAALAAcAAAAnABEAAAALAAcAAAAnABIAAAALAAcAAAAnABMAAAALAAcAAAAnAAUAAAALAAcAAAA=") tile_set = ExtResource("4_tyndx") navigation_enabled = false @@ -21,20 +33,29 @@ script = ExtResource("5_lrgk6") _solidLayers = [NodePath("../Solid"), NodePath("../Props")] metadata/_edit_lock_ = true -[node name="Solid" type="TileMapLayer" parent="." groups=["Solid"]] +[node name="Solid" type="TileMapLayer" parent="Tilemaps" 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"]] +[node name="Props" type="TileMapLayer" parent="Tilemaps" groups=["Solid"]] tile_set = ExtResource("4_tyndx") navigation_enabled = false metadata/_edit_lock_ = true -[node name="Actors" type="Node2D" parent="."] +[node name="Actors" type="Node2D" parent="Tilemaps"] metadata/_edit_lock_ = true +[node name="BigTankHorizontal" parent="Tilemaps/Actors" instance=ExtResource("6_cgxuy")] +position = Vector2(202, 54) + +[node name="BigTankHorizontal2" parent="Tilemaps/Actors" instance=ExtResource("6_cgxuy")] +position = Vector2(231, 54) + +[node name="BigTankHorizontal3" parent="Tilemaps/Actors" instance=ExtResource("6_cgxuy")] +position = Vector2(223, 289) + [node name="EnemySpawners" type="Node2D" parent="."] [node name="RogueliteEnemySpawner" type="Marker2D" parent="EnemySpawners"] @@ -89,3 +110,18 @@ position = Vector2(6, 247) script = ExtResource("6_x7fb3") Direction = 3 WallIndex = 1 + +[node name="NavigationRegion2D" type="NavigationRegion2D" parent="."] +navigation_polygon = SubResource("NavigationPolygon_lrgk6") + +[node name="BigTank" parent="." instance=ExtResource("8_tyndx")] +position = Vector2(288, 136) + +[node name="BigTank2" parent="." instance=ExtResource("8_tyndx")] +position = Vector2(350, 136) + +[node name="BigTank3" parent="." instance=ExtResource("8_tyndx")] +position = Vector2(288, 184) + +[node name="BigTank4" parent="." instance=ExtResource("8_tyndx")] +position = Vector2(352, 184) diff --git a/Scenes/test.tscn b/Scenes/test.tscn index ae3092e8..3eeafa7b 100644 --- a/Scenes/test.tscn +++ b/Scenes/test.tscn @@ -1232,7 +1232,7 @@ position = Vector2(-2000, -736) [node name="ControlPad8" parent="Parallax2D/Factory Tilemaps/LevelProps" node_paths=PackedStringArray("Targets") instance=ExtResource("12_hfkf1")] position = Vector2(-2027, -735) Targets = [NodePath("../HorizontalForceField")] -Requirements = [ExtResource("84_ma1ta")] +Requirements = Array[ExtResource("6_8tdlb")]([ExtResource("84_ma1ta")]) [node name="Ammo6" parent="Parallax2D/Factory Tilemaps/LevelProps" instance=ExtResource("34_17pjh")] position = Vector2(-872, -220) diff --git a/Scripts/Controllers/RogueliteRoom.cs b/Scripts/Controllers/RogueliteRoom.cs index 5c7cd533..8e73f0e6 100644 --- a/Scripts/Controllers/RogueliteRoom.cs +++ b/Scripts/Controllers/RogueliteRoom.cs @@ -10,29 +10,30 @@ 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; } - + [Export] public PackedScene WallPrefab { 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) }, + { "East", new Vector2I(1, 0) }, + { "West", new Vector2I(-1, 0) }, }; - private Array SpawnableEnemies => RoomResource.SpawnableEnemies; + private Array SpawnableEnemies => RoomResource.SpawnableEnemies; - public RogueliteRoom Spawn(Func connectionChecker) + public RogueliteRoom Spawn() { SpawnEnemies(); - HandleDoors(connectionChecker); + //HandleDoors(connectionChecker); return this; } - - private void HandleDoors(Func connectionChecker) + + public void HandleDoors(Func connectionChecker) { if (!HasNode("Doors")) return; var doorsNode = GetNode("Doors"); @@ -40,7 +41,7 @@ public partial class RogueliteRoom : Node2D 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 @@ -57,11 +58,16 @@ public partial class RogueliteRoom : Node2D bool connected = connectionChecker.Invoke(neighborPos); - if (!connected) continue; + if (connected) + { + var door = this.CreateChild(DoorPrefab, marker.GlobalPosition); - var door = this.CreateChild(DoorPrefab, marker.GlobalPosition); - - door.State = DoorState.Open; + door.State = DoorState.Open; + } + else + { + var wall = this.CreateChild(WallPrefab, marker.GlobalPosition); + } // PackedScene prefab = hasConnection // ? GD.Load("res://Prefabs/Door.tscn") @@ -77,16 +83,15 @@ public partial class RogueliteRoom : Node2D private void SpawnEnemies() { if (SpawnableEnemies is null || !SpawnableEnemies.Any()) return; - + var enemySpawners = this.GetNode("EnemySpawners").GetChildren().Cast(); foreach (var spawner in enemySpawners) { - var index = GD.RandRange(0, SpawnableEnemies.Count - 1); - + var e = SpawnableEnemies[index]; - + var enemyScene = GD.Load(e.PrefabPath); var spawnedEnemy = spawner.CreateChild(enemyScene); } diff --git a/Scripts/Controllers/RogueliteRoomManager.cs b/Scripts/Controllers/RogueliteRoomManager.cs index 4a6ec13d..eb87497f 100644 --- a/Scripts/Controllers/RogueliteRoomManager.cs +++ b/Scripts/Controllers/RogueliteRoomManager.cs @@ -10,10 +10,18 @@ namespace Cirno.Scripts.Controllers; public partial class RogueliteRoomManager : Node2D { [Export] public Array Rooms { get; set; } - + [Export] public Node2D SceneContainer { get; set; } - - private Godot.Collections.Dictionary _grid = new(); + + //private Godot.Collections.Dictionary _grid = new(); + private Godot.Collections.Dictionary _roomGrid = new(); + + [Export] public Vector2I SpawnOrigin { get; private set; } = Vector2I.Zero; + + [Export] public int DungeonLength { get; set; } = 10; + [Export] public int MaxBranches { get; set; } = 3; + [Export] public int MaxBranchLength { get; set; } = 3; + [Export] public int DungeonWidth = 10; [Export] public int DungeonHeight = 10; [Export] public int MaxRooms = 12; @@ -21,25 +29,24 @@ public partial class RogueliteRoomManager : Node2D [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(); + GenerateDungeon(); } - + private void SpawnRoomsGrid() { //var firstRoom = Rooms.FirstOrDefault(); var origin = Vector2.Zero; var tileSize = new Vector2(16, 16); - + for (int i = 0; i < 10; i++) { for (int j = 0; j < 10; j++) @@ -53,63 +60,184 @@ public partial class RogueliteRoomManager : Node2D //CallDeferred(MethodName.RebakeNavigationDeferred); } - private void SpawnRoomsBinaryTree() + private IEnumerable StarterRooms => Rooms.Where(x => x.Type is RoomType.Starter); + private IEnumerable RegularRooms => Rooms.Where(x => x.Type is RoomType.Regular); + private IEnumerable BossRooms => Rooms.Where(x => x.Type is RoomType.Boss); + + private List _mainPath = new(); + private List _connections = new(); + + private void GenerateDungeon() { - 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); + Vector2I origin = Vector2I.Zero; + var starterRoom = Rooms.Where(r => r.Type == RoomType.Starter).PickRandom(); + SpawnRoom(starterRoom, origin); + _mainPath.Add(origin); - var starterRooms = Rooms.Where(x => x.Type is RoomType.Starter).ToList(); - var regularRooms = Rooms.Where(x => x.Type == RoomType.Regular).ToList(); + var currentPos = origin; - 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) + // 🔐 Reserve boss room position + var bossRoom = BossRooms.FirstOrDefault(); + Vector2I? bossTargetPos = FindValidBossRoomLocation(currentPos); + + if (bossRoom == null || bossTargetPos == null) { - var (currentPos, currentRoom) = queue.Dequeue(); + GD.PrintErr("Failed to place boss room!"); + return; + } + + // Generate path to boss room + while (currentPos != bossTargetPos.Value) + { + var nextPos = GetNextPosition(currentPos, bossTargetPos.Value); + if (!SpawnRoom(Rooms.Where(x => x.Type == RoomType.Regular).PickRandom(), nextPos)) break; + + _mainPath.Add(nextPos); + _connections.Add(new RoomConnection(currentPos, nextPos)); + currentPos = nextPos; + } + + // Place the boss room + if (SpawnRoom(bossRoom, bossTargetPos.Value)) + { + _mainPath.Add(bossTargetPos.Value); + _connections.Add(new RoomConnection(currentPos, bossTargetPos.Value)); + } + } + + // 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 = StarterRooms.ToList(); + // var regularRooms = RegularRooms.ToList(); + // var bossRooms = BossRooms.ToList(); + // var starterRoom = starterRooms[GD.RandRange(0, starterRooms.Count - 1)]; + // + // var spawnedStartRoom = SpawnRoom(starterRoom, SpawnOrigin); + // + // Vector2I currentPos = SpawnOrigin; + // + // //MarkRoom(SpawnOrigin, starterRoom.Size, starterRoom); + // + // for (int i = 0; i < DungeonLength - 2; i++) + // { + // var nextPos = GetNextPosition(currentPos); + // if (nextPos == currentPos) break; + // + // var room = regularRooms[GD.RandRange(0, regularRooms.Count - 1)]; + // if (!SpawnRoom(room, nextPos)) break; // Skip on overlap + // + // _mainPath.Add(nextPos); + // _connections.Add(new RoomConnection(currentPos, nextPos)); + // currentPos = nextPos; + // } + // + // // Place Boss Room + // + // var bossRoom = bossRooms[GD.RandRange(0, bossRooms.Count - 1)]; + // var bossPos = GetNextPosition(currentPos); + // if (!SpawnRoom(bossRoom, bossPos)) break; // Skip on overlap + // SpawnRoom(bossRoom, bossPos); + // _mainPath.Add(bossPos); + // _connections.Add(new RoomConnection(currentPos, bossPos)); + // + // // Place Shop and Secret Rooms + // //PlaceSpecialRoom(RoomType.Shop); + // //PlaceSpecialRoom(RoomType.Secret); + // + // // Optionally, add branches + // for (int i = 0; i < MaxBranches; i++) + // { + // var branchStart = _mainPath[GD.RandRange(0, _mainPath.Count -1)]; + // var branchLength = GD.RandRange(1, MaxBranchLength); + // //_random.Next(1, MaxBranchLength + 1); + // var branchPos = branchStart; + // + // for (int j = 0; j < branchLength; j++) + // { + // var nextPos = GetNextPosition(branchPos); + // if (_roomGrid.ContainsKey(nextPos)) break; + // + // var room = regularRooms[GD.RandRange(0,regularRooms.Count -1)]; + // + // SpawnRoom(room, nextPos); + // _connections.Add(new RoomConnection(branchPos, nextPos)); + // branchPos = nextPos; + // } + // } + // + // // Spawn doors and walls + // foreach (var roomEntry in _roomGrid) + // { + // var room = roomEntry.Value; + // room.HandleDoors(pos => + // { + // var neighborPos = room.GridPosition + pos; + // return _roomGrid.ContainsKey(neighborPos); + // }); + // } + // } + + private Vector2I? FindValidBossRoomLocation(Vector2I from, int maxSteps = 10) + { + var directions = new List { Vector2I.Right, Vector2I.Left, Vector2I.Up, Vector2I.Down }; + + for (int step = 0; step < maxSteps; step++) + { + directions = directions.OrderBy(_ => GD.Randi()).ToList(); foreach (var dir in directions) { - var offsetPos = currentPos + dir; + var pos = from + dir; + var bossRoom = Rooms.FirstOrDefault(r => r.Type == RoomType.Boss); + if (bossRoom != null && CanPlaceRoom(pos, bossRoom.Size)) + return pos; - // 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; + from += dir; } } - //SpawnSpecialRooms(rng); - - + return null; + } + + private Vector2I GetNextPosition(Vector2I current, Vector2I target) + { + var possibleDirs = new List(); + + if (target.X > current.X) + possibleDirs.Add(Vector2I.Right); + else if (target.X < current.X) + possibleDirs.Add(Vector2I.Left); + + if (target.Y > current.Y) + possibleDirs.Add(Vector2I.Down); + else if (target.Y < current.Y) + possibleDirs.Add(Vector2I.Up); + + // Add random noise to allow slightly winding paths + possibleDirs.AddRange(new[] { Vector2I.Right, Vector2I.Left, Vector2I.Up, Vector2I.Down }); + + possibleDirs = possibleDirs.Distinct().OrderBy(_ => GD.Randi()).ToList(); + + foreach (var dir in possibleDirs) + { + var nextPos = current + dir; + if (!_roomGrid.ContainsKey(nextPos)) + return nextPos; + } + + return current; // No valid next position found } private void RebakeNavigationDeferred() @@ -117,24 +245,30 @@ public partial class RogueliteRoomManager : Node2D GameManager.Instance.RebakeNavigation(); } - private RogueliteRoom SpawnRoom(RogueliteRoomResource room, Vector2I gridPos) + private bool SpawnRoom(RogueliteRoomResource room, Vector2I gridPos) { - var position = gridPos * TileSize * RoomSizeInTiles; + if (!CanPlaceRoom(gridPos, room.Size)) + return false; + var position = gridPos * TileSize * RoomSizeInTiles; + var roomScene = GD.Load(room.ScenePath); var spawnedScene = this.CreateChild(roomScene, position); - + + spawnedScene.GridPosition = gridPos; + // for reference //SpawnRoom(room, origin + (room.Size * new Vector2(i, j) * tileSize)); - - return spawnedScene.Spawn(CheckConnection); + spawnedScene.Spawn(); + MarkRoom(SpawnOrigin, room.Size, spawnedScene); + return true; } - - private bool CheckConnection(Vector2I pos) - { - return _grid.ContainsKey(pos); // <- this is your dungeon grid dictionary - } - + + // 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++) @@ -142,21 +276,38 @@ public partial class RogueliteRoomManager : Node2D for (int y = 0; y < size.Y; y++) { var pos = origin + new Vector2I(x, y); - if (_grid.ContainsKey(pos)) return false; + if (_roomGrid.ContainsKey(pos)) return false; } } + return true; } - private void MarkRoom(Vector2I origin, Vector2I size, RogueliteRoomResource room) + private void MarkRoom(Vector2I origin, Vector2I size, RogueliteRoom 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; + _roomGrid[pos] = room; } } } +} + +public class RoomConnection +{ + public Vector2I From; + public Vector2I To; + public bool IsLocked; + public bool IsSecret; + + public RoomConnection(Vector2I from, Vector2I to, bool isLocked = false, bool isSecret = false) + { + From = from; + To = to; + IsLocked = isLocked; + IsSecret = isSecret; + } } \ No newline at end of file diff --git a/Scripts/Enums/DoorDirections.cs.uid b/Scripts/Enums/DoorDirections.cs.uid new file mode 100644 index 00000000..72e78987 --- /dev/null +++ b/Scripts/Enums/DoorDirections.cs.uid @@ -0,0 +1 @@ +uid://dps60d5h7rill diff --git a/Scripts/Tools.cs b/Scripts/Tools.cs index 5a00c1c2..8288c3cf 100644 --- a/Scripts/Tools.cs +++ b/Scripts/Tools.cs @@ -1,3 +1,6 @@ +using System; +using System.Collections.Generic; +using System.Linq; using Godot; namespace Cirno.Scripts; @@ -101,4 +104,10 @@ public static class Tools return new Vector2(0, Mathf.Sign(input.Y)); // Up or Down } } + + public static T PickRandom(this IEnumerable list) + { + var arr = list.ToArray(); + return arr[GD.RandRange(0, arr.Length -1)]; + } }