You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

61 lines
2.3 KiB
GDScript

@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)