using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using UnityEditor;
using UnityEngine;
using Newtonsoft.Json;
namespace SynapticPro
{
///
/// Dynamic Meta-Tools for NexusUnityExecutor
/// Provides reflection-based inspection and modification of Unity components
///
public partial class NexusUnityExecutor
{
#region Dynamic Meta-Tools
///
/// Dynamically inspect any Unity object, component, scene, or project assets
///
private string DynamicInspect(Dictionary parameters)
{
try
{
var target = parameters.GetValueOrDefault("target", "gameobject").ToLower();
var name = parameters.GetValueOrDefault("name", "");
var componentType = parameters.GetValueOrDefault("component", "");
var path = parameters.GetValueOrDefault("path", "");
int.TryParse(parameters.GetValueOrDefault("depth", "2"), out int depth);
switch (target)
{
case "gameobject":
return InspectGameObject(name, depth);
case "component":
return InspectComponent(name, componentType, depth);
case "scene":
return InspectScene();
case "hierarchy":
return InspectHierarchy(depth);
case "prefabs":
return InspectPrefabs(path);
case "project":
return InspectProject(path);
default:
return JsonConvert.SerializeObject(new { error = $"Unknown inspect target: {target}" });
}
}
catch (Exception e)
{
return CreateErrorResponse("DynamicInspect", e, parameters);
}
}
private string InspectGameObject(string name, int depth)
{
if (string.IsNullOrEmpty(name))
{
// List all root GameObjects
var rootObjects = UnityEngine.SceneManagement.SceneManager.GetActiveScene()
.GetRootGameObjects()
.Select(go => new {
name = go.name,
active = go.activeSelf,
components = go.GetComponents().Select(c => c?.GetType().Name).Where(n => n != null).ToList(),
childCount = go.transform.childCount
}).ToList();
return JsonConvert.SerializeObject(new {
success = true,
message = $"Found {rootObjects.Count} root GameObjects",
gameObjects = rootObjects
});
}
var gameObject = GameObject.Find(name);
if (gameObject == null)
{
gameObject = FindGameObjectByPathDynamic(name);
}
if (gameObject == null)
{
return JsonConvert.SerializeObject(new { error = $"GameObject '{name}' not found" });
}
var components = new List