Пример #1
0
        public static async Task Delay(float duration, IScheduler scheduler)
        {
            var awaitable = new AwaitableEnumerator();

            StartCoroutine(DelayCoroutine(duration, awaitable, scheduler));
            await awaitable;
        }
Пример #2
0
        private static IEnumerator DelayCoroutine(float duration, AwaitableEnumerator awaitable, IScheduler scheduler)
        {
            var startTime = scheduler.Now;

            yield return(new WaitWhile(() => scheduler.Now - startTime < duration));

            awaitable.Finished();
        }
Пример #3
0
        public static async Task PlayTo <T>(IAnimatorWithStartValue <T> animator, IValueTranslator <T> translator, IScheduler scheduler)
        {
            var awaitable = new AwaitableEnumerator();

            animator.Start(translator.Current);
            StartCoroutine(PlayCoroutine(new DummyAnimator <T>(animator), translator, awaitable, scheduler));
            await awaitable;
        }
Пример #4
0
        public static async Task Play <T>(IAnimator <T> animator, ITranslator <T> translator, IScheduler scheduler)
        {
            var awaitable = new AwaitableEnumerator();

            animator.Start();
            StartCoroutine(PlayCoroutine(animator, translator, awaitable, scheduler));
            await awaitable;
        }
Пример #5
0
        public static async Task Play <T>(IAnimator <T> animator, ITranslator <T> translator, IScheduler scheduler, CancellationToken cancellationToken = default(CancellationToken))
        {
            var awaitable = new AwaitableEnumerator();

            animator.Start();
            StartCoroutine(PlayCoroutine(animator, translator, awaitable, scheduler, cancellationToken));
            await awaitable;
        }
Пример #6
0
        private static IEnumerator PlayCoroutine <T>(IAnimator <T> animator, ITranslator <T> translator, AwaitableEnumerator awaitable, IScheduler scheduler)
        {
            var startTime = scheduler.Now;

            while (true)
            {
                var t = animator.Update(scheduler.Now - startTime);
                translator.Update(t.Item1);
                if (t.Item2)
                {
                    break;
                }
                yield return(null);
            }
            awaitable.Finished();
        }
Пример #7
0
 public static AwaitableEnumerator GetAwaiter(this AwaitableEnumerator awaitable)
 {
     return(awaitable);
 }