示例#1
0
        public override void OnInspectorGUI()
        {
            EditorGUI.BeginChangeCheck();
            BezierPoint.HandleMode handleMode = (BezierPoint.HandleMode)EditorGUILayout.EnumPopup("Handle Mode", point.HandleModeType);
            if (EditorGUI.EndChangeCheck())
            {
                Undo.RecordObject(point, "Change Point Handle Mode");
                point.HandleModeType = handleMode;

                SceneView.RepaintAll();
            }

            EditorGUILayout.Space();

            EditorGUI.BeginChangeCheck();
            Vector3 position = EditorGUILayout.Vector3Field("Preceding Control Point Local Position", point.PrecedingControlPointLocalPosition);

            if (EditorGUI.EndChangeCheck())
            {
                Undo.RecordObject(point, "Change Point Position");
                point.PrecedingControlPointLocalPosition = position;

                SceneView.RepaintAll();
            }

            EditorGUI.BeginChangeCheck();
            position = EditorGUILayout.Vector3Field("Following Control Point Local Position", point.FollowingControlPointLocalPosition);
            if (EditorGUI.EndChangeCheck())
            {
                Undo.RecordObject(point, "Change Point Position");
                point.FollowingControlPointLocalPosition = position;

                SceneView.RepaintAll();
            }
        }
示例#2
0
        public override void OnInspectorGUI()
        {
            Color c = GUI.color;

            if (spline != null && !spline.Equals(null))
            {
                BezierUtils.DrawSplineInspectorGUI(spline);

                if (point == null || point.Equals(null))
                {
                    return;
                }

                EditorGUILayout.Space();
                DrawSeparator();

                GUILayout.BeginHorizontal();

                if (GUILayout.Button("<-", GUILayout.Width(45)))
                {
                    int prevIndex = spline.IndexOf(point) - 1;
                    if (prevIndex < 0)
                    {
                        prevIndex = spline.Count - 1;
                    }

                    Selection.activeTransform = spline[prevIndex].transform;
                    return;
                }

                GUILayout.Box("Selected Point: " + (spline.IndexOf(point) + 1) + " / " + spline.Count, GUILayout.ExpandWidth(true));

                if (GUILayout.Button("->", GUILayout.Width(45)))
                {
                    int nextIndex = spline.IndexOf(point) + 1;
                    if (nextIndex >= spline.Count)
                    {
                        nextIndex = 0;
                    }

                    Selection.activeTransform = spline[nextIndex].transform;
                    return;
                }

                GUILayout.EndHorizontal();

                EditorGUILayout.Space();

                if (GUILayout.Button("Decrement Point's Index"))
                {
                    int index    = spline.IndexOf(point);
                    int newIndex = index - 1;
                    if (newIndex < 0)
                    {
                        newIndex = spline.Count - 1;
                    }

                    if (index != newIndex)
                    {
                        Undo.IncrementCurrentGroup();
                        Undo.RegisterCompleteObjectUndo(point.transform.parent, "Change point index");

                        spline.SwapPointsAt(index, newIndex);
                        SceneView.RepaintAll();
                    }
                }

                if (GUILayout.Button("Increment Point's Index"))
                {
                    int index    = spline.IndexOf(point);
                    int newIndex = index + 1;
                    if (newIndex >= spline.Count)
                    {
                        newIndex = 0;
                    }

                    if (index != newIndex)
                    {
                        Undo.IncrementCurrentGroup();
                        Undo.RegisterCompleteObjectUndo(point.transform.parent, "Change point index");

                        spline.SwapPointsAt(index, newIndex);
                        SceneView.RepaintAll();
                    }
                }

                EditorGUILayout.Space();

                if (GUILayout.Button("Insert Point Before"))
                {
                    InsertNewPointAt(spline.IndexOf(point));
                }

                if (GUILayout.Button("Insert Point After"))
                {
                    InsertNewPointAt(spline.IndexOf(point) + 1);
                }

                EditorGUILayout.Space();

                if (GUILayout.Button("Duplicate Point"))
                {
                    DuplicatePointAt(spline.IndexOf(point));
                }

                EditorGUILayout.Space();
            }

            EditorGUI.BeginChangeCheck();
            BezierPoint.HandleMode handleMode = (BezierPoint.HandleMode)EditorGUILayout.EnumPopup("Handle Mode", point.handleMode);
            if (EditorGUI.EndChangeCheck())
            {
                Undo.RecordObject(point, "Change Point Handle Mode");
                point.handleMode = handleMode;

                SceneView.RepaintAll();
            }

            EditorGUILayout.Space();

            EditorGUI.BeginChangeCheck();
            Vector3 position = EditorGUILayout.Vector3Field("Preceding Control Point Local Position", point.precedingControlPointLocalPosition);

            if (EditorGUI.EndChangeCheck())
            {
                Undo.RecordObject(point, "Change Point Position");
                point.precedingControlPointLocalPosition = position;

                SceneView.RepaintAll();
            }

            EditorGUI.BeginChangeCheck();
            position = EditorGUILayout.Vector3Field("Following Control Point Local Position", point.followingControlPointLocalPosition);
            if (EditorGUI.EndChangeCheck())
            {
                Undo.RecordObject(point, "Change Point Position");
                point.followingControlPointLocalPosition = position;

                SceneView.RepaintAll();
            }

            EditorGUILayout.Space();

            if (GUILayout.Button("Swap Control Points"))
            {
                Undo.RecordObject(point, "Swap Control Points");
                Vector3 precedingControlPointLocalPos = point.precedingControlPointLocalPosition;
                point.precedingControlPointLocalPosition = point.followingControlPointLocalPosition;
                point.followingControlPointLocalPosition = precedingControlPointLocalPos;

                SceneView.RepaintAll();
            }

            EditorGUILayout.Space();

            DrawSeparator();

            if (spline != null && !spline.Equals(null))
            {
                GUI.color = RESET_POINT_BUTTON_COLOR;

                if (GUILayout.Button("Reset Point"))
                {
                    ResetEndPointAt(spline.IndexOf(point));
                    SceneView.RepaintAll();
                }

                EditorGUILayout.Space();

                GUI.color = REMOVE_POINT_BUTTON_COLOR;

                if (spline.Count <= 2)
                {
                    GUI.enabled = false;
                }

                if (GUILayout.Button("Remove Point"))
                {
                    RemovePointAt(spline.IndexOf(point));
                }

                GUI.enabled = true;
            }

            GUI.color = c;
        }
示例#3
0
    public override void OnInspectorGUI()
    {
        Color c = GUI.color;

        EditorGUI.BeginChangeCheck();
        bool loop = EditorGUILayout.Toggle("Loop", spline.loop);

        if (EditorGUI.EndChangeCheck())
        {
            Undo.RecordObject(spline, "Toggle Loop");
            spline.loop = loop;

            SceneView.RepaintAll();
        }

        EditorGUILayout.Space();

        GUI.color = AUTO_CONSTRUCT_SPLINE_BUTTON_COLOR;

        if (GUILayout.Button("Auto Construct Spline"))
        {
            Undo.RecordObject(spline, "Auto Construct Spline");
            spline.AutoConstructSpline();

            SceneView.RepaintAll();
        }

        if (GUILayout.Button("Auto Construct Spline (method #2)"))
        {
            Undo.RecordObject(spline, "Auto Construct Spline");
            spline.AutoConstructSpline2();

            SceneView.RepaintAll();
        }

        GUI.color = c;

        if (selectedEndPointIndex >= spline.Count)
        {
            selectedEndPointIndex = spline.Count - 1;
        }

        if (selectedEndPointIndex != -1)
        {
            EditorGUILayout.Space();

            DrawHorizontalSeparator();

            GUILayout.BeginHorizontal();
            if (GUILayout.Button("<-", GUILayout.Width(45)))
            {
                int newIndex = selectedEndPointIndex - 1;
                if (newIndex < 0)
                {
                    if (loop)
                    {
                        newIndex = spline.Count - 1;
                    }
                    else
                    {
                        newIndex = 0;
                    }
                }

                if (newIndex != selectedEndPointIndex)
                {
                    Undo.IncrementCurrentGroup();
                    Undo.RecordObject(spline, "Change Selected Point");
                    selectedEndPointIndex = newIndex;

                    SceneView.RepaintAll();
                }
            }
            GUILayout.Box("Selected Point: " + selectedEndPointIndex.index + " / " + (spline.Count - 1), GUILayout.ExpandWidth(true));
            if (GUILayout.Button("->", GUILayout.Width(45)))
            {
                int newIndex = selectedEndPointIndex + 1;
                if (newIndex >= spline.Count)
                {
                    if (loop)
                    {
                        newIndex = 0;
                    }
                    else
                    {
                        newIndex = spline.Count - 1;
                    }
                }

                if (newIndex != selectedEndPointIndex)
                {
                    Undo.IncrementCurrentGroup();
                    Undo.RecordObject(spline, "Change Selected Point");
                    selectedEndPointIndex = newIndex;

                    SceneView.RepaintAll();
                }
            }
            GUILayout.EndHorizontal();

            if (GUILayout.Button("Deselect"))
            {
                Undo.RecordObject(spline, "Deselect Selected Point");
                selectedEndPointIndex = -1;

                SceneView.RepaintAll();

                return;
            }

            EditorGUILayout.Space();

            if (GUILayout.Button("Decrement Point's Index"))
            {
                if (selectedEndPointIndex > 0)
                {
                    Undo.IncrementCurrentGroup();
                    Undo.RecordObject(spline, "Change point index");
                    spline.SwapPointsAt(selectedEndPointIndex, selectedEndPointIndex - 1);
                    selectedEndPointIndex = selectedEndPointIndex - 1;

                    SceneView.RepaintAll();
                }
            }

            if (GUILayout.Button("Increment Point's Index"))
            {
                if (selectedEndPointIndex < spline.Count - 1)
                {
                    Undo.IncrementCurrentGroup();
                    Undo.RecordObject(spline, "Change point index");
                    spline.SwapPointsAt(selectedEndPointIndex, selectedEndPointIndex + 1);
                    selectedEndPointIndex = selectedEndPointIndex + 1;

                    SceneView.RepaintAll();
                }
            }

            EditorGUILayout.Space();

            if (GUILayout.Button("Insert Point Before"))
            {
                InsertNewPointAt(selectedEndPointIndex);
            }

            if (GUILayout.Button("Insert Point After"))
            {
                InsertNewPointAt(selectedEndPointIndex + 1);
            }

            EditorGUILayout.Space();

            if (GUILayout.Button("Duplicate Point"))
            {
                DuplicatePointAt(selectedEndPointIndex);
            }

            EditorGUILayout.Space();

            BezierPoint selectedEndPoint = spline[selectedEndPointIndex];

            EditorGUI.BeginChangeCheck();
            BezierPoint.HandleMode handleMode = (BezierPoint.HandleMode)EditorGUILayout.EnumPopup("Handle Mode", selectedEndPoint.handleMode);
            if (EditorGUI.EndChangeCheck())
            {
                Undo.RecordObject(spline, "Change Point Handle Mode");
                selectedEndPoint.handleMode = handleMode;

                SceneView.RepaintAll();
            }

            EditorGUI.BeginChangeCheck();
            Vector3 position = EditorGUILayout.Vector3Field("Local Position", selectedEndPoint.localPosition);
            if (EditorGUI.EndChangeCheck())
            {
                Undo.RecordObject(spline, "Change Point Position");
                selectedEndPoint.localPosition = position;

                SceneView.RepaintAll();
            }

            EditorGUI.BeginChangeCheck();
            Vector3 eulerAngles = EditorGUILayout.Vector3Field("Local Euler Angles", selectedEndPoint.localEulerAngles);
            if (EditorGUI.EndChangeCheck())
            {
                Undo.RecordObject(spline, "Change Point Rotation");
                selectedEndPoint.localEulerAngles = eulerAngles;

                SceneView.RepaintAll();
            }

            EditorGUI.BeginChangeCheck();
            Vector3 scale = EditorGUILayout.Vector3Field("Local Scale", selectedEndPoint.localScale);
            if (EditorGUI.EndChangeCheck())
            {
                Undo.RecordObject(spline, "Change Point Scale");
                selectedEndPoint.localScale = scale;

                SceneView.RepaintAll();
            }

            EditorGUILayout.Space();

            EditorGUI.BeginChangeCheck();
            position = EditorGUILayout.Vector3Field("Preceding Control Point Local Position", selectedEndPoint.precedingControlPointLocalPosition);
            if (EditorGUI.EndChangeCheck())
            {
                Undo.RecordObject(spline, "Change Point Position");
                selectedEndPoint.precedingControlPointLocalPosition = position;

                SceneView.RepaintAll();
            }

            EditorGUI.BeginChangeCheck();
            position = EditorGUILayout.Vector3Field("Following Control Point Local Position", selectedEndPoint.followingControlPointLocalPosition);
            if (EditorGUI.EndChangeCheck())
            {
                Undo.RecordObject(spline, "Change Point Position");
                selectedEndPoint.followingControlPointLocalPosition = position;

                SceneView.RepaintAll();
            }

            EditorGUILayout.Space();

            if (GUILayout.Button("Swap Control Points"))
            {
                Undo.RecordObject(spline, "Swap Control Points");
                Vector3 precedingControlPointLocalPos = selectedEndPoint.precedingControlPointLocalPosition;
                selectedEndPoint.precedingControlPointLocalPosition = selectedEndPoint.followingControlPointLocalPosition;
                selectedEndPoint.followingControlPointLocalPosition = precedingControlPointLocalPos;

                SceneView.RepaintAll();
            }

            EditorGUILayout.Space();

            DrawHorizontalSeparator();

            GUI.color = RESET_POINT_BUTTON_COLOR;

            if (GUILayout.Button("Reset Point"))
            {
                ResetEndPointAt(selectedEndPointIndex);

                SceneView.RepaintAll();
            }

            EditorGUILayout.Space();

            GUI.color = REMOVE_POINT_BUTTON_COLOR;

            if (spline.Count <= 2)
            {
                GUI.enabled = false;
            }

            if (GUILayout.Button("Remove Point"))
            {
                RemovePointAt(selectedEndPointIndex);
            }

            GUI.enabled = true;
            GUI.color   = c;
        }
    }
示例#4
0
        public override void OnInspectorGUI()
        {
            if (CheckCommands())
            {
                GUIUtility.ExitGUI();
            }

            BezierUtils.DrawSplineInspectorGUI(allSplines);

            EditorGUILayout.Space();
            BezierUtils.DrawSeparator();

            GUILayout.BeginHorizontal();

            if (GUILayout.Button("<-", GUILayout.Width(45)))
            {
                Object[] newSelection = new Object[pointCount];
                for (int i = 0, index = 0; i < selection.Length; i++)
                {
                    BezierSpline  spline = selection[i].spline;
                    BezierPoint[] points = selection[i].points;

                    if (spline)
                    {
                        for (int j = 0; j < points.Length; j++)
                        {
                            int prevIndex = points[j].Internal_Index - 1;
                            if (prevIndex < 0)
                            {
                                prevIndex = spline.Count - 1;
                            }

                            newSelection[index++] = spline[prevIndex].gameObject;
                        }
                    }
                    else
                    {
                        for (int j = 0; j < points.Length; j++)
                        {
                            newSelection[index++] = points[j].gameObject;
                        }
                    }
                }

                Selection.objects = newSelection;
                GUIUtility.ExitGUI();
            }

            string pointIndex   = (pointCount == 1 && selection[0].spline) ? (allPoints[0].Internal_Index + 1).ToString() : "-";
            string splineLength = (selection.Length == 1 && selection[0].spline) ? selection[0].spline.Count.ToString() : "-";

            GUILayout.Box("Selected Point: " + pointIndex + " / " + splineLength, GUILayout.ExpandWidth(true));

            if (GUILayout.Button("->", GUILayout.Width(45)))
            {
                Object[] newSelection = new Object[pointCount];
                for (int i = 0, index = 0; i < selection.Length; i++)
                {
                    BezierSpline  spline = selection[i].spline;
                    BezierPoint[] points = selection[i].points;

                    if (spline)
                    {
                        for (int j = 0; j < points.Length; j++)
                        {
                            int nextIndex = points[j].Internal_Index + 1;
                            if (nextIndex >= spline.Count)
                            {
                                nextIndex = 0;
                            }

                            newSelection[index++] = spline[nextIndex].gameObject;
                        }
                    }
                    else
                    {
                        for (int j = 0; j < points.Length; j++)
                        {
                            newSelection[index++] = points[j].gameObject;
                        }
                    }
                }

                Selection.objects = newSelection;
                GUIUtility.ExitGUI();
            }

            GUILayout.EndHorizontal();

            EditorGUILayout.Space();

            if (GUILayout.Button("Decrement Point's Index"))
            {
                Undo.IncrementCurrentGroup();

                for (int i = 0; i < selection.Length; i++)
                {
                    BezierSpline spline = selection[i].spline;
                    if (spline)
                    {
                        selection[i].SortPoints(true);

                        BezierPoint[] points     = selection[i].points;
                        int[]         newIndices = new int[points.Length];
                        for (int j = 0; j < points.Length; j++)
                        {
                            int index    = points[j].Internal_Index;
                            int newIndex = index - 1;
                            if (newIndex < 0)
                            {
                                newIndex = spline.Count - 1;
                            }

                            newIndices[j] = newIndex;
                        }

                        for (int j = 0; j < points.Length; j++)
                        {
                            Undo.RegisterCompleteObjectUndo(points[j].transform.parent, "Change point index");
                            spline.Internal_MovePoint(points[j].Internal_Index, newIndices[j], "Change point index");
                        }

                        selection[i].SortPoints(true);
                    }
                }

                SceneView.RepaintAll();
            }

            if (GUILayout.Button("Increment Point's Index"))
            {
                Undo.IncrementCurrentGroup();

                for (int i = 0; i < selection.Length; i++)
                {
                    BezierSpline spline = selection[i].spline;
                    if (spline)
                    {
                        selection[i].SortPoints(false);

                        BezierPoint[] points     = selection[i].points;
                        int[]         newIndices = new int[points.Length];
                        for (int j = 0; j < points.Length; j++)
                        {
                            int index    = points[j].Internal_Index;
                            int newIndex = index + 1;
                            if (newIndex >= spline.Count)
                            {
                                newIndex = 0;
                            }

                            newIndices[j] = newIndex;
                        }

                        for (int j = 0; j < points.Length; j++)
                        {
                            Undo.RegisterCompleteObjectUndo(points[j].transform.parent, "Change point index");
                            spline.Internal_MovePoint(points[j].Internal_Index, newIndices[j], "Change point index");
                        }

                        selection[i].SortPoints(true);
                    }
                }

                SceneView.RepaintAll();
            }

            EditorGUILayout.Space();

            if (GUILayout.Button("Insert Point Before"))
            {
                InsertNewPoints(false);
            }

            if (GUILayout.Button("Insert Point After"))
            {
                InsertNewPoints(true);
            }

            EditorGUILayout.Space();

            if (GUILayout.Button("Duplicate Point"))
            {
                DuplicateSelectedPoints();
            }

            EditorGUILayout.Space();

            bool hasMultipleDifferentValues = false;

            BezierPoint.HandleMode handleMode = allPoints[0].handleMode;
            for (int i = 1; i < allPoints.Length; i++)
            {
                if (allPoints[i].handleMode != handleMode)
                {
                    hasMultipleDifferentValues = true;
                    break;
                }
            }

            EditorGUI.showMixedValue = hasMultipleDifferentValues;
            EditorGUI.BeginChangeCheck();
            handleMode = (BezierPoint.HandleMode)EditorGUILayout.EnumPopup("Handle Mode", handleMode);
            if (EditorGUI.EndChangeCheck())
            {
                for (int i = 0; i < allPoints.Length; i++)
                {
                    Undo.RecordObject(allPoints[i], "Change Point Handle Mode");
                    allPoints[i].handleMode = handleMode;
                }

                SceneView.RepaintAll();
            }

            EditorGUILayout.Space();

            hasMultipleDifferentValues = false;
            Vector3 position = allPoints[0].precedingControlPointLocalPosition;

            for (int i = 1; i < allPoints.Length; i++)
            {
                if (allPoints[i].precedingControlPointLocalPosition != position)
                {
                    hasMultipleDifferentValues = true;
                    break;
                }
            }

            EditorGUI.showMixedValue = hasMultipleDifferentValues;
            EditorGUI.BeginChangeCheck();
            position = EditorGUILayout.Vector3Field("Preceding Control Point Local Position", position);
            if (EditorGUI.EndChangeCheck())
            {
                for (int i = 0; i < allPoints.Length; i++)
                {
                    Undo.RecordObject(allPoints[i], "Change Point Position");
                    allPoints[i].precedingControlPointLocalPosition = position;
                }

                SceneView.RepaintAll();
            }

            hasMultipleDifferentValues = false;
            position = allPoints[0].followingControlPointLocalPosition;
            for (int i = 1; i < allPoints.Length; i++)
            {
                if (allPoints[i].followingControlPointLocalPosition != position)
                {
                    hasMultipleDifferentValues = true;
                    break;
                }
            }

            EditorGUI.showMixedValue = hasMultipleDifferentValues;
            EditorGUI.BeginChangeCheck();
            position = EditorGUILayout.Vector3Field("Following Control Point Local Position", position);
            if (EditorGUI.EndChangeCheck())
            {
                for (int i = 0; i < allPoints.Length; i++)
                {
                    Undo.RecordObject(allPoints[i], "Change Point Position");
                    allPoints[i].followingControlPointLocalPosition = position;
                }

                SceneView.RepaintAll();
            }

            bool showControlPointDistanceWarning = false;

            for (int i = 0; i < allPoints.Length; i++)
            {
                BezierPoint point = allPoints[i];
                if ((point.position - point.precedingControlPointPosition).sqrMagnitude < CONTROL_POINTS_MINIMUM_SAFE_DISTANCE_SQR ||
                    (point.position - point.followingControlPointPosition).sqrMagnitude < CONTROL_POINTS_MINIMUM_SAFE_DISTANCE_SQR)
                {
                    showControlPointDistanceWarning = true;
                    break;
                }
            }

            if (showControlPointDistanceWarning)
            {
                EditorGUILayout.HelpBox("Positions of control point(s) shouldn't be very close to (0,0,0), this might result in unpredictable behaviour while moving along the spline with constant speed.", MessageType.Warning);
            }

            EditorGUILayout.Space();

            if (GUILayout.Button("Swap Control Points"))
            {
                for (int i = 0; i < allPoints.Length; i++)
                {
                    Undo.RecordObject(allPoints[i], "Swap Control Points");
                    Vector3 temp = allPoints[i].precedingControlPointLocalPosition;
                    allPoints[i].precedingControlPointLocalPosition = allPoints[i].followingControlPointLocalPosition;
                    allPoints[i].followingControlPointLocalPosition = temp;
                }

                SceneView.RepaintAll();
            }

            EditorGUILayout.Space();
            BezierUtils.DrawSeparator();

            hasMultipleDifferentValues = false;
            BezierPoint.ExtraData extraData = allPoints[0].extraData;
            for (int i = 1; i < allPoints.Length; i++)
            {
                if (allPoints[i].extraData != extraData)
                {
                    hasMultipleDifferentValues = true;
                    break;
                }
            }

            GUILayout.BeginHorizontal();
            EditorGUI.showMixedValue = hasMultipleDifferentValues;
            EditorGUI.BeginChangeCheck();
            Rect extraDataRect = EditorGUILayout.GetControlRect(false, EditorGUIUtility.singleLineHeight);               // When using GUILayout, button isn't vertically centered

            extraDataRect.width -= 65f;
            extraData            = EditorGUI.Vector4Field(extraDataRect, "Extra Data", extraData);
            extraDataRect.x     += extraDataRect.width + 5f;
            extraDataRect.width  = 30f;
            if (GUI.Button(extraDataRect, EXTRA_DATA_SET_AS_CAMERA))
            {
                extraData = SceneView.lastActiveSceneView.camera.transform.rotation;
            }
            if (EditorGUI.EndChangeCheck())
            {
                for (int i = 0; i < allPoints.Length; i++)
                {
                    Undo.RecordObject(allPoints[i], "Change Extra Data");
                    allPoints[i].extraData = extraData;
                }

                SceneView.RepaintAll();
            }

            EditorGUI.showMixedValue = false;

            extraDataRect.x += 30f;
            EditorGUI.BeginChangeCheck();
            m_visualizeExtraDataAsFrustum = GUI.Toggle(extraDataRect, m_visualizeExtraDataAsFrustum, EXTRA_DATA_VIEW_AS_FRUSTUM, GUI.skin.button);
            if (EditorGUI.EndChangeCheck())
            {
                VisualizeExtraDataAsFrustum = m_visualizeExtraDataAsFrustum;
                SceneView.RepaintAll();
            }

            GUILayout.EndHorizontal();

            BezierUtils.DrawSeparator();
            EditorGUILayout.Space();

            Color c = GUI.color;

            GUI.color = RESET_POINT_BUTTON_COLOR;

            if (GUILayout.Button("Reset Point"))
            {
                for (int i = 0; i < allPoints.Length; i++)
                {
                    Undo.RecordObject(allPoints[i].transform, "Reset Point");
                    Undo.RecordObject(allPoints[i], "Reset Point");

                    allPoints[i].Reset();
                }

                SceneView.RepaintAll();
            }

            EditorGUILayout.Space();

            GUI.color = REMOVE_POINT_BUTTON_COLOR;

            if (GUILayout.Button("Remove Point"))
            {
                RemoveSelectedPoints();
                GUIUtility.ExitGUI();
            }

            GUI.color = c;

            for (int i = 0; i < allSplines.Length; i++)
            {
                allSplines[i].Internal_CheckDirty();
            }
        }