public static IEnumerator Join(IResumable resumable) { resumable.Resume(Coroutine.Delta); while (!resumable.Finished) { yield return(null); resumable.Resume(Coroutine.Delta); } }
/// <summary> /// Resume a resumable until the condition is met. /// </summary> /// <param name="resumable">The resumable.</param> /// <param name="condition">Condition delegate. It will be evaluated every before resuming.</param> /// <returns></returns> public static IEnumerator JoinWhile(this IResumable resumable, Condition condition) { if (!condition()) { resumable.Resume(Coroutine.Delta); } while (condition()) { yield return(null); resumable.Resume(Coroutine.Delta); } }
/// <summary> /// Resume a resumable until it is finished or time is up /// </summary> /// <param name="resumable">The resumable.</param> /// <param name="wait_time">Time to wait for resuming the resumable.</param> /// <returns></returns> public static IEnumerator TimedJoin(this IResumable resumable, float waitTime) { if (waitTime > 0 && !resumable.Finished) { resumable.Resume(Coroutine.Delta); } while (waitTime > 0 && !resumable.Finished) { yield return(null); waitTime -= Coroutine.Delta; resumable.Resume(Coroutine.Delta); } }