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; } //铺过道