Ejemplo n.º 1
0
        public void SetCurve(Vector3 end, float time)
        {
            if (m_object != null)
            {
                TweenCurve cur = TweenCurve.Get(m_object);
                cur.duration = time * 0.001f;
                cur.from     = GetPos();
                cur.front    = new Vector3(0, 4, 0);
                cur.back     = new Vector3(0, 4, 0);
                cur.to       = end;
                cur.method   = UITweener.Method.EaseIn;
                cur.Reset();
                cur.Play(true);

                //TweenFloat rota = TweenFloat.Get(m_object);
                //rota.from = 0;
                //rota.to = 2000;
                //rota.duration = time * 0.001f;
                //rota.Reset();
                //rota.Play(true);
                //rota.FloatUpdateEvent = (val) => {
                //    SetDirection(val * Vector3.one);
                //};
            }
        }
Ejemplo n.º 2
0
        /// <summary>
        /// 设置抛物线(贝塞尔曲线)
        /// </summary>
        public void SetCurve(Vector3 end, float time, float hight)
        {
            if (m_object != null)
            {
                TweenCurve cur = TweenCurve.Get(m_object);
                cur.duration = time * 0.001f;
                cur.from     = GetPos();
                cur.front    = new Vector3(0, hight, 0);
                cur.back     = new Vector3(0, hight, 0);
                cur.to       = end;
                cur.method   = UITweener.Method.Linear;
                cur.Reset();
                cur.Play(true);

                TweenFloat rota = TweenFloat.Get(m_object);
                rota.duration = time * 0.001f;
                rota.from     = 0;
                rota.to       = -360;
                rota.method   = UITweener.Method.EaseOut;
                rota.Reset();
                rota.Play(true);
                rota.FloatUpdateEvent = (val) => {
                    SetDirection(val * Vector3.one);
                };
            }
        }
Ejemplo n.º 3
0
        private void TweenToInTime(Pose target, float time)
        {
            Pose start = _pose;

            if (_tweenCurves.Count > 0)
            {
                TweenCurve previousCurve = _tweenCurves[_tweenCurves.Count - 1];
                float      progressIn    = previousCurve.Curve.ProgressIn(Mathf.Min(_maxOverlapTime, time));
                if (progressIn != 1.0f)
                {
                    float deltaEase     = progressIn - previousCurve.PrevProgress;
                    float remainEase    = 1.0f - previousCurve.PrevProgress;
                    float percentTravel = deltaEase / remainEase;
                    start = previousCurve.Current;
                    start.Lerp(in previousCurve.Target, percentTravel);
                }
            }

            TweenCurve tweenCurve = new TweenCurve()
            {
                Curve        = new ProgressCurve(_animationCurve, time),
                PrevProgress = 0f,
                Current      = start,
                Target       = target
            };

            _tweenCurves.Add(tweenCurve);
            tweenCurve.Curve.Start();
        }
Ejemplo n.º 4
0
    static public TweenCurve Get(GameObject go)
    {
        TweenCurve pos = go.GetComponent <TweenCurve>();

        if (pos == null)
        {
            pos = go.AddComponent <TweenCurve>();
        }
        return(pos);
    }
Ejemplo n.º 5
0
        public void Tick()
        {
            for (int i = _tweenCurves.Count - 1; i >= 0; i--)
            {
                TweenCurve tweenCurve = _tweenCurves[i];
                float      progress   = tweenCurve.Curve.Progress();
                if (progress == 1.0f)
                {
                    tweenCurve.Current      = tweenCurve.Target;
                    tweenCurve.PrevProgress = 1.0f;
                    continue;
                }

                float deltaEase     = progress - tweenCurve.PrevProgress;
                float remainEase    = 1.0f - tweenCurve.PrevProgress;
                float percentTravel = deltaEase / remainEase;

                tweenCurve.Current.Lerp(in tweenCurve.Target, percentTravel);
                tweenCurve.PrevProgress = progress;
            }

            float multiplier = 1.0f;
            float overlap    = 0.0f;
            Pose  pose       = _tweenCurves[_tweenCurves.Count - 1].Current;

            for (int i = _tweenCurves.Count - 2; i >= 0; i--)
            {
                TweenCurve nextCurve    = _tweenCurves[i + 1];
                float      timeProgress = nextCurve.Curve.ProgressTime();
                if (nextCurve.Curve.AnimationLength == 0f)
                {
                    overlap = 1.0f;
                }
                else
                {
                    overlap = Mathf.Min(_maxOverlapTime, timeProgress) /
                              Mathf.Min(_maxOverlapTime, nextCurve.Curve.AnimationLength);
                }

                if (overlap == 1.0f)
                {
                    _tweenCurves.RemoveRange(0, i);
                    break;
                }
                multiplier = (1 - overlap) * multiplier;
                Pose easeCurve = _tweenCurves[i].Current;
                pose.Lerp(in easeCurve, multiplier);
            }

            _pose = pose;
        }
Ejemplo n.º 6
0
    static public TweenCurve Begin(GameObject go, float duration, Vector3 to, Vector3 front, Vector3 back)
    {
        TweenCurve comp = UITweener.Begin <TweenCurve>(go, duration);

        comp.from  = comp.position;
        comp.to    = to;
        comp.front = front;
        comp.back  = back;

        if (duration <= 0f)
        {
            comp.Sample(1f, true);
            comp.enabled = false;
        }
        return(comp);
    }
Ejemplo n.º 7
0
        // Core methods ---------------------------------------------------------------------------------------------------------------

        // Moves a value between a startValue and an endValue based on a currentTime, along the specified tween curve
        public static float TweenConstructor(float currentTime, float initialTime, float endTime, float startValue, float endValue, TweenCurve curve)
        {
            currentTime = MathsHelper.Remap(currentTime, initialTime, endTime, 0f, 1f);
            switch (curve)
            {
            case TweenCurve.LinearTween: currentTime = TweenDefinitions.Linear_Tween(currentTime); break;

            case TweenCurve.AntiLinearTween: currentTime = TweenDefinitions.LinearAnti_Tween(currentTime); break;

            case TweenCurve.EaseInQuadratic: currentTime = TweenDefinitions.EaseIn_Quadratic(currentTime); break;

            case TweenCurve.EaseOutQuadratic: currentTime = TweenDefinitions.EaseOut_Quadratic(currentTime); break;

            case TweenCurve.EaseInOutQuadratic: currentTime = TweenDefinitions.EaseInOut_Quadratic(currentTime); break;

            case TweenCurve.EaseInCubic: currentTime = TweenDefinitions.EaseIn_Cubic(currentTime); break;

            case TweenCurve.EaseOutCubic: currentTime = TweenDefinitions.EaseOut_Cubic(currentTime); break;

            case TweenCurve.EaseInOutCubic: currentTime = TweenDefinitions.EaseInOut_Cubic(currentTime); break;

            case TweenCurve.EaseInQuartic: currentTime = TweenDefinitions.EaseIn_Quartic(currentTime); break;

            case TweenCurve.EaseOutQuartic: currentTime = TweenDefinitions.EaseOut_Quartic(currentTime); break;

            case TweenCurve.EaseInOutQuartic: currentTime = TweenDefinitions.EaseInOut_Quartic(currentTime); break;

            case TweenCurve.EaseInQuintic: currentTime = TweenDefinitions.EaseIn_Quintic(currentTime); break;

            case TweenCurve.EaseOutQuintic: currentTime = TweenDefinitions.EaseOut_Quintic(currentTime); break;

            case TweenCurve.EaseInOutQuintic: currentTime = TweenDefinitions.EaseInOut_Quintic(currentTime); break;

            case TweenCurve.EaseInSinusoidal: currentTime = TweenDefinitions.EaseIn_Sinusoidal(currentTime); break;

            case TweenCurve.EaseOutSinusoidal: currentTime = TweenDefinitions.EaseOut_Sinusoidal(currentTime); break;

            case TweenCurve.EaseInOutSinusoidal: currentTime = TweenDefinitions.EaseInOut_Sinusoidal(currentTime); break;

            case TweenCurve.EaseInBounce: currentTime = TweenDefinitions.EaseIn_Bounce(currentTime); break;

            case TweenCurve.EaseOutBounce: currentTime = TweenDefinitions.EaseOut_Bounce(currentTime); break;

            case TweenCurve.EaseInOutBounce: currentTime = TweenDefinitions.EaseInOut_Bounce(currentTime); break;

            case TweenCurve.EaseInOverhead: currentTime = TweenDefinitions.EaseIn_Overhead(currentTime); break;

            case TweenCurve.EaseOutOverhead: currentTime = TweenDefinitions.EaseOut_Overhead(currentTime); break;

            case TweenCurve.EaseInOutOverhead: currentTime = TweenDefinitions.EaseInOut_Overhead(currentTime); break;

            case TweenCurve.EaseInExponential: currentTime = TweenDefinitions.EaseIn_Exponential(currentTime); break;

            case TweenCurve.EaseOutExponential: currentTime = TweenDefinitions.EaseOut_Exponential(currentTime); break;

            case TweenCurve.EaseInOutExponential: currentTime = TweenDefinitions.EaseInOut_Exponential(currentTime); break;

            case TweenCurve.EaseInElastic: currentTime = TweenDefinitions.EaseIn_Elastic(currentTime); break;

            case TweenCurve.EaseOutElastic: currentTime = TweenDefinitions.EaseOut_Elastic(currentTime); break;

            case TweenCurve.EaseInOutElastic: currentTime = TweenDefinitions.EaseInOut_Elastic(currentTime); break;

            case TweenCurve.EaseInCircular: currentTime = TweenDefinitions.EaseIn_Circular(currentTime); break;

            case TweenCurve.EaseOutCircular: currentTime = TweenDefinitions.EaseOut_Circular(currentTime); break;

            case TweenCurve.EaseInOutCircular: currentTime = TweenDefinitions.EaseInOut_Circular(currentTime); break;
            }
            return(startValue + currentTime * (endValue - startValue));
        }
Ejemplo n.º 8
0
        protected static IEnumerator RotateTransformAroundCo(Transform targetTransform, Transform center, Transform destination, float angle, WaitForSeconds delay, float delayDuration, float duration, TweenCurve curve)
        {
            if (delayDuration > 0f)
            {
                yield return(delay);
            }

            Vector3    initialRotationPosition = targetTransform.transform.position;
            Quaternion initialRotationRotation = targetTransform.transform.rotation;

            float rate = 1f / duration;

            float timeSpent = 0f;

            while (timeSpent < duration)
            {
                float newAngle = TweenConstructor(timeSpent, 0f, duration, 0f, angle, curve);

                targetTransform.transform.position = initialRotationPosition;
                initialRotationRotation            = targetTransform.transform.rotation;
                targetTransform.RotateAround(center.transform.position, center.transform.up, newAngle);
                targetTransform.transform.rotation = initialRotationRotation;

                timeSpent += Time.deltaTime;
                yield return(null);
            }
            targetTransform.transform.position = destination.position;
        }
Ejemplo n.º 9
0
        protected static IEnumerator MoveTransformCo(Transform targetTransform, Transform origin, Transform destination, WaitForSeconds delay, float delayDuration, float duration, TweenCurve curve, bool updatePosition = true, bool updateRotation = true)
        {
            if (delayDuration > 0f)
            {
                yield return(delay);
            }
            float timeLeft = duration;

            while (timeLeft > 0f)
            {
                if (updatePosition)
                {
                    targetTransform.transform.position = TweenConstructor(duration - timeLeft, 0f, duration, origin.position, destination.position, curve);
                }
                if (updateRotation)
                {
                    targetTransform.transform.rotation = TweenConstructor(duration - timeLeft, 0f, duration, origin.rotation, destination.rotation, curve);
                }
                timeLeft -= Time.deltaTime;
                yield return(null);
            }
            if (updatePosition)
            {
                targetTransform.transform.position = destination.position;
            }
            if (updateRotation)
            {
                targetTransform.transform.localEulerAngles = destination.localEulerAngles;
            }
        }
Ejemplo n.º 10
0
 public static Coroutine RotateTransformAround(MonoBehaviour mono, Transform targetTransform, Transform center, Transform destination, float angle, WaitForSeconds delay, float delayDuration, float duration, TweenCurve curve)
 {
     return(mono.StartCoroutine(RotateTransformAroundCo(targetTransform, center, destination, angle, delay, delayDuration, duration, curve)));
 }
Ejemplo n.º 11
0
        // MOVE METHODS ---------------------------------------------------------------------------------------------------------

        public static Coroutine MoveTransform(MonoBehaviour mono, Transform targetTransform, Transform origin, Transform destination, WaitForSeconds delay, float delayDuration, float duration, TweenCurve curve, bool updatePosition = true, bool updateRotation = true)
        {
            return(mono.StartCoroutine(MoveTransformCo(targetTransform, origin, destination, delay, delayDuration, duration, curve, updatePosition, updateRotation)));
        }
Ejemplo n.º 12
0
        public static Quaternion TweenConstructor(float currentTime, float initialTime, float endTime, Quaternion startValue, Quaternion endValue, TweenCurve curve)
        {
            float turningRate = TweenConstructor(currentTime, initialTime, endTime, 0f, 1f, curve);

            startValue = Quaternion.Slerp(startValue, endValue, turningRate);
            return(startValue);
        }
Ejemplo n.º 13
0
 public static Vector3 TweenConstructor(float currentTime, float initialTime, float endTime, Vector3 startValue, Vector3 endValue, TweenCurve curve)
 {
     startValue.x = TweenConstructor(currentTime, initialTime, endTime, startValue.x, endValue.x, curve);
     startValue.y = TweenConstructor(currentTime, initialTime, endTime, startValue.y, endValue.y, curve);
     startValue.z = TweenConstructor(currentTime, initialTime, endTime, startValue.z, endValue.z, curve);
     return(startValue);
 }
Ejemplo n.º 14
0
 public static Vector2 Tween(float currentTime, float initialTime, float endTime, Vector2 startValue, Vector2 endValue, TweenCurve curve)
 {
     startValue.x = Tween(currentTime, initialTime, endTime, startValue.x, endValue.x, curve);
     startValue.y = Tween(currentTime, initialTime, endTime, startValue.y, endValue.y, curve);
     return(startValue);
 }