void _initializeProgram() { storedProg = null; prog = null; progGUI = null; // Look for a program stored in the asset. storedProg = KMImportSettings.ProgramForMesh(assetGUID, meshPath); if (storedProg != null) { // Create a copy of the program to work with. prog = ScriptableObject.CreateInstance <KMProcessorProgram>(); EditorUtility.CopySerialized(storedProg, prog); int numProcessors = prog.processors.Length; for (int i = 0; i < numProcessors; ++i) { KrablMesh.Processor proc = prog.processors[i]; KrablMesh.Processor clone = ScriptableObject.CreateInstance(proc.GetType()) as KrablMesh.Processor; EditorUtility.CopySerialized(proc, clone); clone.hideFlags = HideFlags.DontSave; prog.processors[i] = clone; } prog.hideFlags = HideFlags.DontSave; progGUI = (KMProcessorProgramGUI)Editor.CreateEditor(prog); if (progGUI != null) { progGUI.usedByMeshImporter = true; } } }
void OnDisable() { //Debug.Log("Inspector OnDisable workingObj: " + workingObj + " isPLaying " + Application.isPlaying); if (hasChanges && EditorUtility.DisplayDialog("Unapplied import settings", "Unapplied import settings for '" + assetPath + "'", "Apply", "Revert")) { _applyProgramChanges(); } if (prog != null) { // First destroy the processors KrablMesh.Processor[] procs = prog.processors; for (int i = 0; i < procs.Length; ++i) { DestroyImmediate(procs[i]); } DestroyImmediate(prog); prog = null; } if (progGUI != null) { DestroyImmediate(progGUI); progGUI = null; } }
// Called from progGUI public void DeleteProgram() { if (prog == null) { return; } bool del = true; if (prog.processors.Length > 0) { del = EditorUtility.DisplayDialog("Delete Import Program", "Do you want to permanently delete this mesh import program?", "Delete", "Cancel"); } if (del) { if (storedProg != null) { EditorUtility.DisplayProgressBar(KMImportProcessor.ProgressTitle(prog), "Unity3D reimports model file", 0.0f); KMImportSettings.RemoveProgram(storedProg); // Trigger model reimport AssetDatabase.ImportAsset(assetPath); EditorUtility.ClearProgressBar(); } prog = null; progGUI = null; storedProg = null; } }
void OnEnable() { // Debug.Log("Inspector OnEnable workingObj " + workingObj); storedProg = null; prog = null; hasChanges = false; progGUI = null; searchedForProgram = false; meshPath = null; mesh = null; // Don't fetch the prog here, as this will break the intial library buildup as it creates the settings before they are imported .. when creating previews }
void AddProgram() { // Create an empty program in memory prog = KMImportSettings.CreateProgram(assetGUID, meshPath, mesh); // Now create the GUI progGUI = (KMProcessorProgramGUI)Editor.CreateEditor(prog); if (progGUI != null) { progGUI.usedByMeshImporter = true; } hasChanges = true; }