62 lines
1.8 KiB
C#

using NodeCanvas.Framework;
using ParadoxNotion.Design;
using UnityEngine;
namespace NodeCanvas.BehaviourTrees
{
[System.Obsolete("Use Conditional Evaluator")]
[Name("Interrupt")]
[Category("Decorators")]
[Description("Executes and returns the child status if the condition is false. Returns the specified status if the condition is or becomes true.")]
[ParadoxNotion.Design.Icon("Interruptor")]
public class Interruptor : BTDecorator, ITaskAssignable<ConditionTask>
{
[SerializeField]
private ConditionTask _condition;
[Tooltip("The status that will be returned if the assigned condition is or becomes true.")]
public FinalStatus conditionSuccessReturn = FinalStatus.Failure;
public ConditionTask condition {
get { return _condition; }
set { _condition = value; }
}
public Task task {
get { return condition; }
set { condition = (ConditionTask)value; }
}
protected override Status OnExecute(Component agent, IBlackboard blackboard) {
if ( decoratedConnection == null ) {
return Status.Optional;
}
if ( condition == null ) {
return decoratedConnection.Execute(agent, blackboard);
}
if ( status == Status.Resting ) {
condition.Enable(agent, blackboard);
}
if ( condition.Check(agent, blackboard) == false ) {
return decoratedConnection.Execute(agent, blackboard);
}
if ( decoratedConnection.status == Status.Running ) {
decoratedConnection.Reset();
}
return (Status)conditionSuccessReturn;
}
protected override void OnReset() {
condition?.Disable();
}
}
}