Example #1
0
        /// <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;
        }
Example #2
0
        /// <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);
        }
Example #3
0
        /// <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;
        }
Example #4
0
 /// <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);
Example #5
0
 public SInterpolation(float start, float end, EEasingFunction ease)
 {
     Start = start;
     End   = end;
     Ease  = ease;
 }
Example #6
0
        /// <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);
        }
Example #7
0
        /// <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));
        }