/// <summary> /// Create a path interpolation along the given path /// </summary> /// <param name="id"></param> /// <param name="duration"></param> /// <param name="ease"></param> /// <param name="path"></param> public PathInterpolation(int id, float duration, EEasingFunction ease, CreateToken tokenFunc, params T[] path) { if (path.Length < 2) { throw new ArgumentException("Interpolation paths cannot be less than 2 steps"); } _id = id; _duration = duration; _ease = ease; _path = path; _createTokenFunction = tokenFunc; }
/// <summary> /// Returns the appropriate function for the Easing function. Functions are only guarenteed /// to wokr withing a range of (0, 1). Most funcitno will work outside these bounds, but /// some will throw math errors /// </summary> /// <param name="func"></param> /// <returns></returns> public static DEasingFunction Function(this EEasingFunction func) { switch (func) { case EEasingFunction.Linear: return(Linear); case EEasingFunction.In_Quadratic: return(QuadraticEaseIn); case EEasingFunction.Out_Quadratic: return(QuadraticEaseOut); case EEasingFunction.InOut_Quadratic: return(QuadraticEaseInOut); case EEasingFunction.In_Cubic: return(CubicEaseIn); case EEasingFunction.Out_Cubic: return(CubicEaseOut); case EEasingFunction.InOut_Cubic: return(CubicEaseInOut); case EEasingFunction.In_Quartic: return(QuarticEaseIn); case EEasingFunction.Out_Quartic: return(QuarticEaseOut); case EEasingFunction.InOut_Quartic: return(QuarticEaseInOut); case EEasingFunction.In_Quintic: return(QuinticEaseIn); case EEasingFunction.Out_Quintic: return(QuinticEaseOut); case EEasingFunction.InOut_Quintic: return(QuinticEaseInOut); case EEasingFunction.In_Sinusoidal: return(SinusoidalEaseIn); case EEasingFunction.Out_Sinusoidal: return(SinusoidalEaseOut); case EEasingFunction.InOut_Sinusoidal: return(SinusoidalEaseInOut); case EEasingFunction.In_Exponential: return(ExponentialEaseIn); case EEasingFunction.Out_Exponential: return(ExponentialEaseOut); case EEasingFunction.InOut_Exponential: return(ExponentialEaseInOut); case EEasingFunction.In_Circular: return(CircularEaseIn); case EEasingFunction.Out_Circular: return(CircularEaseOut); case EEasingFunction.InOut_Circular: return(CircularEaseInOut); } return(null); }
/// <summary> /// Construct an interpolation /// </summary> /// <param name="y0">min value on y axis</param> /// <param name="y1">max value on y axis</param> /// <param name="duration">duration of interpolation</param> /// <param name="ease">easing function</param> public Interpolation(float y0, float y1, float duration = 1, EEasingFunction ease = EEasingFunction.Linear) { if (duration == 0) { throw new ArgumentException("Duration cannot = 0 in an interpolation"); } Y1 = y1; Y0 = y0; Duration = duration; EasingFunction = ease; _ease = ease.Function(); YSpan = Y1 - Y0; }
/// <summary> /// Takes in a time value and interpolated between y1 and y0 /// based on the duration. Uses the easing functin provided as an argument /// </summary> /// <param name="t">time, normally between 0 and duration, technically can be out of bounds</param> /// <param name="ease">The easing funciton to use</param> /// <returns></returns> public float Interpolate(float t, EEasingFunction ease) => ease.Function()((t / Duration) * YSpan + Y0);
public SInterpolation(float start, float end, EEasingFunction ease) { Start = start; End = end; Ease = ease; }
/// <summary> /// Interpolate a vector3 path /// </summary> /// <param name="id"></param> /// <param name="duration"></param> /// <param name="ease"></param> /// <param name="path"></param> /// <returns></returns> public static IInterpolationToken <Vector3> InterpolateVector3Path(int id, float duration, EEasingFunction ease, params Vector3[] path) { PathInterpolation <Vector3> pathInterp = new PathInterpolation <Vector3>(id, duration, ease, InterpolateVector3, path); pathInterp.StartPathInterpolation(); return(pathInterp); }
/// <summary> /// Sets up an inteprolation for a vector 3 /// </summary> /// <param name="id"></param> /// <param name="from"></param> /// <param name="to"></param> /// <param name="duration"></param> /// <param name="ease"></param> /// <returns></returns> public static IInterpolationToken <Vector3> InterpolateVector3(int id, Vector3 from, Vector3 to, float duration, EEasingFunction ease) { SInterpolation[] interp = new SInterpolation[] { new SInterpolation(from.x, to.x, ease), new SInterpolation(from.y, to.y, ease), new SInterpolation(from.z, to.z, ease) }; IInterpolationToken <float[]> t = InterpolationManager.Instance.StartInterpolation(id, duration, interp); return(Vector3InterpolationToken.FromInterpolationToken(t)); }