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