public override void OnInspectorGUI() { serializedObject.Update(); GUI.enabled = body.Initialized; EditorGUI.BeginChangeCheck(); editMode = GUILayout.Toggle(editMode, new GUIContent("Edit particles", Resources.Load <Texture2D>("EditParticles")), "LargeButton"); if (EditorGUI.EndChangeCheck()) { SceneView.RepaintAll(); } GUI.enabled = true; EditorGUILayout.LabelField("Status: " + (body.Initialized ? "Initialized":"Not initialized")); GUI.enabled = body.inputMesh != null; if (GUILayout.Button("Initialize")) { if (!body.Initialized) { EditorSceneManager.MarkSceneDirty(EditorSceneManager.GetActiveScene()); CoroutineJob job = new CoroutineJob(); routine = job.Start(body.GeneratePhysicRepresentationForMesh()); EditorCoroutine.ShowCoroutineProgressBar("Generating physical representation...", ref routine); EditorGUIUtility.ExitGUI(); } else { if (EditorUtility.DisplayDialog("Actor initialization", "Are you sure you want to re-initialize this actor?", "Ok", "Cancel")) { EditorSceneManager.MarkSceneDirty(EditorSceneManager.GetActiveScene()); CoroutineJob job = new CoroutineJob(); routine = job.Start(body.GeneratePhysicRepresentationForMesh()); EditorCoroutine.ShowCoroutineProgressBar("Generating physical representation...", ref routine); EditorGUIUtility.ExitGUI(); } } } GUI.enabled = true; if (body.inputMesh == null) { EditorGUILayout.HelpBox("No input mesh present.", MessageType.Info); } /*if (body.target == null || body.target.sharedMesh == null){ * EditorGUILayout.HelpBox("No target mesh present.",MessageType.Info); * }*/ GUI.enabled = body.Initialized; if (GUILayout.Button("Set Rest State")) { Undo.RecordObject(body, "Set rest state"); body.PullDataFromSolver(ParticleData.POSITIONS | ParticleData.VELOCITIES); } GUILayout.BeginHorizontal(); if (GUILayout.Button("Optimize")) { Undo.RecordObject(body, "Optimize"); CoroutineJob job = new CoroutineJob(); routine = job.Start(body.Optimize()); EditorCoroutine.ShowCoroutineProgressBar("Optimizing...", ref routine); EditorGUIUtility.ExitGUI(); } if (GUILayout.Button("Unoptimize")) { Undo.RecordObject(body, "Unoptimize"); CoroutineJob job = new CoroutineJob(); routine = job.Start(body.Unoptimize()); EditorCoroutine.ShowCoroutineProgressBar("Reverting optimization...", ref routine); EditorGUIUtility.ExitGUI(); } GUILayout.EndHorizontal(); GUI.enabled = true; Editor.DrawPropertiesExcluding(serializedObject, "m_Script"); // Apply changes to the serializedProperty if (GUI.changed) { serializedObject.ApplyModifiedProperties(); } }