using IronMountain.ResourceUtilities; using UnityEditor; using UnityEngine; namespace SpellBoundAR.Items.Editor { [CustomEditor(typeof(ScriptedItemTypeData), true)] public class ScriptedItemTypeDataInspector : UnityEditor.Editor { protected ScriptedItemTypeData ScriptedItemTypeData; protected static readonly GUIContent MoveUpButtonContent = new ("↑", "Move up."); protected static readonly GUIContent DeleteButtonContent = new ("✕", "Delete."); protected static readonly GUIContent MoveDownButtonContent = new ("↓", "Move down."); protected static readonly GUIContent AddNewButtonContent = new ("Add", "Add new."); protected virtual void OnEnable() { ScriptedItemTypeData = (ScriptedItemTypeData) target; } private void DrawPreview() { GUILayout.Space(10); EditorGUILayout.BeginVertical(Styles.Subbox); GUIContent content = new GUIContent(ScriptedItemTypeData.Depiction ? ScriptedItemTypeData.Depiction.texture : null); GUIStyle style = new GUIStyle { imagePosition = ImagePosition.ImageAbove, padding = new RectOffset(5, 5, 5, 5), alignment = TextAnchor.MiddleCenter, fixedHeight = 200, }; GUILayout.Label(content, style); EditorGUILayout.EndVertical(); } private void DrawGeneralSettingsBox() { GUILayout.Space(10); EditorGUILayout.BeginVertical(Styles.Subbox, GUILayout.MinHeight(30)); GUILayout.Label("Scripted Type Settings", Styles.H3, GUILayout.ExpandWidth(true)); EditorGUI.indentLevel++; EditorGUILayout.PropertyField(serializedObject.FindProperty("id")); EditorGUILayout.PropertyField(serializedObject.FindProperty("defaultName"), new GUIContent("Name")); EditorGUILayout.PropertyField(serializedObject.FindProperty("localizedName")); EditorGUILayout.PropertyField(serializedObject.FindProperty("description")); EditorGUILayout.BeginHorizontal(); SerializedProperty depiction = serializedObject.FindProperty("depiction"); EditorGUILayout.PropertyField(depiction); if (GUILayout.Button("Search", GUILayout.MaxWidth(70))) { depiction.objectReferenceValue = ResourcesUtility.Search(ScriptedItemTypeData.Name); } EditorGUILayout.EndHorizontal(); EditorGUILayout.BeginHorizontal(); SerializedProperty instancePrefab = serializedObject.FindProperty("instancePrefab"); EditorGUILayout.PropertyField(instancePrefab); if (GUILayout.Button("Search", GUILayout.MaxWidth(70))) { instancePrefab.objectReferenceValue = ResourcesUtility.Search(ScriptedItemTypeData.Name); } EditorGUILayout.EndHorizontal(); DrawAdditionalGeneralSettingsProperties(); EditorGUI.indentLevel--; EditorGUILayout.EndVertical(); } protected virtual void DrawAdditionalGeneralSettingsProperties() { } private void DrawInstancesBox() { GUILayout.Space(10); EditorGUILayout.BeginVertical(Styles.Subbox, GUILayout.MinHeight(30)); EditorGUILayout.BeginHorizontal(GUILayout.ExpandWidth(true)); GUILayout.Label("Scripted Instances", Styles.H3, GUILayout.ExpandWidth(true)); if (GUILayout.Button("+", GUILayout.MaxWidth(25))) { AddScriptedInstance(); return; } EditorGUILayout.EndHorizontal(); EditorGUI.indentLevel++; if (ScriptedItemTypeData.Instances.Count > 0) EditorGUILayout.PropertyField(serializedObject.FindProperty("instances"), GUIContent.none); EditorGUI.indentLevel--; EditorGUILayout.EndVertical(); } protected virtual void AddScriptedInstance() { ItemsManipulator.AddInstanceToItemType(ScriptedItemTypeData); } protected virtual void DrawInheritedProperties() { } public override void OnInspectorGUI() { if (GUILayout.Button("Select")) Selection.activeObject = target; DrawPreview(); DrawGeneralSettingsBox(); DrawInstancesBox(); DrawInheritedProperties(); serializedObject.ApplyModifiedProperties(); } } }