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); }
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; } }
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); }
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); }