public static async Task Delay(float duration, IScheduler scheduler) { var awaitable = new AwaitableEnumerator(); StartCoroutine(DelayCoroutine(duration, awaitable, scheduler)); await awaitable; }
private static IEnumerator DelayCoroutine(float duration, AwaitableEnumerator awaitable, IScheduler scheduler) { var startTime = scheduler.Now; yield return(new WaitWhile(() => scheduler.Now - startTime < duration)); awaitable.Finished(); }
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; }
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; }
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; }
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(); }
public static AwaitableEnumerator GetAwaiter(this AwaitableEnumerator awaitable) { return(awaitable); }