动态生成阻挡和空气墙

master
chendian 9 months ago
parent c5c8360b57
commit cd796cf425

@ -8,7 +8,9 @@
render_priority = 0
shader = ExtResource("1_ggegd")
shader_parameter/is_target = false
shader_parameter/is_focus = false
shader_parameter/target_position = Vector3(0, 1.28, 1)
shader_parameter/show_air_wall = true
shader_parameter/focus_min = Vector3(0, 0, 0)
shader_parameter/focus_max = Vector3(0, 0, 0)
shader_parameter/tex_noise1 = ExtResource("2_mif3q")
shader_parameter/tex_noise2 = ExtResource("3_k18qr")

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

@ -10,6 +10,11 @@ var print_item: Callable = print_item_func
@export_tool_button("替换", "Callable")
var replace_id: Callable = replace_id_func
@export_group("整体平移")
@export var translate_dir: Vector3i
@export_tool_button("平移", "Callable")
var translate: Callable = translate_func
func print_item_func ()-> void:
@ -28,3 +33,28 @@ func replace_id_func()->void:
for cell_position in get_used_cells():
if get_cell_item(cell_position) == id_from:
set_cell_item(cell_position, id_to, get_cell_item_orientation(cell_position))
func translate_func() -> void:
if translate_dir.x != 0:
var used_cells: Array[Vector3i] = get_used_cells()
used_cells.sort_custom(func(a, b): return (a.x > b.x) if translate_dir.x >= 0 else (b.x < a.x))
for cell_position in used_cells:
print(cell_position.x)
set_cell_item(cell_position + Vector3i(translate_dir.x, 0, 0), get_cell_item(cell_position), get_cell_item_orientation(cell_position))
set_cell_item(cell_position, GridMap.INVALID_CELL_ITEM)
if translate_dir.y != 0:
var used_cells: Array[Vector3i] = get_used_cells()
used_cells.sort_custom(func(a, b): return (a.y > b.y) if translate_dir.y >= 0 else (b.y < a.y))
for cell_position in used_cells:
set_cell_item(cell_position + Vector3i(0, translate_dir.y, 0), get_cell_item(cell_position), get_cell_item_orientation(cell_position))
set_cell_item(cell_position, GridMap.INVALID_CELL_ITEM)
if translate_dir.z != 0:
var used_cells: Array[Vector3i] = get_used_cells()
used_cells.sort_custom(func(a, b): return (a.z > b.z) if translate_dir.z >= 0 else (b.z < a.z))
for cell_position in used_cells:
set_cell_item(cell_position + Vector3i(0, 0, translate_dir.z), get_cell_item(cell_position), get_cell_item_orientation(cell_position))
set_cell_item(cell_position, GridMap.INVALID_CELL_ITEM)

@ -136,17 +136,16 @@ func init_level_character() -> void:
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)
var id_min: Vector3i = Util.get_level_grid_pos2(pos_min())
var id_max: Vector3i = Util.get_level_grid_pos2(pos_max())
# 正前面
for x in range(id_min.x, id_max.x):
for y in range(id_min.y, id_max.y):
for x in range(id_min.x, id_max.x+1):
for y in range(id_min.y, id_max.y+1):
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):
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_min.y, z)
var id: int = level_main.get_cell_item(pos)
if not(id == GridMap.INVALID_CELL_ITEM or z == id_max.z):
@ -159,8 +158,8 @@ func init_level_main() -> void:
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):
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)
@ -182,15 +181,12 @@ func add_grid_main_cache_cell(level_main: GridMap, pos: Vector3i) -> void:
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_white_list:
level_main.set_cell_item(pos, 0)
for pos in mark_black_list:
level_main.set_cell_item(pos, 1)
else:

Loading…
Cancel
Save