|
|
|
|
@ -134,7 +134,7 @@ 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()
|
|
|
|
|
var focus_max: Vector3 = get_global_position() + level_size
|
|
|
|
|
var focus_max: Vector3 = get_global_position() + level_size + Vector3(0, Setting.pixel_size * Setting.grid_pixel_size, Setting.pixel_size * Setting.grid_pixel_size)
|
|
|
|
|
grid_block_material.set_shader_parameter("focus_min", focus_min)
|
|
|
|
|
grid_block_material.set_shader_parameter("focus_max", focus_max)
|
|
|
|
|
|
|
|
|
|
@ -200,27 +200,32 @@ func init_level_main() -> void:
|
|
|
|
|
# 需要延申空气墙的黑块
|
|
|
|
|
var air_wall_mark_black_list: Array[Vector3i] = []
|
|
|
|
|
# 正前面黑块
|
|
|
|
|
for x in range(id_min.x + 1, id_max.x):
|
|
|
|
|
for x in range(id_min.x, id_max.x + 1):
|
|
|
|
|
var pos: Vector3i = Vector3i(x, id_min.y, id_max.z)
|
|
|
|
|
var has_link = false
|
|
|
|
|
var mark_black_list_check: Array[Vector3i] = []
|
|
|
|
|
for y in range(id_min.y, id_max.y):
|
|
|
|
|
var pos_check: Vector3i = Vector3i(x, y, id_max.z)
|
|
|
|
|
for y in range(id_min.y, id_max.y - 1):
|
|
|
|
|
var pos_check: Vector3i = Vector3i(x, y + 1, id_max.z)
|
|
|
|
|
if not check_grid(level_main, pos_check):
|
|
|
|
|
has_link = true
|
|
|
|
|
break
|
|
|
|
|
mark_black_list_check.append(pos_check)
|
|
|
|
|
var pos_forward: Vector3i = Vector3i(x, y + 1, id_max.z + 1)
|
|
|
|
|
var float_pos_check: Vector3 = Util.get_level_float_pos2(pos_forward)
|
|
|
|
|
if Global.level_mgr.get_level_by_pos(float_pos_check):
|
|
|
|
|
if y + 1 < id_max.y:
|
|
|
|
|
air_wall_mark_black_list.append(pos_check + Vector3i(0, 1, 0))
|
|
|
|
|
has_link = true
|
|
|
|
|
break
|
|
|
|
|
mark_black_list_check.append(Vector3i(x, y, id_max.z))
|
|
|
|
|
if has_link:
|
|
|
|
|
for pos_check in mark_black_list_check:
|
|
|
|
|
mark_black_list.append(pos_check)
|
|
|
|
|
air_wall_mark_black_list.append(pos_check)
|
|
|
|
|
pass
|
|
|
|
|
# for pos_check in mark_black_list_check:
|
|
|
|
|
# mark_black_list.append(pos_check)
|
|
|
|
|
else:
|
|
|
|
|
mark_black_list.append(pos)
|
|
|
|
|
air_wall_mark_black_list.append(pos)
|
|
|
|
|
mark_black_list.append(pos)
|
|
|
|
|
|
|
|
|
|
# 左面黑块
|
|
|
|
|
var black_y_max_left: int = id_max.y - 1
|
|
|
|
|
for z in range(id_min.z + 1, id_max.z + 1):
|
|
|
|
|
for z in range(id_min.z + 1, id_max.z):
|
|
|
|
|
var has_link = false
|
|
|
|
|
var mark_black_list_check: Array[Vector3i] = []
|
|
|
|
|
for y in range(id_min.y - 1, black_y_max_left):
|
|
|
|
|
@ -240,7 +245,7 @@ func init_level_main() -> void:
|
|
|
|
|
|
|
|
|
|
# 右边面黑块
|
|
|
|
|
var black_y_max_right: int = id_max.y - 1
|
|
|
|
|
for z in range(id_min.z + 1, id_max.z + 1):
|
|
|
|
|
for z in range(id_min.z + 1, id_max.z):
|
|
|
|
|
var has_link = false
|
|
|
|
|
var mark_black_list_check: Array[Vector3i] = []
|
|
|
|
|
for y in range(id_min.y - 1, black_y_max_right):
|
|
|
|
|
@ -277,7 +282,7 @@ func init_level_main() -> void:
|
|
|
|
|
var pos_down: Vector3i = Vector3i(x, id_max.y - 1, z)
|
|
|
|
|
var is_link = not check_grid(level_main, pos) and not check_grid(level_main, pos_up) and not check_grid(level_main, pos_down)
|
|
|
|
|
if is_link and not pos_down in mark_white_list:
|
|
|
|
|
var float_pos_check: Vector3 = Util.get_level_float_pos2(pos_up) + Vector3(0.64, 0, 0.64)
|
|
|
|
|
var float_pos_check: Vector3 = Util.get_level_float_pos2(pos_up)
|
|
|
|
|
if Global.level_mgr.get_level_by_pos(float_pos_check):
|
|
|
|
|
continue
|
|
|
|
|
add_grid_main_cache_cell(level_main, pos)
|
|
|
|
|
|