kunpolibrary/src/behaviortree/Blackboard.ts
2025-03-07 16:57:26 +08:00

105 lines
2.6 KiB
TypeScript

/**
* 行为树数据
*/
interface ITreeData {
nodeMemory: { [nodeScope: string]: any };
openNodes: any[];
}
/** 平台 */
export class Blackboard {
/** 行为树打断保护 */
public interruptDefend: boolean = false;
/** 打断行为树的标记 */
public interrupt: boolean = false;
/** 基础记忆 @internal */
private _baseMemory: any;
/** 树记忆 @internal */
private _treeMemory: { [treeScope: string]: ITreeData };
constructor() {
this._baseMemory = {};
this._treeMemory = {};
}
/**
* 清除
*/
public clear(): void {
this._baseMemory = {};
this._treeMemory = {};
}
/**
* 设置
* @param key 键
* @param value 值
* @param treeScope 树范围
* @param nodeScope 节点范围
*/
public set(key: string, value: any, treeScope?: string, nodeScope?: string): void {
let memory = this._getMemory(treeScope, nodeScope);
memory[key] = value;
}
/**
* 获取
* @param key 键
* @param treeScope 树范围
* @param nodeScope 节点范围
* @returns 值
*/
public get(key: string, treeScope?: string, nodeScope?: string): any {
let memory = this._getMemory(treeScope, nodeScope);
return memory[key];
}
/**
* 获取树记忆
* @param treeScope 树范围
* @returns 树记忆
* @internal
*/
private _getTreeMemory(treeScope: string): ITreeData {
if (!this._treeMemory[treeScope]) {
this._treeMemory[treeScope] = {
nodeMemory: {},
openNodes: [],
};
}
return this._treeMemory[treeScope];
}
/**
* 获取节点记忆
* @param treeMemory 树记忆
* @param nodeScope 节点范围
* @returns 节点记忆
* @internal
*/
private _getNodeMemory(treeMemory: ITreeData, nodeScope: string): { [key: string]: any } {
let memory = treeMemory.nodeMemory;
if (!memory[nodeScope]) {
memory[nodeScope] = {};
}
return memory[nodeScope];
}
/**
* 获取记忆
* @param treeScope 树范围
* @param nodeScope 节点范围
* @returns 记忆
* @internal
*/
private _getMemory(treeScope?: string, nodeScope?: string): { [key: string]: any } {
let memory = this._baseMemory;
if (treeScope) {
memory = this._getTreeMemory(treeScope);
if (nodeScope) {
memory = this._getNodeMemory(memory, nodeScope);
}
}
return memory;
}
}