fix 关卡

master
chendian 9 months ago
parent 8c1c2f1721
commit 8a3c2ca712

@ -1,4 +1,5 @@
shader_type spatial;
render_mode cull_disabled;
uniform bool is_target = false;
uniform bool is_focus = false;
uniform vec3 target_position = vec3(0, 1.28, 1);

File diff suppressed because one or more lines are too long

@ -133,8 +133,8 @@ func set_level_range_visible(value: bool) -> void:
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.640001, 0.640001)
var focus_min: Vector3 = get_global_position()
var focus_max: Vector3 = get_global_position() + level_size
grid_block_material.set_shader_parameter("focus_min", focus_min)
grid_block_material.set_shader_parameter("focus_max", focus_max)
@ -221,7 +221,6 @@ func init_level_main() -> void:
# 左面黑块
var black_y_max_left: int = id_max.y - 1
for z in range(id_min.z + 1, id_max.z + 1):
var pos: Vector3i = Vector3i(id_min.x, id_min.y, z)
var has_link = false
var mark_black_list_check: Array[Vector3i] = []
for y in range(id_min.y - 1, black_y_max_left):
@ -242,7 +241,6 @@ 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):
var pos: Vector3i = Vector3i(id_max.x, id_min.y, z)
var has_link = false
var mark_black_list_check: Array[Vector3i] = []
for y in range(id_min.y - 1, black_y_max_right):
@ -275,16 +273,21 @@ func init_level_main() -> void:
for x in range(id_min.x, id_max.x + 1):
for z in range(id_min.z, id_max.z + 1):
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 or pos_down in mark_white_list:
var pos_up: Vector3i = Vector3i(x, id_max.y + 1, z)
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)
if Global.level_mgr.get_level_by_pos(float_pos_check) and not check_grid(level_main, pos_up):
if Global.level_mgr.get_level_by_pos(float_pos_check):
continue
add_grid_main_cache_cell(level_main, pos)
if pos_down in mark_white_list:
mark_white_list.append(pos)
else:
if check_grid(level_main, pos_down):
mark_black_list.append(pos)
else:
mark_white_list.append(pos)
func check_grid(level_main: GridMap, pos: Vector3i) -> bool:
@ -303,17 +306,9 @@ func add_grid_main_cache_cell(level_main: GridMap, pos: Vector3i) -> void:
grid_main_cache_cells.append(cache_data)
func set_replace(is_active: bool, last_grid_main_cache_cells: Array[GridMainCacheCellData] = []) -> void:
func set_replace(is_active: bool) -> void:
var level_main: GridMap = %LevelGridMain as GridMap
if is_active:
var id_min: Vector3i = Util.get_level_grid_pos2(pos_min())
var id_max: Vector3i = Util.get_level_grid_pos2(pos_max())
for cache_data in last_grid_main_cache_cells:
if cache_data.pos.x < id_min.x or cache_data.pos.z < id_min.z or cache_data.pos.x > id_max.x or cache_data.pos.z > id_max.z:
continue
level_main.set_cell_item(cache_data.pos, cache_data.id, cache_data.orientation)
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:
@ -343,10 +338,6 @@ func get_level_active_spots() -> Array[LevelActiveSpot]:
return level_active_spots
func get_grid_main_cache_cells() -> Array[GridMainCacheCellData]:
return grid_main_cache_cells
func pos_min() -> Vector3:
return get_global_position()

@ -13,7 +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]
var replace_cache: LevelInstance
func _ready():
@ -120,16 +120,10 @@ func enter_level() -> void:
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)
if len(replace_cache) >= 2:
var replace_level_instance: LevelInstance = replace_cache[0]
cur_level_instance.set_replace(true, replace_level_instance.get_grid_main_cache_cells())
else:
if replace_cache:
replace_cache.set_replace(false)
cur_level_instance.set_replace(true)
replace_cache = cur_level_instance
SignalManager.level_size_change.emit(cur_level_instance.get_level_size())
SignalManager.level_pos_change.emit(cur_level_instance.get_level_pos())

Loading…
Cancel
Save