Files
kunpocc-behaviortree/src/behaviortree/BehaviorTree.ts

63 lines
1.6 KiB
TypeScript
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
import { Blackboard, IBlackboard } from "./Blackboard";
import { IBTNode } from "./BTNode/BTNode";
import { Status } from "./header";
/**
* 行为树
* 所有节点全部添加到树中
*/
export class BehaviorTree<T> {
/**
* @internal
*/
private _root: IBTNode;
/**
* @internal
*/
private _blackboard: IBlackboard;
get root(): IBTNode { return this._root; }
get blackboard(): IBlackboard { return this._blackboard }
/**
* constructor
* @param entity 实体
* @param root 根节点
*/
constructor(entity: T, root: IBTNode) {
this._root = root;
this._blackboard = new Blackboard(undefined, entity);
// 构造时就初始化所有节点ID避免运行时检查
this._initializeAllNodeIds(this._root);
}
/**
* 执行行为树
*/
public tick(dt: number): Status {
return this._root._execute(dt);
}
/**
* 递归初始化所有节点ID
* 在构造时一次性完成,避免运行时检查
* @param node 要初始化的节点
* @internal
*/
private _initializeAllNodeIds(node: IBTNode, parent?: IBTNode): void {
// 设置当前节点ID
node._initialize(this._blackboard, parent ? parent.local : this._blackboard);
// 递归设置所有子节点ID
for (const child of node.children) {
this._initializeAllNodeIds(child, node);
}
}
/**
* 完全重置行为树(核武器级别的重置)
* 清空黑板并重置所有节点状态
*/
public reset(): void {
this._blackboard.clean();
}
}