@tool extends GridMap class_name LevelGrid @export_group("替换item_id") @export var id_from: int = 0 @export var id_to: int = 0 @export_tool_button("替换", "Callable") var replace_id: Callable = replace_id_func @export_tool_button("打印item详情", "Callable") var print_item: Callable = print_item_func @export_group("整体平移") @export var translate_dir: Vector3i @export_tool_button("平移", "Callable") var translate: Callable = translate_func func print_item_func ()-> void: var item_count_map: Dictionary = {} for cell_position in get_used_cells(): var item_id: int = get_cell_item(cell_position) if item_id in item_count_map: item_count_map[item_id] += 1 else: item_count_map[item_id] = 1 for item_id: int in item_count_map: print("[", item_id, "]", mesh_library.get_item_name(item_id), ":", item_count_map[item_id]) 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)