using Linework.EdgeDetection; using Linework.Editor.Common.Utils; using UnityEditor; using UnityEngine; namespace Linework.Editor.EdgeDetection { [CustomEditor(typeof(Linework.EdgeDetection.EdgeDetection))] public class EdgeDetectionEditor : UnityEditor.Editor { private static class Styles { public static readonly GUIContent Settings = EditorGUIUtility.TrTextContent("Settings", "The settings for the Edge Detection renderer feature."); } private SerializedProperty settings; private bool initialized; private void Initialize() { settings = serializedObject.FindProperty("settings"); initialized = true; } public override void OnInspectorGUI() { if (!initialized) Initialize(); EditorGUILayout.Space(); EditorGUILayout.BeginHorizontal(); EditorGUILayout.PropertyField(settings, Styles.Settings); if (settings.objectReferenceValue == null) { if (GUILayout.Button("Create", EditorStyles.miniButton, GUILayout.Width(70.0f))) { const string path = "Assets/Edge Detection Settings.asset"; var createdSettings = CreateInstance(); AssetDatabase.CreateAsset(createdSettings, path); AssetDatabase.SaveAssets(); EditorUtility.FocusProjectWindow(); Selection.activeObject = createdSettings; EditorUtils.OpenInspectorWindow(createdSettings); settings.objectReferenceValue = createdSettings; serializedObject.ApplyModifiedProperties(); } } else { if (GUILayout.Button("Open", EditorStyles.miniButton, GUILayout.Width(70.0f))) { EditorUtils.OpenInspectorWindow(settings.objectReferenceValue); } } EditorGUILayout.EndHorizontal(); } } }