using NodeCanvas.BehaviourTrees; using NodeCanvas.Framework; using ParadoxNotion.Design; using UnityEngine; namespace NodeCanvas.Tasks.Actions { [Name("Action")] [Category("Decorators")] [Description("Executes and returns the child status only if the condition is true. Returns Failure if the condition is false.")] [ParadoxNotion.Design.Icon("Action")] public class TunnelAction : BTDecorator, ITaskAssignable { [SerializeField] private ActionTask _action; private ActionTask actionTask { get => _action; set => _action = (ActionTask)value; } public Task task { get => actionTask; set => actionTask = (ActionTask)value; } protected override Status OnExecute(Component agent, IBlackboard blackboard) { if (decoratedConnection == null) { return Status.Optional; } if (actionTask == null) { return decoratedConnection.Execute(agent, blackboard); } var executeStatus = actionTask.Execute(agent, blackboard); return executeStatus != Status.Failure ? decoratedConnection.Execute(agent, blackboard) : executeStatus; } } }