Esempio n. 1
0
        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();
            }
        }