/// <summary> /// Waits while condition is true /// If timed out, callback will be invoked with false /// </summary> /// <param name="condition"></param> /// <param name="completeCallback"></param> /// <param name="timeoutSeconds"></param> public static void WaitWhile(Func <bool> condition, TimerActionCompleteHandler completeCallback, float timeoutSeconds) { if (Instance) { Instance.StartCoroutine(WaitWhileTrueCoroutine(condition, completeCallback, timeoutSeconds)); } }
/// <summary> /// /// </summary> /// <param name="condition"></param> /// <param name="completeCallback"></param> /// <param name="timeoutSeconds"></param> /// <param name="reverseCondition"></param> /// <returns></returns> private static IEnumerator WaitWhileTrueCoroutine(Func <bool> condition, TimerActionCompleteHandler completeCallback, float timeoutSeconds, bool reverseCondition = false) { while ((timeoutSeconds > 0) && (condition.Invoke() == !reverseCondition)) { timeoutSeconds -= Time.deltaTime; yield return(null); } completeCallback.Invoke(timeoutSeconds > 0); }