import BehaviorTree, { ExeResult } from "./BehaviorTree";

/**
 * 节点类型
 */
export const BehaviorNodeType = cc.Enum({
    Root:0,//根节点
    Sequence: 1,//顺序节点 将其所有子节点依次执行，当前一个返回“完成”状态后，再运行下一个子节点
    Selector: 2,//选择节点
    Parallel: 3,//并行节点 每个节点执行一次
    Conditinals:4,//条件节点
    Action: 5,//动作节点
});

/**
 * 行为树节点
 */
export default class BehaviorNode{
    public type = BehaviorNodeType.Root;
    /**
     * 行为树
     */
    public behaviorTree:BehaviorTree = null;
    /**
     * 子节点
     */
    public childNode:Array<BehaviorNode> = []

    constructor(behaviorTree:BehaviorTree){
        this.behaviorTree = behaviorTree;
    }

    public addNode(node:BehaviorNode){
        this.childNode.push(node)
    }
    /**
     * 
     * @returns 当前节点是否返回
     */
    public isOK():boolean{
        return false
    }
    /**
     * 执行当前节点
     * @param callback 执行结束后回调
     * @returns 执行的节点
     */
    public run(callback:(behaviorNode)=>void){
        callback(null)
    }
}
