2026-10-09 12:49:07 +02:00

52 lines
3.1 KiB
GDScript

@tool
extends RefCounted
## tileset.* command registration orchestrator — wires every tileset.* tool onto
## the registry and delegates each handler to its command child (structure,
## alternatives, tile-data). Holds no command logic itself; the I/O spine lives on
## the shared tileset_io.gd leaf, consumed by the children.
const _Structure := preload("res://addons/godot_mcp_toolkit/commands/tileset/tileset_structure.gd")
const _Alternatives := preload("res://addons/godot_mcp_toolkit/commands/tileset/tileset_alternatives.gd")
const _TileData := preload("res://addons/godot_mcp_toolkit/commands/tileset/tileset_tile_data.gd")
static func register(registry: MCPToolkitCommandRegistry) -> void:
# -- tileset group (structural) --
registry.add("tileset.create", func(parameters: Dictionary) -> Dictionary:
return await _Structure.cmd_create(parameters)
, MCPToolkitCommandOptions.new().mark_scene_independent())
registry.add("tileset.add_source", func(parameters: Dictionary) -> Dictionary:
return await _Structure.cmd_add_source(parameters)
, MCPToolkitCommandOptions.new().mark_scene_independent())
registry.add("tileset.remove_source", func(parameters: Dictionary) -> Dictionary:
return await _Structure.cmd_remove_source(parameters)
, MCPToolkitCommandOptions.new().mark_scene_independent())
registry.add("tileset.add_alternative", func(parameters: Dictionary) -> Dictionary:
return await _Alternatives.cmd_add_alternative(parameters)
, MCPToolkitCommandOptions.new().mark_scene_independent())
registry.add("tileset.remove_alternative", func(parameters: Dictionary) -> Dictionary:
return await _Alternatives.cmd_remove_alternative(parameters)
, MCPToolkitCommandOptions.new().mark_scene_independent())
registry.add("tileset.setup_layers", func(parameters: Dictionary) -> Dictionary:
return await _Structure.cmd_setup_layers(parameters)
, MCPToolkitCommandOptions.new().mark_scene_independent())
# -- tileset_edit group (per-tile properties) --
# Each verb binds the shared _TileData.cmd_edit dispatcher but pins its own
# VERB, so the handler enforces the per-tile key set its tool name promises (a
# terrain key sent to edit_physics is rejected, not silently applied).
registry.add("tileset.edit_physics", func(parameters: Dictionary) -> Dictionary:
return await _TileData.cmd_edit(parameters, "physics")
, MCPToolkitCommandOptions.new().mark_scene_independent())
registry.add("tileset.edit_terrain", func(parameters: Dictionary) -> Dictionary:
return await _TileData.cmd_edit(parameters, "terrain")
, MCPToolkitCommandOptions.new().mark_scene_independent())
registry.add("tileset.edit_navigation", func(parameters: Dictionary) -> Dictionary:
return await _TileData.cmd_edit(parameters, "navigation")
, MCPToolkitCommandOptions.new().mark_scene_independent())
registry.add("tileset.edit_visuals", func(parameters: Dictionary) -> Dictionary:
return await _TileData.cmd_edit(parameters, "visuals")
, MCPToolkitCommandOptions.new().mark_scene_independent())
registry.add("tileset.edit_custom_data", func(parameters: Dictionary) -> Dictionary:
return await _TileData.cmd_edit(parameters, "custom_data")
, MCPToolkitCommandOptions.new().mark_scene_independent())