Example #1
0
        private void DrawBezierCurve(SplineMonoBehaviour spline)
        {
            for (int i = 0; i < spline.Anchors.Count - 1; i++)
            {
                var anchor     = spline.Anchors[i];
                var nextAnchor = spline.Anchors[i + 1];

                Handles.DrawBezier(
                    spline.GetPosition(anchor.Origin),
                    spline.GetPosition(nextAnchor.Origin),
                    spline.GetPosition(anchor.PointB),
                    spline.GetPosition(nextAnchor.PointA),
                    Color.grey,
                    null,
                    3f
                    );
            }

            if (spline.ClosedLoop)
            {
                var anchor     = spline.Anchors[spline.Anchors.Count - 1];
                var nextAnchor = spline.Anchors[0];

                Handles.DrawBezier(
                    spline.GetPosition(anchor.Origin),
                    spline.GetPosition(nextAnchor.Origin),
                    spline.GetPosition(anchor.PointB),
                    spline.GetPosition(nextAnchor.PointA),
                    Color.grey,
                    null,
                    3f
                    );
            }
        }
Example #2
0
        private void DrawAnchor(
            SplineMonoBehaviour spline,
            SplineAnchor anchor
            )
        {
            Handles.color = Color.white;
            Handles.DrawWireCube(
                spline.GetPosition(anchor.Origin),
                Vector3.one * .5f
                );

            SplinePointPositionHandler(spline, anchor.Origin);

            DrawAnchorSidePoints(spline, anchor.PointA, Color.green);
            DrawAnchorSidePoints(spline, anchor.PointB, Color.blue);

            Handles.color = Color.white;
            Handles.DrawLine(
                spline.GetPosition(anchor.Origin),
                spline.GetPosition(anchor.PointA)
                );
            Handles.DrawLine(
                spline.GetPosition(anchor.Origin),
                spline.GetPosition(anchor.PointB)
                );
        }
Example #3
0
 private void DrawAnchorSidePoints(
     SplineMonoBehaviour spline, SplinePoint point, Color sphereColor
     )
 {
     Handles.color = sphereColor;
     Handles.SphereHandleCap(
         0,
         spline.GetPosition(point),
         Quaternion.identity, .5f,
         EventType.Repaint
         );
     SplinePointPositionHandler(spline, point);
 }
Example #4
0
        private static void SplinePointPositionHandler(
            SplineMonoBehaviour currentSpline,
            SplinePoint point
            )
        {
            EditorGUI.BeginChangeCheck();
            var newPosition = Handles.PositionHandle(
                currentSpline.GetPosition(point),
                Quaternion.identity
                );

            if (EditorGUI.EndChangeCheck())
            {
                Undo.RecordObject(currentSpline, "Change Anchor Position");
                currentSpline.SetPointPosition(point, newPosition);
            }
        }