private bool UpdateSourceAsset(SlotDataAsset newObj) { MeshHideAsset source = target as MeshHideAsset; bool update = false; if (source.asset != null) { if (EditorUtility.DisplayDialog("Warning", "Setting a new source slot will clear the existing data on this asset!", "OK", "Cancel")) { update = true; } } else { update = true; } if (update) { source.AssetSlotName = newObj.slotName; source.Initialize(); UpdateMeshPreview(); AssetDatabase.SaveAssets(); EditorUtility.SetDirty(target); return(true); } return(false); }
public override void OnInspectorGUI() { serializedObject.Update(); MeshHideAsset source = target as MeshHideAsset; bool beginSceneEditing = false; //DrawDefaultInspector(); var obj = EditorGUILayout.ObjectField("SlotDataAsset", source.asset, typeof(SlotDataAsset), false); if (obj != null && obj != source.asset) { source.asset = obj as SlotDataAsset; source.Initialize(); UpdateMeshPreview(); AssetDatabase.SaveAssets(); EditorUtility.SetDirty(target); } //If we had a slotData added and we set it to none, then lets clear everything. if (obj == null && source.asset != null) { source.asset = null; source.Initialize(); AssetDatabase.SaveAssets(); EditorUtility.SetDirty(target); } if (source.asset == null) { EditorGUILayout.HelpBox("No SlotDataAsset set! Begin by adding a SlotDataAsset to the object field above.", MessageType.Error); } GUILayout.Space(20); if (source.TriangleCount > 0) { EditorGUILayout.LabelField("Triangle Indices Count: " + source.TriangleCount); EditorGUILayout.LabelField("Submesh Count: " + source.SubmeshCount); EditorGUILayout.LabelField("Hidden Triangle Count: " + source.HiddenCount); } else { EditorGUILayout.LabelField("No triangle array found"); } GUILayout.Space(20); if (!GeometrySelectorWindow.IsOpen) { EditorGUI.BeginDisabledGroup(source.asset == null); if (GUILayout.Button("Begin Editing", GUILayout.MinHeight(50))) { if (source.asset != null) { beginSceneEditing = true; } } EditorGUI.EndDisabledGroup(); GUILayout.Space(20); GUILayout.Label("Editing will be done in an empty scene."); GUILayout.Label("You will be prompted to save the scene"); GUILayout.Label("if there are any unsaved changes."); } serializedObject.ApplyModifiedProperties(); if (beginSceneEditing) { // This has to happen outside the inspector EditorApplication.delayCall += CreateSceneEditObject; } }