Esempio n. 1
0
        public static async Task DoTweenAsync(int id, float duration, CancellationToken cancellationToken,
                                              Action <float> action, Easing easeType = Easing.Linear)
        {
            var instanceCancellationToken = StartTween(id);

            float t    = 0;
            var   ease = EaseFunctions.Get(easeType);

            action?.Invoke(ease.Invoke(0));

            while (t < duration && Application.isPlaying)
            {
                await Task.Yield();

                if (instanceCancellationToken.IsCancellationRequested || cancellationToken.IsCancellationRequested)
                {
                    return;
                }

                t += Time.deltaTime;
                action?.Invoke(ease.Invoke(Mathf.InverseLerp(0, duration, t)));
            }

            //Just exit immediately if we've stopped playing in editor
            if (!Application.isPlaying)
            {
                return;
            }

            action?.Invoke(ease.Invoke(1));

            CompleteTween(id);
        }
Esempio n. 2
0
 public static async Task DoColorAsync(this TextMeshProUGUI text, Color toColor, float duration, Easing easing = Easing.Linear)
 {
     var startColor = text.color;
     var easeFunc   = EaseFunctions.Get(easing);
     await TweenExtensions.DoTweenAsync(text.gameObject.GetInstanceID(), duration,
                                        (t) => { text.color = Color.Lerp(startColor, toColor, t); }, easing);
 }