Exemple #1
0
        // These are for the convience of allowing the Unity Editor to select any built in EaseMethod:

        public static EaseMethod EaseFromEnum(EaseEnum ease)
        {
            switch (ease)
            {
            case EaseEnum.LINEAR:       { return(EASE_LINEAR); }

            case EaseEnum.QUAD_IN:      { return(EASE_QUAD_IN); }

            case EaseEnum.QUAD_OUT:     { return(EASE_QUAD_OUT); }

            case EaseEnum.QUAD_IN_OUT:  { return(EASE_QUAD_IN_OUT); }

            case EaseEnum.CUBIC_IN:     { return(EASE_CUBIC_IN); }

            case EaseEnum.CUBIC_OUT:    { return(EASE_CUBIC_OUT); }

            case EaseEnum.CUBIC_IN_OUT: { return(EASE_CUBIC_IN_OUT); }

            case EaseEnum.SIN_IN:       { return(EASE_SIN_IN); }

            case EaseEnum.SIN_OUT:      { return(EASE_SIN_OUT); }

            case EaseEnum.SIN_IN_OUT:   { return(EASE_SIN_IN_OUT); }

            case EaseEnum.EXP_IN:       { return(EASE_EXP_IN); }

            case EaseEnum.EXP_OUT:      { return(EASE_EXP_OUT); }

            case EaseEnum.EXP_IN_OUT:   { return(EASE_EXP_IN_OUT); }

            case EaseEnum.CIRC_IN:      { return(EASE_CIRC_IN); }

            case EaseEnum.CIRC_OUT:     { return(EASE_CIRC_OUT); }

            case EaseEnum.CIRC_IN_OUT:  { return(EASE_CIRC_IN_OUT); }

            case EaseEnum.ELASTIC_OUT:  { return(EASE_ELASTIC_OUT); }

            case EaseEnum.BOUNCE_OUT:   { return(EASE_BOUNCE_OUT); }
            }
            return(EASE_LINEAR);
        }
Exemple #2
0
 /// <summary>
 /// 设置缓冲动作
 /// </summary>
 /// <param name="tween"></param>
 /// <param name="ease"></param>
 /// <returns></returns>
 public static ActionTween SetEase(this ActionTween tween, EaseEnum ease)
 {
     tween.mEaseEnum = ease;
     return(tween);
 }
Exemple #3
0
        /// <summary>
        /// Returns a value between 0 and 1 (inclusive) based on the elapsed time and EaseEnum selected
        /// </summary>
        public static float Evaluate(EaseEnum easeType, EaseFunction customEase, float time, float duration, float overshootOrAmplitude, float period)
        {
            switch (easeType)
            {
            case EaseEnum.Linear:
                return(time / duration);

            case EaseEnum.InSine:
                return(-(float)Math.Cos(time / duration * _PiOver2) + 1);

            case EaseEnum.OutSine:
                return((float)Math.Sin(time / duration * _PiOver2));

            case EaseEnum.InOutSine:
                return(-0.5f * ((float)Math.Cos(Mathf.PI * time / duration) - 1));

            case EaseEnum.InQuad:
                return((time /= duration) * time);

            case EaseEnum.OutQuad:
                return(-(time /= duration) * (time - 2));

            case EaseEnum.InOutQuad:
                if ((time /= duration * 0.5f) < 1)
                {
                    return(0.5f * time * time);
                }
                return(-0.5f * ((--time) * (time - 2) - 1));

            case EaseEnum.InCubic:
                return((time /= duration) * time * time);

            case EaseEnum.OutCubic:
                return((time = time / duration - 1) * time * time + 1);

            case EaseEnum.InOutCubic:
                if ((time /= duration * 0.5f) < 1)
                {
                    return(0.5f * time * time * time);
                }
                return(0.5f * ((time -= 2) * time * time + 2));

            case EaseEnum.InQuart:
                return((time /= duration) * time * time * time);

            case EaseEnum.OutQuart:
                return(-((time = time / duration - 1) * time * time * time - 1));

            case EaseEnum.InOutQuart:
                if ((time /= duration * 0.5f) < 1)
                {
                    return(0.5f * time * time * time * time);
                }
                return(-0.5f * ((time -= 2) * time * time * time - 2));

            case EaseEnum.InQuint:
                return((time /= duration) * time * time * time * time);

            case EaseEnum.OutQuint:
                return((time = time / duration - 1) * time * time * time * time + 1);

            case EaseEnum.InOutQuint:
                if ((time /= duration * 0.5f) < 1)
                {
                    return(0.5f * time * time * time * time * time);
                }
                return(0.5f * ((time -= 2) * time * time * time * time + 2));

            case EaseEnum.InExpo:
                return((time == 0) ? 0 : (float)Math.Pow(2, 10 * (time / duration - 1)));

            case EaseEnum.OutExpo:
                if (time == duration)
                {
                    return(1);
                }
                return(-(float)Math.Pow(2, -10 * time / duration) + 1);

            case EaseEnum.InOutExpo:
                if (time == 0)
                {
                    return(0);
                }
                if (time == duration)
                {
                    return(1);
                }
                if ((time /= duration * 0.5f) < 1)
                {
                    return(0.5f * (float)Math.Pow(2, 10 * (time - 1)));
                }
                return(0.5f * (-(float)Math.Pow(2, -10 * --time) + 2));

            case EaseEnum.InCirc:
                return(-((float)Math.Sqrt(1 - (time /= duration) * time) - 1));

            case EaseEnum.OutCirc:
                return((float)Math.Sqrt(1 - (time = time / duration - 1) * time));

            case EaseEnum.InOutCirc:
                if ((time /= duration * 0.5f) < 1)
                {
                    return(-0.5f * ((float)Math.Sqrt(1 - time * time) - 1));
                }
                return(0.5f * ((float)Math.Sqrt(1 - (time -= 2) * time) + 1));

            case EaseEnum.InElastic:
                float s0;
                if (time == 0)
                {
                    return(0);
                }
                if ((time /= duration) == 1)
                {
                    return(1);
                }
                if (period == 0)
                {
                    period = duration * 0.3f;
                }
                if (overshootOrAmplitude < 1)
                {
                    overshootOrAmplitude = 1;
                    s0 = period / 4;
                }
                else
                {
                    s0 = period / _TwoPi * (float)Math.Asin(1 / overshootOrAmplitude);
                }
                return(-(overshootOrAmplitude * (float)Math.Pow(2, 10 * (time -= 1)) * (float)Math.Sin((time * duration - s0) * _TwoPi / period)));

            case EaseEnum.OutElastic:
                float s1;
                if (time == 0)
                {
                    return(0);
                }
                if ((time /= duration) == 1)
                {
                    return(1);
                }
                if (period == 0)
                {
                    period = duration * 0.3f;
                }
                if (overshootOrAmplitude < 1)
                {
                    overshootOrAmplitude = 1;
                    s1 = period / 4;
                }
                else
                {
                    s1 = period / _TwoPi * (float)Math.Asin(1 / overshootOrAmplitude);
                }
                return(overshootOrAmplitude * (float)Math.Pow(2, -10 * time) * (float)Math.Sin((time * duration - s1) * _TwoPi / period) + 1);

            case EaseEnum.InOutElastic:
                float s;
                if (time == 0)
                {
                    return(0);
                }
                if ((time /= duration * 0.5f) == 2)
                {
                    return(1);
                }
                if (period == 0)
                {
                    period = duration * (0.3f * 1.5f);
                }
                if (overshootOrAmplitude < 1)
                {
                    overshootOrAmplitude = 1;
                    s = period / 4;
                }
                else
                {
                    s = period / _TwoPi * (float)Math.Asin(1 / overshootOrAmplitude);
                }
                if (time < 1)
                {
                    return(-0.5f * (overshootOrAmplitude * (float)Math.Pow(2, 10 * (time -= 1)) * (float)Math.Sin((time * duration - s) * _TwoPi / period)));
                }
                return(overshootOrAmplitude * (float)Math.Pow(2, -10 * (time -= 1)) * (float)Math.Sin((time * duration - s) * _TwoPi / period) * 0.5f + 1);

            case EaseEnum.InBack:
                return((time /= duration) * time * ((overshootOrAmplitude + 1) * time - overshootOrAmplitude));

            case EaseEnum.OutBack:
                return((time = time / duration - 1) * time * ((overshootOrAmplitude + 1) * time + overshootOrAmplitude) + 1);

            case EaseEnum.InOutBack:
                if ((time /= duration * 0.5f) < 1)
                {
                    return(0.5f * (time * time * (((overshootOrAmplitude *= (1.525f)) + 1) * time - overshootOrAmplitude)));
                }
                return(0.5f * ((time -= 2) * time * (((overshootOrAmplitude *= (1.525f)) + 1) * time + overshootOrAmplitude) + 2));

            case EaseEnum.InBounce:
                return(Bounce.EaseIn(time, duration, overshootOrAmplitude, period));

            case EaseEnum.OutBounce:
                return(Bounce.EaseOut(time, duration, overshootOrAmplitude, period));

            case EaseEnum.InOutBounce:
                return(Bounce.EaseInOut(time, duration, overshootOrAmplitude, period));

            case EaseEnum.INTERNAL_Custom:
                return(customEase(time, duration, overshootOrAmplitude, period));

            // Default
            default:
                // OutQuad
                return(-(time /= duration) * (time - 2));
            }
        }
Exemple #4
0
        /// <summary>
        /// Gets the easing function
        /// </summary>
        /// <param name="type">ease type</param>
        /// <returns>easing function</returns>
        public static Func <float, float> Get(EaseEnum type)
        {
            switch (type)
            {
            case EaseEnum.Linear: return(Linear);

            case EaseEnum.InBack: return(InBack);

            case EaseEnum.InBounce: return(InBounce);

            case EaseEnum.InCirc: return(InCirc);

            case EaseEnum.InCubic: return(InCubic);

            case EaseEnum.InElastic: return(InElastic);

            case EaseEnum.InExpo: return(InExpo);

            case EaseEnum.InQuad: return(InQuad);

            case EaseEnum.InQuart: return(InQuart);

            case EaseEnum.InQuint: return(InQuint);

            case EaseEnum.InSine: return(InSine);

            case EaseEnum.OutBack: return(OutBack);

            case EaseEnum.OutBounce: return(OutBounce);

            case EaseEnum.OutCirc: return(OutCirc);

            case EaseEnum.OutCubic: return(OutCubic);

            case EaseEnum.OutElastic: return(OutElastic);

            case EaseEnum.OutExpo: return(OutExpo);

            case EaseEnum.OutQuad: return(OutQuad);

            case EaseEnum.OutQuart: return(OutQuart);

            case EaseEnum.OutQuint: return(OutQuint);

            case EaseEnum.OutSine: return(OutSine);

            case EaseEnum.InOutBack: return(InOutBack);

            case EaseEnum.InOutBounce: return(InOutBounce);

            case EaseEnum.InOutCirc: return(InOutCirc);

            case EaseEnum.InOutCubic: return(InOutCubic);

            case EaseEnum.InOutElastic: return(InOutElastic);

            case EaseEnum.InOutExpo: return(InOutExpo);

            case EaseEnum.InOutQuad: return(InOutQuad);

            case EaseEnum.InOutQuart: return(InOutQuart);

            case EaseEnum.InOutQuint: return(InOutQuint);

            case EaseEnum.InOutSine: return(InOutSine);

            default: return(Linear);
            }
        }