using System; namespace Questionable.Controller.Steps.Common; internal static class WaitCondition { internal sealed record Task(Func Predicate, string Description) : ITask { public override string ToString() { return Description; } } internal sealed class WaitConditionExecutor : TaskExecutor { private DateTime _continueAt = DateTime.MaxValue; protected override bool Start() { return !base.Task.Predicate(); } public override ETaskResult Update() { if (_continueAt == DateTime.MaxValue && base.Task.Predicate()) { _continueAt = DateTime.Now.AddSeconds(0.5); } if (!(DateTime.Now >= _continueAt)) { return ETaskResult.StillRunning; } return ETaskResult.TaskComplete; } public override bool ShouldInterruptOnDamage() { return false; } } }