private static Vector3 Ease(XInterpolate.Function ease, Vector3 start, Vector3 distance, float elapsedTime, float duration)
 {
     start.x = ease(start.x, distance.x, elapsedTime, duration);
     start.y = ease(start.y, distance.y, elapsedTime, duration);
     start.z = ease(start.z, distance.z, elapsedTime, duration);
     return(start);
 }
        private static IEnumerator NewEase(XInterpolate.Function ease, Vector3 start, Vector3 end, float total, IEnumerable <float> driver)
        {
            Vector3 distance = end - start;

            foreach (float elapsedTime in driver)
            {
                yield return(XInterpolate.Ease(ease, start, distance, elapsedTime, total));
            }
            yield break;
        }
 private static Vector3 Bezier(XInterpolate.Function ease, Vector3[] points, float elapsedTime, float duration)
 {
     for (int i = points.Length - 1; i > 0; i--)
     {
         for (int j = 0; j < i; j++)
         {
             points[j].x = ease(points[j].x, points[j + 1].x - points[j].x, elapsedTime, duration);
             points[j].y = ease(points[j].y, points[j + 1].y - points[j].y, elapsedTime, duration);
             points[j].z = ease(points[j].z, points[j + 1].z - points[j].z, elapsedTime, duration);
         }
     }
     return(points[0]);
 }
 private static IEnumerable <Vector3> NewBezier <T>(XInterpolate.Function ease, IList nodes, XInterpolate.ToVector3 <T> toVector3, float maxStep, IEnumerable <float> steps)
 {
     if (nodes.Count >= 2)
     {
         Vector3[] array = new Vector3[nodes.Count];
         foreach (float elapsedTime in steps)
         {
             for (int i = 0; i < nodes.Count; i++)
             {
                 array[i] = toVector3((T)((object)nodes[i]));
             }
             yield return(XInterpolate.Bezier(ease, array, elapsedTime, maxStep));
         }
     }
     yield break;
 }
        public static IEnumerator NewEase(XInterpolate.Function ease, Vector3 start, Vector3 end, int slices)
        {
            IEnumerable <float> driver = XInterpolate.NewCounter(0, slices + 1, 1);

            return(XInterpolate.NewEase(ease, start, end, (float)(slices + 1), driver));
        }
        public static IEnumerator NewEase(XInterpolate.Function ease, Vector3 start, Vector3 end, float duration)
        {
            IEnumerable <float> driver = XInterpolate.NewTimer(duration);

            return(XInterpolate.NewEase(ease, start, end, duration, driver));
        }
        public static IEnumerable <Vector3> NewBezier(XInterpolate.Function ease, Vector3[] points, int slices)
        {
            IEnumerable <float> steps = XInterpolate.NewCounter(0, slices + 1, 1);

            return(XInterpolate.NewBezier <Vector3>(ease, points, new XInterpolate.ToVector3 <Vector3>(XInterpolate.Identity), (float)(slices + 1), steps));
        }
        public static IEnumerable <Vector3> NewBezier(XInterpolate.Function ease, Vector3[] points, float duration)
        {
            IEnumerable <float> steps = XInterpolate.NewTimer(duration);

            return(XInterpolate.NewBezier <Vector3>(ease, points, new XInterpolate.ToVector3 <Vector3>(XInterpolate.Identity), duration, steps));
        }
        public static IEnumerable <Vector3> NewBezier(XInterpolate.Function ease, Transform[] nodes, int slices)
        {
            IEnumerable <float> steps = XInterpolate.NewCounter(0, slices + 1, 1);

            return(XInterpolate.NewBezier <Transform>(ease, nodes, new XInterpolate.ToVector3 <Transform>(XInterpolate.TransformDotPosition), (float)(slices + 1), steps));
        }
        public static IEnumerable <Vector3> NewBezier(XInterpolate.Function ease, Transform[] nodes, float duration)
        {
            IEnumerable <float> steps = XInterpolate.NewTimer(duration);

            return(XInterpolate.NewBezier <Transform>(ease, nodes, new XInterpolate.ToVector3 <Transform>(XInterpolate.TransformDotPosition), duration, steps));
        }
        public static XInterpolate.Function Ease(XInterpolate.EaseType type)
        {
            XInterpolate.Function result = null;
            switch (type)
            {
            case XInterpolate.EaseType.Linear:
                result = new XInterpolate.Function(XInterpolate.Linear);
                break;

            case XInterpolate.EaseType.EaseInQuad:
                result = new XInterpolate.Function(XInterpolate.EaseInQuad);
                break;

            case XInterpolate.EaseType.EaseOutQuad:
                result = new XInterpolate.Function(XInterpolate.EaseOutQuad);
                break;

            case XInterpolate.EaseType.EaseInOutQuad:
                result = new XInterpolate.Function(XInterpolate.EaseInOutQuad);
                break;

            case XInterpolate.EaseType.EaseInCubic:
                result = new XInterpolate.Function(XInterpolate.EaseInCubic);
                break;

            case XInterpolate.EaseType.EaseOutCubic:
                result = new XInterpolate.Function(XInterpolate.EaseOutCubic);
                break;

            case XInterpolate.EaseType.EaseInOutCubic:
                result = new XInterpolate.Function(XInterpolate.EaseInOutCubic);
                break;

            case XInterpolate.EaseType.EaseInQuart:
                result = new XInterpolate.Function(XInterpolate.EaseInQuart);
                break;

            case XInterpolate.EaseType.EaseOutQuart:
                result = new XInterpolate.Function(XInterpolate.EaseOutQuart);
                break;

            case XInterpolate.EaseType.EaseInOutQuart:
                result = new XInterpolate.Function(XInterpolate.EaseInOutQuart);
                break;

            case XInterpolate.EaseType.EaseInQuint:
                result = new XInterpolate.Function(XInterpolate.EaseInQuint);
                break;

            case XInterpolate.EaseType.EaseOutQuint:
                result = new XInterpolate.Function(XInterpolate.EaseOutQuint);
                break;

            case XInterpolate.EaseType.EaseInOutQuint:
                result = new XInterpolate.Function(XInterpolate.EaseInOutQuint);
                break;

            case XInterpolate.EaseType.EaseInSine:
                result = new XInterpolate.Function(XInterpolate.EaseInSine);
                break;

            case XInterpolate.EaseType.EaseOutSine:
                result = new XInterpolate.Function(XInterpolate.EaseOutSine);
                break;

            case XInterpolate.EaseType.EaseInOutSine:
                result = new XInterpolate.Function(XInterpolate.EaseInOutSine);
                break;

            case XInterpolate.EaseType.EaseInExpo:
                result = new XInterpolate.Function(XInterpolate.EaseInExpo);
                break;

            case XInterpolate.EaseType.EaseOutExpo:
                result = new XInterpolate.Function(XInterpolate.EaseOutExpo);
                break;

            case XInterpolate.EaseType.EaseInOutExpo:
                result = new XInterpolate.Function(XInterpolate.EaseInOutExpo);
                break;

            case XInterpolate.EaseType.EaseInCirc:
                result = new XInterpolate.Function(XInterpolate.EaseInCirc);
                break;

            case XInterpolate.EaseType.EaseOutCirc:
                result = new XInterpolate.Function(XInterpolate.EaseOutCirc);
                break;

            case XInterpolate.EaseType.EaseInOutCirc:
                result = new XInterpolate.Function(XInterpolate.EaseInOutCirc);
                break;
            }
            return(result);
        }