42 lines
827 B
C#
42 lines
827 B
C#
using System;
|
|
|
|
namespace Questionable.Controller.Steps.Common;
|
|
|
|
internal static class WaitCondition
|
|
{
|
|
internal sealed record Task(Func<bool> Predicate, string Description) : ITask
|
|
{
|
|
public override string ToString()
|
|
{
|
|
return Description;
|
|
}
|
|
}
|
|
|
|
internal sealed class WaitConditionExecutor : TaskExecutor<Task>
|
|
{
|
|
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;
|
|
}
|
|
}
|
|
}
|