using System; using UnityEngine; using UnityEngine.TestTools; namespace BracerLib.Utility.Coroutines { [ExcludeFromCoverage] public class CancellableWaitForSeconds : CustomYieldInstruction { private float remaining; private readonly Func predicate; public override bool keepWaiting => ShouldKeepWaiting(); public CancellableWaitForSeconds(float wait, Func predicate) { remaining = wait; this.predicate = predicate; } private bool ShouldKeepWaiting() { remaining -= Time.deltaTime; var check = CheckCustomPredicate(); return !(check || remaining < 0f); } private bool CheckCustomPredicate() => predicate?.Invoke() ?? false; } }