private void createButtonReorderableList() { buttonEditor = Editor.CreateEditor(Database.Instance); // Get specialized classes listSpecializedClass = new ReorderableList(buttonEditor.serializedObject, buttonEditor.serializedObject.FindProperty("specializedClasses"), true, false, true, true); // Draw specialized class listSpecializedClass.drawElementCallback = (Rect rect, int index, bool isActive, bool isFocused) => { var element = listSpecializedClass.serializedProperty.GetArrayElementAtIndex(index); var specializedClass = element.objectReferenceValue as SpecializedClass; rect.y += 2; EditorGUI.LabelField(rect, specializedClass.name); }; // On select specialized class listSpecializedClass.onSelectCallback = (ReorderableList l) => { var specializedClass = l.serializedProperty.GetArrayElementAtIndex(l.index).objectReferenceValue as SpecializedClass; editor = Editor.CreateEditor(specializedClass); }; // On new specialized class listSpecializedClass.onAddDropdownCallback = (Rect buttonRect, ReorderableList l) => { SpecializedClass specializedClass = (SpecializedClass)ScriptableObject.CreateInstance(typeof(SpecializedClass)); specializedClass.Init(); var specializedClassesPath = "Assets/TRPGMaker/Database/SpecializedClasses"; var _exists = AssetDatabase.LoadAssetAtPath(specializedClassesPath + "/NewSpecializedClass.asset", typeof(SpecializedClass)); if (_exists == null) { //Create the folder if doesn't exist if (!System.IO.Directory.Exists(specializedClassesPath)) { System.IO.Directory.CreateDirectory(specializedClassesPath); } specializedClass.name = "New Specialized Class"; AssetDatabase.CreateAsset(specializedClass, specializedClassesPath + "/NewSpecializedClass.asset"); } else { string[] existAssets = AssetDatabase.FindAssets("NewSpecializedClass"); bool seted = false; int i = 0; while (i <= existAssets.Length && !seted) { var _existsNumber = AssetDatabase.LoadAssetAtPath(specializedClassesPath + "/NewSpecializedClass(" + (i + 1) + ").asset", typeof(SpecializedClass)); if (_existsNumber == null) { specializedClass.name = "New Specialized Class (" + (i + 1) + ")"; AssetDatabase.CreateAsset(specializedClass, specializedClassesPath + "/NewSpecializedClass(" + (i + 1) + ").asset"); seted = true; } i++; } } editor = Editor.CreateEditor(specializedClass); Database.Instance.specializedClasses.Add(specializedClass); listSpecializedClass.index = Database.Instance.specializedClasses.Count - 1; DrawButton(); }; // On remove specialized class listSpecializedClass.onRemoveCallback = (ReorderableList l) => { var specializedClass = l.serializedProperty.GetArrayElementAtIndex(l.index).objectReferenceValue as SpecializedClass; removeSpecializedClass(specializedClass); editor = null; DrawMainView(); DrawButton(); }; // No header listSpecializedClass.headerHeight = 0; }