From c5c8360b57fda2e1815760c0ebcef1d810b1a94d Mon Sep 17 00:00:00 2001 From: chendian <-> Date: Tue, 4 Feb 2025 21:17:21 +0800 Subject: [PATCH] =?UTF-8?q?=E5=AD=98=E6=A1=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- render/shader/level_grid_block.gdshader | 23 +-- scene/level/level.tscn | 17 ++- script/_global/util.gd | 5 + script/level/level.gd | 8 +- script/level/level_instance.gd | 188 ++++++++++++++++++------ script/manager/level_manager.gd | 13 +- 6 files changed, 192 insertions(+), 62 deletions(-) diff --git a/render/shader/level_grid_block.gdshader b/render/shader/level_grid_block.gdshader index af8eadd..c82ff89 100644 --- a/render/shader/level_grid_block.gdshader +++ b/render/shader/level_grid_block.gdshader @@ -1,7 +1,9 @@ shader_type spatial; uniform bool is_target = false; +uniform bool is_focus = false; uniform vec3 target_position = vec3(0, 1.28, 1); -uniform bool show_air_wall = true; +uniform vec3 focus_min = vec3(0,0,0); +uniform vec3 focus_max = vec3(0,0,0); varying vec3 world_position; varying vec2 uv1; varying vec2 uv2; @@ -16,16 +18,22 @@ void vertex() uv2 = local_uv / 32.0; } +bool is_in_focus(vec3 f_min,vec3 f_max){ + if(world_position.z>f_max.z){return false;} + if(world_position.y>f_max.y){return false;} + return true; +} + void fragment() { + if (is_focus && !is_in_focus(focus_min,focus_max)){ + discard; + } + vec3 c = COLOR.rgb; if(c.r+c.g+c.b<0.1){ ALBEDO = vec3(0.0); }else if(c.r+c.g+c.b>2.9){ - if(show_air_wall){ - ALBEDO = vec3(1.0); - }else{ - discard; - } + discard; }else{ float brightness = 1.0; if(is_target){ @@ -41,9 +49,6 @@ void fragment() { if(!is_light && world_normal.y<0.1){ brightness = brightness*0.6; } - if(show_air_wall){ - brightness = 1.0; - } float noise_value1 = texture(tex_noise1,floor(uv1 /0.02) *0.02).r; float discrete_noise_value1 = floor(noise_value1 / 0.5) * 0.5; diff --git a/scene/level/level.tscn b/scene/level/level.tscn index a1da5b8..76ad274 100644 --- a/scene/level/level.tscn +++ b/scene/level/level.tscn @@ -18,12 +18,13 @@ script = ExtResource("1_h6f14") [node name="LevelGridMain" type="GridMap" parent="."] +unique_name_in_owner = true transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0.64, 0.64, 0.64) mesh_library = ExtResource("1_am8tr") cell_size = Vector3(1.28, 1.28, 1.28) cell_center_y = false data = { -"cells": PackedInt32Array(-1, 1, 2, -1, 2, 2, -65536, 1, 2, -65536, 2, 2, -65535, 1, 2, -65535, 2, 2, -65534, 1, 2, -65534, 2, 2, -65533, 1, 2, -65533, 2, 2, -65532, 1, 2, -65532, 2, 2, -65531, 1, 2, -65531, 2, 2, -65530, 1, 2, -65530, 2, 2, -65529, 1, 2, -65529, 2, 2, -65528, 1, 2, -65528, 2, 2, -65527, 1, 2, 9, 1, 2, 65535, 1, 2, 65535, 2, 2, 0, 1, 2, 1, 1, 2, 2, 1, 2, 3, 1, 2, 4, 1, 2, 5, 1, 2, 6, 1, 2, 7, 1, 2, 8, 1, 2, 131071, 1, 2, 65536, 1, 2, 65537, 1, 2, 65538, 1, 2, 65539, 1, 2, 65540, 1, 2, 65541, 1, 2, 65542, 1, 2, 65543, 1, 2, 65544, 1, 2, 65545, 1, 2, 196607, 1, 2, 131072, 1, 2, 131073, 1, 2, 131074, 1, 2, 131075, 1, 2, 131076, 1, 2, 131077, 1, 2, 131078, 1, 2, 131079, 1, 2, 131080, 1, 2, 131081, 1, 2, -1, 3, 2, -65536, 3, 2, -65535, 3, 2, -65534, 3, 2, -65533, 3, 2, -65532, 3, 2, -65531, 3, 2, -65530, 3, 2, -65529, 3, 2, -65528, 3, 2, 65535, 3, 2, 131071, 2, 2, 131071, 3, 2, 196607, 2, 2, 196607, 3, 2, 196617, 1, 2, 196616, 1, 2, 196615, 1, 2, 196614, 1, 2, 196613, 1, 2, 196612, 1, 2, 196611, 1, 2, 196610, 1, 2, 196609, 1, 2, 196608, 1, 2, 262143, 1, 2, 262143, 2, 2, 262143, 3, 2, -65527, 2, 2, -65527, 3, 2, -65526, 2, 2, -65526, 3, 2, -65525, 2, 2, -65525, 3, 2, -65524, 2, 2, -65524, 3, 2, -65523, 2, 2, -65523, 3, 2, -65522, 2, 2, -65522, 3, 2, -65521, 2, 2, -65520, 2, 2, -65519, 2, 655362, -65518, 2, 2, -65517, 2, 2, 9, 2, 2, 65545, 2, 2, 131081, 2, 2, 196617, 2, 2, 10, 2, 2, 11, 2, 2, -65524, 1, 2, -65523, 1, 2, -65522, 1, 2, -65521, 1, 2, -65520, 1, 2, -65519, 1, 2, -65518, 1, 2, -65517, 1, 2, -65525, 1, 2, 11, 1, 2, 12, 1, 2, 13, 1, 2, 14, 1, 2, 15, 1, 2, 16, 1, 2, 17, 1, 2, 18, 1, 2, 19, 1, 2, 65547, 1, 2, 65548, 1, 2, 65549, 1, 2, 65550, 1, 2, 65551, 1, 2, 65552, 1, 2, 65553, 1, 2, 65554, 1, 2, 65555, 1, 2, 65546, 2, 2, 65547, 2, 2, 19, 2, 2, 18, 2, 2, 131082, 2, 2, 131083, 2, 1441794, 131083, 1, 2, 131084, 1, 2, 131085, 1, 2, 131086, 1, 2, 131087, 1, 2, 131088, 1, 2, 131089, 1, 2, 131090, 1, 2, 131091, 1, 2, 196618, 2, 2, 196619, 2, 2, 196619, 1, 1048578, 196620, 1, 1048578, 196621, 1, 1048578, 196622, 1, 1048578, 196623, 1, 1048578, 196624, 1, 1048578, 196625, 1, 1048578, 196626, 1, 1048578, 196627, 1, 1048578, -65514, 1, 655362, -65514, 2, 655362, -65514, 3, 655362, -65513, 1, 655362, -65513, 2, 655362, -65513, 3, 655362, -65512, 1, 655362, -65512, 2, 655362, -65512, 3, 655362, -65511, 1, 655362, -65511, 2, 655362, -65511, 3, 655362, -65510, 1, 655362, -65510, 2, 655362, -65510, 3, 655362, -65509, 1, 655362, -65509, 2, 655362, -65509, 3, 655362, -65508, 1, 655362, -65508, 2, 655362, -65508, 3, 655362, -65507, 1, 655362, -65507, 2, 655362, -65507, 3, 655362, -65516, 1, 655362, -65516, 2, 655362, -65515, 1, 655362, -65515, 2, 655362, 20, 1, 655362, 20, 2, 655362, 21, 1, 655362, 21, 2, 655362, 65556, 1, 655362, 65557, 1, 655362, 131092, 1, 655362, 131093, 1, 655362, -65515, 3, 655362, 22, 2, 655362, 22, 1, 655362, 65558, 1, 655362, 131094, 1, 655362, -65506, 1, 1048578, -65506, 2, 1048578, -65506, 3, 1048578, -65505, 1, 1048578, -65505, 2, 1048578, -65505, 3, 1048578, -65504, 1, 1048578, -65504, 2, 1048578, -65504, 3, 1048578, -65503, 1, 1048578, -65503, 2, 1048578, -65503, 3, 1048578, -65502, 1, 1048578, -65502, 2, 1048578, -65502, 3, 1048578, -65501, 1, 1048578, -65501, 2, 1048578, -65501, 3, 1048578, -65500, 1, 1048578, -65500, 2, 1048578, -65500, 3, 1048578, -65499, 1, 1048578, -65499, 2, 1048578, -65499, 3, 1048578, -65498, 1, 1048578, -65498, 2, 1048578, -65498, 3, 1048578, -65497, 1, 2, -65497, 2, 2, -65497, 3, 2, 21, 3, 1048578, 23, 2, 1048578, 22, 3, 655365, 23, 3, 655364, 26, 2, 655362, 26, 1, 655362, 27, 1, 655362, 23, 1, 655362, 38, 2, 655362, 24, 1, 655362, 25, 1, 655362, 65559, 1, 655362, 65560, 1, 655362, 65561, 1, 655362, 65562, 1, 655362, 65563, 1, 655362, 131095, 1, 655362, 131096, 1, 655362, 131097, 1, 655362, 131098, 1, 655362, 131099, 1, 655362, 28, 1, 655362, 29, 1, 655362, 30, 1, 655362, 31, 1, 655362, 32, 1, 655362, 33, 1, 655362, 34, 1, 655362, 35, 1, 655362, 36, 1, 655362, 37, 1, 655362, 38, 1, 655362, 39, 1, 2, 65564, 1, 655362, 65565, 1, 655362, 65566, 1, 655362, 65567, 1, 655362, 65568, 1, 655362, 65569, 1, 655362, 65570, 1, 655362, 65571, 1, 655362, 131100, 1, 655362, 131101, 1, 655362, 38, 0, 655362, 39, 0, 655362, 30, 2, 655362, 30, 3, 655362, 31, 2, 655362, 31, 3, 655362, 196628, 1, 1048578, 196629, 1, 1048578, 196630, 1, 1048578, 196631, 1, 1048578, 196632, 1, 1048578, 196633, 1, 1048578, 196634, 1, 1048578, 196635, 1, 1048578, 196636, 1, 1048578, 196637, 1, 1048578, 39, 65535, 1048578, 38, 65535, 1048578, 65574, 65535, 1048578, 65575, 65535, 1048578, 65575, 0, 1048578, 65575, 1, 1048578, 131110, 65535, 1048578, 131111, 65535, 1048578, 131111, 0, 1048578, 131111, 1, 1048578, 196647, 1, 1048578, 196647, 0, 1048578, 196647, 65535, 1048578, 196646, 65535, 1048578, 37, 0, 1048578, 65573, 0, 655364, 36, 0, 655362, 35, 0, 655362, 65572, 0, 655365, 65571, 0, 655362, 39, 2, 655362, 65575, 2, 655362, 131111, 2, 655362, 196647, 2, 655362, -65497, 65535, 2, -65497, 0, 2, -65498, 0, 655362, -65499, 0, 655362, -65500, 0, 655362, -65501, 0, 655362, -65498, 65535, 655362, -65499, 65535, 655362, -65500, 65535, 655362, -65501, 65535, 655362, 37, 65535, 655362, 36, 65535, 655362, 35, 65535, 655362, 65571, 65535, 655362, 65572, 65535, 655362, 65573, 65535, 655362, 131109, 65535, 655362, 131108, 65535, 655362, 131107, 65535, 655362, 196645, 65535, 655362, 196644, 65535, 655362, 196643, 65535, 655362, -65502, 0, 655362, -65502, 65535, 655362, 34, 0, 655362, 34, 65535, 655362, 65570, 0, 655362, 65570, 65535, 655362, 131106, 0, 655362, 131106, 65535, 655362, 196642, 65535, 655362, 196642, 0, 655362, 37, 2, 655362, 36, 2, 655362, 29, 0, 655362, 30, 0, 655362, 31, 0, 655362, 32, 0, 655362, 33, 0, 655362, 65565, 0, 655362, 65566, 0, 655362, 65567, 0, 655362, 65568, 0, 655362, 65569, 0, 655362, 131101, 0, 655362, 131102, 0, 655362, 131103, 0, 655362, 131104, 0, 655362, 131105, 0, 655362, 196637, 0, 655362, 196638, 0, 655362, 196639, 0, 655362, 196640, 0, 655362, 196641, 0, 655362, 13, 2, 4, 14, 2, 5, 15, 2, 2, 8, 2, 2, 65544, 2, 2, 131080, 2, 2, 196616, 2, 2, -65526, 1, 1441794, 10, 1, 1441794, 65546, 1, 1441794, 131082, 1, 1441794, 196618, 1, 1441794, 7, 2, 2, 65543, 2, 2, 131079, 2, 2, 196615, 2, 2, -65495, 2, 2, -65495, 3, 2, -65495, 1, 2, -65494, 1, 2, -65494, 2, 2, -65494, 3, 2, -65493, 3, 2, -65492, 3, 2, -65493, 2, 2, -65493, 1, 2, -65492, 1, 2, -65492, 2, 2, -65496, 65535, 2, -65496, 0, 2, -65495, 65535, 2, -65495, 0, 2, -65494, 65535, 2, -65494, 0, 2, -65493, 65535, 2, -65493, 0, 2, -65492, 65535, 2, -65492, 0, 2, -65491, 65535, 2, -65491, 0, 2, -65491, 1, 2, -65491, 2, 2, -65491, 3, 2, -65490, 65535, 2, -65490, 0, 2, -65490, 1, 2, -65490, 2, 2, -65490, 3, 2, -65489, 65535, 2, -65489, 0, 2, -65489, 1, 2, -65489, 2, 2, -65489, 3, 2, -65488, 65535, 2, -65488, 0, 2, -65488, 1, 2, -65488, 2, 2, -65488, 3, 2, -65487, 65535, 2, -65487, 0, 2, -65487, 1, 2, -65487, 2, 2, -65487, 3, 2, 40, 1, 2, 41, 1, 2, 42, 1, 2, 46, 1, 2, 47, 1, 2, 48, 1, 2, 49, 1, 2, 44, 1, 2, 44, 2, 2, 45, 1, 2, 40, 0, 2, 41, 0, 2, 42, 0, 2, 43, 0, 2, 44, 0, 2, 45, 0, 2, 46, 0, 2, 47, 0, 2, 48, 0, 2, 49, 0, 2, 65576, 0, 2, 65577, 0, 2, 65578, 0, 2, 65579, 0, 2, 65580, 0, 2, 65581, 0, 2, 65582, 0, 2, 65583, 0, 2, 65584, 0, 2, 65585, 0, 2, 65576, 1, 2, 65577, 1, 2, 65578, 1, 2, 65582, 1, 2, 65583, 1, 2, 65584, 1, 2, 65585, 1, 2, 131112, 0, 2, 131113, 0, 2, 131114, 0, 2, 131115, 0, 2, 131116, 0, 2, 131117, 0, 2, 131118, 0, 2, 131119, 0, 2, 131120, 0, 2, 131121, 0, 2, 131112, 1, 2, 131113, 1, 2, 131114, 1, 2, 131118, 1, 2, 131119, 1, 2, 131120, 1, 2, 131121, 1, 2, 196648, 0, 2, 196649, 0, 2, 196650, 0, 2, 196651, 0, 2, 196652, 0, 2, 196653, 0, 2, 196654, 0, 2, 196655, 0, 2, 196656, 0, 2, 196657, 0, 2, 196654, 1, 2, 196655, 1, 2, 196656, 1, 2, 196657, 1, 2, 196648, 1, 2, 196649, 1, 2, 196650, 1, 2, 49, 2, 2, 47, 2, 655364, 46, 2, 655365, 45, 2, 2, 43, 1, 2, 43, 2, 2, 42, 2, 5, 41, 2, 4, 65585, 2, 2, 131121, 2, 2, 196657, 2, 2, 35, 2, 1441794, 131079, 3, 1441794, 131080, 3, 1441794, 131081, 3, 1441794, 131082, 3, 1441794, 131083, 3, 1441794, 196619, 3, 1441794, 196618, 3, 1441794, 196617, 3, 1441794, 196616, 3, 1441794, 196615, 3, 1441794, 16, 2, 1441795, 17, 2, 1441795, 196620, 2, 1441794, 196621, 2, 1441794, 196622, 2, 1441794, 196623, 2, 1441794, 196624, 2, 1441794, 196625, 2, 1441794, 196626, 2, 1441794, 196627, 2, 1441794, 196628, 2, 1441794, 196629, 2, 1441794, 196630, 2, 1441794, 196631, 2, 1441794, 131111, 3, 1441794, 196647, 3, 1441794, -65486, 65535, 1441794, -65486, 0, 1441794, -65486, 1, 1441794, -65486, 2, 1441794, -65486, 3, 1441794, -65485, 65535, 1441794, -65485, 0, 1441794, -65485, 1, 1441794, -65485, 2, 1441794, -65485, 3, 1441794, -65484, 65535, 1441794, -65484, 0, 1441794, -65484, 1, 1441794, -65484, 2, 1441794, -65484, 3, 1441794, -65483, 65535, 1441794, -65483, 0, 1441794, -65483, 1, 1441794, -65483, 2, 1441794, -65483, 3, 1441794, -65482, 65535, 1441794, -65482, 0, 1441794, -65482, 1, 1441794, -65482, 2, 1441794, -65482, 3, 1441794, -65481, 65535, 1441794, -65481, 0, 1441794, -65481, 1, 1441794, -65481, 2, 1441794, -65481, 3, 1441794, -65480, 65535, 1441794, -65480, 0, 1441794, -65480, 1, 1441794, -65480, 2, 1441794, -65480, 3, 1441794, -65479, 65535, 1441794, -65479, 0, 1441794, -65479, 1, 1441794, -65479, 2, 1441794, -65479, 3, 1441794, -65478, 65535, 1441794, -65478, 0, 1441794, -65478, 1, 1441794, -65478, 2, 1441794, -65478, 3, 1441794, -65477, 65535, 1441794, -65477, 0, 1441794, -65477, 1, 1441794, -65477, 2, 1441794, -65477, 3, 1441794, -65476, 65535, 1441794, -65476, 0, 1441794, -65476, 1, 1441794, -65476, 2, 1441794, -65476, 3, 1441794, -65475, 65535, 1441794, -65475, 0, 1441794, -65475, 1, 1441794, -65475, 2, 1441794, -65475, 3, 1441794, -65474, 65535, 1441794, -65474, 0, 1441794, -65474, 1, 1441794, -65474, 2, 1441794, -65474, 3, 1441794, -65473, 65535, 1441794, -65473, 0, 1441794, -65473, 1, 1441794, -65473, 2, 1441794, -65473, 3, 1441794, -65472, 65535, 1441794, -65472, 0, 1441794, -65472, 1, 1441794, -65472, 2, 1441794, -65472, 3, 1441794, -65471, 65535, 1441794, -65471, 0, 1441794, -65471, 1, 1441794, -65471, 2, 1441794, -65471, 3, 1441794, -65470, 65535, 1441794, -65470, 0, 1441794, -65470, 1, 1441794, -65470, 2, 1441794, -65470, 3, 1441794, -65469, 65535, 1441794, -65469, 0, 1441794, -65469, 1, 1441794, -65469, 2, 1441794, -65469, 3, 1441794, -65468, 65535, 1441794, -65468, 0, 1441794, -65468, 1, 1441794, -65468, 2, 1441794, -65468, 3, 1441794, -65467, 65535, 1441794, -65467, 0, 1441794, -65467, 1, 1441794, -65467, 2, 1441794, -65467, 3, 1441794, 262186, 0, 2, 262186, 1, 2, 262187, 0, 2, 262188, 0, 2, 262189, 0, 2, 262190, 0, 2, 262190, 1, 2, 262191, 1, 2, 262191, 0, 2, 262192, 0, 2, 262192, 1, 2, 262193, 0, 2, 262193, 1, 2, 262193, 2, 2, -65496, 1, 2, -65496, 2, 2, -65496, 3, 2) +"cells": PackedInt32Array(9, 1, 2, 65535, 1, 2, 65535, 2, 2, 0, 1, 2, 1, 1, 2, 2, 1, 2, 3, 1, 2, 4, 1, 2, 5, 1, 2, 6, 1, 2, 7, 1, 2, 8, 1, 2, 131071, 1, 2, 65536, 1, 2, 65537, 1, 2, 65538, 1, 2, 65539, 1, 2, 65540, 1, 2, 65541, 1, 2, 65542, 1, 2, 65543, 1, 2, 65544, 1, 2, 65545, 1, 2, 196607, 1, 2, 131072, 1, 2, 131073, 1, 2, 131074, 1, 2, 131075, 1, 2, 131076, 1, 2, 131077, 1, 2, 131078, 1, 2, 131079, 1, 2, 131080, 1, 2, 131081, 1, 2, 65535, 3, 2, 131071, 2, 2, 131071, 3, 2, 196607, 2, 2, 196607, 3, 2, 196617, 1, 2, 196616, 1, 2, 196615, 1, 2, 196614, 1, 2, 196613, 1, 2, 196612, 1, 2, 196611, 1, 2, 196610, 1, 2, 196609, 1, 2, 196608, 1, 2, 262143, 1, 2, 262143, 2, 2, 262143, 3, 2, 9, 2, 2, 65545, 2, 2, 131081, 2, 2, 196617, 2, 2, 10, 2, 2, 11, 2, 2, 11, 1, 2, 12, 1, 2, 13, 1, 2, 14, 1, 2, 15, 1, 2, 16, 1, 2, 17, 1, 2, 18, 1, 2, 19, 1, 2, 65547, 1, 2, 65548, 1, 2, 65549, 1, 2, 65550, 1, 2, 65551, 1, 2, 65552, 1, 2, 65553, 1, 2, 65554, 1, 2, 65555, 1, 2, 65546, 2, 2, 65547, 2, 2, 19, 2, 2, 18, 2, 2, 131082, 2, 2, 131083, 2, 1441794, 131083, 1, 2, 131084, 1, 2, 131085, 1, 2, 131086, 1, 2, 131087, 1, 2, 131088, 1, 2, 131089, 1, 2, 131090, 1, 2, 131091, 1, 2, 196618, 2, 2, 196619, 2, 2, 196619, 1, 1048578, 196620, 1, 1048578, 196621, 1, 1048578, 196622, 1, 1048578, 196623, 1, 1048578, 196624, 1, 1048578, 196625, 1, 1048578, 196626, 1, 1048578, 196627, 1, 1048578, 20, 1, 655362, 20, 2, 655362, 21, 1, 655362, 21, 2, 655362, 65556, 1, 655362, 65557, 1, 655362, 131092, 1, 655362, 131093, 1, 655362, 22, 2, 655362, 22, 1, 655362, 65558, 1, 655362, 131094, 1, 655362, 21, 3, 1048578, 23, 2, 1048578, 22, 3, 655365, 23, 3, 655364, 26, 2, 655362, 26, 1, 655362, 27, 1, 655362, 23, 1, 655362, 38, 2, 655362, 24, 1, 655362, 25, 1, 655362, 65559, 1, 655362, 65560, 1, 655362, 65561, 1, 655362, 65562, 1, 655362, 65563, 1, 655362, 131095, 1, 655362, 131096, 1, 655362, 131097, 1, 655362, 131098, 1, 655362, 131099, 1, 655362, 28, 1, 655362, 29, 1, 655362, 30, 1, 655362, 31, 1, 655362, 32, 1, 655362, 33, 1, 655362, 34, 1, 655362, 35, 1, 655362, 36, 1, 655362, 37, 1, 655362, 38, 1, 655362, 39, 1, 2, 65564, 1, 655362, 65565, 1, 655362, 65566, 1, 655362, 65567, 1, 655362, 65568, 1, 655362, 65569, 1, 655362, 65570, 1, 655362, 65571, 1, 655362, 131100, 1, 655362, 131101, 1, 655362, 38, 0, 655362, 39, 0, 655362, 30, 2, 655362, 30, 3, 655362, 31, 2, 655362, 31, 3, 655362, 196628, 1, 1048578, 196629, 1, 1048578, 196630, 1, 1048578, 196631, 1, 1048578, 196632, 1, 1048578, 196633, 1, 1048578, 196634, 1, 1048578, 196635, 1, 1048578, 196636, 1, 1048578, 196637, 1, 1048578, 39, 65535, 1048578, 38, 65535, 1048578, 65574, 65535, 1048578, 65575, 65535, 1048578, 65575, 0, 1048578, 65575, 1, 1048578, 131110, 65535, 1048578, 131111, 65535, 1048578, 131111, 0, 1048578, 131111, 1, 1048578, 196647, 1, 1048578, 196647, 0, 1048578, 196647, 65535, 1048578, 196646, 65535, 1048578, 37, 0, 1048578, 65573, 0, 655364, 36, 0, 655362, 35, 0, 655362, 65572, 0, 655365, 65571, 0, 655362, 39, 2, 655362, 65575, 2, 655362, 131111, 2, 655362, 196647, 2, 655362, 37, 65535, 655362, 36, 65535, 655362, 35, 65535, 655362, 65571, 65535, 655362, 65572, 65535, 655362, 65573, 65535, 655362, 131109, 65535, 655362, 131108, 65535, 655362, 131107, 65535, 655362, 196645, 65535, 655362, 196644, 65535, 655362, 196643, 65535, 655362, 34, 0, 655362, 34, 65535, 655362, 65570, 0, 655362, 65570, 65535, 655362, 131106, 0, 655362, 131106, 65535, 655362, 196642, 65535, 655362, 196642, 0, 655362, 37, 2, 655362, 36, 2, 655362, 29, 0, 655362, 30, 0, 655362, 31, 0, 655362, 32, 0, 655362, 33, 0, 655362, 65565, 0, 655362, 65566, 0, 655362, 65567, 0, 655362, 65568, 0, 655362, 65569, 0, 655362, 131101, 0, 655362, 131102, 0, 655362, 131103, 0, 655362, 131104, 0, 655362, 131105, 0, 655362, 196637, 0, 655362, 196638, 0, 655362, 196639, 0, 655362, 196640, 0, 655362, 196641, 0, 655362, 13, 2, 4, 14, 2, 5, 15, 2, 2, 8, 2, 2, 65544, 2, 2, 131080, 2, 2, 196616, 2, 2, 10, 1, 1441794, 65546, 1, 1441794, 131082, 1, 1441794, 196618, 1, 1441794, 7, 2, 2, 65543, 2, 2, 131079, 2, 2, 196615, 2, 2, 40, 1, 2, 41, 1, 2, 42, 1, 2, 46, 1, 2, 47, 1, 2, 48, 1, 2, 49, 1, 2, 44, 1, 2, 44, 2, 2, 45, 1, 2, 40, 0, 2, 41, 0, 2, 42, 0, 2, 43, 0, 2, 44, 0, 2, 45, 0, 2, 46, 0, 2, 47, 0, 2, 48, 0, 2, 49, 0, 2, 65576, 0, 2, 65577, 0, 2, 65578, 0, 2, 65579, 0, 2, 65580, 0, 2, 65581, 0, 2, 65582, 0, 2, 65583, 0, 2, 65584, 0, 2, 65585, 0, 2, 65576, 1, 2, 65577, 1, 2, 65578, 1, 2, 65582, 1, 2, 65583, 1, 2, 65584, 1, 2, 65585, 1, 2, 131112, 0, 2, 131113, 0, 2, 131114, 0, 2, 131115, 0, 2, 131116, 0, 2, 131117, 0, 2, 131118, 0, 2, 131119, 0, 2, 131120, 0, 2, 131121, 0, 2, 131112, 1, 2, 131113, 1, 2, 131114, 1, 2, 131118, 1, 2, 131119, 1, 2, 131120, 1, 2, 131121, 1, 2, 196648, 0, 2, 196649, 0, 2, 196650, 0, 2, 196651, 0, 2, 196652, 0, 2, 196653, 0, 2, 196654, 0, 2, 196655, 0, 2, 196656, 0, 2, 196657, 0, 2, 196654, 1, 2, 196655, 1, 2, 196656, 1, 2, 196657, 1, 2, 196648, 1, 2, 196649, 1, 2, 196650, 1, 2, 49, 2, 2, 47, 2, 655364, 46, 2, 655365, 45, 2, 2, 43, 1, 2, 43, 2, 2, 42, 2, 5, 41, 2, 4, 65585, 2, 2, 131121, 2, 2, 196657, 2, 2, 35, 2, 1441794, 131079, 3, 1441794, 131080, 3, 1441794, 131081, 3, 1441794, 131082, 3, 1441794, 131083, 3, 1441794, 196619, 3, 1441794, 196618, 3, 1441794, 196617, 3, 1441794, 196616, 3, 1441794, 196615, 3, 1441794, 16, 2, 1441795, 17, 2, 1441795, 196620, 2, 1441794, 196621, 2, 1441794, 196622, 2, 1441794, 196623, 2, 1441794, 196624, 2, 1441794, 196625, 2, 1441794, 196626, 2, 1441794, 196627, 2, 1441794, 196628, 2, 1441794, 196629, 2, 1441794, 196630, 2, 1441794, 196631, 2, 1441794, 131111, 3, 1441794, 196647, 3, 1441794, -65486, 65535, 1441794, -65486, 0, 1441794, -65486, 1, 1441794, -65486, 2, 1441794, -65486, 3, 1441794, -65485, 65535, 1441794, -65485, 0, 1441794, -65485, 1, 1441794, -65485, 2, 1441794, -65485, 3, 1441794, -65484, 65535, 1441794, -65484, 0, 1441794, -65484, 1, 1441794, -65484, 2, 1441794, -65484, 3, 1441794, -65483, 65535, 1441794, -65483, 0, 1441794, -65483, 1, 1441794, -65483, 2, 1441794, -65483, 3, 1441794, -65482, 65535, 1441794, -65482, 0, 1441794, -65482, 1, 1441794, -65482, 2, 1441794, -65482, 3, 1441794, -65481, 65535, 1441794, -65481, 0, 1441794, -65481, 1, 1441794, -65481, 2, 1441794, -65481, 3, 1441794, -65480, 65535, 1441794, -65480, 0, 1441794, -65480, 1, 1441794, -65480, 2, 1441794, -65480, 3, 1441794, -65479, 65535, 1441794, -65479, 0, 1441794, -65479, 1, 1441794, -65479, 2, 1441794, -65479, 3, 1441794, -65478, 65535, 1441794, -65478, 0, 1441794, -65478, 1, 1441794, -65478, 2, 1441794, -65478, 3, 1441794, -65477, 65535, 1441794, -65477, 0, 1441794, -65477, 1, 1441794, -65477, 2, 1441794, -65477, 3, 1441794, -65476, 65535, 1441794, -65476, 0, 1441794, -65476, 1, 1441794, -65476, 2, 1441794, -65476, 3, 1441794, -65475, 65535, 1441794, -65475, 0, 1441794, -65475, 1, 1441794, -65475, 2, 1441794, -65475, 3, 1441794, -65474, 65535, 1441794, -65474, 0, 1441794, -65474, 1, 1441794, -65474, 2, 1441794, -65474, 3, 1441794, -65473, 65535, 1441794, -65473, 0, 1441794, -65473, 1, 1441794, -65473, 2, 1441794, -65473, 3, 1441794, -65472, 65535, 1441794, -65472, 0, 1441794, -65472, 1, 1441794, -65472, 2, 1441794, -65472, 3, 1441794, -65471, 65535, 1441794, -65471, 0, 1441794, -65471, 1, 1441794, -65471, 2, 1441794, -65471, 3, 1441794, -65470, 65535, 1441794, -65470, 0, 1441794, -65470, 1, 1441794, -65470, 2, 1441794, -65470, 3, 1441794, -65469, 65535, 1441794, -65469, 0, 1441794, -65469, 1, 1441794, -65469, 2, 1441794, -65469, 3, 1441794, -65468, 65535, 1441794, -65468, 0, 1441794, -65468, 1, 1441794, -65468, 2, 1441794, -65468, 3, 1441794, -65467, 65535, 1441794, -65467, 0, 1441794, -65467, 1, 1441794, -65467, 2, 1441794, -65467, 3, 1441794, -65486, 4, 2, -65485, 4, 2, -65484, 4, 2, -65483, 4, 2, -65482, 4, 2, -65481, 4, 2, -65480, 4, 2, -65479, 4, 2, 50, 4, 2, 51, 4, 2, 52, 4, 2, 53, 4, 2, 54, 4, 2, 55, 4, 2, 56, 4, 2, 65586, 4, 2, 65587, 4, 2, 65588, 4, 2, 65589, 4, 2, 65590, 4, 2, 65591, 4, 2, 65592, 4, 2, -65478, 4, 2, -65477, 4, 2, -65476, 4, 2, -65475, 4, 2, -65474, 4, 2, -65473, 4, 2, -65472, 4, 2, -65471, 4, 2, -65470, 4, 2, -65469, 4, 2, -65468, 4, 2, -65467, 4, 2, 59, 4, 2, 60, 4, 2, 61, 4, 2, 62, 4, 2, 63, 4, 2, 64, 4, 2, 65, 4, 2, 66, 4, 2, 67, 4, 2, 68, 4, 2, 69, 4, 2, 65595, 4, 2, 65596, 4, 2, 65597, 4, 2, 65598, 4, 2, 65599, 4, 2, 65600, 4, 2, 65601, 4, 2, 65602, 4, 2, 65603, 4, 2, 65604, 4, 2, 65605, 4, 2, 50, 65535, 2, 51, 65535, 2, 52, 65535, 2, 53, 65535, 2, 54, 65535, 2, 55, 65535, 2, 56, 65535, 2, 57, 65535, 2, 58, 65535, 2, 59, 65535, 2, 60, 65535, 2, 61, 65535, 2, 62, 65535, 2, 63, 65535, 2, 65586, 65535, 2, 65587, 65535, 2, 65588, 65535, 2, 65589, 65535, 2, 65590, 65535, 2, 65591, 65535, 2, 65592, 65535, 2, 65593, 65535, 2, 65594, 65535, 2, 65595, 65535, 2, 65596, 65535, 2, 65597, 65535, 2, 65598, 65535, 2, 65599, 65535, 2, -65487, 5, 2, -65487, 6, 2, -65487, 7, 2, -65487, 8, 2, -65487, 9, 2, -65486, 5, 2, -65486, 6, 2, -65486, 7, 2, -65486, 8, 2, -65486, 9, 2, -65485, 5, 2, -65485, 6, 2, -65485, 7, 2, -65485, 8, 2, -65485, 9, 2, -65484, 5, 2, -65484, 6, 2, -65484, 7, 2, -65484, 8, 2, -65484, 9, 2, -65483, 5, 2, -65483, 6, 2, -65483, 7, 2, -65483, 8, 2, -65483, 9, 2, -65482, 5, 2, -65482, 6, 2, -65482, 7, 2, -65482, 8, 2, -65482, 9, 2, -65481, 5, 2, -65481, 6, 2, -65481, 7, 2, -65481, 8, 2, -65481, 9, 2, -65480, 5, 2, -65480, 6, 2, -65480, 7, 2, -65480, 8, 2, -65480, 9, 2, -65479, 5, 2, -65479, 6, 2, -65479, 7, 2, -65479, 8, 2, -65479, 9, 2, -65478, 5, 2, -65478, 6, 2, -65478, 7, 2, -65478, 8, 2, -65478, 9, 2, -65477, 5, 2, -65477, 6, 2, -65477, 7, 2, -65477, 8, 2, -65477, 9, 2, -65476, 5, 2, -65476, 6, 2, -65476, 7, 2, -65476, 8, 2, -65476, 9, 2, -65475, 5, 2, -65475, 6, 2, -65475, 7, 2, -65475, 8, 2, -65475, 9, 2, -65474, 5, 2, -65474, 6, 2, -65474, 7, 2, -65474, 8, 2, -65474, 9, 2, -65473, 5, 2, -65473, 6, 2, -65473, 7, 2, -65473, 8, 2, -65473, 9, 2, -65472, 5, 2, -65472, 6, 2, -65472, 7, 2, -65472, 8, 2, -65472, 9, 2, -65471, 5, 2, -65471, 6, 2, -65471, 7, 2, -65471, 8, 2, -65471, 9, 2, -65470, 5, 2, -65470, 6, 2, -65470, 7, 2, -65470, 8, 2, -65470, 9, 2, -65469, 5, 2, -65469, 6, 2, -65469, 7, 2, -65469, 8, 2, -65469, 9, 2, -65468, 5, 2, -65468, 6, 2, -65468, 7, 2, -65468, 8, 2, -65468, 9, 2, -65467, 5, 2, -65467, 6, 2, -65467, 7, 2, -65467, 8, 2, -65467, 9, 2, -1, 1, 2, -1, 2, 2, -1, 3, 2, -65536, 1, 2, -65536, 2, 2, -65536, 3, 2, -65535, 1, 2, -65535, 2, 2, -65535, 3, 2, -65534, 1, 2, -65534, 2, 2, -65534, 3, 2, -65533, 1, 2, -65533, 2, 2, -65533, 3, 2, -65532, 1, 2, -65532, 2, 2, -65532, 3, 2, -65531, 1, 2, -65531, 2, 2, -65531, 3, 2, -65530, 1, 2, -65530, 2, 2, -65530, 3, 2, -65529, 1, 2, -65529, 2, 2, -65529, 3, 2, -65528, 1, 2, -65528, 2, 2, -65528, 3, 2, -65527, 1, 2, -65527, 2, 2, -65527, 3, 2, -65526, 1, 2, -65526, 2, 2, -65526, 3, 2, -65525, 1, 2, -65525, 2, 2, -65525, 3, 2, -65524, 1, 2, -65524, 2, 2, -65524, 3, 2, -65523, 1, 2, -65523, 2, 2, -65523, 3, 2, -65522, 1, 2, -65522, 2, 2, -65522, 3, 2, -65521, 1, 2, -65521, 2, 2, -65520, 1, 2, -65520, 2, 2, -65519, 1, 2, -65519, 2, 655362, -65518, 1, 2, -65518, 2, 2, -65517, 1, 2, -65517, 2, 2, -65516, 1, 2, -65516, 2, 655362, -65515, 1, 2, -65515, 2, 655362, -65515, 3, 655362, -65514, 1, 2, -65514, 2, 655362, -65514, 3, 655362, -65513, 1, 2, -65513, 2, 655362, -65513, 3, 655362, -65512, 1, 2, -65512, 2, 655362, -65512, 3, 655362, -65511, 1, 2, -65511, 2, 655362, -65511, 3, 655362, -65510, 1, 2, -65510, 2, 655362, -65510, 3, 655362, -65509, 1, 2, -65509, 2, 655362, -65509, 3, 655362, -65508, 1, 2, -65508, 2, 655362, -65508, 3, 655362, -65507, 1, 2, -65507, 2, 655362, -65507, 3, 655362, -65506, 1, 2, -65506, 2, 1048578, -65506, 3, 1048578, -65505, 1, 2, -65505, 2, 1048578, -65505, 3, 1048578, -65504, 1, 2, -65504, 2, 1048578, -65504, 3, 1048578, -65503, 1, 2, -65503, 2, 1048578, -65503, 3, 1048578, -65502, 65535, 2, -65502, 0, 2, -65502, 1, 2, -65502, 2, 1048578, -65502, 3, 1048578, -65501, 65535, 2, -65501, 0, 2, -65501, 1, 2, -65501, 2, 1048578, -65501, 3, 1048578, -65500, 65535, 2, -65500, 0, 2, -65500, 1, 2, -65500, 2, 1048578, -65500, 3, 1048578, -65499, 65535, 2, -65499, 0, 2, -65499, 1, 2, -65499, 2, 1048578, -65499, 3, 1048578, -65498, 65535, 2, -65498, 0, 2, -65498, 1, 2, -65498, 2, 1048578, -65498, 3, 1048578, -65497, 65535, 2, -65497, 0, 2, -65497, 1, 2, -65497, 2, 2, -65497, 3, 2, -65496, 65535, 2, -65496, 0, 2, -65496, 1, 2, -65496, 2, 2, -65496, 3, 2, -65495, 65535, 2, -65495, 0, 2, -65495, 1, 2, -65495, 2, 2, -65495, 3, 2, -65494, 65535, 2, -65494, 0, 2, -65494, 1, 2, -65494, 2, 2, -65494, 3, 2, -65493, 65535, 2, -65493, 0, 2, -65493, 1, 2, -65493, 2, 2, -65493, 3, 2, -65492, 65535, 2, -65492, 0, 2, -65492, 1, 2, -65492, 2, 2, -65492, 3, 2, -65491, 65535, 2, -65491, 0, 2, -65491, 1, 2, -65491, 2, 2, -65491, 3, 2, -65490, 65535, 2, -65490, 0, 2, -65490, 1, 2, -65490, 2, 2, -65490, 3, 2, -65489, 65535, 2, -65489, 0, 2, -65489, 1, 2, -65489, 2, 2, -65489, 3, 2, -65488, 65535, 2, -65488, 0, 2, -65488, 1, 2, -65488, 2, 2, -65488, 3, 2, -65487, 65535, 2, -65487, 0, 2, -65487, 1, 2, -65487, 2, 2, -65487, 3, 2, -1, 65535, 2, -1, 0, 2, -65536, 65535, 2, -65536, 0, 2, -65535, 65535, 2, -65535, 0, 2, -65534, 65535, 2, -65534, 0, 2, -65533, 65535, 2, -65533, 0, 2, -65532, 65535, 2, -65532, 0, 2, -65531, 65535, 2, -65531, 0, 2, -65530, 65535, 2, -65530, 0, 2, -65529, 65535, 2, -65529, 0, 2, -65528, 65535, 2, -65528, 0, 2, -65527, 65535, 2, -65527, 0, 2, -65526, 65535, 2, -65526, 0, 2, -65525, 65535, 2, -65525, 0, 2, -65524, 65535, 2, -65524, 0, 2, -65523, 65535, 2, -65523, 0, 2, -65522, 65535, 2, -65522, 0, 2, -65521, 65535, 2, -65521, 0, 2, -65520, 65535, 2, -65520, 0, 2, -65519, 65535, 2, -65519, 0, 2, -65518, 65535, 2, -65518, 0, 2, -65517, 65535, 2, -65517, 0, 2, -65516, 65535, 2, -65516, 0, 2, -65515, 65535, 2, -65515, 0, 2, -65514, 65535, 2, -65514, 0, 2, -65513, 65535, 2, -65513, 0, 2, -65512, 65535, 2, -65512, 0, 2, -65511, 65535, 2, -65511, 0, 2, -65510, 65535, 2, -65510, 0, 2, -65509, 65535, 2, -65509, 0, 2, -65508, 65535, 2, -65508, 0, 2, -65507, 65535, 2, -65507, 0, 2, -65506, 65535, 2, -65506, 0, 2, -65505, 65535, 2, -65505, 0, 2, -65504, 65535, 2, -65504, 0, 2, -65503, 65535, 2, -65503, 0, 2, 131122, 65535, 2, 131123, 65535, 2, 131124, 65535, 2, 131125, 65535, 2, 131126, 65535, 2, 131127, 65535, 2, 131128, 65535, 2, 131129, 65535, 2, 131130, 65535, 2, 131131, 65535, 2, 131132, 65535, 2, 131133, 65535, 2, 131134, 65535, 2, 131135, 65535, 2, 49, 65535, 2, 65585, 65535, 2, 131121, 65535, 2, 196657, 65535, 2, 196658, 65535, 2, 196659, 65535, 2, 196660, 65535, 2, 196661, 65535, 2, 196662, 65535, 2, 196663, 65535, 2, 196664, 65535, 2, 196665, 65535, 2, 196666, 65535, 2, 196667, 65535, 2, 196668, 65535, 2, 196669, 65535, 2, 196670, 65535, 2, 196671, 65535, 2, 262193, 65535, 2, 262193, 0, 2, 262193, 1, 2, 262193, 2, 2, 327729, 65535, 2, 327729, 0, 2, 327729, 1, 2, 327729, 2, 2, 393265, 65535, 1048578, 393265, 0, 1048578, 393265, 1, 1048578, 393265, 2, 1048578, 458801, 2, 1048578, 458801, 1, 1048578, 458801, 0, 1048578, 458801, 65535, 1048578, 524337, 65535, 1048578, 524337, 0, 1048578, 524337, 1, 1048578, 524337, 2, 1048578) } script = ExtResource("3_gavly") id_from = 34 @@ -62,9 +63,17 @@ collision_layer = 0 collision_mask = 0 metadata/_editor_floor_ = Vector3(0, 1, 0) +[node name="LevelGridMark" type="GridMap" parent="."] +unique_name_in_owner = true +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0.64, 0.64, 0.64) +mesh_library = ExtResource("1_am8tr") +cell_size = Vector3(1.28, 1.28, 1.28) +cell_center_y = false +metadata/_editor_floor_ = Vector3(9, -1, 2) + [node name="BornPos" type="Node3D" parent="."] unique_name_in_owner = true -transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 5.9603, 3.56, 4) +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 3.4003, 3.56, 4) [node name="Levels" type="Node3D" parent="."] unique_name_in_owner = true @@ -117,3 +126,7 @@ spot_angle = 26.1774 [node name="起点洞穴05" parent="Levels/起点" instance=ExtResource("2_clf01")] transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 64, 0, 0) size = Vector3i(2, 2, 1) + +[node name="起点洞穴06" parent="Levels/起点" instance=ExtResource("2_clf01")] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 64, 0, 6.4) +size = Vector3i(2, 2, 1) diff --git a/script/_global/util.gd b/script/_global/util.gd index 79dbb41..6e41d9b 100644 --- a/script/_global/util.gd +++ b/script/_global/util.gd @@ -33,6 +33,11 @@ func get_level_grid_pos(pos: Vector3) -> Vector3i: var ret: Vector3i = Vector3i(get_div_scale(pos.x, grid_size), get_div_scale(pos.y, grid_size), get_div_scale(pos.z, grid_size)) return ret +func get_level_grid_pos2(pos: Vector3) -> Vector3i: + var grid_size: float = Setting.pixel_size* Setting.grid_pixel_size * 2 + var ret: Vector3i = Vector3i(get_div_scale(pos.x, grid_size), get_div_scale(pos.y, grid_size), get_div_scale(pos.z, grid_size)) + return ret + func get_level_float_pos(pos: Vector3i) -> Vector3: var grid_size: float = Setting.pixel_size* Setting.grid_pixel_size diff --git a/script/level/level.gd b/script/level/level.gd index 4741d56..c0cc816 100644 --- a/script/level/level.gd +++ b/script/level/level.gd @@ -11,7 +11,7 @@ var born_pos: Vector3 func init() -> void: grid_block_material.set_shader_parameter("is_link", false) grid_block_material.set_shader_parameter("is_target", true) - grid_block_material.set_shader_parameter("show_air_wall", false) + grid_block_material.set_shader_parameter("is_focus", true) func get_level_instance_list() -> Array[LevelInstance]: @@ -28,15 +28,11 @@ func get_level_instance_list() -> Array[LevelInstance]: rooms_node_child_child.level_area_cfg = rooms_node_child.cfg rooms_node_child_child.set_level_range_visible(false) level_instance_list.append(rooms_node_child_child) - rooms_node_child_child.init_character_spots(level_character) + rooms_node_child_child.init() return level_instance_list -func set_level_loading_rate(rate: float) -> void: - grid_block_material.set_shader_parameter("focus_rate", rate) - - func get_born_pos() -> Vector3: if not born_pos: var born_pos_node: Node3D = %BornPos as Node3D diff --git a/script/level/level_instance.gd b/script/level/level_instance.gd index 2c5d785..0ae1041 100644 --- a/script/level/level_instance.gd +++ b/script/level/level_instance.gd @@ -10,16 +10,20 @@ class_name LevelInstance _on_size_change() @export var is_force_battle: bool - @export var enemy_nums: Array[LevelEnemy] @onready var grid_block_material: Material = load("res://render/material/level_grid_block.tres") as Material -var level_area_cfg: LevelAreaCfg #运行时设置 -var character_spots: Array[ChacacterSpot] #运行时设置 -var character_born_spots: Array[ChacacterBornSpot] #运行时设置 -var level_active_spots: Array[LevelActiveSpot] #运行时设置 -var enemy_cfgs: Array[CharacterCfg] #运行时设置 +#character +var level_area_cfg: LevelAreaCfg +var character_spots: Array[ChacacterSpot] +var character_born_spots: Array[ChacacterBornSpot] +var level_active_spots: Array[LevelActiveSpot] +var enemy_cfgs: Array[CharacterCfg] +#main +var mark_white_list: Array[Vector3i] +var mark_black_list: Array[Vector3i] +var grid_main_cache_cells: Array[GridMainCacheCellData] class ChacacterSpot: @@ -37,6 +41,12 @@ class LevelActiveSpot: var scene: PackedScene +class GridMainCacheCellData: + var pos: Vector3i + var id: int + var orientation: int + + func _on_size_change() -> void: var level_range: CSGBox3D = $LevelRange as CSGBox3D var size_basic: Vector3 = Setting.size_basic @@ -44,7 +54,6 @@ func _on_size_change() -> void: level_range.position = level_range.size / 2 - func get_level_size() -> Vector2: var level_range: CSGBox3D = $LevelRange as CSGBox3D var level_size: Vector3 = level_range.size @@ -61,51 +70,138 @@ func set_level_range_visible(value: bool) -> void: level_range.visible = value -func init_character_spots(level_character: GridMap) -> void: +func init() -> void: + init_level_character() + init_level_main() + + +func set_focus() -> void: + var level_range: CSGBox3D = $LevelRange as CSGBox3D + var level_size: Vector3 = level_range.size + var focus_min: Vector3 = get_global_position() + Vector3(0.640001, 0.640001, 0.640001) + var focus_max: Vector3 = get_global_position() + level_size - Vector3(0.640001, 0.639999, 0.639999) + grid_block_material.set_shader_parameter("focus_min", focus_min) + grid_block_material.set_shader_parameter("focus_max", focus_max) + + +func init_level_character() -> void: + var level_character: GridMap = %LevelGridCharacter as GridMap character_spots = [] character_born_spots = [] level_active_spots = [] enemy_cfgs = [] - var id_min: Vector3i = Util.get_level_grid_pos(pos_min()) - var id_max: Vector3i = Util.get_level_grid_pos(pos_max()) - var mesh_library: MeshLibrary = level_character.get_mesh_library() - for x in range(id_min.x, id_max.x): - for y in range(id_min.y, id_max.y): - for z in range(id_min.z, id_max.z): - var pos: Vector3i = Vector3i(x, y, z) - var float_pos: Vector3 = Util.get_level_float_pos(pos) + Vector3(0.32, 0, 0.32) - var item_id: int = level_character.get_cell_item(pos) - if item_id == GridMap.INVALID_CELL_ITEM: - continue - var item_name: String = mesh_library.get_item_name(item_id) - if item_name.begins_with("chara_spot_"): - var character_born_spot = ChacacterBornSpot.new() - character_born_spot.pos = float_pos - character_born_spots.append(character_born_spot) - elif item_name.begins_with("chara_enemy_"): - var character_name: String = item_name.trim_prefix("chara_enemy_") - var character_cfg: CharacterCfg = Util.get_character_cfg_by_name(character_name) - if not character_cfg: - continue - var character_spot = ChacacterSpot.new() - character_spot.cfg = character_cfg - character_spot.pos = float_pos - character_spots.append(character_spot) - elif item_name.begins_with("chara_active_"): - var scene_name: String = item_name.trim_prefix("chara_active_") - var scene: PackedScene = Util.get_level_active_scene_by_name(scene_name) - if not scene: - continue - var level_active_spot = LevelActiveSpot.new() - level_active_spot.scene = scene - level_active_spot.pos = float_pos - level_active_spots.append(level_active_spot) + var id_min: Vector3i = Util.get_level_grid_pos(pos_min()) + var id_max: Vector3i = Util.get_level_grid_pos(pos_max()) + var mesh_library: MeshLibrary = level_character.get_mesh_library() + var used_cells: Array[Vector3i] = level_character.get_used_cells() + for pos in used_cells: + if pos.x < id_min.x or pos.x > id_max.x: + continue + if pos.y < id_min.y or pos.y > id_max.y: + continue + if pos.z < id_min.z or pos.z > id_max.z: + continue + var float_pos: Vector3 = Util.get_level_float_pos(pos) + Vector3(0.32, 0, 0.32) + var item_id: int = level_character.get_cell_item(pos) + if item_id == GridMap.INVALID_CELL_ITEM: + continue + var item_name: String = mesh_library.get_item_name(item_id) + if item_name.begins_with("chara_spot_"): + var character_born_spot = ChacacterBornSpot.new() + character_born_spot.pos = float_pos + character_born_spots.append(character_born_spot) + elif item_name.begins_with("chara_enemy_"): + var character_name: String = item_name.trim_prefix("chara_enemy_") + var character_cfg: CharacterCfg = Util.get_character_cfg_by_name(character_name) + if not character_cfg: + continue + var character_spot = ChacacterSpot.new() + character_spot.cfg = character_cfg + character_spot.pos = float_pos + character_spots.append(character_spot) + elif item_name.begins_with("chara_active_"): + var scene_name: String = item_name.trim_prefix("chara_active_") + var scene: PackedScene = Util.get_level_active_scene_by_name(scene_name) + if not scene: + continue + var level_active_spot = LevelActiveSpot.new() + level_active_spot.scene = scene + level_active_spot.pos = float_pos + level_active_spots.append(level_active_spot) for enemy_num: LevelEnemy in enemy_nums: for i in enemy_num.num: enemy_cfgs.append(enemy_num.cfg) +func init_level_main() -> void: + var level_main: GridMap = %LevelGridMain as GridMap + var id_min: Vector3i = Util.get_level_grid_pos2(outter_pos_min()) + var id_max: Vector3i = Util.get_level_grid_pos2(outter_pos_max()) + print(id_min, id_max) + # 正前面 + for x in range(id_min.x, id_max.x): + for y in range(id_min.y, id_max.y): + var pos: Vector3i = Vector3i(x, id_max.z, y) + add_grid_main_cache_cell(level_main, pos) + # 底面黑块 + for x in range(id_min.x, id_max.x): + for z in range(id_min.z, id_max.z): + var pos: Vector3i = Vector3i(x, id_min.y, z) + var id: int = level_main.get_cell_item(pos) + if not(id == GridMap.INVALID_CELL_ITEM or z == id_max.z): + continue + mark_black_list.append(pos) + # 底面黑块延申空气墙 + for mark_black in mark_black_list: + for y in range(id_min.y, id_max.y -1): + var pos: Vector3i = Vector3i(mark_black.x, y, mark_black.z) + add_grid_main_cache_cell(level_main, pos) + mark_white_list.append(pos) + # 顶面 + for x in range(id_min.x, id_max.x): + for z in range(id_min.z, id_max.z): + var pos: Vector3i = Vector3i(x, id_max.y, z) + add_grid_main_cache_cell(level_main, pos) + var pos_down: Vector3i = Vector3i(x, id_max.y - 1, z) + if level_main.get_cell_item(pos_down) == GridMap.INVALID_CELL_ITEM: + mark_white_list.append(pos) + else: + mark_black_list.append(pos) + + +func add_grid_main_cache_cell(level_main: GridMap, pos: Vector3i) -> void: + var id: int = level_main.get_cell_item(pos) + if id == GridMap.INVALID_CELL_ITEM: + return + var cache_data = GridMainCacheCellData.new() + cache_data.pos = pos + cache_data.id = id + cache_data.orientation= level_main.get_cell_item_orientation(pos) + grid_main_cache_cells.append(cache_data) + + +func set_replace(is_active: bool)-> void: + print("set_replace") + # print("mark_black_list", mark_black_list) + # print("mark_white_list", mark_white_list) + var level_main: GridMap = %LevelGridMain as GridMap + if is_active: + for cache_data in grid_main_cache_cells: + level_main.set_cell_item(cache_data.pos, GridMap.INVALID_CELL_ITEM) + # for pos in mark_white_list: + # level_main.set_cell_item(pos, 0) + for pos in mark_black_list: + level_main.set_cell_item(pos, 1) + else: + for pos in mark_white_list: + level_main.set_cell_item(pos, GridMap.INVALID_CELL_ITEM) + for pos in mark_black_list: + level_main.set_cell_item(pos, GridMap.INVALID_CELL_ITEM) + for cache_data in grid_main_cache_cells: + level_main.set_cell_item(cache_data.pos, cache_data.id, cache_data.orientation) + + func get_character_spots() -> Array[ChacacterSpot]: return character_spots @@ -132,6 +228,14 @@ func pos_max() -> Vector3: return get_global_position() + level_size +func outter_pos_min() -> Vector3: + return pos_min() - Vector3(0.72, 0.72, 0.72) + + +func outter_pos_max() -> Vector3: + return pos_max() - Vector3(0.72, 0.72, 0.72) + + func is_in_active_area(pos: Vector3) -> bool: var active_pos_min: Vector3 = pos_min() + Vector3(0.96, 0, 0.96) var active_pos_max: Vector3 = pos_max() - Vector3(0.96, 0, 0.96) diff --git a/script/manager/level_manager.gd b/script/manager/level_manager.gd index 14a7e3f..b000a78 100644 --- a/script/manager/level_manager.gd +++ b/script/manager/level_manager.gd @@ -13,6 +13,7 @@ var level_doors: Array[LevelDoor] var is_level_active: bool var enemy_count: int #由关卡生成的怪物数量 var current_enmey: Array[int] #当前存活怪物id +var replace_cache: Array[LevelInstance] func _ready(): @@ -43,7 +44,6 @@ func _process(delta) -> void: level_loading_rate += delta *2 if level_loading_rate > 1: level_loading_rate = 1 - level.set_level_loading_rate(level_loading_rate) func get_born_pos() -> Vector3: @@ -88,6 +88,7 @@ func set_player_position(pos: Vector3) -> void: check_level_active(pos) return + new_level_instance.set_focus() cur_level_instance = new_level_instance enter_level() @@ -111,9 +112,15 @@ func enter_level() -> void: level_character_born_spots = cur_level_instance.get_character_born_spots() level_enemy_cfgs = cur_level_instance.get_enemy_cfgs() enemy_count = 0 + #更新cell + replace_cache.append(cur_level_instance) + if len(replace_cache) >= 3: + var replace_level_instance: LevelInstance = replace_cache.pop_at(0) + if replace_level_instance != cur_level_instance: + replace_level_instance.set_replace(false) + cur_level_instance.set_replace(true) level_loading_rate = 1-level_loading_rate - level.set_level_loading_rate(level_loading_rate) SignalManager.level_size_change.emit(cur_level_instance.get_level_size()) SignalManager.level_pos_change.emit(cur_level_instance.get_level_pos()) @@ -157,7 +164,7 @@ func enemy_born(count: int) -> bool: count = min(count, count_max - enemy_count) if count == 0: return false - var count_start = enemy_count + var count_start: int = enemy_count for i in count: var cfg_index: int = count_start + i var cfg: CharacterCfg = level_enemy_cfgs[cfg_index]