コード例 #1
0
        protected virtual void ActionTargetFocus(int index)
        {
            Undo.RecordObject(_target, "Set waypoint");
            PointsOnSplineExtension.Waypoint wp = _target.GetWayPoint(index);
            Vector3 pos = _target.TargetPosition;

            wp.PathPosition = _target.ConvertWorldPositionToPathPosition(pos);
            _target.SetWayPoint(wp, index);
            _timerBeforeSort.StartChrono(0.1f, false);
        }
コード例 #2
0
        private void DrawPositionControl(int i, Matrix4x4 localToWorld, Quaternion localRotation)
        {
            PointsOnSplineExtension.Waypoint wp = _target.GetWayPoint(i);
            Vector3 pos = _target.GetPositionFromPoint(i);

            EditorGUI.BeginChangeCheck();

            Handles.color = _target.ColorWayPoint;

            Quaternion rotation;

            if (Tools.pivotRotation != PivotRotation.Local)
            {
                rotation = Quaternion.identity;
            }
            else
            {
                rotation = _target.GetRotationFromPoint(i);
            }

            float size = HandleUtility.GetHandleSize(pos) * 0.1f;

            if (Event.current.button == 1 || Event.current.alt)
            {
                Handles.CircleHandleCap(0, pos, rotation, size * 3, EventType.Repaint);
                return;
            }

            CustomHandleMove.DragHandleResult handleResult;
            Vector3 newPos = CustomHandleMove.DragHandle(pos, size * 3, _target.ColorWayPoint, out handleResult, rotation, 0);

            if (EditorGUI.EndChangeCheck())
            {
                Undo.RecordObject(target, "Move Waypoint");
                float oldPos = wp.PathPosition;
                wp.PathPosition = _target.SplineBase.AttemptToApplyGrid(_target.ConvertWorldPositionToPathPosition(newPos));
                _target.SetWayPoint(wp, i);
                OnMovePoint(i, oldPos, wp.PathPosition);
            }

            switch (handleResult)
            {
            case CustomHandleMove.DragHandleResult.OnLeftRelease:
                BubbleSort(true);
                break;
            }
        }
コード例 #3
0
        public PointsOnSplineExtension.Waypoint GetClosestWaypointRight(ControllerStick controller, out float dist, out PointsOnSplineExtension lister)
        {
            dist   = 0;
            lister = null;
            if (ListToCheck.Length == 0)
            {
                return(null);
            }
            PointsOnSplineExtension.Waypoint closest = null;
            dist   = 0;
            lister = null;
            bool foundOne = false;

            for (int i = 0; i < ListToCheck.Length; i++)
            {
                if (ListToCheck[i] == null || !ListToCheck[i].gameObject.activeInHierarchy)
                {
                    continue;
                }
                PointsOnSplineExtension.Waypoint waypointToTest = ListToCheck[i].GetClosestWaypointRight(controller);
                if (waypointToTest == null)
                {
                    continue;
                }

                if (!foundOne)
                {
                    closest  = waypointToTest;
                    dist     = PointsOnSplineExtension.DistFromWayPoint(waypointToTest, controller);
                    lister   = ListToCheck[i];
                    foundOne = true;
                }
                else
                {
                    float distToTest = PointsOnSplineExtension.DistFromWayPoint(waypointToTest, controller);
                    if (distToTest < dist)
                    {
                        closest = waypointToTest;
                        dist    = distToTest;
                        lister  = ListToCheck[i];
                    }
                }
            }
            return(closest);
        }
コード例 #4
0
 public PointsOnSplineExtension.Waypoint GetClosestWaypointBidirectionnal(ControllerStick controller, out float dist, out PointsOnSplineExtension lister)
 {
     dist   = 0;
     lister = null;
     if (ListToCheck.Length == 0)
     {
         return(null);
     }
     PointsOnSplineExtension.Waypoint closest = ListToCheck[0].GetClosestWaypointBidirectionnal(controller);
     dist   = PointsOnSplineExtension.DistFromWayPoint(closest, controller);
     lister = ListToCheck[0];
     for (int i = 1; i < ListToCheck.Length; i++)
     {
         PointsOnSplineExtension.Waypoint waypointToTest = ListToCheck[i].GetClosestWaypointBidirectionnal(controller);
         float distToTest = PointsOnSplineExtension.DistFromWayPoint(waypointToTest, controller);
         if (distToTest < dist)
         {
             closest = waypointToTest;
             dist    = distToTest;
             lister  = ListToCheck[i];
         }
     }
     return(closest);
 }