/// <seealso cref= <seealso cref="#tween(float, float, float)"/> </seealso> public virtual float TweenAngle(float a, float b, float t) { t = TweenSub(0f, 1f, t); switch (Type) { case CurveType.Instant: return(a); case CurveType.Linear: return(Interpolator.LinearAngle(a, b, t)); case CurveType.Quadratic: return(Interpolator.QuadraticAngle(a, Interpolator.LinearAngle(a, b, Constraints.C1), b, t)); case CurveType.Cubic: return(Interpolator.CubicAngle(a, Interpolator.LinearAngle(a, b, Constraints.C1), Interpolator.LinearAngle(a, b, Constraints.C2), b, t)); case CurveType.Quartic: return(Interpolator.QuarticAngle(a, Interpolator.LinearAngle(a, b, Constraints.C1), Interpolator.LinearAngle(a, b, Constraints.C2), Interpolator.LinearAngle(a, b, Constraints.C3), b, t)); case CurveType.Quintic: return(Interpolator.QuinticAngle(a, Interpolator.LinearAngle(a, b, Constraints.C1), Interpolator.LinearAngle(a, b, Constraints.C2), Interpolator.LinearAngle(a, b, Constraints.C3), Interpolator.LinearAngle(a, b, Constraints.C4), b, t)); case CurveType.Bezier: float?cubicSolution = Calculator.SolveCubic(3f * (Constraints.C1 - Constraints.C3) + 1f, 3f * (Constraints.C3 - 2f * Constraints.C1), 3f * Constraints.C1, -t); if (cubicSolution == null) { cubicSolution = lastCubicSolution; } else { lastCubicSolution = cubicSolution.Value; } return(Interpolator.LinearAngle(a, b, Interpolator.Bezier(cubicSolution.Value, 0f, Constraints.C2, Constraints.C4, 1f))); default: return(Interpolator.LinearAngle(a, b, t)); } }