程序包 cn.wjybxx.btree

类 Decorator<T>

java.lang.Object
cn.wjybxx.btree.Task<T>
cn.wjybxx.btree.Decorator<T>
所有已实现的接口:
ICancelTokenListener
直接已知子类:
AlwaysCheckGuard, AlwaysFail, AlwaysRunning, AlwaysSuccess, Inverter, LoopDecorator, OnlyOnce, StateMachineTask, SubtreeRef

public abstract class Decorator<T> extends Task<T>
装饰任务(最多只有一个子节点)
作者:
wjybxx date - 2023/11/25
  • 字段详细资料

  • 构造器详细资料

    • Decorator

      public Decorator()
    • Decorator

      public Decorator(Task<T> child)
  • 方法详细资料

    • getInlineHelper

      public final TaskInlineHelper<T> getInlineHelper()
    • resetForRestart

      public void resetForRestart()
      从类复制的说明: Task
      重置任务以便重新启动(清理运行产生的所有临时数据)

      1. 和exit一样,清理的是运行时产生的临时数据,而不是所有数据;不过该方法是比exit更彻底的清理。 2. 钩子任务也应当被重置。 3. 与Task.beforeEnter()相同,重写方法时,应先执行父类逻辑,再重置自身属性。 4. 有临时数据的Task都应该重写该方法,行为树通常是需要反复执行的。

      覆盖:
      resetForRestart 在类中 Task<T>
    • exit

      protected void exit()
      从类复制的说明: Task
      该方法在Task进入完成状态时执行 1.该方法与Task.enter(int)对应,通常用于停止Task.enter(int)中启动的逻辑。 2.该方法也用于清理部分运行时产生的临时数据。 3.一定记得取消注册的各种监听器。
      覆盖:
      exit 在类中 Task<T>
    • stopRunningChildren

      protected void stopRunningChildren()
      从类复制的说明: Task
      停止所有运行中的子节点 1.该方法在自身的exit之前调用 2.如果有特殊的子节点(钩子任务),也需要在这里停止 3.该方法不采用visitor实现,是因为停止任务可能有特殊的时序。 4.如果子节点不是按原始序启动的,务必要重写该方法。
      覆盖:
      stopRunningChildren 在类中 Task<T>
    • onEventImpl

      protected void onEventImpl(@Nonnull Object event)
      从类复制的说明: Task
      对于控制节点,通常将事件派发给约定的子节点或钩子节点。 对于叶子节点,通常自身处理事件。 注意: 1.转发事件时应该调用子节点的Task.onEvent(Object)方法 2.在AI这样的领域中,建议将事件转化为信息存储在Task或黑板中,而不是尝试立即做出反应。
      指定者:
      onEventImpl 在类中 Task<T>
    • onChildRunning

      protected void onChildRunning(Task<T> child, boolean starting)
      子类如果支持内联,则重写该方法(超类不能安全内联)
      指定者:
      onChildRunning 在类中 Task<T>
      参数:
      starting - 是否是启动时调用,即首次调用
    • visitChildren

      public void visitChildren(TaskVisitor<? super T> visitor, Object param)
      从类复制的说明: Task
      访问所有的子节点(含hook节点)
      指定者:
      visitChildren 在类中 Task<T>
    • indexChild

      public final int indexChild(Task<?> task)
      覆盖:
      indexChild 在类中 Task<T>
      返回:
      index or -1
    • getChildCount

      public final int getChildCount()
      从类复制的说明: Task
      子节点的数量(仅包括普通意义上的child,不包括钩子任务)
      指定者:
      getChildCount 在类中 Task<T>
    • getChild

      public final Task<T> getChild(int index)
      从类复制的说明: Task
      获取指定索引的child
      指定者:
      getChild 在类中 Task<T>
    • addChildImpl

      protected final int addChildImpl(Task<T> task)
      指定者:
      addChildImpl 在类中 Task<T>
      返回:
      为child分配的index
    • setChildImpl

      protected final Task<T> setChildImpl(int index, Task<T> task)
      指定者:
      setChildImpl 在类中 Task<T>
      返回:
      索引位置旧的child
    • removeChildImpl

      protected final Task<T> removeChildImpl(int index)
      指定者:
      removeChildImpl 在类中 Task<T>
      返回:
      index对应的child
    • getChild

      public Task<T> getChild()
    • setChild

      public void setChild(Task<T> child)