import { TaskStatus, NodeType, AbortType } from '../Types/TaskStatus'; /** * 行为树节点定义(纯数据结构) * * 不依赖Entity,可以被多个实例共享 */ export interface BehaviorNodeData { /** 节点唯一ID */ id: string; /** 节点名称(用于调试) */ name: string; /** 节点类型 */ nodeType: NodeType; /** 节点实现类型(对应Component类名) */ implementationType: string; /** 子节点ID列表 */ children?: string[]; /** 节点特定配置数据 */ config: Record; /** 属性到黑板变量的绑定映射 */ bindings?: Record; /** 中止类型(条件装饰器使用) */ abortType?: AbortType; } /** * 行为树定义(可共享的Asset) */ export interface BehaviorTreeData { /** 树ID */ id: string; /** 树名称 */ name: string; /** 根节点ID */ rootNodeId: string; /** 所有节点(扁平化存储) */ nodes: Map; /** 黑板变量定义 */ blackboardVariables?: Map; } /** * 节点运行时状态 * * 每个BehaviorTreeRuntimeComponent实例独立维护 */ export interface NodeRuntimeState { /** 当前执行状态 */ status: TaskStatus; /** 当前执行的子节点索引(复合节点使用) */ currentChildIndex: number; /** 开始执行时间(某些节点需要) */ startTime?: number; /** 上次执行时间(冷却节点使用) */ lastExecutionTime?: number; /** 当前重复次数(重复节点使用) */ repeatCount?: number; /** 缓存的结果(某些条件节点使用) */ cachedResult?: any; /** 洗牌后的索引(随机节点使用) */ shuffledIndices?: number[]; /** 是否被中止 */ isAborted?: boolean; /** 上次条件评估结果(条件装饰器使用) */ lastConditionResult?: boolean; /** 正在观察的黑板键(条件装饰器使用) */ observedKeys?: string[]; } /** * 创建默认的运行时状态 */ export function createDefaultRuntimeState(): NodeRuntimeState { return { status: TaskStatus.Invalid, currentChildIndex: 0 }; }