|
|
|
@ -10,7 +10,7 @@ var view_focus_off: Callable = view_focus_off_func
|
|
|
|
|
|
|
|
|
|
|
|
@export var size: Vector3i = Vector3i.ONE:
|
|
|
|
@export var size: Vector3i = Vector3i.ONE:
|
|
|
|
set(value):
|
|
|
|
set(value):
|
|
|
|
if (value.x<1) or (value.y<1) or (value.z<1):
|
|
|
|
if (value.x < 1) or (value.y < 1) or (value.z < 1):
|
|
|
|
value = Vector3i.ONE
|
|
|
|
value = Vector3i.ONE
|
|
|
|
size = value
|
|
|
|
size = value
|
|
|
|
_on_size_change()
|
|
|
|
_on_size_change()
|
|
|
|
@ -21,6 +21,7 @@ var view_focus_off: Callable = view_focus_off_func
|
|
|
|
@export var id_from: int = 0
|
|
|
|
@export var id_from: int = 0
|
|
|
|
@export var id_to: int = 0
|
|
|
|
@export var id_to: int = 0
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
@export_tool_button("替换", "Callable")
|
|
|
|
@export_tool_button("替换", "Callable")
|
|
|
|
var replace_id: Callable = replace_id_func
|
|
|
|
var replace_id: Callable = replace_id_func
|
|
|
|
|
|
|
|
|
|
|
|
@ -28,40 +29,40 @@ var replace_id: Callable = replace_id_func
|
|
|
|
var print_item: Callable = print_item_func
|
|
|
|
var print_item: Callable = print_item_func
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
func view_focus_on_func()->void:
|
|
|
|
func view_focus_on_func() -> void:
|
|
|
|
grid_block_material.set_shader_parameter("is_focus", true)
|
|
|
|
grid_block_material.set_shader_parameter("is_focus", true)
|
|
|
|
set_focus()
|
|
|
|
set_focus()
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
func view_focus_off_func()->void:
|
|
|
|
func view_focus_off_func() -> void:
|
|
|
|
grid_block_material.set_shader_parameter("is_focus", false)
|
|
|
|
grid_block_material.set_shader_parameter("is_focus", false)
|
|
|
|
set_focus()
|
|
|
|
set_focus()
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
func replace_id_func()->void:
|
|
|
|
func replace_id_func() -> void:
|
|
|
|
var level_main: GridMap = %LevelGridMain as GridMap
|
|
|
|
var level_main: GridMap = %LevelGridMain as GridMap
|
|
|
|
var id_min: Vector3i = Util.get_level_grid_pos2(pos_min())
|
|
|
|
var id_min: Vector3i = Util.get_level_grid_pos2(pos_min())
|
|
|
|
var id_max: Vector3i = Util.get_level_grid_pos2(pos_max())
|
|
|
|
var id_max: Vector3i = Util.get_level_grid_pos2(pos_max())
|
|
|
|
|
|
|
|
|
|
|
|
for x in range(id_min.x, id_max.x+1):
|
|
|
|
for x in range(id_min.x, id_max.x + 1):
|
|
|
|
for y in range(id_min.y, id_max.y+1):
|
|
|
|
for y in range(id_min.y, id_max.y + 1):
|
|
|
|
for z in range(id_min.z, id_max.z+1):
|
|
|
|
for z in range(id_min.z, id_max.z + 1):
|
|
|
|
var pos: Vector3i = Vector3i(x, y, z)
|
|
|
|
var pos: Vector3i = Vector3i(x, y, z)
|
|
|
|
if level_main.get_cell_item(pos) == id_from:
|
|
|
|
if level_main.get_cell_item(pos) == id_from:
|
|
|
|
level_main.set_cell_item(pos, id_to, level_main.get_cell_item_orientation(pos))
|
|
|
|
level_main.set_cell_item(pos, id_to, level_main.get_cell_item_orientation(pos))
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
func print_item_func ()-> void:
|
|
|
|
func print_item_func() -> void:
|
|
|
|
var level_main: GridMap = %LevelGridMain as GridMap
|
|
|
|
var level_main: GridMap = %LevelGridMain as GridMap
|
|
|
|
var id_min: Vector3i = Util.get_level_grid_pos2(pos_min())
|
|
|
|
var id_min: Vector3i = Util.get_level_grid_pos2(pos_min())
|
|
|
|
var id_max: Vector3i = Util.get_level_grid_pos2(pos_max())
|
|
|
|
var id_max: Vector3i = Util.get_level_grid_pos2(pos_max())
|
|
|
|
var mesh_library: MeshLibrary = level_main.get_mesh_library()
|
|
|
|
var mesh_library: MeshLibrary = level_main.get_mesh_library()
|
|
|
|
var item_count_map: Dictionary = {}
|
|
|
|
var item_count_map: Dictionary = {}
|
|
|
|
for x in range(id_min.x, id_max.x+1):
|
|
|
|
for x in range(id_min.x, id_max.x + 1):
|
|
|
|
for y in range(id_min.y, id_max.y+1):
|
|
|
|
for y in range(id_min.y, id_max.y + 1):
|
|
|
|
for z in range(id_min.z, id_max.z+1):
|
|
|
|
for z in range(id_min.z, id_max.z + 1):
|
|
|
|
var pos: Vector3i = Vector3i(x, y, z)
|
|
|
|
var pos: Vector3i = Vector3i(x, y, z)
|
|
|
|
var item_id: int = level_main.get_cell_item(pos)
|
|
|
|
var item_id: int = level_main.get_cell_item(pos)
|
|
|
|
if item_id != GridMap.INVALID_CELL_ITEM:
|
|
|
|
if item_id != GridMap.INVALID_CELL_ITEM:
|
|
|
|
if item_count_map.has(item_id):
|
|
|
|
if item_count_map.has(item_id):
|
|
|
|
item_count_map[item_id] += 1
|
|
|
|
item_count_map[item_id] += 1
|
|
|
|
@ -71,7 +72,6 @@ func print_item_func ()-> void:
|
|
|
|
print("[", item_id, "]", mesh_library.get_item_name(item_id), ":", item_count_map[item_id])
|
|
|
|
print("[", item_id, "]", mesh_library.get_item_name(item_id), ":", item_count_map[item_id])
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
@onready var grid_block_material: Material = load("res://render/material/level_grid_block.tres") as Material
|
|
|
|
@onready var grid_block_material: Material = load("res://render/material/level_grid_block.tres") as Material
|
|
|
|
|
|
|
|
|
|
|
|
#character
|
|
|
|
#character
|
|
|
|
@ -109,14 +109,14 @@ class GridMainCacheCellData:
|
|
|
|
|
|
|
|
|
|
|
|
func _on_size_change() -> void:
|
|
|
|
func _on_size_change() -> void:
|
|
|
|
var level_range: CSGBox3D = $LevelRange as CSGBox3D
|
|
|
|
var level_range: CSGBox3D = $LevelRange as CSGBox3D
|
|
|
|
var size_basic: Vector3 = Setting.size_basic
|
|
|
|
var size_basic: Vector3 = Setting.size_basic
|
|
|
|
level_range.size = Vector3(size.x*size_basic.x, size.y*size_basic.y, size.z*size_basic.z)
|
|
|
|
level_range.size = Vector3(size.x * size_basic.x, size.y * size_basic.y, size.z * size_basic.z)
|
|
|
|
level_range.position = level_range.size / 2
|
|
|
|
level_range.position = level_range.size / 2
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
func get_level_size() -> Vector2:
|
|
|
|
func get_level_size() -> Vector2:
|
|
|
|
var level_range: CSGBox3D = $LevelRange as CSGBox3D
|
|
|
|
var level_range: CSGBox3D = $LevelRange as CSGBox3D
|
|
|
|
var level_size: Vector3 = level_range.size
|
|
|
|
var level_size: Vector3 = level_range.size
|
|
|
|
return Vector2(level_size.x, level_size.z)
|
|
|
|
return Vector2(level_size.x, level_size.z)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
@ -132,22 +132,22 @@ func set_level_range_visible(value: bool) -> void:
|
|
|
|
|
|
|
|
|
|
|
|
func set_focus() -> void:
|
|
|
|
func set_focus() -> void:
|
|
|
|
var level_range: CSGBox3D = $LevelRange as CSGBox3D
|
|
|
|
var level_range: CSGBox3D = $LevelRange as CSGBox3D
|
|
|
|
var level_size: Vector3 = level_range.size
|
|
|
|
var level_size: Vector3 = level_range.size
|
|
|
|
var focus_min: Vector3 = get_global_position() - Vector3(0.640001, 0.640001, 0.640001)
|
|
|
|
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_max: Vector3 = get_global_position() + level_size + Vector3(0.640001, 0.640001, 0.640001)
|
|
|
|
grid_block_material.set_shader_parameter("focus_min", focus_min)
|
|
|
|
grid_block_material.set_shader_parameter("focus_min", focus_min)
|
|
|
|
grid_block_material.set_shader_parameter("focus_max", focus_max)
|
|
|
|
grid_block_material.set_shader_parameter("focus_max", focus_max)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
func init_level_character() -> void:
|
|
|
|
func init_level_character() -> void:
|
|
|
|
var level_character: GridMap = %LevelGridCharacter as GridMap
|
|
|
|
var level_character: GridMap = %LevelGridCharacter as GridMap
|
|
|
|
character_spots = []
|
|
|
|
character_spots = []
|
|
|
|
character_born_spots = []
|
|
|
|
character_born_spots = []
|
|
|
|
level_active_spots = []
|
|
|
|
level_active_spots = []
|
|
|
|
enemy_cfgs = []
|
|
|
|
enemy_cfgs = []
|
|
|
|
var id_min: Vector3i = Util.get_level_grid_pos(pos_min())
|
|
|
|
var id_min: Vector3i = Util.get_level_grid_pos(pos_min())
|
|
|
|
var id_max: Vector3i = Util.get_level_grid_pos(pos_max())
|
|
|
|
var id_max: Vector3i = Util.get_level_grid_pos(pos_max())
|
|
|
|
var mesh_library: MeshLibrary = level_character.get_mesh_library()
|
|
|
|
var mesh_library: MeshLibrary = level_character.get_mesh_library()
|
|
|
|
var used_cells: Array[Vector3i] = level_character.get_used_cells()
|
|
|
|
var used_cells: Array[Vector3i] = level_character.get_used_cells()
|
|
|
|
for pos in used_cells:
|
|
|
|
for pos in used_cells:
|
|
|
|
if pos.x < id_min.x or pos.x > id_max.x:
|
|
|
|
if pos.x < id_min.x or pos.x > id_max.x:
|
|
|
|
@ -157,7 +157,7 @@ func init_level_character() -> void:
|
|
|
|
if pos.z < id_min.z or pos.z > id_max.z:
|
|
|
|
if pos.z < id_min.z or pos.z > id_max.z:
|
|
|
|
continue
|
|
|
|
continue
|
|
|
|
var float_pos: Vector3 = Util.get_level_float_pos(pos)
|
|
|
|
var float_pos: Vector3 = Util.get_level_float_pos(pos)
|
|
|
|
var item_id: int = level_character.get_cell_item(pos)
|
|
|
|
var item_id: int = level_character.get_cell_item(pos)
|
|
|
|
if item_id == GridMap.INVALID_CELL_ITEM:
|
|
|
|
if item_id == GridMap.INVALID_CELL_ITEM:
|
|
|
|
continue
|
|
|
|
continue
|
|
|
|
var item_name: String = mesh_library.get_item_name(item_id)
|
|
|
|
var item_name: String = mesh_library.get_item_name(item_id)
|
|
|
|
@ -166,7 +166,7 @@ func init_level_character() -> void:
|
|
|
|
character_born_spot.pos = float_pos
|
|
|
|
character_born_spot.pos = float_pos
|
|
|
|
character_born_spots.append(character_born_spot)
|
|
|
|
character_born_spots.append(character_born_spot)
|
|
|
|
elif item_name.begins_with("chara_enemy_"):
|
|
|
|
elif item_name.begins_with("chara_enemy_"):
|
|
|
|
var character_name: String = item_name.trim_prefix("chara_enemy_")
|
|
|
|
var character_name: String = item_name.trim_prefix("chara_enemy_")
|
|
|
|
var character_cfg: CharacterCfg = Util.get_character_cfg_by_name(character_name)
|
|
|
|
var character_cfg: CharacterCfg = Util.get_character_cfg_by_name(character_name)
|
|
|
|
if not character_cfg:
|
|
|
|
if not character_cfg:
|
|
|
|
continue
|
|
|
|
continue
|
|
|
|
@ -181,7 +181,7 @@ func init_level_character() -> void:
|
|
|
|
continue
|
|
|
|
continue
|
|
|
|
var level_active_spot = LevelActiveSpot.new()
|
|
|
|
var level_active_spot = LevelActiveSpot.new()
|
|
|
|
level_active_spot.scene = scene
|
|
|
|
level_active_spot.scene = scene
|
|
|
|
level_active_spot.pos = float_pos
|
|
|
|
level_active_spot.pos = float_pos
|
|
|
|
level_active_spots.append(level_active_spot)
|
|
|
|
level_active_spots.append(level_active_spot)
|
|
|
|
|
|
|
|
|
|
|
|
for enemy_num: LevelEnemy in enemy_nums:
|
|
|
|
for enemy_num: LevelEnemy in enemy_nums:
|
|
|
|
@ -197,82 +197,88 @@ func init_level_main() -> void:
|
|
|
|
var id_min: Vector3i = Util.get_level_grid_pos2(pos_min())
|
|
|
|
var id_min: Vector3i = Util.get_level_grid_pos2(pos_min())
|
|
|
|
var id_max: Vector3i = Util.get_level_grid_pos2(pos_max())
|
|
|
|
var id_max: Vector3i = Util.get_level_grid_pos2(pos_max())
|
|
|
|
|
|
|
|
|
|
|
|
# 底面黑块
|
|
|
|
# 需要延申空气墙的黑块
|
|
|
|
for x in range(id_min.x, id_max.x+1):
|
|
|
|
var air_wall_mark_black_list: Array[Vector3i] = []
|
|
|
|
for z in range(id_min.z, id_max.z+1):
|
|
|
|
# 正前面黑块
|
|
|
|
var pos: Vector3i = Vector3i(x, id_min.y, z)
|
|
|
|
for x in range(id_min.x + 1, id_max.x):
|
|
|
|
var id: int = level_main.get_cell_item(pos)
|
|
|
|
var pos: Vector3i = Vector3i(x, id_min.y, id_max.z)
|
|
|
|
if not(id == GridMap.INVALID_CELL_ITEM or z == id_max.z):
|
|
|
|
var has_link = false
|
|
|
|
continue
|
|
|
|
var mark_black_list_check: Array[Vector3i] = []
|
|
|
|
mark_black_list.append(pos)
|
|
|
|
for y in range(id_min.y, id_max.y):
|
|
|
|
|
|
|
|
var pos_check: Vector3i = Vector3i(x, y, id_max.z)
|
|
|
|
# 底面黑块剔除
|
|
|
|
if not check_grid(level_main, pos_check):
|
|
|
|
var mark_black_remove_list: Array[Vector3i] = []
|
|
|
|
has_link = true
|
|
|
|
for mark_black in mark_black_list:
|
|
|
|
break
|
|
|
|
var is_edge: bool
|
|
|
|
mark_black_list_check.append(pos_check)
|
|
|
|
var check_dir: Vector3i
|
|
|
|
if has_link:
|
|
|
|
if mark_black.x == id_min.x:
|
|
|
|
for pos_check in mark_black_list_check:
|
|
|
|
check_dir = Vector3i(-1, 0, 0); is_edge=true;
|
|
|
|
mark_black_list.append(pos_check)
|
|
|
|
elif mark_black.z == id_min.z:
|
|
|
|
air_wall_mark_black_list.append(pos_check)
|
|
|
|
check_dir = Vector3i(0, 0, -1); is_edge=true;
|
|
|
|
|
|
|
|
elif mark_black.x == id_max.x:
|
|
|
|
|
|
|
|
check_dir = Vector3i(1, 0, 0); is_edge=true;
|
|
|
|
|
|
|
|
elif mark_black.z == id_max.z:
|
|
|
|
|
|
|
|
check_dir = Vector3i(0, 0, 1); is_edge=true;
|
|
|
|
|
|
|
|
else:
|
|
|
|
else:
|
|
|
|
check_dir = Vector3i(0, -1, 0)
|
|
|
|
mark_black_list.append(pos)
|
|
|
|
|
|
|
|
air_wall_mark_black_list.append(pos)
|
|
|
|
if mark_black in [
|
|
|
|
|
|
|
|
Vector3i(id_min.x, id_min.y, id_min.z),
|
|
|
|
# 左面黑块
|
|
|
|
Vector3i(id_max.x, id_min.y, id_min.z),
|
|
|
|
var black_y_max_left: int = id_max.y - 1
|
|
|
|
Vector3i(id_min.x, id_min.y, id_max.z),
|
|
|
|
for z in range(id_min.z + 1, id_max.z + 1):
|
|
|
|
Vector3i(id_max.x, id_min.y, id_max.z)
|
|
|
|
var pos: Vector3i = Vector3i(id_min.x, id_min.y, z)
|
|
|
|
]:
|
|
|
|
var has_link = false
|
|
|
|
continue
|
|
|
|
var mark_black_list_check: Array[Vector3i] = []
|
|
|
|
|
|
|
|
for y in range(id_min.y - 1, black_y_max_left):
|
|
|
|
if is_edge:
|
|
|
|
var pos_check: Vector3i = Vector3i(id_min.x, y + 1, z)
|
|
|
|
var is_hole: bool
|
|
|
|
if not check_grid(level_main, pos_check):
|
|
|
|
for y in range(id_min.y+1, id_max.y):
|
|
|
|
has_link = true
|
|
|
|
var pos: Vector3i = Vector3i(mark_black.x, y, mark_black.z)
|
|
|
|
black_y_max_left = max(y, id_min.y)
|
|
|
|
if not check_grid(level_main, pos):
|
|
|
|
if y + 1 < id_max.y:
|
|
|
|
is_hole = true
|
|
|
|
air_wall_mark_black_list.append(pos_check + Vector3i(0, 1, 0))
|
|
|
|
break
|
|
|
|
break
|
|
|
|
if not is_hole:
|
|
|
|
mark_black_list_check.append(pos_check)
|
|
|
|
continue
|
|
|
|
if not has_link:
|
|
|
|
|
|
|
|
for pos_check in mark_black_list_check:
|
|
|
|
var mark_black_check: Vector3i = mark_black + check_dir
|
|
|
|
mark_black_list.append(pos_check)
|
|
|
|
var float_pos_check: Vector3 = Util.get_level_float_pos2(mark_black_check) + Vector3(0.64, 0, 0.64)
|
|
|
|
var pos_check: Vector3i = Vector3i(id_min.x, black_y_max_left, z)
|
|
|
|
if not (Global.level_mgr.get_level_by_pos(float_pos_check) and not check_grid(level_main, float_pos_check)):
|
|
|
|
air_wall_mark_black_list.append(pos_check)
|
|
|
|
continue
|
|
|
|
|
|
|
|
mark_black_remove_list.append(mark_black)
|
|
|
|
# 右边面黑块
|
|
|
|
mark_black_list = mark_black_list.filter(func (x): return x not in mark_black_remove_list)
|
|
|
|
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):
|
|
|
|
|
|
|
|
var pos_check: Vector3i = Vector3i(id_max.x, y + 1, z)
|
|
|
|
|
|
|
|
if not check_grid(level_main, pos_check):
|
|
|
|
|
|
|
|
has_link = true
|
|
|
|
|
|
|
|
black_y_max_right = max(y, id_min.y)
|
|
|
|
|
|
|
|
if y + 1 < id_max.y:
|
|
|
|
|
|
|
|
air_wall_mark_black_list.append(pos_check + Vector3i(0, 1, 0))
|
|
|
|
|
|
|
|
break
|
|
|
|
|
|
|
|
mark_black_list_check.append(pos_check)
|
|
|
|
|
|
|
|
if not has_link:
|
|
|
|
|
|
|
|
for pos_check in mark_black_list_check:
|
|
|
|
|
|
|
|
mark_black_list.append(pos_check)
|
|
|
|
|
|
|
|
var pos_check: Vector3i = Vector3i(id_max.x, black_y_max_right, z)
|
|
|
|
|
|
|
|
air_wall_mark_black_list.append(pos_check)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
# 黑块cache
|
|
|
|
for mark_black in mark_black_list:
|
|
|
|
for mark_black in mark_black_list:
|
|
|
|
add_grid_main_cache_cell(level_main, mark_black)
|
|
|
|
add_grid_main_cache_cell(level_main, mark_black)
|
|
|
|
for y in range(id_min.y+1, id_max.y):
|
|
|
|
|
|
|
|
var pos: Vector3i = Vector3i(mark_black.x, y, mark_black.z)
|
|
|
|
# 黑块延申空气墙
|
|
|
|
add_grid_main_cache_cell(level_main, pos)
|
|
|
|
for mark_black in air_wall_mark_black_list:
|
|
|
|
mark_white_list.append(pos)
|
|
|
|
for y in range(mark_black.y + 1, id_max.y):
|
|
|
|
# 底面黑块剔除延申空气墙
|
|
|
|
|
|
|
|
for mark_black in mark_black_remove_list:
|
|
|
|
|
|
|
|
for y in range(id_min.y+1, id_max.y):
|
|
|
|
|
|
|
|
var pos: Vector3i = Vector3i(mark_black.x, y, mark_black.z)
|
|
|
|
var pos: Vector3i = Vector3i(mark_black.x, y, mark_black.z)
|
|
|
|
if not check_grid(level_main, pos):
|
|
|
|
|
|
|
|
continue
|
|
|
|
|
|
|
|
add_grid_main_cache_cell(level_main, pos)
|
|
|
|
add_grid_main_cache_cell(level_main, pos)
|
|
|
|
mark_white_list.append(pos)
|
|
|
|
mark_white_list.append(pos)
|
|
|
|
|
|
|
|
|
|
|
|
# 顶面
|
|
|
|
# 顶面
|
|
|
|
for x in range(id_min.x, id_max.x+1):
|
|
|
|
for x in range(id_min.x, id_max.x + 1):
|
|
|
|
for z in range(id_min.z, id_max.z+1):
|
|
|
|
for z in range(id_min.z, id_max.z + 1):
|
|
|
|
var pos: Vector3i = Vector3i(x, id_max.y, z)
|
|
|
|
var pos: Vector3i = Vector3i(x, id_max.y, z)
|
|
|
|
add_grid_main_cache_cell(level_main, pos)
|
|
|
|
add_grid_main_cache_cell(level_main, pos)
|
|
|
|
if z == id_max.z:
|
|
|
|
|
|
|
|
mark_white_list.append(pos)
|
|
|
|
|
|
|
|
continue
|
|
|
|
|
|
|
|
var pos_down: Vector3i = Vector3i(x, id_max.y - 1, z)
|
|
|
|
var pos_down: Vector3i = Vector3i(x, id_max.y - 1, z)
|
|
|
|
if level_main.get_cell_item(pos_down) == GridMap.INVALID_CELL_ITEM:
|
|
|
|
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_up: Vector3i = Vector3i(x, id_max.y + 1, z)
|
|
|
|
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) + 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) and not check_grid(level_main, pos_up):
|
|
|
|
continue
|
|
|
|
continue
|
|
|
|
@ -292,12 +298,12 @@ func add_grid_main_cache_cell(level_main: GridMap, pos: Vector3i) -> void:
|
|
|
|
return
|
|
|
|
return
|
|
|
|
var cache_data = GridMainCacheCellData.new()
|
|
|
|
var cache_data = GridMainCacheCellData.new()
|
|
|
|
cache_data.pos = pos
|
|
|
|
cache_data.pos = pos
|
|
|
|
cache_data.id = id
|
|
|
|
cache_data.id = id
|
|
|
|
cache_data.orientation= level_main.get_cell_item_orientation(pos)
|
|
|
|
cache_data.orientation = level_main.get_cell_item_orientation(pos)
|
|
|
|
grid_main_cache_cells.append(cache_data)
|
|
|
|
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, last_grid_main_cache_cells: Array[GridMainCacheCellData] = []) -> void:
|
|
|
|
var level_main: GridMap = %LevelGridMain as GridMap
|
|
|
|
var level_main: GridMap = %LevelGridMain as GridMap
|
|
|
|
if is_active:
|
|
|
|
if is_active:
|
|
|
|
var id_min: Vector3i = Util.get_level_grid_pos2(pos_min())
|
|
|
|
var id_min: Vector3i = Util.get_level_grid_pos2(pos_min())
|
|
|
|
@ -347,7 +353,7 @@ func pos_min() -> Vector3:
|
|
|
|
|
|
|
|
|
|
|
|
func pos_max() -> Vector3:
|
|
|
|
func pos_max() -> Vector3:
|
|
|
|
var level_range: CSGBox3D = $LevelRange as CSGBox3D
|
|
|
|
var level_range: CSGBox3D = $LevelRange as CSGBox3D
|
|
|
|
var level_size: Vector3 = level_range.size
|
|
|
|
var level_size: Vector3 = level_range.size
|
|
|
|
return get_global_position() + level_size
|
|
|
|
return get_global_position() + level_size
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|