예제 #1
0
    public override void OnInspectorGUI()
    {
        DrawDefaultInspector();
        if (CubeTest.cubes == null)
        {
            return;
        }
        if (GUILayout.Button("New Metaball"))
        {
            Undo.RegisterUndo(CubeTest.cubes, "Add Metaball");
            CubeTest.cubes.metaBalls.metaPoints.Add(new MetaPoint {
                pos = Vector3.zero, power = 1.0f
            });
            //CubeTest.cubes.ComputeMetaBalls();
            EditorUtility.SetDirty(CubeTest.cubes);
        }

        EditorGUI.BeginChangeCheck();
        showWire = EditorGUILayout.Toggle("Show Wireframe", showWire);
        if (EditorGUI.EndChangeCheck())
        {
            EditorUtility.SetSelectedWireframeHidden(CubeTest.renderer, !showWire);
            EditorUtility.SetDirty(CubeTest.cubes);
        }
        bool newCap = EditorGUILayout.Toggle("Cap", CubeTest.cubes.capped);

        if (newCap != CubeTest.cubes.capped)
        {
            Undo.RegisterUndo(CubeTest.cubes, "Toggle Capping");
            CubeTest.cubes.capped = newCap;
            //CubeTest.cubes.ComputeMetaBalls();
            EditorUtility.SetDirty(CubeTest.cubes);
        }

        IntVector3 steps = EditorGUILayout.Vector3Field("Cube Steps", CubeTest.cubes.Steps);

        if (!steps.Same(CubeTest.cubes.Steps))
        {
            Undo.RegisterUndo(CubeTest.cubes, "Change Step Size");
            CubeTest.cubes.Steps = steps;
            //CubeTest.cubes.ComputeMetaBalls();
            EditorUtility.SetDirty(CubeTest.cubes);
        }

        Vector3 min = EditorGUILayout.Vector3Field("Cube Min", CubeTest.cubes.Min);

        if ((min - CubeTest.cubes.Min).sqrMagnitude > Mathf.Epsilon)
        {
            Undo.RegisterUndo(CubeTest.cubes, "Change Cube Dimensions");
            CubeTest.cubes.Min = min;
            //CubeTest.cubes.ComputeMetaBalls();
            EditorUtility.SetDirty(CubeTest.cubes);
        }

        Vector3 max = EditorGUILayout.Vector3Field("Cube Max", CubeTest.cubes.Max);

        if ((max - CubeTest.cubes.Max).sqrMagnitude > Mathf.Epsilon)
        {
            Undo.RegisterUndo(CubeTest.cubes, "Change Cube Dimensions");
            CubeTest.cubes.Max = max;
            //CubeTest.cubes.ComputeMetaBalls();
            EditorUtility.SetDirty(CubeTest.cubes);
        }
    }