private static IEnumerable <Vector3> NewCatmullRom <T>(IList nodes, XInterpolate.ToVector3 <T> toVector3, int slices, bool loop) { if (nodes.Count >= 2) { yield return(toVector3((T)((object)nodes[0]))); int num = nodes.Count - 1; int num2 = 0; while (loop || num2 < num) { if (loop && num2 > num) { num2 = 0; } int index = (num2 == 0) ? (loop ? num : num2) : (num2 - 1); int index2 = num2; int num3 = (num2 == num) ? (loop ? 0 : num2) : (num2 + 1); int index3 = (num3 == num) ? (loop ? 0 : num3) : (num3 + 1); int num4 = slices + 1; for (int i = 1; i <= num4; i++) { yield return(XInterpolate.CatmullRom(toVector3((T)((object)nodes[index])), toVector3((T)((object)nodes[index2])), toVector3((T)((object)nodes[num3])), toVector3((T)((object)nodes[index3])), (float)i, (float)num4)); } num2++; } } yield break; }
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; }