using System.Threading; using System.Threading.Tasks; namespace io.github.hatayama.uLoopMCP { /// /// Tool to find multiple GameObjects with advanced search criteria /// /// /// This Tool class delegates to FindGameObjectsUseCase for business logic execution, /// following the UseCase + Tool pattern for separation of concerns. /// /// Related classes: /// - FindGameObjectsUseCase: Business logic and orchestration /// - GameObjectFinderService: Core logic for finding GameObjects /// - FindGameObjectsSchema: Search parameters /// - FindGameObjectsResponse: Type-safe response structure /// [McpTool(Description = "Use first when the user asks about the currently selected GameObject in the Unity Hierarchy. Inspect selected object details and component properties with SearchMode.Selected before using execute-dynamic-code. Also search by name, path, regex, tag, layer, or required components. Use get-hierarchy when the child tree under the selection is needed.")] public class FindGameObjectsTool : AbstractUnityTool { public override string ToolName => "find-game-objects"; protected override async Task ExecuteAsync(FindGameObjectsSchema parameters, CancellationToken cancellationToken) { // Create and execute FindGameObjectsUseCase instance FindGameObjectsUseCase useCase = new(new GameObjectFinderService(), new ComponentSerializer()); return await useCase.ExecuteAsync(parameters, cancellationToken); } } }