diff --git a/DungeonShooting_Godot/resource/map/Room1.tscn b/DungeonShooting_Godot/resource/map/Room1.tscn
index 469d9a1..67605f4 100644
--- a/DungeonShooting_Godot/resource/map/Room1.tscn
+++ b/DungeonShooting_Godot/resource/map/Room1.tscn
@@ -1,8 +1,12 @@
-[gd_scene load_steps=2 format=3 uid="uid://dogcomcoap03x"]
+[gd_scene load_steps=3 format=3 uid="uid://dogcomcoap03x"]
[ext_resource type="TileSet" uid="uid://b00g22o1cqhe8" path="res://resource/map/tileset/TileSet1.tres" id="1_4enkp"]
+[ext_resource type="Script" path="res://src/framework/map/DoorConnectArea.cs" id="2_u2uky"]
[node name="TileMap" type="TileMap"]
tile_set = ExtResource("1_4enkp")
format = 2
layer_0/tile_data = PackedInt32Array(1245219, 0, 8, 1179683, 0, 8, 1114147, 0, 8, 1048611, 0, 8, 983075, 0, 8, 917539, 0, 8, 852003, 0, 8, 786467, 0, 8, 720931, 0, 8, 655395, 0, 8, 589859, 0, 8, 524323, 0, 8, 458787, 0, 8, 393251, 0, 8, 327715, 0, 8, 262179, 0, 8, 196643, 0, 8, 131107, 0, 8, 65571, 0, 8, 35, 0, 8, 1245218, 0, 8, 1179682, 0, 8, 1114146, 0, 8, 1048610, 0, 8, 983074, 0, 8, 917538, 0, 8, 852002, 0, 8, 786466, 0, 8, 720930, 0, 8, 655394, 0, 8, 589858, 0, 8, 524322, 0, 8, 458786, 0, 8, 393250, 0, 8, 327714, 0, 8, 262178, 0, 8, 196642, 0, 8, 131106, 0, 8, 65570, 0, 8, 34, 0, 8, 1245217, 0, 8, 1179681, 0, 8, 1114145, 0, 8, 1048609, 0, 8, 983073, 0, 8, 917537, 0, 8, 852001, 0, 8, 786465, 0, 8, 720929, 0, 8, 655393, 0, 8, 589857, 0, 8, 524321, 0, 8, 458785, 0, 8, 393249, 0, 8, 327713, 0, 8, 262177, 0, 8, 196641, 0, 8, 131105, 0, 8, 65569, 0, 8, 33, 0, 8, 1245216, 0, 8, 1179680, 0, 8, 1114144, 0, 8, 1048608, 0, 8, 983072, 0, 8, 917536, 0, 8, 852000, 0, 8, 786464, 0, 8, 720928, 0, 8, 655392, 0, 8, 589856, 0, 8, 524320, 0, 8, 458784, 0, 8, 393248, 0, 8, 327712, 0, 8, 262176, 0, 8, 196640, 0, 8, 131104, 0, 8, 65568, 0, 8, 32, 0, 8, 1245215, 0, 8, 1179679, 0, 8, 1114143, 0, 8, 1048607, 0, 8, 983071, 0, 8, 917535, 0, 8, 851999, 0, 8, 786463, 0, 8, 720927, 0, 8, 655391, 0, 8, 589855, 0, 8, 524319, 0, 8, 458783, 0, 8, 393247, 0, 8, 327711, 0, 8, 262175, 0, 8, 196639, 0, 8, 131103, 0, 8, 65567, 0, 8, 31, 0, 8, 1245214, 0, 8, 1179678, 0, 8, 1114142, 0, 8, 1048606, 0, 8, 983070, 0, 8, 917534, 0, 8, 851998, 0, 8, 786462, 0, 8, 720926, 0, 8, 655390, 0, 8, 589854, 0, 8, 524318, 0, 8, 458782, 0, 8, 393246, 0, 8, 327710, 0, 8, 262174, 0, 8, 196638, 0, 8, 131102, 0, 8, 65566, 0, 8, 30, 0, 8, 1245213, 0, 8, 1179677, 0, 8, 1114141, 0, 8, 1048605, 0, 8, 983069, 0, 8, 917533, 0, 8, 851997, 0, 8, 786461, 0, 8, 720925, 0, 8, 655389, 0, 8, 589853, 0, 8, 524317, 0, 8, 458781, 0, 8, 393245, 0, 8, 327709, 0, 8, 262173, 0, 8, 196637, 0, 8, 131101, 0, 8, 65565, 0, 8, 29, 0, 8, 1245212, 0, 8, 1179676, 0, 8, 1114140, 0, 8, 1048604, 0, 8, 983068, 0, 8, 917532, 0, 8, 851996, 0, 8, 786460, 0, 8, 720924, 0, 8, 655388, 0, 8, 589852, 0, 8, 524316, 0, 8, 458780, 0, 8, 393244, 0, 8, 327708, 0, 8, 262172, 0, 8, 196636, 0, 8, 131100, 0, 8, 65564, 0, 8, 28, 0, 8, 1245211, 0, 8, 1179675, 0, 8, 1114139, 0, 8, 1048603, 0, 8, 983067, 0, 8, 524315, 0, 8, 458779, 0, 8, 393243, 0, 8, 327707, 0, 8, 262171, 0, 8, 196635, 0, 8, 131099, 0, 8, 65563, 0, 8, 27, 0, 8, 1245210, 0, 8, 1179674, 0, 8, 1114138, 0, 8, 1048602, 0, 8, 983066, 0, 8, 524314, 0, 8, 458778, 0, 8, 393242, 0, 8, 327706, 0, 8, 262170, 0, 8, 196634, 0, 8, 131098, 0, 8, 65562, 0, 8, 26, 0, 8, 1245209, 0, 8, 1179673, 0, 8, 1114137, 0, 8, 1048601, 0, 8, 983065, 0, 8, 524313, 0, 8, 458777, 0, 8, 393241, 0, 8, 327705, 0, 8, 262169, 0, 8, 196633, 0, 8, 131097, 0, 8, 65561, 0, 8, 25, 0, 8, 1245208, 0, 8, 1179672, 0, 8, 1114136, 0, 8, 1048600, 0, 8, 983064, 0, 8, 524312, 0, 8, 458776, 0, 8, 393240, 0, 8, 327704, 0, 8, 262168, 0, 8, 196632, 0, 8, 131096, 0, 8, 65560, 0, 8, 24, 0, 8, 1245207, 0, 8, 1179671, 0, 8, 1114135, 0, 8, 1048599, 0, 8, 983063, 0, 8, 65559, 0, 8, 23, 0, 8, 1245206, 0, 8, 1179670, 0, 8, 1114134, 0, 8, 1048598, 0, 8, 983062, 0, 8, 65558, 0, 8, 22, 0, 8, 1245205, 0, 8, 1179669, 0, 8, 1114133, 0, 8, 1048597, 0, 8, 983061, 0, 8, 65557, 0, 8, 21, 0, 8, 1245204, 0, 8, 1179668, 0, 8, 1114132, 0, 8, 1048596, 0, 8, 983060, 0, 8, 65556, 0, 8, 20, 0, 8, 1245203, 0, 8, 1179667, 0, 8, 1114131, 0, 8, 1048595, 0, 8, 983059, 0, 8, 917523, 0, 8, 851987, 0, 8, 65555, 0, 8, 19, 0, 8, 1245202, 0, 8, 1179666, 0, 8, 1114130, 0, 8, 1048594, 0, 8, 983058, 0, 8, 917522, 0, 8, 851986, 0, 8, 65554, 0, 8, 18, 0, 8, 1245201, 0, 8, 1179665, 0, 8, 1114129, 0, 8, 1048593, 0, 8, 983057, 0, 8, 917521, 0, 8, 851985, 0, 8, 65553, 0, 8, 17, 0, 8, 1245200, 0, 8, 1179664, 0, 8, 1114128, 0, 8, 1048592, 0, 8, 983056, 0, 8, 917520, 0, 8, 851984, 0, 8, 65552, 0, 8, 16, 0, 8, 1245199, 0, 8, 1179663, 0, 8, 1114127, 0, 8, 1048591, 0, 8, 983055, 0, 8, 917519, 0, 8, 851983, 0, 8, 262159, 0, 8, 196623, 0, 8, 131087, 0, 8, 65551, 0, 8, 15, 0, 8, 1245198, 0, 8, 1179662, 0, 8, 1114126, 0, 8, 1048590, 0, 8, 983054, 0, 8, 917518, 0, 8, 851982, 0, 8, 262158, 0, 8, 196622, 0, 8, 131086, 0, 8, 65550, 0, 8, 14, 0, 8, 1245197, 0, 8, 1179661, 0, 8, 1114125, 0, 8, 1048589, 0, 8, 983053, 0, 8, 917517, 0, 8, 851981, 0, 8, 262157, 0, 8, 196621, 0, 8, 131085, 0, 8, 65549, 0, 8, 13, 0, 8, 1245196, 0, 8, 1179660, 0, 8, 1114124, 0, 8, 1048588, 0, 8, 983052, 0, 8, 917516, 0, 8, 851980, 0, 8, 262156, 0, 8, 196620, 0, 8, 131084, 0, 8, 65548, 0, 8, 12, 0, 8, 1245195, 0, 8, 1179659, 0, 8, 1114123, 0, 8, 1048587, 0, 8, 983051, 0, 8, 917515, 0, 8, 851979, 0, 8, 262155, 0, 8, 196619, 0, 8, 131083, 0, 8, 65547, 0, 8, 11, 0, 8, 1245194, 0, 8, 1179658, 0, 8, 1114122, 0, 8, 1048586, 0, 8, 983050, 0, 8, 917514, 0, 8, 851978, 0, 8, 196618, 0, 8, 131082, 0, 8, 65546, 0, 8, 10, 0, 8, 1245193, 0, 8, 1179657, 0, 8, 1114121, 0, 8, 1048585, 0, 8, 983049, 0, 8, 917513, 0, 8, 851977, 0, 8, 196617, 0, 8, 131081, 0, 8, 65545, 0, 8, 9, 0, 8, 1245192, 0, 8, 1179656, 0, 8, 1114120, 0, 8, 1048584, 0, 8, 983048, 0, 8, 917512, 0, 8, 851976, 0, 8, 786440, 0, 8, 720904, 0, 8, 655368, 0, 8, 196616, 0, 8, 131080, 0, 8, 65544, 0, 8, 8, 0, 8, 1245191, 0, 8, 1179655, 0, 8, 1114119, 0, 8, 1048583, 0, 8, 983047, 0, 8, 917511, 0, 8, 851975, 0, 8, 786439, 0, 8, 720903, 0, 8, 655367, 0, 8, 196615, 0, 8, 131079, 0, 8, 65543, 0, 8, 7, 0, 8, 1245190, 0, 8, 1179654, 0, 8, 1114118, 0, 8, 1048582, 0, 8, 983046, 0, 8, 917510, 0, 8, 851974, 0, 8, 786438, 0, 8, 720902, 0, 8, 655366, 0, 8, 196614, 0, 8, 131078, 0, 8, 65542, 0, 8, 6, 0, 8, 1245189, 0, 8, 1179653, 0, 8, 1114117, 0, 8, 1048581, 0, 8, 983045, 0, 8, 917509, 0, 8, 851973, 0, 8, 786437, 0, 8, 720901, 0, 8, 655365, 0, 8, 196613, 0, 8, 131077, 0, 8, 65541, 0, 8, 5, 0, 8, 1245188, 0, 8, 1179652, 0, 8, 1114116, 0, 8, 1048580, 0, 8, 983044, 0, 8, 917508, 0, 8, 851972, 0, 8, 786436, 0, 8, 720900, 0, 8, 655364, 0, 8, 196612, 0, 8, 131076, 0, 8, 65540, 0, 8, 4, 0, 8, 1245187, 0, 8, 1179651, 0, 8, 1114115, 0, 8, 1048579, 0, 8, 983043, 0, 8, 917507, 0, 8, 851971, 0, 8, 786435, 0, 8, 720899, 0, 8, 655363, 0, 8, 589827, 0, 8, 524291, 0, 8, 458755, 0, 8, 393219, 0, 8, 327683, 0, 8, 262147, 0, 8, 196611, 0, 8, 131075, 0, 8, 65539, 0, 8, 3, 0, 8, 1245186, 0, 8, 1179650, 0, 8, 1114114, 0, 8, 1048578, 0, 8, 983042, 0, 8, 917506, 0, 8, 851970, 0, 8, 786434, 0, 8, 720898, 0, 8, 655362, 0, 8, 589826, 0, 8, 524290, 0, 8, 458754, 0, 8, 393218, 0, 8, 327682, 0, 8, 262146, 0, 8, 196610, 0, 8, 131074, 0, 8, 65538, 0, 8, 2, 0, 8, 1245185, 0, 8, 1179649, 0, 8, 1114113, 0, 8, 1048577, 0, 8, 983041, 0, 8, 917505, 0, 8, 851969, 0, 8, 786433, 0, 8, 720897, 0, 8, 655361, 0, 8, 589825, 0, 8, 524289, 0, 8, 458753, 0, 8, 393217, 0, 8, 327681, 0, 8, 262145, 0, 8, 196609, 0, 8, 131073, 0, 8, 65537, 0, 8, 1, 0, 8, 1245184, 0, 8, 1179648, 0, 8, 1114112, 0, 8, 1048576, 0, 8, 983040, 0, 8, 917504, 0, 8, 851968, 0, 8, 786432, 0, 8, 720896, 0, 8, 655360, 0, 8, 589824, 0, 8, 524288, 0, 8, 458752, 0, 8, 393216, 0, 8, 327680, 0, 8, 262144, 0, 8, 196608, 0, 8, 131072, 0, 8, 65536, 0, 8, 0, 0, 8, 131071, 196608, 3, 65535, 196608, 3, -1, 196608, 4, -65536, 131072, 7, -65535, 131072, 7, 196607, 196608, 3, 262143, 196608, 3, 327679, 196608, 3, 393215, 196608, 3, 458751, 196608, 3, 524287, 196608, 3, 589823, 196608, 3, 655359, 196608, 3, 720895, 196608, 3, 786431, 196608, 3, 851967, 196608, 3, 917503, 196608, 3, 983039, 196608, 3, 1048575, 196608, 3, 1114111, 196608, 3, 1179647, 196608, 3, 1245183, 196608, 3, 1310719, 196608, 3, 1310721, 131072, 2, 1310720, 131072, 2, 1376255, 720896, 2, -65534, 131072, 7, 1310722, 131072, 2, -65533, 131072, 7, 1310723, 131072, 2, -65532, 131072, 7, 1310724, 131072, 2, -65531, 131072, 7, 1310725, 131072, 2, -65530, 131072, 7, 1310726, 131072, 2, -65529, 131072, 7, 1310727, 131072, 2, -65528, 131072, 7, 1310728, 131072, 2, -65527, 131072, 7, 1310729, 131072, 2, -65526, 131072, 7, 1310730, 131072, 2, -65525, 131072, 7, 1310731, 131072, 2, -65524, 131072, 7, 1310732, 131072, 2, -65523, 131072, 7, 1310733, 131072, 2, -65522, 131072, 7, 1310734, 131072, 2, -65521, 131072, 7, 1310735, 131072, 2, -65520, 131072, 7, 1310736, 131072, 2, -65519, 131072, 7, 1310737, 131072, 2, -65518, 131072, 7, 1310738, 131072, 2, -65517, 131072, 7, 1310739, 131072, 2, -65516, 131072, 7, 1310740, 131072, 2, -65515, 131072, 7, 1310741, 131072, 2, -65514, 131072, 7, 1310742, 131072, 2, -65513, 131072, 7, 1310743, 131072, 2, -65512, 131072, 7, 1310744, 131072, 2, -65511, 131072, 7, 1310745, 131072, 2, -65510, 131072, 7, 1310746, 131072, 2, -65509, 131072, 7, 1310747, 131072, 2, -65508, 131072, 7, 1310748, 131072, 2, -65507, 131072, 7, 1310749, 131072, 2, -65506, 131072, 7, 1310750, 131072, 2, -65505, 131072, 7, 1310751, 131072, 2, -65504, 131072, 7, 1310752, 131072, 2, -65503, 131072, 7, 1310753, 131072, 2, -65502, 131072, 7, 1310754, 131072, 2, -65501, 131072, 7, 1310755, 131072, 2, 36, 65536, 3, 65572, 65536, 3, -65500, 65536, 4, 131108, 65536, 3, 196644, 65536, 3, 262180, 65536, 3, 327716, 65536, 3, 393252, 65536, 3, 458788, 65536, 3, 524324, 65536, 3, 589860, 65536, 3, 655396, 65536, 3, 720932, 65536, 3, 786468, 65536, 3, 852004, 65536, 3, 917540, 65536, 3, 983076, 65536, 3, 1048612, 65536, 3, 1114148, 65536, 3, 1179684, 65536, 3, 1245220, 65536, 3, 1310756, 851968, 2, 524311, 0, 8, 458775, 0, 8, 393239, 0, 8, 524310, 0, 8, 458774, 0, 8, 393238, 0, 8, 524309, 0, 8, 458773, 0, 8, 393237, 0, 8, 524308, 0, 8, 458772, 0, 8, 393236, 0, 8, 786451, 0, 8, 720915, 0, 8, 655379, 0, 8, 589843, 0, 8, 524307, 0, 8, 458771, 0, 8, 393235, 0, 8, 786450, 0, 8, 720914, 0, 8, 655378, 0, 8, 589842, 0, 8, 524306, 0, 8, 458770, 0, 8, 393234, 0, 8, 786449, 0, 8, 720913, 0, 8, 655377, 0, 8, 589841, 0, 8, 524305, 0, 8, 458769, 0, 8, 393233, 0, 8, 786448, 0, 8, 720912, 0, 8, 655376, 0, 8, 589840, 0, 8, 524304, 0, 8, 458768, 0, 8, 393232, 0, 8, 786447, 0, 8, 720911, 0, 8, 655375, 0, 8, 589839, 0, 8, 524303, 0, 8, 458767, 0, 8, 393231, 0, 8, 327695, 0, 8, 786446, 0, 8, 720910, 0, 8, 655374, 0, 8, 589838, 0, 8, 524302, 0, 8, 458766, 0, 8, 393230, 0, 8, 327694, 0, 8, 786445, 0, 8, 720909, 0, 8, 655373, 0, 8, 589837, 0, 8, 524301, 0, 8, 458765, 0, 8, 393229, 0, 8, 327693, 0, 8, 786444, 0, 8, 720908, 0, 8, 655372, 0, 8, 589836, 0, 8, 524300, 0, 8, 458764, 0, 8, 393228, 0, 8, 327692, 0, 8, 786443, 0, 8, 720907, 0, 8, 655371, 0, 8, 589835, 0, 8, 524299, 0, 8, 458763, 0, 8, 393227, 0, 8, 327691, 0, 8, 786442, 0, 8, 720906, 0, 8, 655370, 0, 8, 786441, 0, 8, 720905, 0, 8, 655369, 0, 8, 262149, 131072, 2, 262148, 65536, 2, 262150, 131072, 2, 262151, 131072, 2, 262152, 131072, 2, 262153, 131072, 2, 262154, 196608, 2, 327690, 196608, 3, 393226, 196608, 3, 458762, 196608, 3, 524298, 196608, 3, 589834, 196608, 7, 589833, 65536, 7, 589832, 0, 8, 589831, 0, 8, 589830, 0, 8, 524294, 0, 8, 524295, 0, 8, 524296, 0, 8, 589829, 196608, 7, 524293, 196608, 3, 589828, 65536, 7, 524292, 65536, 3, 458756, 65536, 3, 393220, 65536, 3, 327684, 65536, 3, 524297, 65536, 3, 458757, 196608, 3, 458758, 0, 8, 458759, 0, 8, 393221, 196608, 4, 393222, 131072, 7, 393223, 131072, 7, 458760, 0, 8, 393224, 131072, 7, 458761, 65536, 3, 393225, 65536, 4, 327696, 65536, 7, 327697, 131072, 7, 327698, 131072, 7, 327699, 131072, 7, 327700, 131072, 7, 327701, 131072, 7, 327702, 131072, 7, 327703, 196608, 7, 262167, 196608, 3, 196631, 196608, 3, 131095, 196608, 2, 131094, 131072, 2, 131093, 131072, 2, 131092, 131072, 2, 131091, 131072, 2, 131090, 131072, 2, 131089, 131072, 2, 131088, 65536, 2, 196624, 65536, 3, 262160, 65536, 3, 589844, 65536, 2, 655380, 65536, 3, 720916, 65536, 3, 786452, 65536, 3, 851988, 65536, 3, 917524, 65536, 7, 917525, 131072, 7, 917526, 131072, 7, 917527, 131072, 7, 917528, 131072, 7, 917529, 131072, 7, 917530, 131072, 7, 917531, 196608, 7, 851995, 196608, 3, 786459, 196608, 3, 720923, 196608, 3, 655387, 196608, 3, 589851, 196608, 2, 589850, 65536, 2, 589849, 0, 8, 589848, 0, 8, 589847, 0, 8, 589846, 0, 8, 589845, 196608, 2, 655383, 0, 8, 655382, 0, 8, 655381, 196608, 3, 720919, 0, 8, 720918, 0, 8, 720917, 196608, 3, 786455, 0, 8, 786454, 0, 8, 786453, 196608, 3, 851991, 131072, 2, 851990, 131072, 2, 851989, 720896, 2, 786456, 0, 8, 851992, 131072, 2, 720920, 0, 8, 786457, 0, 8, 851993, 131072, 2, 720921, 0, 8, 786458, 65536, 3, 851994, 851968, 2, 720922, 65536, 3, 655384, 0, 8, 655385, 0, 8, 655386, 65536, 3)
+
+[node name="Node2D" type="Node2D" parent="."]
+script = ExtResource("2_u2uky")
diff --git a/DungeonShooting_Godot/resource/theme/mainTheme.tres b/DungeonShooting_Godot/resource/theme/mainTheme.tres
index b4b5279..8304349 100644
--- a/DungeonShooting_Godot/resource/theme/mainTheme.tres
+++ b/DungeonShooting_Godot/resource/theme/mainTheme.tres
@@ -352,7 +352,7 @@
[sub_resource type="ImageTexture" id="58"]
-[sub_resource type="Image" id="Image_rkcf7"]
+[sub_resource type="Image" id="Image_vo2g5"]
data = {
"data": PackedByteArray(0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 1, 255, 255, 255, 39, 255, 255, 255, 67, 255, 255, 255, 67, 255, 255, 255, 39, 255, 255, 255, 1, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 39, 255, 255, 255, 75, 255, 255, 255, 75, 255, 255, 255, 75, 255, 255, 255, 75, 255, 255, 255, 39, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 66, 255, 255, 255, 75, 255, 255, 255, 75, 255, 255, 255, 75, 255, 255, 255, 75, 255, 255, 255, 66, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 66, 255, 255, 255, 75, 255, 255, 255, 75, 255, 255, 255, 75, 255, 255, 255, 75, 255, 255, 255, 66, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 39, 255, 255, 255, 75, 255, 255, 255, 75, 255, 255, 255, 75, 255, 255, 255, 75, 255, 255, 255, 39, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 1, 255, 255, 255, 39, 255, 255, 255, 67, 255, 255, 255, 67, 255, 255, 255, 39, 255, 255, 255, 1, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0),
"format": "RGBA8",
@@ -362,7 +362,7 @@
}
[sub_resource type="ImageTexture" id="60"]
-image = SubResource("Image_rkcf7")
+image = SubResource("Image_vo2g5")
[sub_resource type="StyleBoxTexture" id="61"]
content_margin_left = 2.0
@@ -372,7 +372,7 @@
texture = SubResource("60")
region_rect = Rect2(0, 0, 12, 12)
-[sub_resource type="Image" id="Image_y0e27"]
+[sub_resource type="Image" id="Image_dchmk"]
data = {
"data": PackedByteArray(0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 191, 191, 191, 0, 247, 247, 247, 0, 248, 248, 248, 0, 248, 248, 248, 0, 247, 247, 247, 0, 191, 191, 191, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 191, 191, 191, 0, 191, 191, 191, 4, 247, 247, 247, 98, 248, 248, 248, 167, 248, 248, 248, 167, 247, 247, 247, 98, 191, 191, 191, 4, 191, 191, 191, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 247, 247, 247, 0, 247, 247, 247, 97, 248, 248, 248, 186, 248, 248, 248, 186, 248, 248, 248, 186, 248, 248, 248, 186, 247, 247, 247, 97, 247, 247, 247, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 248, 248, 248, 0, 248, 248, 248, 164, 248, 248, 248, 186, 248, 248, 248, 186, 248, 248, 248, 186, 248, 248, 248, 186, 248, 248, 248, 164, 248, 248, 248, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 248, 248, 248, 0, 248, 248, 248, 164, 248, 248, 248, 186, 248, 248, 248, 186, 248, 248, 248, 186, 248, 248, 248, 186, 248, 248, 248, 164, 248, 248, 248, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 247, 247, 247, 0, 247, 247, 247, 97, 248, 248, 248, 186, 248, 248, 248, 186, 248, 248, 248, 186, 248, 248, 248, 186, 247, 247, 247, 97, 247, 247, 247, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 191, 191, 191, 0, 191, 191, 191, 4, 247, 247, 247, 98, 248, 248, 248, 167, 248, 248, 248, 167, 247, 247, 247, 98, 191, 191, 191, 4, 191, 191, 191, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 191, 191, 191, 0, 247, 247, 247, 0, 248, 248, 248, 0, 248, 248, 248, 0, 247, 247, 247, 0, 191, 191, 191, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0),
"format": "RGBA8",
@@ -382,7 +382,7 @@
}
[sub_resource type="ImageTexture" id="63"]
-image = SubResource("Image_y0e27")
+image = SubResource("Image_dchmk")
[sub_resource type="StyleBoxTexture" id="64"]
content_margin_left = 2.0
@@ -392,7 +392,7 @@
texture = SubResource("63")
region_rect = Rect2(0, 0, 12, 12)
-[sub_resource type="Image" id="Image_n1wp6"]
+[sub_resource type="Image" id="Image_35s3d"]
data = {
"data": PackedByteArray(0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 127, 127, 127, 0, 173, 173, 173, 0, 173, 173, 173, 0, 173, 173, 173, 0, 173, 173, 173, 0, 127, 127, 127, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 127, 127, 127, 0, 127, 127, 127, 4, 173, 173, 173, 97, 173, 173, 173, 166, 173, 173, 173, 166, 173, 173, 173, 97, 127, 127, 127, 4, 127, 127, 127, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 172, 172, 172, 0, 172, 172, 172, 96, 173, 173, 173, 185, 173, 173, 173, 185, 173, 173, 173, 185, 173, 173, 173, 185, 172, 172, 172, 96, 172, 172, 172, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 173, 173, 173, 0, 173, 173, 173, 163, 173, 173, 173, 185, 173, 173, 173, 185, 173, 173, 173, 185, 173, 173, 173, 185, 173, 173, 173, 163, 173, 173, 173, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 173, 173, 173, 0, 173, 173, 173, 163, 173, 173, 173, 185, 173, 173, 173, 185, 173, 173, 173, 185, 173, 173, 173, 185, 173, 173, 173, 163, 173, 173, 173, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 172, 172, 172, 0, 172, 172, 172, 96, 173, 173, 173, 185, 173, 173, 173, 185, 173, 173, 173, 185, 173, 173, 173, 185, 172, 172, 172, 96, 172, 172, 172, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 127, 127, 127, 0, 127, 127, 127, 4, 173, 173, 173, 97, 173, 173, 173, 166, 173, 173, 173, 166, 173, 173, 173, 97, 127, 127, 127, 4, 127, 127, 127, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 127, 127, 127, 0, 173, 173, 173, 0, 173, 173, 173, 0, 173, 173, 173, 0, 173, 173, 173, 0, 127, 127, 127, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0),
"format": "RGBA8",
@@ -402,7 +402,7 @@
}
[sub_resource type="ImageTexture" id="66"]
-image = SubResource("Image_n1wp6")
+image = SubResource("Image_35s3d")
[sub_resource type="StyleBoxTexture" id="67"]
content_margin_left = 2.0
@@ -412,7 +412,7 @@
texture = SubResource("66")
region_rect = Rect2(0, 0, 12, 12)
-[sub_resource type="Image" id="Image_oksiu"]
+[sub_resource type="Image" id="Image_gug2i"]
data = {
"data": PackedByteArray(0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 4, 255, 255, 255, 16, 255, 255, 255, 16, 255, 255, 255, 4, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 16, 255, 255, 255, 21, 255, 255, 255, 21, 255, 255, 255, 16, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 16, 255, 255, 255, 21, 255, 255, 255, 21, 255, 255, 255, 16, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 4, 255, 255, 255, 16, 255, 255, 255, 16, 255, 255, 255, 4, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0),
"format": "RGBA8",
@@ -422,7 +422,7 @@
}
[sub_resource type="ImageTexture" id="69"]
-image = SubResource("Image_oksiu")
+image = SubResource("Image_gug2i")
[sub_resource type="StyleBoxTexture" id="70"]
content_margin_left = 0.0
@@ -446,7 +446,7 @@
content_margin_right = 4.0
content_margin_bottom = 4.0
-[sub_resource type="Image" id="Image_1m7qi"]
+[sub_resource type="Image" id="Image_7vtp1"]
data = {
"data": PackedByteArray(0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 76, 255, 255, 255, 17, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 17, 255, 255, 255, 76, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 76, 255, 255, 255, 228, 255, 255, 255, 188, 255, 255, 255, 17, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 17, 255, 255, 255, 188, 255, 255, 255, 228, 255, 255, 255, 76, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 18, 255, 255, 255, 188, 255, 255, 255, 229, 255, 255, 255, 187, 255, 255, 255, 17, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 17, 255, 255, 255, 187, 255, 255, 255, 229, 255, 255, 255, 188, 255, 255, 255, 18, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 19, 255, 255, 255, 188, 255, 255, 255, 229, 255, 255, 255, 185, 255, 255, 255, 17, 255, 255, 255, 17, 255, 255, 255, 186, 255, 255, 255, 229, 255, 255, 255, 188, 255, 255, 255, 19, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 19, 255, 255, 255, 190, 255, 255, 255, 229, 255, 255, 255, 185, 255, 255, 255, 185, 255, 255, 255, 229, 255, 255, 255, 189, 255, 255, 255, 19, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 19, 255, 255, 255, 191, 255, 255, 255, 229, 255, 255, 255, 229, 255, 255, 255, 190, 255, 255, 255, 19, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 17, 255, 255, 255, 188, 255, 255, 255, 229, 255, 255, 255, 229, 255, 255, 255, 188, 255, 255, 255, 17, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 17, 255, 255, 255, 188, 255, 255, 255, 229, 255, 255, 255, 188, 255, 255, 255, 188, 255, 255, 255, 229, 255, 255, 255, 187, 255, 255, 255, 17, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 17, 255, 255, 255, 187, 255, 255, 255, 229, 255, 255, 255, 188, 255, 255, 255, 18, 255, 255, 255, 19, 255, 255, 255, 188, 255, 255, 255, 229, 255, 255, 255, 186, 255, 255, 255, 17, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 17, 255, 255, 255, 185, 255, 255, 255, 229, 255, 255, 255, 189, 255, 255, 255, 19, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 19, 255, 255, 255, 189, 255, 255, 255, 229, 255, 255, 255, 185, 255, 255, 255, 17, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 76, 255, 255, 255, 229, 255, 255, 255, 190, 255, 255, 255, 19, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 19, 255, 255, 255, 190, 255, 255, 255, 229, 255, 255, 255, 76, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 77, 255, 255, 255, 19, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 19, 255, 255, 255, 77, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0),
"format": "RGBA8",
@@ -456,7 +456,7 @@
}
[sub_resource type="ImageTexture" id="56"]
-image = SubResource("Image_1m7qi")
+image = SubResource("Image_7vtp1")
[sub_resource type="StyleBoxFlat" id="57"]
content_margin_left = 6.0
diff --git a/DungeonShooting_Godot/src/framework/generate/DoorDirection.cs b/DungeonShooting_Godot/src/framework/generate/DoorDirection.cs
deleted file mode 100644
index 7fc45a0..0000000
--- a/DungeonShooting_Godot/src/framework/generate/DoorDirection.cs
+++ /dev/null
@@ -1,23 +0,0 @@
-
-///
-/// 房间门的朝向
-///
-public enum DoorDirection
-{
- ///
- /// 东
- ///
- E,
- ///
- /// 西
- ///
- W,
- ///
- /// 南
- ///
- S,
- ///
- /// 北
- ///
- N,
-}
\ No newline at end of file
diff --git a/DungeonShooting_Godot/src/framework/generate/GenerateDungeon.cs b/DungeonShooting_Godot/src/framework/generate/GenerateDungeon.cs
deleted file mode 100644
index 3b264a6..0000000
--- a/DungeonShooting_Godot/src/framework/generate/GenerateDungeon.cs
+++ /dev/null
@@ -1,571 +0,0 @@
-
-using System.Collections.Generic;
-using Godot;
-
-///
-/// 地牢生成器
-///
-public class GenerateDungeon
-{
- ///
- /// 过道宽度
- ///
- public const int CorridorWidth = 4;
-
- ///
- /// 所有生成的房间, 调用过 Generate() 函数才能获取到值
- ///
- public List RoomInfos { get; } = new List();
-
- ///
- /// 起始房间
- ///
- public RoomInfo StartRoom { get; private set; }
-
- ///
- /// 生成的房间数量
- ///
- private int _maxCount = 15;
-
- //用于标记地图上的坐标是否被占用
- private Grid _roomGrid { get; } = new Grid();
-
- //当前房间数量
- private int _count = 0;
-
- //宽高
- private int _roomMinWidth = 15;
- private int _roomMaxWidth = 35;
- private int _roomMinHeight = 15;
- private int _roomMaxHeight = 30;
-
- //间隔
- private int _roomMinInterval = 6;
- private int _roomMaxInterval = 10;
-
- //房间横轴分散程度
- private float _roomHorizontalMinDispersion = 0.7f;
- private float _roomHorizontalMaxDispersion = 1.1f;
-
- //房间纵轴分散程度
- private float _roomVerticalMinDispersion = 0.7f;
- private float _roomVerticalMaxDispersion = 1.1f;
-
- //区域限制
- private bool _enableLimitRange = true;
- private int _rangeX = 110;
- private int _rangeY = 110;
-
- //找房间失败次数, 过大则会关闭区域限制
- private int _maxFailCount = 10;
- private int _failCount = 0;
-
- private enum GenerateRoomErrorCode
- {
- NoError,
- //房间已满
- RoomFull,
- //超出区域
- OutArea,
- //碰到其他房间或过道
- HasCollision,
- //没有合适的门
- NoProperDoor,
- }
-
- ///
- /// 生成房间
- ///
- public void Generate()
- {
- if (StartRoom != null) return;
-
- //第一个房间
- GenerateRoom(null, 0, out var startRoom);
- StartRoom = startRoom;
-
- //如果房间数量不够, 就一直生成
- while (_count < _maxCount)
- {
- var room = Utils.RandChoose(RoomInfos);
- var errorCode = GenerateRoom(room, Utils.RandRangeInt(0, 3), out var nextRoom);
- if (errorCode == GenerateRoomErrorCode.NoError)
- {
- _failCount = 0;
- room.Next.Add(nextRoom);
- }
- else
- {
- GD.Print("生成第" + (_count + 1) + "个房间失败! 失败原因: " + errorCode);
- if (errorCode == GenerateRoomErrorCode.OutArea)
- {
- _failCount++;
- GD.Print("超出区域失败次数: " + _failCount);
- if (_failCount >= _maxFailCount)
- {
- _enableLimitRange = false;
- GD.Print("生成房间失败次数过多, 关闭区域限制!");
- }
- }
- }
- }
-
- _roomGrid.Clear();
- }
-
- //生成房间
- private GenerateRoomErrorCode GenerateRoom(RoomInfo prevRoomInfo, int direction, out RoomInfo resultRoom)
- {
- if (_count >= _maxCount)
- {
- resultRoom = null;
- return GenerateRoomErrorCode.RoomFull;
- }
-
- var packedScene = ResourceManager.Load(
- Utils.RandChoose(
- ResourcePath.resource_map_Room1_tscn,
- ResourcePath.resource_map_Room2_tscn
- )
- );
- var template = packedScene.Instantiate();
- var room = new RoomInfo(_count, template);
-
- //房间大小
- var usedRect = template.GetUsedRect();
- room.Size = usedRect.Size;
-
- //随机生成房间 (老流程)
- // room.Size = new Vector2(Utils.RandRangeInt(_roomMinWidth, _roomMaxWidth),
- // Utils.RandRangeInt(_roomMinHeight, _roomMaxHeight));
-
- if (prevRoomInfo != null) //表示这不是第一个房间, 就得判断当前位置下的房间是否被遮挡
- {
- //房间间隔
- var space = Utils.RandRangeInt(_roomMinInterval, _roomMaxInterval);
- //中心偏移
- int offset;
- if (direction == 0 || direction == 2)
- {
- offset = Utils.RandRangeInt(-(int)(prevRoomInfo.Size.X * _roomVerticalMinDispersion),
- (int)(prevRoomInfo.Size.X * _roomVerticalMaxDispersion));
- }
- else
- {
- offset = Utils.RandRangeInt(-(int)(prevRoomInfo.Size.Y * _roomHorizontalMinDispersion),
- (int)(prevRoomInfo.Size.Y * _roomHorizontalMaxDispersion));
- }
-
- //计算房间位置
- if (direction == 0) //上
- {
- room.Position = new Vector2I(prevRoomInfo.Position.X + offset,
- prevRoomInfo.Position.Y - room.Size.Y - space);
- }
- else if (direction == 1) //右
- {
- room.Position = new Vector2I(prevRoomInfo.Position.X + prevRoomInfo.Size.Y + space,
- prevRoomInfo.Position.Y + offset);
- }
- else if (direction == 2) //下
- {
- room.Position = new Vector2I(prevRoomInfo.Position.X + offset,
- prevRoomInfo.Position.Y + prevRoomInfo.Size.Y + space);
- }
- else if (direction == 3) //左
- {
- room.Position = new Vector2I(prevRoomInfo.Position.X - room.Size.X - space,
- prevRoomInfo.Position.Y + offset);
- }
-
- //是否在限制区域内
- if (_enableLimitRange)
- {
- if (room.Position.X < -_rangeX || room.Position.X + room.Size.X > _rangeX || room.Position.Y < -_rangeY || room.Position.Y + room.Size.Y > _rangeY)
- {
- resultRoom = null;
- return GenerateRoomErrorCode.OutArea;
- }
- }
-
- //是否碰到其他房间或者过道
- if (_roomGrid.RectCollision(room.Position - new Vector2(3, 3), room.Size + new Vector2(6, 6)))
- {
- resultRoom = null;
- return GenerateRoomErrorCode.HasCollision;
- }
-
- _roomGrid.AddRect(room.Position, room.Size, true);
-
- //找门, 与上一个房间是否能连通
- if (!ConnectDoor(prevRoomInfo, room))
- {
- _roomGrid.RemoveRect(room.Position, room.Size);
- resultRoom = null;
- return GenerateRoomErrorCode.NoProperDoor;
- }
- }
-
- _count++;
- RoomInfos.Add(room);
- if (prevRoomInfo == null)
- {
- _roomGrid.AddRect(room.Position, room.Size, true);
- }
-
- //下一个房间
- //0上, 1右, 2下, 3左
- var dirList = new List(new[] { 0, 1, 2, 3 });
- if (prevRoomInfo != null)
- {
- dirList.Remove(GetReverseDirection(direction));
- }
-
- //这条线有一定概率不生成下一个房间
- if (Utils.RandRangeInt(0, 2) != 0)
- {
- while (dirList.Count > 0)
- {
- var randDir = Utils.RandChoose(dirList);
- GenerateRoom(room, randDir, out var nextRoom);
- if (nextRoom == null)
- {
- break;
- }
-
- nextRoom.Prev = room;
- room.Next.Add(nextRoom);
-
- dirList.Remove(randDir);
- }
- }
-
- resultRoom = room;
- return GenerateRoomErrorCode.NoError;
- }
-
- ///
- /// 找两个房间的门
- ///
- private bool ConnectDoor(RoomInfo room, RoomInfo nextRoom)
- {
- //门描述
- var roomDoor = new RoomDoorInfo();
- var nextRoomDoor = new RoomDoorInfo();
- roomDoor.RoomInfo = room;
- nextRoomDoor.RoomInfo = nextRoom;
- roomDoor.ConnectRoom = nextRoom;
- roomDoor.ConnectDoor = nextRoomDoor;
- nextRoomDoor.ConnectRoom = room;
- nextRoomDoor.ConnectDoor = roomDoor;
-
- var overlapX = Mathf.Min(room.Position.X + room.Size.X, nextRoom.Position.X + nextRoom.Size.X) -
- Mathf.Max(room.Position.X, nextRoom.Position.X);
- //这种情况下x轴有重叠
- if (overlapX >= 6)
- {
- //找到重叠区域
- var range = CalcOverlapRange(room.Position.X, room.Position.X + room.Size.X,
- nextRoom.Position.X, nextRoom.Position.X + nextRoom.Size.X);
- var x = Utils.RandRangeInt((int)range.X + 1, (int)range.Y - CorridorWidth - 1);
-
- if (room.Position.Y < nextRoom.Position.Y) //room在上, nextRoom在下
- {
- roomDoor.Direction = DoorDirection.S;
- nextRoomDoor.Direction = DoorDirection.N;
- roomDoor.OriginPosition = new Vector2(x, room.Position.Y + room.Size.Y);
- nextRoomDoor.OriginPosition = new Vector2(x, nextRoom.Position.Y);
- }
- else //room在下, nextRoom在上
- {
- roomDoor.Direction = DoorDirection.N;
- nextRoomDoor.Direction = DoorDirection.S;
- roomDoor.OriginPosition = new Vector2(x, room.Position.Y);
- nextRoomDoor.OriginPosition = new Vector2(x, nextRoom.Position.Y + nextRoom.Size.Y);
- }
-
- //判断门之间的通道是否有物体碰到
- if (!AddCorridorToGridRange(roomDoor, nextRoomDoor))
- {
- //此门不能连通
- return false;
- }
-
- //没有撞到物体
- room.Doors.Add(roomDoor);
- nextRoom.Doors.Add(nextRoomDoor);
- return true;
- }
-
- var overlapY = Mathf.Min(room.Position.Y + room.Size.Y, nextRoom.Position.Y + nextRoom.Size.Y) -
- Mathf.Max(room.Position.Y, nextRoom.Position.Y);
- //这种情况下y轴有重叠
- if (overlapY >= 6)
- {
- //找到重叠区域
- var range = CalcOverlapRange(room.Position.Y, room.Position.Y + room.Size.Y,
- nextRoom.Position.Y, nextRoom.Position.Y + nextRoom.Size.Y);
- var y = Utils.RandRangeInt((int)range.X + 1, (int)range.Y - CorridorWidth - 1);
-
- if (room.Position.X < nextRoom.Position.X) //room在左, nextRoom在右
- {
- roomDoor.Direction = DoorDirection.E;
- nextRoomDoor.Direction = DoorDirection.W;
- roomDoor.OriginPosition = new Vector2(room.Position.X + room.Size.X, y);
- nextRoomDoor.OriginPosition = new Vector2(nextRoom.Position.X, y);
- }
- else //room在右, nextRoom在左
- {
- roomDoor.Direction = DoorDirection.W;
- nextRoomDoor.Direction = DoorDirection.E;
- roomDoor.OriginPosition = new Vector2(room.Position.X, y);
- nextRoomDoor.OriginPosition = new Vector2(nextRoom.Position.X + nextRoom.Size.X, y);
- }
-
- //判断门之间的通道是否有物体碰到
- if (!AddCorridorToGridRange(roomDoor, nextRoomDoor))
- {
- //此门不能连通
- return false;
- }
-
- //没有撞到物体
- room.Doors.Add(roomDoor);
- nextRoom.Doors.Add(nextRoomDoor);
- return true;
- }
-
- var offset1 = Mathf.Clamp((int)overlapX + 2, 2, 6);
- var offset2 = Mathf.Clamp((int)overlapY + 2, 2, 6);
-
- //焦点
- Vector2 cross;
-
- //这种情况下x和y轴都没有重叠, 那么就只能生成拐角通道了
- if (room.Position.X > nextRoom.Position.X)
- {
- if (room.Position.Y > nextRoom.Position.Y)
- {
- if (Utils.RandBoolean())
- {
- roomDoor.Direction = DoorDirection.N; //↑
- nextRoomDoor.Direction = DoorDirection.E; //→
-
- roomDoor.OriginPosition = new Vector2(room.Position.X + offset1, room.Position.Y);
- nextRoomDoor.OriginPosition = new Vector2(nextRoom.Position.X + nextRoom.Size.X,
- nextRoom.Position.Y + nextRoom.Size.Y - offset2 - 6);
- cross = new Vector2(roomDoor.OriginPosition.X, nextRoomDoor.OriginPosition.Y);
- }
- else
- {
- roomDoor.Direction = DoorDirection.W; //←
- nextRoomDoor.Direction = DoorDirection.S; //↓
-
- roomDoor.OriginPosition = new Vector2(room.Position.X, room.Position.Y + offset2);
- nextRoomDoor.OriginPosition = new Vector2(nextRoom.Position.X + nextRoom.Size.X - offset1 - 6,
- nextRoom.Position.Y + nextRoom.Size.Y);
- cross = new Vector2(nextRoomDoor.OriginPosition.X, roomDoor.OriginPosition.Y);
- }
- }
- else
- {
- if (Utils.RandBoolean())
- {
- roomDoor.Direction = DoorDirection.S; //↓
- nextRoomDoor.Direction = DoorDirection.E; //→
-
- roomDoor.OriginPosition = new Vector2(room.Position.X + offset1, room.Position.Y + room.Size.Y);
- nextRoomDoor.OriginPosition = new Vector2(nextRoom.Position.X + nextRoom.Size.X,
- nextRoom.Position.Y + offset2);
- cross = new Vector2(roomDoor.OriginPosition.X, nextRoomDoor.OriginPosition.Y);
- }
- else
- {
- roomDoor.Direction = DoorDirection.W; //←
- nextRoomDoor.Direction = DoorDirection.N; //↑
-
- roomDoor.OriginPosition =
- new Vector2(room.Position.X, room.Position.Y + room.Size.Y - offset2 - 6); //
- nextRoomDoor.OriginPosition = new Vector2(nextRoom.Position.X + nextRoom.Size.X - offset2 - 6,
- nextRoom.Position.Y);
- cross = new Vector2(nextRoomDoor.OriginPosition.X, roomDoor.OriginPosition.Y);
- }
- }
- }
- else
- {
- if (room.Position.Y > nextRoom.Position.Y)
- {
- if (Utils.RandBoolean())
- {
- roomDoor.Direction = DoorDirection.E; //→
- nextRoomDoor.Direction = DoorDirection.S; //↓
-
- roomDoor.OriginPosition = new Vector2(room.Position.X + room.Size.X, room.Position.Y + offset2);
- nextRoomDoor.OriginPosition = new Vector2(nextRoom.Position.X + offset1,
- nextRoom.Position.Y + nextRoom.Size.Y);
- cross = new Vector2(nextRoomDoor.OriginPosition.X, roomDoor.OriginPosition.Y);
- }
- else
- {
- roomDoor.Direction = DoorDirection.N; //↑
- nextRoomDoor.Direction = DoorDirection.W; //←
-
- roomDoor.OriginPosition = new Vector2(room.Position.X + room.Size.X - offset1 - 6, room.Position.Y);
- nextRoomDoor.OriginPosition = new Vector2(nextRoom.Position.X,
- nextRoom.Position.Y + nextRoom.Size.Y - offset2 - 6);
- cross = new Vector2(roomDoor.OriginPosition.X, nextRoomDoor.OriginPosition.Y);
- }
- }
- else
- {
- if (Utils.RandBoolean())
- {
- roomDoor.Direction = DoorDirection.E; //→
- nextRoomDoor.Direction = DoorDirection.N; //↑
-
- roomDoor.OriginPosition = new Vector2(room.Position.X + room.Size.X,
- room.Position.Y + room.Size.Y - offset2 - 6);
- nextRoomDoor.OriginPosition = new Vector2(nextRoom.Position.X + offset1, nextRoom.Position.Y);
- cross = new Vector2(nextRoomDoor.OriginPosition.X, roomDoor.OriginPosition.Y);
- }
- else
- {
- roomDoor.Direction = DoorDirection.S; //↓
- nextRoomDoor.Direction = DoorDirection.W; //←
-
- roomDoor.OriginPosition = new Vector2(room.Position.X + room.Size.X - offset1 - 6,
- room.Position.Y + room.Size.Y);
- nextRoomDoor.OriginPosition = new Vector2(nextRoom.Position.X, nextRoom.Position.Y + offset2);
- cross = new Vector2(roomDoor.OriginPosition.X, nextRoomDoor.OriginPosition.Y);
- }
- }
- }
-
- //判断门之间的通道是否有物体碰到
- if (!AddCorridorToGridRange(roomDoor, nextRoomDoor, cross))
- {
- //此门不能连通
- return false;
- }
-
- roomDoor.HasCross = true;
- roomDoor.Cross = cross;
- nextRoomDoor.HasCross = true;
- nextRoomDoor.Cross = cross;
-
- room.Doors.Add(roomDoor);
- nextRoom.Doors.Add(nextRoomDoor);
- return true;
- }
-
- //用于计算重叠区域坐标, 可以理解为一维轴上4个点的中间两个点
- private Vector2 CalcOverlapRange(float start1, float end1, float start2, float end2)
- {
- return new Vector2(Mathf.Max(start1, start2), Mathf.Min(end1, end2));
- }
-
- //返回参数方向的反方向
- private int GetReverseDirection(int direction)
- {
- switch (direction)
- {
- case 0: return 2;
- case 1: return 3;
- case 2: return 0;
- case 3: return 1;
- }
-
- return 2;
- }
-
- //将两个门间的过道占用数据存入RoomGrid
- private bool AddCorridorToGridRange(RoomDoorInfo door1, RoomDoorInfo door2)
- {
- var point1 = door1.OriginPosition;
- var point2 = door2.OriginPosition;
- var pos = new Vector2(Mathf.Min(point1.X, point2.X), Mathf.Min(point1.Y, point2.Y));
- var size = new Vector2(
- point1.X == point2.X ? CorridorWidth : Mathf.Abs(point1.X - point2.X),
- point1.Y == point2.Y ? CorridorWidth : Mathf.Abs(point1.Y - point2.Y)
- );
-
- Vector2 collPos;
- Vector2 collSize;
- if (point1.X == point2.X) //纵向加宽, 防止贴到其它墙
- {
- collPos = new Vector2(pos.X - 3, pos.Y);
- collSize = new Vector2(size.X + 6, size.Y);
- }
- else //横向加宽, 防止贴到其它墙
- {
- collPos = new Vector2(pos.X, pos.Y - 3);
- collSize = new Vector2(size.X, size.Y + 6);
- }
-
- if (_roomGrid.RectCollision(collPos, collSize))
- {
- return false;
- }
-
- _roomGrid.AddRect(pos, size, true);
- return true;
- }
-
- //将两个门间的过道占用数据存入RoomGrid, 该重载
- private bool AddCorridorToGridRange(RoomDoorInfo door1, RoomDoorInfo door2, Vector2 cross)
- {
- var point1 = door1.OriginPosition;
- var point2 = door2.OriginPosition;
- var pos1 = new Vector2(Mathf.Min(point1.X, cross.X), Mathf.Min(point1.Y, cross.Y));
- var size1 = new Vector2(
- point1.X == cross.X ? CorridorWidth : Mathf.Abs(point1.X - cross.X),
- point1.Y == cross.Y ? CorridorWidth : Mathf.Abs(point1.Y - cross.Y)
- );
- var pos2 = new Vector2(Mathf.Min(point2.X, cross.X), Mathf.Min(point2.Y, cross.Y));
- var size2 = new Vector2(
- point2.X == cross.X ? CorridorWidth : Mathf.Abs(point2.X - cross.X),
- point2.Y == cross.Y ? CorridorWidth : Mathf.Abs(point2.Y - cross.Y)
- );
-
- Vector2 collPos1;
- Vector2 collSize1;
- if (point1.X == cross.X) //纵向加宽, 防止贴到其它墙
- {
- collPos1 = new Vector2(pos1.X - 3, pos1.Y);
- collSize1 = new Vector2(size1.X + 6, size1.Y);
- }
- else //横向加宽, 防止贴到其它墙
- {
- collPos1 = new Vector2(pos1.X, pos1.Y - 3);
- collSize1 = new Vector2(size1.X, size1.Y + 6);
- }
-
- if (_roomGrid.RectCollision(collPos1, collSize1))
- {
- return false;
- }
-
- Vector2 collPos2;
- Vector2 collSize2;
- if (point2.X == cross.X) //纵向加宽, 防止贴到其它墙
- {
- collPos2 = new Vector2(pos2.X - 3, pos2.Y);
- collSize2 = new Vector2(size2.X + 6, size2.Y);
- }
- else //横向加宽, 防止贴到其它墙
- {
- collPos2 = new Vector2(pos2.X, pos2.Y - 3);
- collSize2 = new Vector2(size2.X, size2.Y + 6);
- }
-
- if (_roomGrid.RectCollision(collPos2, collSize2))
- {
- return false;
- }
-
- _roomGrid.AddRect(pos1, size1, true);
- _roomGrid.AddRect(pos2, size2, true);
- return true;
- }
-}
\ No newline at end of file
diff --git a/DungeonShooting_Godot/src/framework/generate/RoomDoorInfo.cs b/DungeonShooting_Godot/src/framework/generate/RoomDoorInfo.cs
deleted file mode 100644
index cd5d539..0000000
--- a/DungeonShooting_Godot/src/framework/generate/RoomDoorInfo.cs
+++ /dev/null
@@ -1,43 +0,0 @@
-
-using Godot;
-
-///
-/// 房间的门
-///
-public class RoomDoorInfo
-{
- ///
- /// 所在墙面方向
- ///
- public DoorDirection Direction;
-
- ///
- /// 所在的房间
- ///
- public RoomInfo RoomInfo;
-
- ///
- /// 连接的门
- ///
- public RoomDoorInfo ConnectDoor;
-
- ///
- /// 连接的房间
- ///
- public RoomInfo ConnectRoom;
-
- ///
- /// 原点坐标
- ///
- public Vector2 OriginPosition;
-
- ///
- /// 与下一道门是否有交叉点
- ///
- public bool HasCross;
-
- ///
- /// 与下一道门的交叉点
- ///
- public Vector2 Cross;
-}
\ No newline at end of file
diff --git a/DungeonShooting_Godot/src/framework/generate/RoomInfo.cs b/DungeonShooting_Godot/src/framework/generate/RoomInfo.cs
deleted file mode 100644
index 8a3771c..0000000
--- a/DungeonShooting_Godot/src/framework/generate/RoomInfo.cs
+++ /dev/null
@@ -1,50 +0,0 @@
-
-using System.Collections.Generic;
-using Godot;
-
-///
-/// 房间的数据描述
-///
-public class RoomInfo
-{
- public RoomInfo(int id, TileMap tileMap)
- {
- Id = id;
- Template = tileMap;
- }
-
- ///
- /// 房间 id
- ///
- public int Id;
-
- ///
- /// 生成该房间使用的模板
- ///
- public TileMap Template;
-
- ///
- /// 房间大小
- ///
- public Vector2I Size;
-
- ///
- /// 房间位置
- ///
- public Vector2I Position;
-
- ///
- /// 门
- ///
- public List Doors = new List();
-
- ///
- /// 下一个房间
- ///
- public List Next = new List();
-
- ///
- /// 上一个房间
- ///
- public RoomInfo Prev;
-}
\ No newline at end of file
diff --git a/DungeonShooting_Godot/src/framework/map/DoorConnectArea.cs b/DungeonShooting_Godot/src/framework/map/DoorConnectArea.cs
new file mode 100644
index 0000000..8bd99ff
--- /dev/null
+++ b/DungeonShooting_Godot/src/framework/map/DoorConnectArea.cs
@@ -0,0 +1,16 @@
+
+using Godot;
+
+[Tool]
+public partial class DoorConnectArea : Node2D
+{
+ public override void _Process(double delta)
+ {
+ //QueueRedraw();
+ }
+
+ public override void _Draw()
+ {
+ //DrawLine(Vector2.Zero, GetLocalMousePosition(), Colors.Red);
+ }
+}
\ No newline at end of file
diff --git a/DungeonShooting_Godot/src/framework/map/DoorDirection.cs b/DungeonShooting_Godot/src/framework/map/DoorDirection.cs
new file mode 100644
index 0000000..7fc45a0
--- /dev/null
+++ b/DungeonShooting_Godot/src/framework/map/DoorDirection.cs
@@ -0,0 +1,23 @@
+
+///
+/// 房间门的朝向
+///
+public enum DoorDirection
+{
+ ///
+ /// 东
+ ///
+ E,
+ ///
+ /// 西
+ ///
+ W,
+ ///
+ /// 南
+ ///
+ S,
+ ///
+ /// 北
+ ///
+ N,
+}
\ No newline at end of file
diff --git a/DungeonShooting_Godot/src/framework/map/GenerateDungeon.cs b/DungeonShooting_Godot/src/framework/map/GenerateDungeon.cs
new file mode 100644
index 0000000..3b264a6
--- /dev/null
+++ b/DungeonShooting_Godot/src/framework/map/GenerateDungeon.cs
@@ -0,0 +1,571 @@
+
+using System.Collections.Generic;
+using Godot;
+
+///
+/// 地牢生成器
+///
+public class GenerateDungeon
+{
+ ///
+ /// 过道宽度
+ ///
+ public const int CorridorWidth = 4;
+
+ ///
+ /// 所有生成的房间, 调用过 Generate() 函数才能获取到值
+ ///
+ public List RoomInfos { get; } = new List();
+
+ ///
+ /// 起始房间
+ ///
+ public RoomInfo StartRoom { get; private set; }
+
+ ///
+ /// 生成的房间数量
+ ///
+ private int _maxCount = 15;
+
+ //用于标记地图上的坐标是否被占用
+ private Grid _roomGrid { get; } = new Grid();
+
+ //当前房间数量
+ private int _count = 0;
+
+ //宽高
+ private int _roomMinWidth = 15;
+ private int _roomMaxWidth = 35;
+ private int _roomMinHeight = 15;
+ private int _roomMaxHeight = 30;
+
+ //间隔
+ private int _roomMinInterval = 6;
+ private int _roomMaxInterval = 10;
+
+ //房间横轴分散程度
+ private float _roomHorizontalMinDispersion = 0.7f;
+ private float _roomHorizontalMaxDispersion = 1.1f;
+
+ //房间纵轴分散程度
+ private float _roomVerticalMinDispersion = 0.7f;
+ private float _roomVerticalMaxDispersion = 1.1f;
+
+ //区域限制
+ private bool _enableLimitRange = true;
+ private int _rangeX = 110;
+ private int _rangeY = 110;
+
+ //找房间失败次数, 过大则会关闭区域限制
+ private int _maxFailCount = 10;
+ private int _failCount = 0;
+
+ private enum GenerateRoomErrorCode
+ {
+ NoError,
+ //房间已满
+ RoomFull,
+ //超出区域
+ OutArea,
+ //碰到其他房间或过道
+ HasCollision,
+ //没有合适的门
+ NoProperDoor,
+ }
+
+ ///
+ /// 生成房间
+ ///
+ public void Generate()
+ {
+ if (StartRoom != null) return;
+
+ //第一个房间
+ GenerateRoom(null, 0, out var startRoom);
+ StartRoom = startRoom;
+
+ //如果房间数量不够, 就一直生成
+ while (_count < _maxCount)
+ {
+ var room = Utils.RandChoose(RoomInfos);
+ var errorCode = GenerateRoom(room, Utils.RandRangeInt(0, 3), out var nextRoom);
+ if (errorCode == GenerateRoomErrorCode.NoError)
+ {
+ _failCount = 0;
+ room.Next.Add(nextRoom);
+ }
+ else
+ {
+ GD.Print("生成第" + (_count + 1) + "个房间失败! 失败原因: " + errorCode);
+ if (errorCode == GenerateRoomErrorCode.OutArea)
+ {
+ _failCount++;
+ GD.Print("超出区域失败次数: " + _failCount);
+ if (_failCount >= _maxFailCount)
+ {
+ _enableLimitRange = false;
+ GD.Print("生成房间失败次数过多, 关闭区域限制!");
+ }
+ }
+ }
+ }
+
+ _roomGrid.Clear();
+ }
+
+ //生成房间
+ private GenerateRoomErrorCode GenerateRoom(RoomInfo prevRoomInfo, int direction, out RoomInfo resultRoom)
+ {
+ if (_count >= _maxCount)
+ {
+ resultRoom = null;
+ return GenerateRoomErrorCode.RoomFull;
+ }
+
+ var packedScene = ResourceManager.Load(
+ Utils.RandChoose(
+ ResourcePath.resource_map_Room1_tscn,
+ ResourcePath.resource_map_Room2_tscn
+ )
+ );
+ var template = packedScene.Instantiate();
+ var room = new RoomInfo(_count, template);
+
+ //房间大小
+ var usedRect = template.GetUsedRect();
+ room.Size = usedRect.Size;
+
+ //随机生成房间 (老流程)
+ // room.Size = new Vector2(Utils.RandRangeInt(_roomMinWidth, _roomMaxWidth),
+ // Utils.RandRangeInt(_roomMinHeight, _roomMaxHeight));
+
+ if (prevRoomInfo != null) //表示这不是第一个房间, 就得判断当前位置下的房间是否被遮挡
+ {
+ //房间间隔
+ var space = Utils.RandRangeInt(_roomMinInterval, _roomMaxInterval);
+ //中心偏移
+ int offset;
+ if (direction == 0 || direction == 2)
+ {
+ offset = Utils.RandRangeInt(-(int)(prevRoomInfo.Size.X * _roomVerticalMinDispersion),
+ (int)(prevRoomInfo.Size.X * _roomVerticalMaxDispersion));
+ }
+ else
+ {
+ offset = Utils.RandRangeInt(-(int)(prevRoomInfo.Size.Y * _roomHorizontalMinDispersion),
+ (int)(prevRoomInfo.Size.Y * _roomHorizontalMaxDispersion));
+ }
+
+ //计算房间位置
+ if (direction == 0) //上
+ {
+ room.Position = new Vector2I(prevRoomInfo.Position.X + offset,
+ prevRoomInfo.Position.Y - room.Size.Y - space);
+ }
+ else if (direction == 1) //右
+ {
+ room.Position = new Vector2I(prevRoomInfo.Position.X + prevRoomInfo.Size.Y + space,
+ prevRoomInfo.Position.Y + offset);
+ }
+ else if (direction == 2) //下
+ {
+ room.Position = new Vector2I(prevRoomInfo.Position.X + offset,
+ prevRoomInfo.Position.Y + prevRoomInfo.Size.Y + space);
+ }
+ else if (direction == 3) //左
+ {
+ room.Position = new Vector2I(prevRoomInfo.Position.X - room.Size.X - space,
+ prevRoomInfo.Position.Y + offset);
+ }
+
+ //是否在限制区域内
+ if (_enableLimitRange)
+ {
+ if (room.Position.X < -_rangeX || room.Position.X + room.Size.X > _rangeX || room.Position.Y < -_rangeY || room.Position.Y + room.Size.Y > _rangeY)
+ {
+ resultRoom = null;
+ return GenerateRoomErrorCode.OutArea;
+ }
+ }
+
+ //是否碰到其他房间或者过道
+ if (_roomGrid.RectCollision(room.Position - new Vector2(3, 3), room.Size + new Vector2(6, 6)))
+ {
+ resultRoom = null;
+ return GenerateRoomErrorCode.HasCollision;
+ }
+
+ _roomGrid.AddRect(room.Position, room.Size, true);
+
+ //找门, 与上一个房间是否能连通
+ if (!ConnectDoor(prevRoomInfo, room))
+ {
+ _roomGrid.RemoveRect(room.Position, room.Size);
+ resultRoom = null;
+ return GenerateRoomErrorCode.NoProperDoor;
+ }
+ }
+
+ _count++;
+ RoomInfos.Add(room);
+ if (prevRoomInfo == null)
+ {
+ _roomGrid.AddRect(room.Position, room.Size, true);
+ }
+
+ //下一个房间
+ //0上, 1右, 2下, 3左
+ var dirList = new List(new[] { 0, 1, 2, 3 });
+ if (prevRoomInfo != null)
+ {
+ dirList.Remove(GetReverseDirection(direction));
+ }
+
+ //这条线有一定概率不生成下一个房间
+ if (Utils.RandRangeInt(0, 2) != 0)
+ {
+ while (dirList.Count > 0)
+ {
+ var randDir = Utils.RandChoose(dirList);
+ GenerateRoom(room, randDir, out var nextRoom);
+ if (nextRoom == null)
+ {
+ break;
+ }
+
+ nextRoom.Prev = room;
+ room.Next.Add(nextRoom);
+
+ dirList.Remove(randDir);
+ }
+ }
+
+ resultRoom = room;
+ return GenerateRoomErrorCode.NoError;
+ }
+
+ ///
+ /// 找两个房间的门
+ ///
+ private bool ConnectDoor(RoomInfo room, RoomInfo nextRoom)
+ {
+ //门描述
+ var roomDoor = new RoomDoorInfo();
+ var nextRoomDoor = new RoomDoorInfo();
+ roomDoor.RoomInfo = room;
+ nextRoomDoor.RoomInfo = nextRoom;
+ roomDoor.ConnectRoom = nextRoom;
+ roomDoor.ConnectDoor = nextRoomDoor;
+ nextRoomDoor.ConnectRoom = room;
+ nextRoomDoor.ConnectDoor = roomDoor;
+
+ var overlapX = Mathf.Min(room.Position.X + room.Size.X, nextRoom.Position.X + nextRoom.Size.X) -
+ Mathf.Max(room.Position.X, nextRoom.Position.X);
+ //这种情况下x轴有重叠
+ if (overlapX >= 6)
+ {
+ //找到重叠区域
+ var range = CalcOverlapRange(room.Position.X, room.Position.X + room.Size.X,
+ nextRoom.Position.X, nextRoom.Position.X + nextRoom.Size.X);
+ var x = Utils.RandRangeInt((int)range.X + 1, (int)range.Y - CorridorWidth - 1);
+
+ if (room.Position.Y < nextRoom.Position.Y) //room在上, nextRoom在下
+ {
+ roomDoor.Direction = DoorDirection.S;
+ nextRoomDoor.Direction = DoorDirection.N;
+ roomDoor.OriginPosition = new Vector2(x, room.Position.Y + room.Size.Y);
+ nextRoomDoor.OriginPosition = new Vector2(x, nextRoom.Position.Y);
+ }
+ else //room在下, nextRoom在上
+ {
+ roomDoor.Direction = DoorDirection.N;
+ nextRoomDoor.Direction = DoorDirection.S;
+ roomDoor.OriginPosition = new Vector2(x, room.Position.Y);
+ nextRoomDoor.OriginPosition = new Vector2(x, nextRoom.Position.Y + nextRoom.Size.Y);
+ }
+
+ //判断门之间的通道是否有物体碰到
+ if (!AddCorridorToGridRange(roomDoor, nextRoomDoor))
+ {
+ //此门不能连通
+ return false;
+ }
+
+ //没有撞到物体
+ room.Doors.Add(roomDoor);
+ nextRoom.Doors.Add(nextRoomDoor);
+ return true;
+ }
+
+ var overlapY = Mathf.Min(room.Position.Y + room.Size.Y, nextRoom.Position.Y + nextRoom.Size.Y) -
+ Mathf.Max(room.Position.Y, nextRoom.Position.Y);
+ //这种情况下y轴有重叠
+ if (overlapY >= 6)
+ {
+ //找到重叠区域
+ var range = CalcOverlapRange(room.Position.Y, room.Position.Y + room.Size.Y,
+ nextRoom.Position.Y, nextRoom.Position.Y + nextRoom.Size.Y);
+ var y = Utils.RandRangeInt((int)range.X + 1, (int)range.Y - CorridorWidth - 1);
+
+ if (room.Position.X < nextRoom.Position.X) //room在左, nextRoom在右
+ {
+ roomDoor.Direction = DoorDirection.E;
+ nextRoomDoor.Direction = DoorDirection.W;
+ roomDoor.OriginPosition = new Vector2(room.Position.X + room.Size.X, y);
+ nextRoomDoor.OriginPosition = new Vector2(nextRoom.Position.X, y);
+ }
+ else //room在右, nextRoom在左
+ {
+ roomDoor.Direction = DoorDirection.W;
+ nextRoomDoor.Direction = DoorDirection.E;
+ roomDoor.OriginPosition = new Vector2(room.Position.X, y);
+ nextRoomDoor.OriginPosition = new Vector2(nextRoom.Position.X + nextRoom.Size.X, y);
+ }
+
+ //判断门之间的通道是否有物体碰到
+ if (!AddCorridorToGridRange(roomDoor, nextRoomDoor))
+ {
+ //此门不能连通
+ return false;
+ }
+
+ //没有撞到物体
+ room.Doors.Add(roomDoor);
+ nextRoom.Doors.Add(nextRoomDoor);
+ return true;
+ }
+
+ var offset1 = Mathf.Clamp((int)overlapX + 2, 2, 6);
+ var offset2 = Mathf.Clamp((int)overlapY + 2, 2, 6);
+
+ //焦点
+ Vector2 cross;
+
+ //这种情况下x和y轴都没有重叠, 那么就只能生成拐角通道了
+ if (room.Position.X > nextRoom.Position.X)
+ {
+ if (room.Position.Y > nextRoom.Position.Y)
+ {
+ if (Utils.RandBoolean())
+ {
+ roomDoor.Direction = DoorDirection.N; //↑
+ nextRoomDoor.Direction = DoorDirection.E; //→
+
+ roomDoor.OriginPosition = new Vector2(room.Position.X + offset1, room.Position.Y);
+ nextRoomDoor.OriginPosition = new Vector2(nextRoom.Position.X + nextRoom.Size.X,
+ nextRoom.Position.Y + nextRoom.Size.Y - offset2 - 6);
+ cross = new Vector2(roomDoor.OriginPosition.X, nextRoomDoor.OriginPosition.Y);
+ }
+ else
+ {
+ roomDoor.Direction = DoorDirection.W; //←
+ nextRoomDoor.Direction = DoorDirection.S; //↓
+
+ roomDoor.OriginPosition = new Vector2(room.Position.X, room.Position.Y + offset2);
+ nextRoomDoor.OriginPosition = new Vector2(nextRoom.Position.X + nextRoom.Size.X - offset1 - 6,
+ nextRoom.Position.Y + nextRoom.Size.Y);
+ cross = new Vector2(nextRoomDoor.OriginPosition.X, roomDoor.OriginPosition.Y);
+ }
+ }
+ else
+ {
+ if (Utils.RandBoolean())
+ {
+ roomDoor.Direction = DoorDirection.S; //↓
+ nextRoomDoor.Direction = DoorDirection.E; //→
+
+ roomDoor.OriginPosition = new Vector2(room.Position.X + offset1, room.Position.Y + room.Size.Y);
+ nextRoomDoor.OriginPosition = new Vector2(nextRoom.Position.X + nextRoom.Size.X,
+ nextRoom.Position.Y + offset2);
+ cross = new Vector2(roomDoor.OriginPosition.X, nextRoomDoor.OriginPosition.Y);
+ }
+ else
+ {
+ roomDoor.Direction = DoorDirection.W; //←
+ nextRoomDoor.Direction = DoorDirection.N; //↑
+
+ roomDoor.OriginPosition =
+ new Vector2(room.Position.X, room.Position.Y + room.Size.Y - offset2 - 6); //
+ nextRoomDoor.OriginPosition = new Vector2(nextRoom.Position.X + nextRoom.Size.X - offset2 - 6,
+ nextRoom.Position.Y);
+ cross = new Vector2(nextRoomDoor.OriginPosition.X, roomDoor.OriginPosition.Y);
+ }
+ }
+ }
+ else
+ {
+ if (room.Position.Y > nextRoom.Position.Y)
+ {
+ if (Utils.RandBoolean())
+ {
+ roomDoor.Direction = DoorDirection.E; //→
+ nextRoomDoor.Direction = DoorDirection.S; //↓
+
+ roomDoor.OriginPosition = new Vector2(room.Position.X + room.Size.X, room.Position.Y + offset2);
+ nextRoomDoor.OriginPosition = new Vector2(nextRoom.Position.X + offset1,
+ nextRoom.Position.Y + nextRoom.Size.Y);
+ cross = new Vector2(nextRoomDoor.OriginPosition.X, roomDoor.OriginPosition.Y);
+ }
+ else
+ {
+ roomDoor.Direction = DoorDirection.N; //↑
+ nextRoomDoor.Direction = DoorDirection.W; //←
+
+ roomDoor.OriginPosition = new Vector2(room.Position.X + room.Size.X - offset1 - 6, room.Position.Y);
+ nextRoomDoor.OriginPosition = new Vector2(nextRoom.Position.X,
+ nextRoom.Position.Y + nextRoom.Size.Y - offset2 - 6);
+ cross = new Vector2(roomDoor.OriginPosition.X, nextRoomDoor.OriginPosition.Y);
+ }
+ }
+ else
+ {
+ if (Utils.RandBoolean())
+ {
+ roomDoor.Direction = DoorDirection.E; //→
+ nextRoomDoor.Direction = DoorDirection.N; //↑
+
+ roomDoor.OriginPosition = new Vector2(room.Position.X + room.Size.X,
+ room.Position.Y + room.Size.Y - offset2 - 6);
+ nextRoomDoor.OriginPosition = new Vector2(nextRoom.Position.X + offset1, nextRoom.Position.Y);
+ cross = new Vector2(nextRoomDoor.OriginPosition.X, roomDoor.OriginPosition.Y);
+ }
+ else
+ {
+ roomDoor.Direction = DoorDirection.S; //↓
+ nextRoomDoor.Direction = DoorDirection.W; //←
+
+ roomDoor.OriginPosition = new Vector2(room.Position.X + room.Size.X - offset1 - 6,
+ room.Position.Y + room.Size.Y);
+ nextRoomDoor.OriginPosition = new Vector2(nextRoom.Position.X, nextRoom.Position.Y + offset2);
+ cross = new Vector2(roomDoor.OriginPosition.X, nextRoomDoor.OriginPosition.Y);
+ }
+ }
+ }
+
+ //判断门之间的通道是否有物体碰到
+ if (!AddCorridorToGridRange(roomDoor, nextRoomDoor, cross))
+ {
+ //此门不能连通
+ return false;
+ }
+
+ roomDoor.HasCross = true;
+ roomDoor.Cross = cross;
+ nextRoomDoor.HasCross = true;
+ nextRoomDoor.Cross = cross;
+
+ room.Doors.Add(roomDoor);
+ nextRoom.Doors.Add(nextRoomDoor);
+ return true;
+ }
+
+ //用于计算重叠区域坐标, 可以理解为一维轴上4个点的中间两个点
+ private Vector2 CalcOverlapRange(float start1, float end1, float start2, float end2)
+ {
+ return new Vector2(Mathf.Max(start1, start2), Mathf.Min(end1, end2));
+ }
+
+ //返回参数方向的反方向
+ private int GetReverseDirection(int direction)
+ {
+ switch (direction)
+ {
+ case 0: return 2;
+ case 1: return 3;
+ case 2: return 0;
+ case 3: return 1;
+ }
+
+ return 2;
+ }
+
+ //将两个门间的过道占用数据存入RoomGrid
+ private bool AddCorridorToGridRange(RoomDoorInfo door1, RoomDoorInfo door2)
+ {
+ var point1 = door1.OriginPosition;
+ var point2 = door2.OriginPosition;
+ var pos = new Vector2(Mathf.Min(point1.X, point2.X), Mathf.Min(point1.Y, point2.Y));
+ var size = new Vector2(
+ point1.X == point2.X ? CorridorWidth : Mathf.Abs(point1.X - point2.X),
+ point1.Y == point2.Y ? CorridorWidth : Mathf.Abs(point1.Y - point2.Y)
+ );
+
+ Vector2 collPos;
+ Vector2 collSize;
+ if (point1.X == point2.X) //纵向加宽, 防止贴到其它墙
+ {
+ collPos = new Vector2(pos.X - 3, pos.Y);
+ collSize = new Vector2(size.X + 6, size.Y);
+ }
+ else //横向加宽, 防止贴到其它墙
+ {
+ collPos = new Vector2(pos.X, pos.Y - 3);
+ collSize = new Vector2(size.X, size.Y + 6);
+ }
+
+ if (_roomGrid.RectCollision(collPos, collSize))
+ {
+ return false;
+ }
+
+ _roomGrid.AddRect(pos, size, true);
+ return true;
+ }
+
+ //将两个门间的过道占用数据存入RoomGrid, 该重载
+ private bool AddCorridorToGridRange(RoomDoorInfo door1, RoomDoorInfo door2, Vector2 cross)
+ {
+ var point1 = door1.OriginPosition;
+ var point2 = door2.OriginPosition;
+ var pos1 = new Vector2(Mathf.Min(point1.X, cross.X), Mathf.Min(point1.Y, cross.Y));
+ var size1 = new Vector2(
+ point1.X == cross.X ? CorridorWidth : Mathf.Abs(point1.X - cross.X),
+ point1.Y == cross.Y ? CorridorWidth : Mathf.Abs(point1.Y - cross.Y)
+ );
+ var pos2 = new Vector2(Mathf.Min(point2.X, cross.X), Mathf.Min(point2.Y, cross.Y));
+ var size2 = new Vector2(
+ point2.X == cross.X ? CorridorWidth : Mathf.Abs(point2.X - cross.X),
+ point2.Y == cross.Y ? CorridorWidth : Mathf.Abs(point2.Y - cross.Y)
+ );
+
+ Vector2 collPos1;
+ Vector2 collSize1;
+ if (point1.X == cross.X) //纵向加宽, 防止贴到其它墙
+ {
+ collPos1 = new Vector2(pos1.X - 3, pos1.Y);
+ collSize1 = new Vector2(size1.X + 6, size1.Y);
+ }
+ else //横向加宽, 防止贴到其它墙
+ {
+ collPos1 = new Vector2(pos1.X, pos1.Y - 3);
+ collSize1 = new Vector2(size1.X, size1.Y + 6);
+ }
+
+ if (_roomGrid.RectCollision(collPos1, collSize1))
+ {
+ return false;
+ }
+
+ Vector2 collPos2;
+ Vector2 collSize2;
+ if (point2.X == cross.X) //纵向加宽, 防止贴到其它墙
+ {
+ collPos2 = new Vector2(pos2.X - 3, pos2.Y);
+ collSize2 = new Vector2(size2.X + 6, size2.Y);
+ }
+ else //横向加宽, 防止贴到其它墙
+ {
+ collPos2 = new Vector2(pos2.X, pos2.Y - 3);
+ collSize2 = new Vector2(size2.X, size2.Y + 6);
+ }
+
+ if (_roomGrid.RectCollision(collPos2, collSize2))
+ {
+ return false;
+ }
+
+ _roomGrid.AddRect(pos1, size1, true);
+ _roomGrid.AddRect(pos2, size2, true);
+ return true;
+ }
+}
\ No newline at end of file
diff --git a/DungeonShooting_Godot/src/framework/map/RoomDoorInfo.cs b/DungeonShooting_Godot/src/framework/map/RoomDoorInfo.cs
new file mode 100644
index 0000000..cd5d539
--- /dev/null
+++ b/DungeonShooting_Godot/src/framework/map/RoomDoorInfo.cs
@@ -0,0 +1,43 @@
+
+using Godot;
+
+///
+/// 房间的门
+///
+public class RoomDoorInfo
+{
+ ///
+ /// 所在墙面方向
+ ///
+ public DoorDirection Direction;
+
+ ///
+ /// 所在的房间
+ ///
+ public RoomInfo RoomInfo;
+
+ ///
+ /// 连接的门
+ ///
+ public RoomDoorInfo ConnectDoor;
+
+ ///
+ /// 连接的房间
+ ///
+ public RoomInfo ConnectRoom;
+
+ ///
+ /// 原点坐标
+ ///
+ public Vector2 OriginPosition;
+
+ ///
+ /// 与下一道门是否有交叉点
+ ///
+ public bool HasCross;
+
+ ///
+ /// 与下一道门的交叉点
+ ///
+ public Vector2 Cross;
+}
\ No newline at end of file
diff --git a/DungeonShooting_Godot/src/framework/map/RoomInfo.cs b/DungeonShooting_Godot/src/framework/map/RoomInfo.cs
new file mode 100644
index 0000000..8a3771c
--- /dev/null
+++ b/DungeonShooting_Godot/src/framework/map/RoomInfo.cs
@@ -0,0 +1,50 @@
+
+using System.Collections.Generic;
+using Godot;
+
+///
+/// 房间的数据描述
+///
+public class RoomInfo
+{
+ public RoomInfo(int id, TileMap tileMap)
+ {
+ Id = id;
+ Template = tileMap;
+ }
+
+ ///
+ /// 房间 id
+ ///
+ public int Id;
+
+ ///
+ /// 生成该房间使用的模板
+ ///
+ public TileMap Template;
+
+ ///
+ /// 房间大小
+ ///
+ public Vector2I Size;
+
+ ///
+ /// 房间位置
+ ///
+ public Vector2I Position;
+
+ ///
+ /// 门
+ ///
+ public List Doors = new List();
+
+ ///
+ /// 下一个房间
+ ///
+ public List Next = new List();
+
+ ///
+ /// 上一个房间
+ ///
+ public RoomInfo Prev;
+}
\ No newline at end of file
diff --git a/DungeonShooting_Godot/src/game/room/DungeonTileManager.cs b/DungeonShooting_Godot/src/game/room/DungeonTileManager.cs
index a07803c..9407cad 100644
--- a/DungeonShooting_Godot/src/game/room/DungeonTileManager.cs
+++ b/DungeonShooting_Godot/src/game/room/DungeonTileManager.cs
@@ -48,6 +48,8 @@
tileMap.SetCell(floorLayer, new Vector2I(roomInfo.Position.X + i, roomInfo.Position.Y + j), 1, atlasCoords);
}
}
+ roomInfo.Template.QueueFree();
+ roomInfo.Template = null;
}
//铺过道