using UnityEditor;
using System.Collections.Generic;
using Object = UnityEngine.Object;
namespace LLM.Editor.Analysis
{
///
/// Provides context about the currently selected objects in the Unity Editor.
/// Distinguishes between objects in the scene and assets in the project.
///
public class SelectionProvider : IContextProvider
{
public class SelectionResult
{
public string name;
public string id;
public string type;
public bool isSceneObject;
public string assetPath;
}
public object GetContext(Object target, string qualifier)
{
var selectedObjects = Selection.objects;
if (selectedObjects == null || selectedObjects.Length == 0)
{
return "No objects are currently selected in the editor.";
}
var results = new List();
foreach (var obj in selectedObjects)
{
var result = new SelectionResult
{
name = obj.name,
type = obj.GetType().FullName
};
if (AssetDatabase.Contains(obj))
{
// It's an asset in the Project window
result.isSceneObject = false;
var path = AssetDatabase.GetAssetPath(obj);
result.assetPath = path;
result.id = AssetDatabase.AssetPathToGUID(path);
}
else
{
// It's a GameObject or component in the Scene
result.isSceneObject = true;
result.assetPath = null;
result.id = obj.GetInstanceID().ToString();
}
results.Add(result);
}
return results;
}
}
}