mirror of
https://github.com/Gongxh0901/kunpolibrary
synced 2025-04-10 21:51:04 +00:00
105 lines
2.6 KiB
TypeScript
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;
|
|
}
|
|
} |