Example #1
0
        private void OnSceneGUI()
        {
            HandleUtility.AddDefaultControl(GUIUtility.GetControlID(FocusType.Passive));

            for (var i = 0; i < _waypoints.Count; i++)
            {
                var current   = _waypoints.Items[i];
                var nextIndex = i + 1;

                Handles.color = _waypoints.IsSelected(i) ? Color.yellow : Color.red;

                _waypoints.Items[i] = Handles.FreeMoveHandle(
                    current,
                    Quaternion.identity,
                    _freeMoveHandleRadius,
                    Vector3.zero,
                    Handles.SphereHandleCap);

                Handles.color = Color.green;

                var waypoint = _waypoints.GetSelected();
                var handle   = Handles.DoPositionHandle(waypoint, Quaternion.identity);
                _waypoints.UpdateSelected(handle);

                if (nextIndex < _waypoints.Count)
                {
                    Handles.DrawLine(current, _waypoints.Items[nextIndex]);
                }

                if (Event.current.type == EventType.Used)
                {
                    var distance = HandleUtility.DistanceToCircle(current, _freeMoveHandleRadius);

                    if (distance <= _freeMoveHandleRadius)
                    {
                        _waypoints.Select(i);
                        Repaint();
                    }
                }
            }
        }