AI/ActionSystem/BehaviorTree/Nodes/DelayUntilNode.cs
using System;
namespace HC3;
/// <summary>
/// A node that delays execution until a specified condition is met or a timeout occurs.
/// </summary>
public class DelayUntilNode : Node
{
private readonly Func<bool> _condition;
private readonly float _timeout;
private float _startTime;
private bool _started;
public DelayUntilNode( Func<bool> condition, float timeout = float.PositiveInfinity )
{
_condition = condition;
_timeout = timeout;
}
public override Status Tick()
{
if ( !_started )
{
_startTime = Time.Now;
_started = true;
}
if ( _condition() )
{
_started = false;
return Status.Success;
}
if ( Time.Now - _startTime >= _timeout )
{
_started = false;
return Status.Failure;
}
return Status.Running;
}
}