/// <summary> /// Interpolates position for a local F /// </summary> /// <param name="localF">a local F in the range 0..1</param> /// <param name="interpolation">the interpolation to use</param> /// <returns>the interpolated position</returns> public Vector3 Interpolate(float localF, CurvyInterpolation interpolation) { localF = Mathf.Clamp01(localF); switch (interpolation) { case CurvyInterpolation.Bezier: return(CurvySpline.Bezier(HandleOutScaled, Transform.position, NextTransform.position, NextControlPoint.HandleInScaled, localF)); case CurvyInterpolation.CatmulRom: //return CurvySpline.CatmulRom(PreviousTransform.position, Transform.position, NextTransform.position, NextControlPoint.NextTransform.position, localF); return(CurvySpline.CatmulRom(GetPrevPosition(), Transform.position, GetNextPosition(), GetNextNextPosition(), localF)); case CurvyInterpolation.TCB: float t0 = StartTension; float t1 = EndTension; float c0 = StartContinuity; float c1 = EndContinuity; float b0 = StartBias; float b1 = EndBias; if (!OverrideGlobalTension) { t0 = t1 = Spline.Tension; } if (!OverrideGlobalContinuity) { c0 = c1 = Spline.Continuity; } if (!OverrideGlobalBias) { b0 = b1 = Spline.Bias; } return(CurvySpline.TCB(PreviousTransform.position, Transform.position, NextTransform.position, NextControlPoint.NextTransform.position, localF, t0, c0, b0, t1, c1, b1)); default: // LINEAR return(Vector3.Lerp(Transform.position, NextTransform.position, localF)); } }