public override Vector3 MoveToTargetLateralPos(Transform xform, Vector3 target, Vector3 eTarget, FlyingDroneScript scr)
	{
        if (mvState == MoveState.turn)
        {
		    // Calculate the new rotation.
		    float dot   = GeometryClass.DotToTarget2D(xform, target);
            if (dot < scr.dotTolerance)
            {
                // Calculate the new rotation.
                Vector3 angles = xform.localEulerAngles;
                float yAngle = angles.y;
                Transform tempXform = xform;
                tempXform.LookAt(target);
                float yAngleTarget = tempXform.localEulerAngles.y;
                scr.journeyFracRotate += scr.journeyDeltaRotate;
                float yAngleChanged = Mathf.LerpAngle(yAngle, yAngleTarget, GeometryClass.MapToCurve(scr.journeyFracRotate));
                angles.y = yAngleChanged;
                xform.localEulerAngles = angles;
                
            }
            else
            {
                mvState = MoveState.move;
                scr.ResetJourney();
            }
		} else { // mvState == MoveState.move
			// Calculate new position only if rotation is already correct.
            scr.journeyFracHoriz += scr.journeyDeltaHoriz;
            Vector3 newPos = Vector3.Lerp(xform.transform.position, eTarget, GeometryClass.MapToCurve(scr.journeyFracHoriz));
            xform.position = newPos;
		}
		return xform.position;
	}
 public override Vector3 MoveToTargetLateralPos(Transform xform, Vector3 target, Vector3 eTarget, FlyingDroneScript scr)
 {
     if (mvState == MoveState.turn)
     {
         // Calculate the new rotation.
         float dot = GeometryClass.DotToTarget2D(xform, target);
         if (dot < scr.dotTolerance)
         {
             // Calculate the new rotation.
             Vector3   angles    = xform.localEulerAngles;
             float     yAngle    = angles.y;
             Transform tempXform = xform;
             tempXform.LookAt(target);
             float yAngleTarget = tempXform.localEulerAngles.y;
             scr.journeyFracRotate += scr.journeyDeltaRotate;
             float yAngleChanged = Mathf.LerpAngle(yAngle, yAngleTarget, GeometryClass.MapToCurve(scr.journeyFracRotate));
             angles.y = yAngleChanged;
             xform.localEulerAngles = angles;
         }
         else
         {
             mvState = MoveState.move;
             scr.ResetJourney();
         }
     }
     else             // mvState == MoveState.move
                      // Calculate new position only if rotation is already correct.
     {
         scr.journeyFracHoriz += scr.journeyDeltaHoriz;
         Vector3 newPos = Vector3.Lerp(xform.transform.position, eTarget, GeometryClass.MapToCurve(scr.journeyFracHoriz));
         xform.position = newPos;
     }
     return(xform.position);
 }
 public override void BeginLateralJourney(FlyingDroneScript scr)
 {
     mvState = MoveState.turn;
     scr.ResetJourney();
 }
 public override void BeginLateralJourney(FlyingDroneScript scr)
 {
     scr.ResetJourney();
 }
 public override void BeginLateralJourney(FlyingDroneScript scr)
 {
     mvState = MoveState.turn;
     scr.ResetJourney();
 }
 public override void BeginLateralJourney(FlyingDroneScript scr)
 {
     scr.ResetJourney();
 }