#if UNITY_EDITOR
using UnityEngine;
using UnityEditor;
using System.Linq;
namespace UMA
{
///
/// PopupAssetInspector lets you popup an inspector to view a specific instance of a scriptableobject or monobehavior.
/// This has to live with the base code (not editor code) so the monobehavior can popup the inspector when it's initialized.
///
public class PopUpAssetInspector : EditorWindow
{
private Object asset;
private Editor assetEditor;
public static PopUpAssetInspector Create(Object asset)
{
EditorWindow[] windows = Resources.FindObjectsOfTypeAll();
var gameWindow = windows.FirstOrDefault(e => e.titleContent.text.Contains("Inspector"));
PopUpAssetInspector window = null;
if (gameWindow != null)
{
window = CreateWindow($"{ObjectNames.NicifyVariableName(asset.name)} ({asset.GetType().Name})",gameWindow.GetType());
}
else
{
window = CreateWindow($"{ObjectNames.NicifyVariableName(asset.name)} ({asset.GetType().Name})");
}
window.asset = asset;
window.assetEditor = Editor.CreateEditor(asset);
return window;
}
private void OnGUI()
{
if (assetEditor == null)
{
assetEditor = Editor.CreateEditor(asset);
}
GUI.enabled = false;
asset = EditorGUILayout.ObjectField("Asset", asset, asset.GetType(), false);
GUI.enabled = true;
EditorGUILayout.BeginVertical(EditorStyles.helpBox);
assetEditor.OnInspectorGUI();
EditorGUILayout.EndVertical();
}
}
}
#endif