コード例 #1
0
        /// <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));
            }
        }