UNPKG

@esengine/ai

Version:

用于Laya、Cocos Creator等JavaScript游戏引擎的高性能AI系统库:行为树、实用AI和有限状态机

1 lines 515 kB
{"version":3,"file":"index.mjs","sources":["../bin/core/Random.js","../bin/core/ArrayExt.js","../bin/core/Assert.js","../bin/core/Logger.js","../bin/core/TimeManager.js","../bin/core/ErrorHandler.js","../bin/core/EventManager.js","../bin/core/TypeGuards.js","../bin/behaviourTree/TaskStatus.js","../bin/behaviourTree/Behavior.js","../bin/behaviourTree/Blackboard.js","../bin/behaviourTree/BehaviorTree.js","../bin/behaviourTree/composites/AbortTypes.js","../bin/behaviourTree/conditionals/IConditional.js","../bin/behaviourTree/composites/Composite.js","../bin/behaviourTree/decorators/Decorator.js","../bin/behaviourTree/actions/ExecuteAction.js","../bin/behaviourTree/conditionals/ExecuteActionConditional.js","../bin/behaviourTree/conditionals/BlackboardConditionals.js","../bin/behaviourTree/factories/ConditionFactory.js","../bin/behaviourTree/actions/LogAction.js","../bin/behaviourTree/actions/WaitAction.js","../bin/behaviourTree/actions/BehaviorTreeReference.js","../bin/behaviourTree/decorators/ConditionalDecorator.js","../bin/behaviourTree/decorators/AlwaysFail.js","../bin/behaviourTree/decorators/AlwaysSucceed.js","../bin/behaviourTree/decorators/Inverter.js","../bin/behaviourTree/decorators/Repeater.js","../bin/behaviourTree/decorators/UntilFail.js","../bin/behaviourTree/decorators/UntilSuccess.js","../bin/behaviourTree/composites/Parallel.js","../bin/behaviourTree/composites/ParallelSelector.js","../bin/behaviourTree/composites/Selector.js","../bin/behaviourTree/composites/RandomSelector.js","../bin/behaviourTree/composites/Sequence.js","../bin/behaviourTree/composites/RandomSequence.js","../bin/behaviourTree/actions/BlackboardActions.js","../bin/behaviourTree/conditionals/GeneralConditionals.js","../bin/behaviourTree/decorators/CooldownDecorator.js","../bin/behaviourTree/decorators/TimeoutDecorator.js","../bin/behaviourTree/decorators/ChanceDecorator.js","../bin/behaviourTree/BehaviorTreeBuilder.js","../bin/behaviourTree/ObjectPool.js","../bin/behaviourTree/AdvancedObjectPool.js","../bin/behaviourTree/conditionals/RandomProbability.js","../bin/behaviourTree/events/EventRegistry.js","../bin/behaviourTree/index.js","../bin/fsm/State.js","../bin/fsm/StateMachine.js","../bin/fsm/SimpleStateMachine.js","../bin/fsm/index.js","../bin/utilityAI/UtilityAI.js","../bin/utilityAI/considerations/FixedScoreConsideration.js","../bin/utilityAI/reasoners/Reasoner.js","../bin/utilityAI/reasoners/FirstScoreReasoner.js","../bin/utilityAI/reasoners/HighestScoreReasoner.js","../bin/utilityAI/index.js"],"sourcesContent":["/**\n * 高性能伪随机数生成器\n * 使用xorshift128算法,比原生Math.random()更快且质量更好\n *\n * @example\n * ```typescript\n * // 设置种子(可选,默认使用当前时间)\n * Random.setSeed(12345);\n *\n * // 生成0-1之间的随机数\n * const value = Random.value();\n *\n * // 生成指定范围的随机数\n * const rangeValue = Random.range(10, 20);\n *\n * // 生成随机整数\n * const intValue = Random.integer(1, 100);\n *\n * // 随机布尔值\n * const bool = Random.boolean();\n *\n * // 带概率的布尔值\n * const probBool = Random.chance(0.7); // 70%概率返回true\n * ```\n */\nexport class Random {\n    /**\n     * 设置随机数种子\n     * @param seed 种子值,如果不提供则使用当前时间\n     */\n    static setSeed(seed) {\n        if (seed === undefined) {\n            seed = Date.now();\n        }\n        // 使用种子初始化四个状态变量\n        this._x = seed >>> 0;\n        this._y = (seed * 1812433253 + 1) >>> 0;\n        this._z = (this._y * 1812433253 + 1) >>> 0;\n        this._w = (this._z * 1812433253 + 1) >>> 0;\n        // 确保所有状态变量都非零\n        if (this._x === 0)\n            this._x = 1;\n        if (this._y === 0)\n            this._y = 1;\n        if (this._z === 0)\n            this._z = 1;\n        if (this._w === 0)\n            this._w = 1;\n        this._initialized = true;\n        // 预热生成器\n        for (let i = 0; i < 10; i++) {\n            this.next();\n        }\n    }\n    /**\n     * 生成下一个32位无符号整数(内部使用)\n     * 使用xorshift128算法\n     */\n    static next() {\n        if (!this._initialized) {\n            this.setSeed();\n        }\n        const t = this._x ^ (this._x << 11);\n        this._x = this._y;\n        this._y = this._z;\n        this._z = this._w;\n        this._w = (this._w ^ (this._w >>> 19)) ^ (t ^ (t >>> 8));\n        return this._w >>> 0; // 确保返回无符号32位整数\n    }\n    /**\n     * 生成0到1之间的随机浮点数(不包括1)\n     * @returns 0 <= value < 1的随机数\n     */\n    static value() {\n        return this.next() / 0x100000000; // 2^32\n    }\n    /**\n     * 生成指定范围内的随机浮点数\n     * @param min 最小值(包含)\n     * @param max 最大值(不包含)\n     * @returns min <= value < max的随机数\n     */\n    static range(min = 0, max = 1) {\n        if (min >= max) {\n            throw new Error(`最小值(${min})必须小于最大值(${max})`);\n        }\n        return min + (max - min) * this.value();\n    }\n    /**\n     * 生成指定范围内的随机整数\n     * @param min 最小值(包含)\n     * @param max 最大值(包含)\n     * @returns min <= value <= max的随机整数\n     */\n    static integer(min, max) {\n        if (!Number.isInteger(min) || !Number.isInteger(max)) {\n            throw new Error('最小值和最大值必须是整数');\n        }\n        if (min > max) {\n            throw new Error(`最小值(${min})必须小于等于最大值(${max})`);\n        }\n        return Math.floor(this.range(min, max + 1));\n    }\n    /**\n     * 生成随机布尔值\n     * @returns 随机的true或false\n     */\n    static boolean() {\n        return this.value() < 0.5;\n    }\n    /**\n     * 根据概率生成布尔值\n     * @param probability 返回true的概率(0-1之间)\n     * @returns 根据概率返回的布尔值\n     */\n    static chance(probability) {\n        if (probability < 0 || probability > 1) {\n            throw new Error(`概率值必须在0-1之间,当前值: ${probability}`);\n        }\n        return this.value() < probability;\n    }\n    /**\n     * 从数组中随机选择一个元素\n     * @param array 要选择的数组\n     * @returns 随机选中的元素\n     */\n    static choice(array) {\n        if (array.length === 0) {\n            throw new Error('数组不能为空');\n        }\n        const index = this.integer(0, array.length - 1);\n        return array[index]; // 使用非空断言,因为我们已经检查了数组长度\n    }\n    /**\n     * 从数组中随机选择多个不重复的元素\n     * @param array 要选择的数组\n     * @param count 选择的数量\n     * @returns 随机选中的元素数组\n     */\n    static sample(array, count) {\n        if (count < 0 || count > array.length) {\n            throw new Error(`选择数量(${count})必须在0-${array.length}之间`);\n        }\n        if (count === 0) {\n            return [];\n        }\n        if (count === array.length) {\n            return [...array];\n        }\n        // 对于小的选择数量,使用Set避免重复\n        if (count <= array.length / 2) {\n            const result = [];\n            const indices = new Set();\n            while (result.length < count) {\n                const index = this.integer(0, array.length - 1);\n                if (!indices.has(index)) {\n                    indices.add(index);\n                    result.push(array[index]);\n                }\n            }\n            return result;\n        }\n        else {\n            // 对于大的选择数量,使用Fisher-Yates洗牌算法的部分版本\n            const shuffled = [...array];\n            for (let i = 0; i < count; i++) {\n                const j = this.integer(i, shuffled.length - 1);\n                [shuffled[i], shuffled[j]] = [shuffled[j], shuffled[i]];\n            }\n            return shuffled.slice(0, count);\n        }\n    }\n    /**\n     * 生成符合正态分布的随机数(Box-Muller变换)\n     * @param mean 均值\n     * @param standardDeviation 标准差\n     * @returns 符合正态分布的随机数\n     */\n    static gaussian(mean = 0, standardDeviation = 1) {\n        // 使用Box-Muller变换生成正态分布随机数\n        const u1 = this.value();\n        const u2 = this.value();\n        const z0 = Math.sqrt(-2 * Math.log(u1)) * Math.cos(2 * Math.PI * u2);\n        return z0 * standardDeviation + mean;\n    }\n    /**\n     * 获取当前随机数生成器的状态(用于保存/恢复)\n     * @returns 生成器状态对象\n     */\n    static getState() {\n        if (!this._initialized) {\n            this.setSeed();\n        }\n        return {\n            x: this._x,\n            y: this._y,\n            z: this._z,\n            w: this._w\n        };\n    }\n    /**\n     * 恢复随机数生成器的状态\n     * @param state 要恢复的状态对象\n     */\n    static setState(state) {\n        this._x = state.x;\n        this._y = state.y;\n        this._z = state.z;\n        this._w = state.w;\n        this._initialized = true;\n    }\n}\nRandom._x = 123456789;\nRandom._y = 362436069;\nRandom._z = 521288629;\nRandom._w = 88675123;\nRandom._initialized = false;\n//# sourceMappingURL=Random.js.map","import { Random } from './Random';\n/**\n * 数组扩展器和高效数据结构工具\n * 提供栈、队列等数据结构的高效实现\n */\nexport class ArrayExt {\n    /**\n     * 将数组打乱顺序(Fisher-Yates洗牌算法)\n     * 时间复杂度: O(n),空间复杂度: O(1)\n     *\n     * @param list 要打乱的数组\n     * @throws {Error} 当数组为null或undefined时抛出错误\n     */\n    static shuffle(list) {\n        if (!list) {\n            throw new Error('数组不能为null或undefined');\n        }\n        // 优化:从后往前遍历,减少一次减法运算\n        for (let i = list.length - 1; i > 0; i--) {\n            const j = Random.integer(0, i);\n            // 使用解构赋值进行交换,更简洁\n            [list[i], list[j]] = [list[j], list[i]];\n        }\n    }\n    /**\n     * 取出数组第一个项(不移除)\n     * @param list 目标数组\n     * @returns 第一个元素\n     * @throws {Error} 当数组为空时抛出错误\n     */\n    static peek(list) {\n        if (list.length === 0) {\n            throw new Error('无法从空数组中获取元素');\n        }\n        return list[0];\n    }\n    /**\n     * 向数组头部添加一个项\n     * @param list 目标数组\n     * @param item 要添加的项\n     */\n    static unshift(list, item) {\n        list.unshift(item);\n    }\n    /**\n     * 移除数组第一个项并返回它\n     * @param list 目标数组\n     * @returns 移除的元素,如果数组为空则返回undefined\n     */\n    static pop(list) {\n        return list.shift();\n    }\n    /**\n     * 向数组尾部添加一个项\n     * @param list 目标数组\n     * @param item 要添加的项\n     */\n    static append(list, item) {\n        list.push(item);\n    }\n    /**\n     * 移除数组最后一个项并返回它\n     * @param list 目标数组\n     * @returns 移除的元素,如果数组为空则返回undefined\n     */\n    static removeLast(list) {\n        return list.pop();\n    }\n    /**\n     * 检查数组是否为空\n     * @param list 目标数组\n     * @returns 是否为空\n     */\n    static isEmpty(list) {\n        return list.length === 0;\n    }\n    /**\n     * 获取数组大小\n     * @param list 目标数组\n     * @returns 数组长度\n     */\n    static size(list) {\n        return list.length;\n    }\n    /**\n     * 清空数组\n     * @param list 目标数组\n     */\n    static clear(list) {\n        list.length = 0;\n    }\n}\n/**\n * 高效的双端队列实现\n * 使用环形缓冲区,避免数组头部插入的性能问题\n *\n * @template T 队列中元素的类型\n *\n * @example\n * ```typescript\n * const deque = new Deque<number>(32);\n * deque.push(1);\n * deque.unshift(0);\n * console.log(deque.peekFirst()); // 0\n * console.log(deque.peekLast());  // 1\n * ```\n */\nexport class Deque {\n    /**\n     * 创建双端队列\n     * @param initialCapacity 初始容量,必须大于0,默认16\n     */\n    constructor(initialCapacity = 16) {\n        this._head = 0;\n        this._tail = 0;\n        this._size = 0;\n        if (initialCapacity <= 0) {\n            throw new Error('初始容量必须大于0');\n        }\n        this._capacity = Math.max(initialCapacity, 4);\n        this._buffer = new Array(this._capacity);\n    }\n    /**\n     * 向队列头部添加元素\n     * @param item 要添加的元素\n     */\n    unshift(item) {\n        if (this._size === this._capacity) {\n            this._resize();\n        }\n        this._head = (this._head - 1 + this._capacity) % this._capacity;\n        this._buffer[this._head] = item;\n        this._size++;\n    }\n    /**\n     * 向队列尾部添加元素\n     * @param item 要添加的元素\n     */\n    push(item) {\n        if (this._size === this._capacity) {\n            this._resize();\n        }\n        this._buffer[this._tail] = item;\n        this._tail = (this._tail + 1) % this._capacity;\n        this._size++;\n    }\n    /**\n     * 从队列头部移除元素\n     * @returns 移除的元素,如果队列为空则返回undefined\n     */\n    shift() {\n        if (this._size === 0) {\n            return undefined;\n        }\n        const item = this._buffer[this._head];\n        this._buffer[this._head] = undefined;\n        this._head = (this._head + 1) % this._capacity;\n        this._size--;\n        return item;\n    }\n    /**\n     * 从队列尾部移除元素\n     * @returns 移除的元素,如果队列为空则返回undefined\n     */\n    pop() {\n        if (this._size === 0) {\n            return undefined;\n        }\n        this._tail = (this._tail - 1 + this._capacity) % this._capacity;\n        const item = this._buffer[this._tail];\n        this._buffer[this._tail] = undefined;\n        this._size--;\n        return item;\n    }\n    /**\n     * 查看队列头部元素(不移除)\n     * @returns 头部元素,如果队列为空则返回undefined\n     */\n    peekFirst() {\n        return this._size > 0 ? this._buffer[this._head] : undefined;\n    }\n    /**\n     * 查看队列尾部元素(不移除)\n     * @returns 尾部元素,如果队列为空则返回undefined\n     */\n    peekLast() {\n        if (this._size === 0) {\n            return undefined;\n        }\n        const lastIndex = (this._tail - 1 + this._capacity) % this._capacity;\n        return this._buffer[lastIndex];\n    }\n    /**\n     * 获取队列大小\n     */\n    get size() {\n        return this._size;\n    }\n    /**\n     * 检查队列是否为空\n     */\n    get isEmpty() {\n        return this._size === 0;\n    }\n    /**\n     * 清空队列\n     */\n    clear() {\n        for (let i = 0; i < this._capacity; i++) {\n            this._buffer[i] = undefined;\n        }\n        this._head = 0;\n        this._tail = 0;\n        this._size = 0;\n    }\n    /**\n     * 扩容队列(内部使用)\n     * 当队列满时自动调用,容量翻倍\n     */\n    _resize() {\n        const newCapacity = this._capacity * 2;\n        const newBuffer = new Array(newCapacity);\n        // 复制现有元素到新缓冲区\n        for (let i = 0; i < this._size; i++) {\n            newBuffer[i] = this._buffer[(this._head + i) % this._capacity];\n        }\n        this._buffer = newBuffer;\n        this._head = 0;\n        this._tail = this._size;\n        this._capacity = newCapacity;\n    }\n    /**\n     * 将队列转换为数组\n     * @returns 包含队列所有元素的数组(从头到尾的顺序)\n     */\n    toArray() {\n        const result = [];\n        for (let i = 0; i < this._size; i++) {\n            const item = this._buffer[(this._head + i) % this._capacity];\n            if (item !== undefined) {\n                result.push(item);\n            }\n        }\n        return result;\n    }\n}\n//# sourceMappingURL=ArrayExt.js.map","/**\n * 高性能断言工具类\n *\n * @description\n * 提供类型安全的断言方法,支持开发和生产环境的不同行为。\n * 在生产环境中可以禁用断言以提高性能。\n *\n * @example\n * ```typescript\n * // 基本断言\n * Assert.isTrue(player.health > 0, '玩家血量必须大于0');\n * Assert.isNotNull(gameObject, '游戏对象不能为空');\n *\n * // 类型安全的断言\n * const value: unknown = getData();\n * Assert.isNumber(value, '数据必须是数字');\n * // 现在 value 的类型被缩窄为 number\n *\n * // 配置断言行为\n * Assert.setEnabled(false); // 在生产环境中禁用\n * ```\n */\nexport class Assert {\n    /**\n     * 设置是否启用断言\n     * @param enabled 是否启用\n     */\n    static setEnabled(enabled) {\n        this._enabled = enabled;\n    }\n    /**\n     * 设置断言失败时的行为\n     * @param throwOnFailure 是否抛出异常,false则仅记录到控制台\n     */\n    static setThrowOnFailure(throwOnFailure) {\n        this._throwOnFailure = throwOnFailure;\n    }\n    /**\n     * 断言失败处理\n     * @param message 错误消息\n     * @param args 附加参数\n     */\n    static fail(message, ...args) {\n        const errorMessage = message || '断言失败';\n        if (this._throwOnFailure) {\n            throw new Error(errorMessage);\n        }\n        else {\n            console.assert(false, errorMessage, ...args);\n            throw new Error(errorMessage); // 总是抛出错误,因为这是fail方法\n        }\n    }\n    /**\n     * 断言条件为真\n     * @param condition 要检查的条件\n     * @param message 失败时的错误消息\n     * @param args 附加参数\n     */\n    static isTrue(condition, message, ...args) {\n        if (!this._enabled)\n            return;\n        if (!condition) {\n            this.fail(message || '条件必须为真', ...args);\n        }\n    }\n    /**\n     * 断言条件为假\n     * @param condition 要检查的条件\n     * @param message 失败时的错误消息\n     * @param args 附加参数\n     */\n    static isFalse(condition, message, ...args) {\n        if (!this._enabled)\n            return;\n        if (condition) {\n            this.fail(message || '条件必须为假', ...args);\n        }\n    }\n    /**\n     * 断言对象不为null或undefined\n     * @param obj 要检查的对象\n     * @param message 失败时的错误消息\n     * @param args 附加参数\n     */\n    static isNotNull(obj, message, ...args) {\n        if (!this._enabled)\n            return;\n        if (obj == null) {\n            this.fail(message || '对象不能为null或undefined', ...args);\n        }\n    }\n    /**\n     * 断言对象为null或undefined\n     * @param obj 要检查的对象\n     * @param message 失败时的错误消息\n     * @param args 附加参数\n     */\n    static isNull(obj, message, ...args) {\n        if (!this._enabled)\n            return;\n        if (obj != null) {\n            this.fail(message || '对象必须为null或undefined', ...args);\n        }\n    }\n    /**\n     * 断言值为数字类型\n     * @param value 要检查的值\n     * @param message 失败时的错误消息\n     * @param args 附加参数\n     */\n    static isNumber(value, message, ...args) {\n        if (!this._enabled)\n            return;\n        if (typeof value !== 'number' || isNaN(value)) {\n            this.fail(message || '值必须是有效数字', ...args);\n        }\n    }\n    /**\n     * 断言值为字符串类型\n     * @param value 要检查的值\n     * @param message 失败时的错误消息\n     * @param args 附加参数\n     */\n    static isString(value, message, ...args) {\n        if (!this._enabled)\n            return;\n        if (typeof value !== 'string') {\n            this.fail(message || '值必须是字符串', ...args);\n        }\n    }\n    /**\n     * 断言值为布尔类型\n     * @param value 要检查的值\n     * @param message 失败时的错误消息\n     * @param args 附加参数\n     */\n    static isBoolean(value, message, ...args) {\n        if (!this._enabled)\n            return;\n        if (typeof value !== 'boolean') {\n            this.fail(message || '值必须是布尔值', ...args);\n        }\n    }\n    /**\n     * 断言值为函数类型\n     * @param value 要检查的值\n     * @param message 失败时的错误消息\n     * @param args 附加参数\n     */\n    static isFunction(value, message, ...args) {\n        if (!this._enabled)\n            return;\n        if (typeof value !== 'function') {\n            this.fail(message || '值必须是函数', ...args);\n        }\n    }\n    /**\n     * 断言值为对象类型(非null)\n     * @param value 要检查的值\n     * @param message 失败时的错误消息\n     * @param args 附加参数\n     */\n    static isObject(value, message, ...args) {\n        if (!this._enabled)\n            return;\n        if (typeof value !== 'object' || value === null) {\n            this.fail(message || '值必须是对象', ...args);\n        }\n    }\n    /**\n     * 断言数组不为空\n     * @param array 要检查的数组\n     * @param message 失败时的错误消息\n     * @param args 附加参数\n     */\n    static isNotEmpty(array, message, ...args) {\n        if (!this._enabled)\n            return;\n        this.isNotNull(array, message, ...args);\n        if (array.length === 0) {\n            this.fail(message || '数组不能为空', ...args);\n        }\n    }\n    /**\n     * 断言字符串不为空\n     * @param str 要检查的字符串\n     * @param message 失败时的错误消息\n     * @param args 附加参数\n     */\n    static isNotEmptyString(str, message, ...args) {\n        if (!this._enabled)\n            return;\n        this.isNotNull(str, message, ...args);\n        if (str.trim().length === 0) {\n            this.fail(message || '字符串不能为空', ...args);\n        }\n    }\n    /**\n     * 断言数值在指定范围内\n     * @param value 要检查的数值\n     * @param min 最小值(包含)\n     * @param max 最大值(包含)\n     * @param message 失败时的错误消息\n     * @param args 附加参数\n     */\n    static inRange(value, min, max, message, ...args) {\n        if (!this._enabled)\n            return;\n        this.isNumber(value, message, ...args);\n        if (value < min || value > max) {\n            this.fail(message || `值必须在 ${min} 到 ${max} 之间`, ...args);\n        }\n    }\n    /**\n     * 断言值是指定类型的实例\n     * @param value 要检查的值\n     * @param constructor 构造函数\n     * @param message 失败时的错误消息\n     * @param args 附加参数\n     */\n    static isInstanceOf(value, constructor, message, ...args) {\n        if (!this._enabled)\n            return;\n        if (!(value instanceof constructor)) {\n            this.fail(message || `值必须是 ${constructor.name} 的实例`, ...args);\n        }\n    }\n    /**\n     * 断言数组包含指定元素\n     * @param array 要检查的数组\n     * @param element 要查找的元素\n     * @param message 失败时的错误消息\n     * @param args 附加参数\n     */\n    static contains(array, element, message, ...args) {\n        if (!this._enabled)\n            return;\n        this.isNotNull(array, message, ...args);\n        if (!array.includes(element)) {\n            this.fail(message || '数组必须包含指定元素', ...args);\n        }\n    }\n    /**\n     * 获取当前断言配置\n     * @returns 配置对象\n     */\n    static getConfig() {\n        return {\n            enabled: this._enabled,\n            throwOnFailure: this._throwOnFailure\n        };\n    }\n}\n/** 是否启用断言检查 */\nAssert._enabled = true;\n/** 是否在断言失败时抛出异常而不是仅记录 */\nAssert._throwOnFailure = false;\n//# sourceMappingURL=Assert.js.map","/**\n * 日志级别枚举\n */\nexport var LogLevel;\n(function (LogLevel) {\n    /** 调试信息 */\n    LogLevel[LogLevel[\"Debug\"] = 0] = \"Debug\";\n    /** 一般信息 */\n    LogLevel[LogLevel[\"Info\"] = 1] = \"Info\";\n    /** 警告信息 */\n    LogLevel[LogLevel[\"Warn\"] = 2] = \"Warn\";\n    /** 错误信息 */\n    LogLevel[LogLevel[\"Error\"] = 3] = \"Error\";\n    /** 关闭日志 */\n    LogLevel[LogLevel[\"None\"] = 4] = \"None\";\n})(LogLevel || (LogLevel = {}));\n/**\n * 高性能日志系统\n *\n * @description\n * 提供分级日志记录功能,支持性能优化模式。\n * 在性能模式下,会跳过不必要的字符串格式化和时间戳计算。\n * 支持批量输出和延迟日志记录。\n *\n * @example\n * ```typescript\n * // 基本使用\n * Logger.info('游戏开始');\n * Logger.warn('玩家血量低', { health: 10 });\n * Logger.error('网络连接失败', error);\n *\n * // 配置日志系统\n * Logger.configure({\n *   minLevel: LogLevel.Warn,\n *   enableTimestamp: true,\n *   performanceMode: false,\n *   batchMode: true,\n *   batchSize: 50\n * });\n *\n * // 性能敏感的代码中\n * Logger.setPerformanceMode(true);\n * ```\n */\nexport class Logger {\n    /**\n     * 配置日志系统\n     * @param config 日志配置\n     */\n    static configure(config) {\n        this._config = { ...this._config, ...config };\n        // 配置批量模式\n        if (config.batchMode !== undefined) {\n            this._batchConfig.enabled = config.batchMode;\n        }\n        if (config.batchSize !== undefined) {\n            this._batchConfig.maxSize = Math.max(1, config.batchSize);\n        }\n        if (config.batchFlushInterval !== undefined) {\n            this._batchConfig.flushInterval = Math.max(100, config.batchFlushInterval);\n        }\n        // 初始化性能模式\n        this._initializePerformanceMode();\n    }\n    /**\n     * 初始化性能模式\n     */\n    static _initializePerformanceMode() {\n        if (this._config.performanceMode) {\n            // 在性能模式下,使用最简化的日志函数\n            this._fastLog = (message, data) => {\n                if (data !== undefined) {\n                    console.log(message, data);\n                }\n                else {\n                    console.log(message);\n                }\n            };\n        }\n        else {\n            this._fastLog = null;\n        }\n    }\n    /**\n     * 设置最小日志级别\n     * @param level 最小日志级别\n     */\n    static setMinLevel(level) {\n        this._config.minLevel = level;\n    }\n    /**\n     * 设置性能模式\n     * @param enabled 是否启用性能模式\n     */\n    static setPerformanceMode(enabled) {\n        this._config.performanceMode = enabled;\n        this._initializePerformanceMode();\n    }\n    /**\n     * 启用批量模式\n     * @param enabled 是否启用\n     * @param maxSize 批量大小\n     * @param flushInterval 刷新间隔(毫秒)\n     */\n    static setBatchMode(enabled, maxSize = 50, flushInterval = 1000) {\n        this._batchConfig.enabled = enabled;\n        this._batchConfig.maxSize = Math.max(1, maxSize);\n        this._batchConfig.flushInterval = Math.max(100, flushInterval);\n        if (!enabled) {\n            this.flushLogs(); // 禁用时立即刷新所有日志\n        }\n    }\n    /**\n     * 记录调试信息\n     * @param message 消息\n     * @param data 附加数据\n     */\n    static debug(message, data) {\n        this._log(LogLevel.Debug, message, data);\n    }\n    /**\n     * 记录一般信息\n     * @param message 消息\n     * @param data 附加数据\n     */\n    static info(message, data) {\n        this._log(LogLevel.Info, message, data);\n    }\n    /**\n     * 记录警告信息\n     * @param message 消息\n     * @param data 附加数据\n     */\n    static warn(message, data) {\n        this._log(LogLevel.Warn, message, data);\n    }\n    /**\n     * 记录错误信息\n     * @param message 消息\n     * @param error 错误对象或附加数据\n     */\n    static error(message, error) {\n        this._log(LogLevel.Error, message, error);\n    }\n    /**\n     * 内部日志记录方法\n     * @param level 日志级别\n     * @param message 消息\n     * @param data 附加数据\n     */\n    static _log(level, message, data) {\n        // 检查日志级别\n        if (level < this._config.minLevel || this._config.minLevel === LogLevel.None) {\n            return;\n        }\n        if (this._config.performanceMode && this._fastLog) {\n            // 超高性能模式:跳过所有格式化\n            this._fastLog(message, data);\n            return;\n        }\n        if (this._batchConfig.enabled) {\n            // 批量模式:添加到缓冲区\n            this._addToBatch(level, message, data);\n        }\n        else if (this._config.performanceMode) {\n            // 性能模式:简化输出\n            this._performanceLog(level, message, data);\n        }\n        else {\n            // 标准模式:完整格式化\n            this._standardLog(level, message, data);\n        }\n    }\n    /**\n     * 添加日志到批量缓冲区\n     */\n    static _addToBatch(level, message, data) {\n        const entry = {\n            level,\n            message,\n            data,\n            timestamp: Date.now(),\n            prefix: this._config.prefix\n        };\n        this._logBuffer.push(entry);\n        // 检查是否需要刷新\n        const now = Date.now();\n        const shouldFlushBySize = this._logBuffer.length >= this._batchConfig.maxSize;\n        const shouldFlushByTime = (now - this._batchConfig.lastFlushTime) >= this._batchConfig.flushInterval;\n        if (shouldFlushBySize || shouldFlushByTime) {\n            this.flushLogs();\n        }\n    }\n    /**\n     * 刷新批量日志\n     */\n    static flushLogs() {\n        if (this._logBuffer.length === 0) {\n            return;\n        }\n        // 批量输出所有日志\n        for (const entry of this._logBuffer) {\n            if (this._config.performanceMode) {\n                this._performanceLogEntry(entry);\n            }\n            else {\n                this._standardLogEntry(entry);\n            }\n        }\n        // 清空缓冲区\n        this._logBuffer.length = 0;\n        this._batchConfig.lastFlushTime = Date.now();\n    }\n    /**\n     * 性能模式输出日志条目\n     */\n    static _performanceLogEntry(entry) {\n        const levelName = this._levelNames[entry.level];\n        const prefix = entry.prefix ? `[${entry.prefix}] ` : '';\n        if (entry.data !== undefined) {\n            console.log(`${prefix}[${levelName}] ${entry.message}`, entry.data);\n        }\n        else {\n            console.log(`${prefix}[${levelName}] ${entry.message}`);\n        }\n    }\n    /**\n     * 标准模式输出日志条目\n     */\n    static _standardLogEntry(entry) {\n        const timestamp = this._config.enableTimestamp ? this._formatTimestamp(entry.timestamp) : '';\n        const levelName = this._levelNames[entry.level];\n        const prefix = entry.prefix ? `[${entry.prefix}] ` : '';\n        const style = this._levelStyles[entry.level];\n        let logMessage = `${prefix}${timestamp}[${levelName}] ${entry.message}`;\n        const consoleMethod = this._getConsoleMethod(entry.level);\n        if (entry.data !== undefined) {\n            if (style && typeof console.log === 'function') {\n                consoleMethod(`%c${logMessage}`, style, entry.data);\n            }\n            else {\n                consoleMethod(logMessage, entry.data);\n            }\n        }\n        else {\n            if (style && typeof console.log === 'function') {\n                consoleMethod(`%c${logMessage}`, style);\n            }\n            else {\n                consoleMethod(logMessage);\n            }\n        }\n        // 错误级别且启用堆栈跟踪\n        if (entry.level === LogLevel.Error && this._config.enableStackTrace && entry.data instanceof Error) {\n            console.trace(entry.data);\n        }\n    }\n    /**\n     * 格式化时间戳\n     */\n    static _formatTimestamp(timestamp) {\n        const date = new Date(timestamp);\n        const hours = date.getHours().toString().padStart(2, '0');\n        const minutes = date.getMinutes().toString().padStart(2, '0');\n        const seconds = date.getSeconds().toString().padStart(2, '0');\n        const milliseconds = date.getMilliseconds().toString().padStart(3, '0');\n        return `[${hours}:${minutes}:${seconds}.${milliseconds}] `;\n    }\n    /**\n     * 性能模式日志输出\n     * @param level 日志级别\n     * @param message 消息\n     * @param data 附加数据\n     */\n    static _performanceLog(level, message, data) {\n        const levelName = this._levelNames[level];\n        const prefix = this._config.prefix ? `[${this._config.prefix}] ` : '';\n        if (data !== undefined) {\n            console.log(`${prefix}[${levelName}] ${message}`, data);\n        }\n        else {\n            console.log(`${prefix}[${levelName}] ${message}`);\n        }\n    }\n    /**\n     * 标准模式日志输出\n     * @param level 日志级别\n     * @param message 消息\n     * @param data 附加数据\n     */\n    static _standardLog(level, message, data) {\n        const timestamp = this._config.enableTimestamp ? this._getTimestamp() : '';\n        const levelName = this._levelNames[level];\n        const prefix = this._config.prefix ? `[${this._config.prefix}] ` : '';\n        const style = this._levelStyles[level];\n        let logMessage = `${prefix}${timestamp}[${levelName}] ${message}`;\n        // 根据日志级别选择合适的console方法\n        const consoleMethod = this._getConsoleMethod(level);\n        if (data !== undefined) {\n            if (style && typeof console.log === 'function') {\n                consoleMethod(`%c${logMessage}`, style, data);\n            }\n            else {\n                consoleMethod(logMessage, data);\n            }\n        }\n        else {\n            if (style && typeof console.log === 'function') {\n                consoleMethod(`%c${logMessage}`, style);\n            }\n            else {\n                consoleMethod(logMessage);\n            }\n        }\n        // 错误级别且启用堆栈跟踪\n        if (level === LogLevel.Error && this._config.enableStackTrace && data instanceof Error) {\n            console.trace(data);\n        }\n    }\n    /**\n     * 获取时间戳字符串\n     * @returns 格式化的时间戳\n     */\n    static _getTimestamp() {\n        const now = new Date();\n        const hours = now.getHours().toString().padStart(2, '0');\n        const minutes = now.getMinutes().toString().padStart(2, '0');\n        const seconds = now.getSeconds().toString().padStart(2, '0');\n        const milliseconds = now.getMilliseconds().toString().padStart(3, '0');\n        return `[${hours}:${minutes}:${seconds}.${milliseconds}] `;\n    }\n    /**\n     * 根据日志级别获取对应的console方法\n     * @param level 日志级别\n     * @returns console方法\n     */\n    static _getConsoleMethod(level) {\n        switch (level) {\n            case LogLevel.Debug:\n                return console.debug || console.log;\n            case LogLevel.Info:\n                return console.info || console.log;\n            case LogLevel.Warn:\n                return console.warn || console.log;\n            case LogLevel.Error:\n                return console.error || console.log;\n            default:\n                return console.log;\n        }\n    }\n    /**\n     * 获取当前配置\n     * @returns 当前日志配置的副本\n     */\n    static getConfig() {\n        return { ...this._config };\n    }\n    /**\n     * 创建带前缀的日志器\n     * @param prefix 前缀\n     * @returns 新的日志器实例\n     */\n    static createPrefixed(prefix) {\n        return new PrefixedLogger(prefix);\n    }\n}\nLogger._config = {\n    minLevel: LogLevel.Debug,\n    enableTimestamp: true,\n    enableStackTrace: true,\n    performanceMode: false,\n    prefix: ''\n};\n/** 批量日志缓冲区 */\nLogger._logBuffer = [];\n/** 批量模式配置 */\nLogger._batchConfig = {\n    enabled: false,\n    maxSize: 50,\n    flushInterval: 1000, // 1秒\n    lastFlushTime: 0\n};\n/** 性能模式下的简化日志函数 */\nLogger._fastLog = null;\n/** 日志级别名称映射 */\nLogger._levelNames = {\n    [LogLevel.Debug]: 'DEBUG',\n    [LogLevel.Info]: 'INFO',\n    [LogLevel.Warn]: 'WARN',\n    [LogLevel.Error]: 'ERROR',\n    [LogLevel.None]: 'NONE'\n};\n/** 日志级别样式映射(用于浏览器控制台) */\nLogger._levelStyles = {\n    [LogLevel.Debug]: 'color: #888',\n    [LogLevel.Info]: 'color: #007acc',\n    [LogLevel.Warn]: 'color: #ff8c00',\n    [LogLevel.Error]: 'color: #ff4444; font-weight: bold',\n    [LogLevel.None]: ''\n};\n/**\n * 带前缀的日志器\n * 用于为特定模块或组件创建专用的日志器\n */\nexport class PrefixedLogger {\n    constructor(_prefix) {\n        this._prefix = _prefix;\n    }\n    debug(message, data) {\n        Logger.debug(`[${this._prefix}] ${message}`, data);\n    }\n    info(message, data) {\n        Logger.info(`[${this._prefix}] ${message}`, data);\n    }\n    warn(message, data) {\n        Logger.warn(`[${this._prefix}] ${message}`, data);\n    }\n    error(message, error) {\n        Logger.error(`[${this._prefix}] ${message}`, error);\n    }\n}\n//# sourceMappingURL=Logger.js.map","/**\n * 全局时间管理器\n *\n * @description\n * 提供高性能的时间管理功能,减少重复的时间计算开销。\n * 使用时间池化技术,在每帧开始时统一计算时间,避免多次调用performance.now()。\n *\n * @example\n * ```typescript\n * // 在游戏主循环开始时更新时间\n * TimeManager.updateFrame();\n *\n * // 获取当前时间(无额外计算开销)\n * const currentTime = TimeManager.getCurrentTime();\n * const deltaTime = TimeManager.getDeltaTime();\n *\n * // 配置时间管理器\n * TimeManager.configure({\n *   maxDeltaTime: 0.1,\n *   timeScale: 1.0,\n *   useHighPrecision: true\n * });\n * ```\n */\nexport class TimeManager {\n    /**\n     * 配置时间管理器\n     * @param config 配置选项\n     */\n    static configure(config) {\n        if (config.maxDeltaTime !== undefined) {\n            this._maxDeltaTime = Math.max(0.001, config.maxDeltaTime);\n        }\n        if (config.timeScale !== undefined) {\n            this._timeScale = Math.max(0, config.timeScale);\n        }\n        if (config.useHighPrecision !== undefined) {\n            this._useHighPrecision = config.useHighPrecision;\n        }\n    }\n    /**\n     * 初始化时间管理器\n     */\n    static initialize() {\n        if (this._initialized) {\n            return;\n        }\n        const now = this._getSystemTime();\n        this._startTime = now;\n        this._currentTime = 0;\n        this._lastTime = 0;\n        this._deltaTime = 0;\n        this._unscaledDeltaTime = 0;\n        this._frameCount = 0;\n        this._initialized = true;\n    }\n    /**\n     * 更新帧时间(应在每帧开始时调用)\n     * @param externalDeltaTime 可选的外部提供的时间差\n     */\n    static updateFrame(externalDeltaTime) {\n        if (!this._initialized) {\n            this.initialize();\n        }\n        this._frameCount++;\n        if (externalDeltaTime !== undefined) {\n            // 使用外部提供的时间差\n            this._unscaledDeltaTime = Math.max(0, externalDeltaTime);\n        }\n        else {\n            // 计算时间差\n            const systemTime = this._getSystemTime();\n            const currentSystemTime = (systemTime - this._startTime) / 1000;\n            if (this._frameCount === 1) {\n                // 第一帧,设置初始时间\n                this._lastTime = currentSystemTime;\n                this._unscaledDeltaTime = 0;\n            }\n            else {\n                this._unscaledDeltaTime = currentSystemTime - this._lastTime;\n            }\n        }\n        // 限制最大时间差,防止时间跳跃\n        this._unscaledDeltaTime = Math.min(this._unscaledDeltaTime, this._maxDeltaTime);\n        // 应用时间缩放\n        this._deltaTime = this._unscaledDeltaTime * this._timeScale;\n        // 更新当前时间\n        this._lastTime = this._currentTime;\n        this._currentTime += this._deltaTime;\n        // 触发时间更新回调\n        this._triggerUpdateCallbacks();\n    }\n    /**\n     * 获取系统时间(毫秒)\n     */\n    static _getSystemTime() {\n        return this._useHighPrecision ? performance.now() : Date.now();\n    }\n    /**\n     * 触发时间更新回调\n     */\n    static _triggerUpdateCallbacks() {\n        for (let i = 0; i < this._updateCallbacks.length; i++) {\n            try {\n                this._updateCallbacks[i](this._deltaTime);\n            }\n            catch (error) {\n                console.error('时间更新回调执行失败:', error);\n            }\n        }\n    }\n    /**\n     * 获取当前时间(秒)\n     * @returns 从初始化开始的累计时间\n     */\n    static getCurrentTime() {\n        return this._currentTime;\n    }\n    /**\n     * 获取帧间时间差(秒)\n     * @returns 当前帧与上一帧的时间差\n     */\n    static getDeltaTime() {\n        return this._deltaTime;\n    }\n    /**\n     * 获取未缩放的帧间时间差(秒)\n     * @returns 未应用时间缩放的帧间时间差\n     */\n    static getUnscaledDeltaTime() {\n        return this._unscaledDeltaTime;\n    }\n    /**\n     * 获取时间缩放比例\n     */\n    static getTimeScale() {\n        return this._timeScale;\n    }\n    /**\n     * 设置时间缩放比例\n     * @param scale 缩放比例,0表示暂停,1表示正常速度\n     */\n    static setTimeScale(scale) {\n        this._timeScale = Math.max(0, scale);\n    }\n    /**\n     * 获取帧计数\n     */\n    static getFrameCount() {\n        return this._frameCount;\n    }\n    /**\n     * 获取平均帧率\n     */\n    static getAverageFPS() {\n        if (this._currentTime <= 0) {\n            return 0;\n        }\n        return this._frameCount / this._currentTime;\n    }\n    /**\n     * 获取当前帧率\n     */\n    static getCurrentFPS() {\n        if (this._deltaTime <= 0) {\n            return 0;\n        }\n        return 1 / this._unscaledDeltaTime;\n    }\n    /**\n     * 添加时间更新回调\n     * @param callback 回调函数\n     */\n    static addUpdateCallback(callback) {\n        if (this._updateCallbacks.indexOf(callback) === -1) {\n            this._updateCallbacks.push(callback);\n        }\n    }\n    /**\n     * 移除时间更新回调\n     * @param callback 要移除的回调函数\n     */\n    static removeUpdateCallback(callback) {\n        const index = this._updateCallbacks.indexOf(callback);\n        if (index !== -1) {\n            this._updateCallbacks.splice(index, 1);\n        }\n    }\n    /**\n     * 清除所有时间更新回调\n     */\n    static clearUpdateCallbacks() {\n        this._updateCallbacks.length = 0;\n    }\n    /**\n     * 重置时间管理器\n     */\n    static reset() {\n        this._initialized = false;\n        this._frameCount = 0;\n        this._currentTime = 0;\n        this._lastTime = 0;\n        this._deltaTime = 0;\n        this._unscaledDeltaTime = 0;\n        this.clearUpdateCallbacks();\n    }\n    /**\n     * 获取时间管理器统计信息\n     */\n    static getStats() {\n        return {\n            currentTime: this._currentTime,\n            deltaTime: this._deltaTime,\n            unscaledDeltaTime: this._unscaledDeltaTime,\n            timeScale: this._timeScale,\n            frameCount: this._frameCount,\n            averageFPS: this.getAverageFPS(),\n            currentFPS: this.getCurrentFPS(),\n            maxDeltaTime: this._maxDeltaTime,\n            useHighPrecision: this._useHighPrecision\n        };\n    }\n}\n/** 当前时间(秒) */\nTimeManager._currentTime = 0;\n/** 上一帧时间(秒) */\nTimeManager._lastTime = 0;\n/** 帧间时间差(秒) */\nTimeManager._deltaTime = 0;\n/** 未缩放的帧间时间差(秒) */\nTimeManager._unscaledDeltaTime = 0;\n/** 时间缩放比例 */\nTimeManager._timeScale = 1.0;\n/** 最大允许的帧间时间差(防止时间跳跃) */\nTimeManager._maxDeltaTime = 0.1;\n/** 是否使用高精度时间 */\nTimeManager._useHighPrecision = true;\n/** 是否已初始化 */\nTimeManager._initialized = false;\n/** 帧计数器 */\nTimeManager._frameCount = 0;\n/** 启动时间 */\nTimeManager._startTime = 0;\n/** 时间更新回调列表 */\nTimeManager._updateCallbacks = [];\n//# sourceMappingURL=TimeManager.js.map","/**\n* 错误处理级别枚举\n*/\nexport var ErrorLevel;\n(function (ErrorLevel) {\n    /** 开发模式 - 严格检查,抛出所有错误 */\n    ErrorLevel[ErrorLevel[\"Development\"] = 0] = \"Development\";\n    /** 测试模式 - 记录错误但不中断执行 */\n    ErrorLevel[ErrorLevel[\"Testing\"] = 1] = \"Testing\";\n    /** 生产模式 - 最小化错误处理,优先性能 */\n    ErrorLevel[ErrorLevel[\"Production\"] = 2] = \"Production\";\n    /** 静默模式 - 完全禁用错误处理 */\n    ErrorLevel[ErrorLevel[\"Silent\"] = 3] = \"Silent\";\n})(ErrorLevel || (ErrorLevel = {}));\n/**\n * 高性能错误处理系统\n *\n * @description\n * 提供可配置的错误处理策略,支持开发和生产环境的不同行为。\n * 在生产环境中可以完全禁用错误检查以提高性能。\n *\n * @example\n * ```typescript\n * // 配置错误处理器\n * ErrorHandler.configure({\n *   level: ErrorLevel.Development,\n *   enableAssertions: true,\n *   enableTypeChecking: true\n * });\n *\n * // 使用断言\n * ErrorHandler.assert(player.health > 0, '玩家血量必须大于0');\n *\n * // 类型检查\n * ErrorHandler.checkType(value, 'number', '值必须是数字');\n *\n * // 性能监控\n * const result = ErrorHandler.monitor('expensiveFunction', () => {\n *   return expensiveOperation();\n * });\n * ```\n */\nexport class ErrorHandler {\n    /**\n     * 配置错误处理器\n     * @param config 配置选项\n     */\n    static configure(config) {\n        this._config = { ...this._config, ...config };\n    }\n    /**\n     * 设置错误处理级别\n     * @param level 错误处理级别\n     */\n    static setLevel(level) {\n        this._config.level = level;\n        // 根据级别自动调整其他配置\n        switch (level) {\n            case ErrorLevel.Development:\n                this._config.enableAssertions = true;\n                this._config.enableTypeChecking = true;\n                break;\n            case ErrorLevel.Testing:\n                this._config.enableAssertions = true;\n                this._config.enableTypeChecking = false;\n                break;\n            case ErrorLevel.Production:\n                this._config.enableAssertions = false;\n                this._config.enableTypeChecking = false;\n                break;\n            case ErrorLevel.Silent:\n                this._config.enableAssertions = false;\n                this._config.enableTypeChecking = false;\n                this._config.enablePerformanceMonitoring = false;\n                break;\n        }\n    }\n    /**\n     * 断言检查\n     * @param condition 条件\n     * @param message 错误消息\n     * @param context 上下文信息\n     */\n    static assert(condition, message, context) {\n        if (!this._config.enableAssertions || this._config.level === ErrorLevel.Silent) {\n            return;\n        }\n        this._errorStats.totalAssertions++;\n        if (!condition) {\n            const error = new Error(`断言失败: ${message}`);\n            this._handleError(error, context);\n        }\n    }\n    /**\n     * 类型检查\n     * @param value 要检查的值\n     * @param expectedType 期望的类型\n     * @param message 错误消息\n     * @param context 上下文信息\n     */\n    static checkType(value, expectedType, message, context) {\n        if (!this._config.enableTypeChecking || this._config.level === ErrorLevel.Silent) {\n            return;\n        }\n        this._errorStats.totalTypeChecks++;\n        const actualType = typeof value;\n        if (actualType !== expectedType) {\n            const errorMessage = message || `类型检查失败: 期望 ${expectedType}, 实际 ${actualType}`;\n            const error = new Error(errorMessage);\n            this._handleError(error, context);\n        }\n    }\n    /**\n     * 非空检查\n     * @param value 要检查的值\n     * @param message 错误消息\n     * @param context 上下文信息\n     */\n    static checkNotNull(value, message, context) {\n        if (!this._config.enableTypeChecking || this._config.level === ErrorLevel.Silent) {\n            return;\n        }\n        this._errorStats.totalTypeChecks++;\n        if (value == null) {\n            const errorMessage = message || '值不能为null或undefined';\n            const error = new Error(errorMessage);\n            this._handleError(error, context);\n        }\n    }\n    /**\n     * 范围检查\n     * @param value 要检查的值\n     * @param min 最小值\n     * @param max 最大值\n     * @param message 错误消息\n     * @param context 上下文信息\n     */\n    static checkRange(value, min, max, message, context) {\n        if (!this._config.enableAssertions || this._config.level === ErrorLevel.Silent) {\n            return;\n        }\n        this._errorStats.totalAssertions++;\n        if (value < min || value > max) {\n            const errorMessage = message || `值 ${value} 超出范围 [${min}, ${max}]`;\n            const error = new Error(errorMessage);\n            this._handleError(error, context);\n        }\n    }\n    /**\n     * 数组边界检查\n     * @param array 数组\n     * @param index 索引\n     * @param message 错误消息\n     * @param context 上下文信息\n     */\n    static checkArrayBounds(array, index, message, context) {\n        if (!this._config.enableAssertions || this._config.level === ErrorLevel.Silent) {\n            return;\n        }\n        this._errorStats.totalAssertions++;\n        if (index < 0 || index >= array.length) {\n            const errorMessage = message || `数组索引 ${index} 超出边界 [0, ${array.length - 1}]`;\n            const error = new Error(errorMessage);\n            this._handleError(error, context);\n        }\n    }\n    /**\n     * 性能监控装饰器\n     * @param name 函数名称\n     * @param fn 要监控的函数\n     * @returns 函数执行结果\n     */\n    static monitor(name, fn) {\n        if (!this._config.enablePerformanceMonitoring || this._config.level === ErrorLevel.Silent) {\n            return fn();\n        }\n        const startTime = performance.now();\n        try {\n            const result = fn();\n            const endTime = performance.now();\n            this._recordPerformance(name, endTime - startTime);\n            return result;\n        }\n        catch (error) {\n            const endTime = performance.now();\n            this._recordPerformance(name, endTime - startTime);\n            throw error;\n        }\n    }\n    /**\n     * 异步性能监控\n     * @param name 函数名称\n     * @param fn 要监控的异步函数\n     * @returns Promise结果\n     */\n    static async monitorAsync(name, fn) {\n        if (!this._config.enablePerformanceMonitoring || this._config.level === ErrorLevel.Silent) {\n            return fn();\n        }\n        const startTime = performance.now();\n        try {\n            const result = await fn();\n            const endTime = performance.now();\n            this._recordPerformance(name, endTime - startTime);\n            return result;\n        }\n        catch (error) {\n            const endTime = performance.now();\n            this._recordPerformance(name, endTime - startTime);\n            throw error;\n        }\n    }\n    /**\n     * 记录性能数据\n     */\n    static _recordPerformance(name, executionTime) {\n        let data = this._performanceData.get(name);\n        if (!data) {\n            data = {\n                functionName: name,\n                executionTime: 0,\n                callCount: 0,\n                averageTime: 0,\n                maxTime: 0,\n                minTime: Infinity\n            };\n            this._performanceData.set(name, data);\n        }\n        data.callCount++;\n        data.executionTime += executionTime;\n        data.averageTime = data.executionTime / data.callCount;\n        data.maxTime = Math.max(data.maxTime, executionTime);\n        data.minTime = Math.min(data.minTime, executionTime);\n    }\n    /**\n     * 处理错误\n     */\n    static _handleError(error, context) {\n        this._errorStats.totalErrors++;\n        // 调用错误回调\n        if (this._config.onError) {\n            try {\n                this._config.onError(error, context);\n            }\n            catch (callbackError) {\n                console.error('错误回调执行失败:', callbackError);\n            }\n        }\n        // 根据错误级别决定行为\n        switch (this._config.level) {\n            case ErrorLevel.Development:\n                throw error; // 开发模式:抛出错误\n            case ErrorLevel.Testing:\n                console.error('错误:', error.message, context);\n                throw error; // 测试模式:记录并抛出\n            case ErrorLevel.Production:\n                console.warn('错误:', error.message);\n                throw error; // 生产模式:警告并抛出\n            case ErrorLevel.Silent:\n                // 静默模式:什么都不做\n                break;\n        }\n        throw error; // 默认行为\n    }\n    /**\n     * 发出警告\n     * @param message 警告消息\n     * @param context 上下文信息\n     */\n    static warn(message, context) {\n        if (this._config.level === ErrorLevel.Silent) {\n            return;\n        }\n        this._errorStats.totalWarnings++;\n        // 调用警告回调\n        if (this._config.onWarning) {\n            try {\n                this._config.onWarning(message, context);\n            }\n            catch (callbackError) {\n                console.error('警告回调执行失败:', callbackError);\n            }\n        }\n        // 根据错误级别决定输出方式\n        switch (this._config.level) {\n            case ErrorLevel.Development:\n            case ErrorLevel.Testing:\n                console.warn('警告:', message, context);\n                break;\n            case ErrorLevel.Production:\n                console.warn('警告:', message);\n                break;\n        }\n    }\n    /**\n     * 获取性能统计信息\n     */\n    static getPerformanceStats() {\n        return new Map(this._performanceData);\n    }\n    /**\n     * 获取错误统计信息\n     */\n    static getErrorStats() {\n        return { ...this._errorStats };\n    }\n    /**\n     * 重置统计信息\n     */\n    static resetStats() {\n        this._performanceData.clear();\n        this._errorStats = {\n            totalErrors: 0,\n            totalWarnings: 0,\n            totalAssertions: 0,\n            totalTypeChecks: 0\n        };\n    }\n    /**\n     * 获取当前配置\n     */\n    static getConfig() {\n        return { ...this._config };\n    }\n    /**\n     * 创建带错误处理的函数包装器\n     * @param fn 原函数\n     * @param name 函数名称\n     * @param enableMonitoring 是否启用性能监控\n     * @returns 包装后的函数\n     */\n    static wrap(fn, name, enableMonitoring = false) {\n        return (...args) => {\n            try {\n                if (enableMonitoring) {\n                    return this.monitor(name, () => fn(...args));\n                }\n                else {\n                    return fn(...args);\n                }\n            }\n            catch (error) {\n                this._handleError(error instanceof Error ? error : new Error(String(error)), { args, functionName: name });\n            }\n        };\n    }\n}\nErrorHandler._config = {\n    level: ErrorLevel.Development,\n    enableAssertions: true,\n    enableTypeChecking: true,\n    enablePerformanceMonitoring: false\n};\n/** 性能监控数据 */\nErrorHandler._performanceData = new Map();\n/** 错误统计 */\nErrorHandler._errorStats = {\n    totalErrors: 0,\n    totalWarnings: 0,\n    totalAssertions: 0,\n    totalTypeChecks: 0\n};\n/**\n * 错误处理装饰器工厂\n * @param options 装饰器选项\n */\nexport function errorHandler(options = {}) {\n    return function (target, propertyKey, descriptor) {\n        const originalMethod = descriptor.value;\n        const methodName = options.name || `${target.constructor.name}.${propertyKey}`;\n        descriptor.value = function (...args) {\n            // 类型检查\n            if (options.enableTypeChecking) {\n                for (let i = 0; i < args.length; i++) {\n                    if (args[i] == null) {\n                        ErrorHandler.warn(`方法 ${methodName} 的第 ${i + 1} 个参数为null或undefined`);\n                    }\n                }\n            }\n            // 执行方法\n            if (options.enableMonitoring) {\n                return ErrorHandler.monitor(methodName, () => originalMethod.apply(this, args));\n            }\n            else {\n                try {\n                    return originalMethod.apply(this, args);\n                }\n                catch (error) {\n                    const errorInstance = error instanceof Error ? error : new Error(String(error));\n                    ErrorHandler.warn(`方法 ${methodName} 执行失败`, { error: errorInstance, args, instance: this });\n                    throw errorInstance;\n                }\n            }\n        };\n        return descriptor;\n    };\n}\n//# sourceMappingURL=ErrorHandler.js.map","/**\n * 高性能事件管理器\n *\n * @description\n * 提供带自动清理机制的事件管理系统,防止内存泄漏。\n * 支持弱引用、优先级、一次性监听器等高级功能。\n *\n * @example\n * ```typescript\n * const eventManager = new EventManager({\n *   enableAutoCleanup: true,\n *   cleanupInterval: 30000, // 30秒清理一次\n *   maxListeners: 1000\n * });\n *\n * // 添加监听器\n * const listenerId = eventManager.on('playerDeath', (data) => {\n *   console.log('玩家死亡:', data);\n * });\n *\n * // 添加弱引用监听器(自动清理)\n * eventManager.onWeak('gameUpdate', callback, gameObject);\n *\n * // 触发事件\n * eventManager.emit('playerDeath', { playerId: 123 });\n *\n * // 移除监听器\n * eventManager.off('playerDeath', listenerId);\n * ```\n */\nexport class EventManager {\n    /**\n     * 创建事件管理器\n     * @param config 配置选项\n     */\n    constructor(config = {}) {\n        this._listeners = new Map();\n        this._cleanupTimer = null;\n        this._nextListenerId = 1;\n        this._config = {\n            enableAutoCleanup: config.enableAutoCleanup ?? true,\n            cleanupInterval: config.cleanupInterval ?? 30000, // 30秒\n            maxListeners: config.maxListeners ?? 1000,\n            listenerExpirationTime: config.listenerExpirationTime ?? 300000, // 5分钟\n            enablePerformanceMonitoring: config.enablePerformanceMonitoring ?? false\n        };\n        this._stats = {\n            totalListeners: 0,\n            activeListeners: 0,\n            totalEvents: 0,\n            averageEventTime: 0,\n            lastCleanupTime: Date.now()\n        };\n        // 启动自动清理\n        if (this._config.enableAutoCleanup) {\n            this._startAutoCleanup();\n        }\n    }\n    /**\n     * 添加事件监听器\n     * @param eventName 事件名称\n     * @param callback 回调函数\n     * @param options 监听器选项\n     * @returns 监听器ID\n     */\n    on(eventName, callback, options = {}) {\n        const listenerId = this._generateListenerId();\n        const listener = {\n            callback,\n            id: listenerId,\n            createdAt: Date.now(),\n            lastCalledAt: 0,\n            callCount: 0,\n            once: options.once ?? false,\n            priority: options.priority ?? 0,\n            weak: options.weak ?? false,\n            owner: options.owner || undefined\n        };\n        // 检查监听器数量限制\n        if (this._stats.totalListeners >= this._config.maxListeners) {\n            console.warn(`事件监听器数量已达到上限 ${this._config.maxListeners}`);\n            this._performCleanup(); // 尝试清理\n            if (this._stats.totalListeners >= this._config.maxListeners) {\n                throw new Error('无法添加更多事件监听器,已达到上限');\n            }\n        }\n        // 添加到监听器列表\n        if (!this._listeners.has(eventName)) {\n            this._listeners.set(eventName, []);\n        }\n        const listeners = this._listeners.get(eventName);\n        listeners.push(listener);\n        // 按优先级排序(高优先级在前)\n        listeners.sort((a, b) => b.priority - a.priority);\n        this._stats.totalListeners++;\n        this._updateActiveListeners();\n        return listenerId;\n    }\n    /**\n     * 添加弱引用监听器(自动清理)\n     * @param eventName 事件名称\n     * @param callback 回调函数\n     * @param owner 拥有者对象\n     * @param options 其他选项\n     * @returns 监听器ID\n     */\n    onWeak(eventName, callback, owner, options = {}) {\n        return this.on(eventName, callback, {\n            ...options,\n            weak: true,\n            owner\n        });\n    }\n    /**\n     * 添加一次性监听器\n     * @param eventName 事件名称\n     * @param callback 回调函数\n     * @param options 其他选项\n     * @returns 监听器ID\n     */\n    once(eventName, callback, options = {}) {\n        return this.on(eventName, callback, {\n            ...options,\n            once: true\n        });\n    }\n    /**\n     * 移除事件监听器\n     * @param eventName 事件名称\n     * @param listenerId 监听器ID\n     * @returns 是否成功移除\n     */\n    off(eventName, listenerId) {\n        const listeners = this._listeners.get(eventName);\n        if (!listeners) {\n            return false;\n        }\n        const index = listeners.findIndex(listener => listener.id === listenerId);\n        if (index === -1) {\n            return false;\n        }\n        listeners.splice(index, 1);\n        this._stats.totalListeners--;\n        // 如果没有监听器了,删除事件\n        if (listeners.length === 0) {\n            this._listeners.delete(eventName);\n        }\n        this._updateActiveListeners();\n        return true;\n    }\n    /**\n     * 移除所有指定事件的监听器\n     * @param eventName 事件名称\n     * @returns 移除的监听器数量\n     */\n    offAll(eventName) {\n        const listeners = this._listeners.get(eventName);\n        if (!listeners) {\n            return 0;\n        }\n        const count = listeners.length;\n        this._listeners.delete(eventName);\n        this._stats.totalListeners -= count;\n        this._updateActiveListeners();\n        return count;\n    }\n    /**\n     * 移除拥有者的所有监听器\n     * @param owner 拥有者对象\n     * @returns 移除的监听器数量\n     */\n    offByOwner(owner) {\n        let removedCount = 0;\n        for (const [eventName, listeners] of this._listeners) {\n            for (let i = listeners.length - 1; i >= 0; i--) {\n                const listener = listeners[i];\n                if (listener.owner === owner) {\n                    listeners.splice(i, 1);\n                    removedCount++;\n                    this._stats.totalListeners--;\n                }\n            }\n            // 如果没有监听器了,删除事件\n            if (listeners.length === 0) {\n                this._listeners.delete(eventName);\n            }\n        }\n        this._updateActiveListeners();\n        return removedCount;\n    }\n    /**\n     * 触发事件\n     * @param eventName 事件名称\n     * @param data 事件数据\n     * @returns 成功调用的监听器数量\n     */\n    emit(eventName, data) {\n        const listeners = this._listeners.get(eventName);\n        if (!listeners || listeners.length === 0) {\n            return 0;\n        }\n        const startTime = this._config.enablePerformanceMonitoring ? performance.now() : 0;\n        let successCount = 0;\n        const toRemove = [];\n        // 执行监听器\n        for (let i = 0; i < listeners.length; i++) {\n            const listener = listeners[i];\n            // 检查弱引用是否还有效(简化版本)\n            if (listener.weak && listener.owner) {\n                // 在支持WeakRef的环境中,这里可以进行更复杂的检查\n                // 目前简化处理,假设对象仍然有效\n            }\n            try {\n                listener.callback(data);\n                listener.lastCalledAt = Date.now();\n                listener.callCount++;\n                successCount++;\n                // 如果是一次性监听器,标记为移除\n                if (listener.once) {\n                    toRemove.push(i);\n                }\n            }\n            catch (error) {\n                console.error(`事件监听器执行失败 (${eventName}):`, error);\n            }\n        }\n        // 移除标记的监听器(从后往前移除,避免索引问题)\n        for (let i = toRemove.length - 1; i >= 0; i--) {\n            const index = toRemove[i];\n            listeners.splice(index, 1);\n            this._stats.totalListeners--;\n        }\n        // 如果没有监听器了,删除事件\n        if (listeners.length === 0) {\n            this._listeners.delete(eventName);\n        }\n        // 更新统计信息\n        this._stats.totalEvents++;\n        if (this._config.enablePerformanceMonitoring && startTime > 0) {\n            const executionTime = performance.now() - startTime;\n            this._updateAverageEventTime(executionTime);\n        }\n        this._updateActiveListeners();\n        return successCount;\n    }\n    /**\n     * 检查是否有指定事件的监听器\n     * @param eventName 事件名称\n     * @returns 是否有监听器\n     */\n    hasListeners(eventName) {\n        const listeners = this._listeners.get(eventName);\n        return listeners ? listeners.length > 0 : false;\n    }\n    /**\n     * 获取指定事件的监听器数量\n     * @param eventName 事件名称\n     * @returns 监听器数量\n     */\n    getListenerCount(eventName) {\n        const listeners = this._listeners.get(eventName);\n        return listeners ? listeners.length : 0;\n    }\n    /**\n     * 获取所有事件名称\n     * @returns 事件名称数组\n     */\n    getEventNames() {\n        return Array.from(this._listeners.keys());\n    }\n    /**\n     * 执行清理操作\n     * @param force 是否强制清理所有监听器\n     * @returns 清理的监听器数量\n     */\n    cleanup(force = false) {\n        return this._performCleanup(force);\n    }\n    /**\n     * 启动自动清理\n     */\n    _startAutoCleanup() {\n        if (this._cleanupTimer) {\n            return;\n        }\n        this._cleanupTimer = window.setInterval(() => {\n            this._performCleanup();\n        }, this._config.cleanupInterval);\n    }\n    /**\n     * 停止自动清理\n     */\n    _stopAutoCleanup() {\n        if (this._cleanupTimer) {\n            clearInterval(this._cleanupTimer);\n            this._cleanupTimer = null;\n        }\n    }\n    /**\n     * 执行清理操作\n     */\n    _performCleanup(force = false) {\n        const now = Date.now();\n        let removedCount = 0;\n        for (const [eventName, listeners] of this._listeners) {\n            for (let i = listeners.length - 1; i >= 0; i--) {\n                const listener = listeners[i];\n                let shouldRemove = force;\n                if (!shouldRemove) {\n                    // 检查弱引用(简化版本)\n                    if (listener.weak && listener.owner) {\n                        // 在支持WeakRef的环境中,这里可以进行更复杂的检查\n                        // 目前简化处理\n                    }\n                    // 检查过期时间\n                    if (!shouldRemove && this._config.listenerExpirationTime > 0) {\n                        const age = now - listener.createdAt;\n                        const timeSinceLastCall = now - listener.lastCalledAt;\n                        if (age > this._config.listenerExpirationTime &&\n                            timeSinceLastCall > this._config.listenerExpirationTime) {\n                            shouldRemove = true;\n                        }\n                    }\n                }\n                if (shouldRemove) {\n                    listeners.splice(i, 1);\n                    removedCount++;\n                    this._stats.totalListeners--;\n                }\n            }\n            // 如果没有监听器了,删除事件\n            if (listeners.length === 0) {\n                this._listeners.delete(eventName);\n            }\n        }\n        this._stats.lastCleanupTime = now;\n        this._updateActiveListeners();\n        return removedCount;\n    }\n    /**\n     * 生成监听器ID\n     */\n    _generateListenerId() {\n        return `listener_${this._nextListenerId++}_${Date.now()}`;\n    }\n    /**\n     * 更新活跃监听器数量\n     */\n    _updateActiveListeners() {\n        this._stats.activeListeners = this._stats.totalListeners;\n    }\n    /**\n     * 更新平均事件处理时间\n     */\n    _updateAverageEventTime(executionTime) {\n        if (this._stats.totalEvents === 1) {\n            this._stats.averageEventTime = executionTime;\n        }\n        else {\n            this._stats.averageEventTime =\n                (this._stats.averageEventTime * (this._stats.totalEvents - 1) + executionTime) / this._stats.totalEvents;\n        }\n    }\n    /**\n     * 获取统计信息\n     */\n    getStats() {\n        return { ...this._stats };\n    }\n    /**\n     * 重置统计信息\n     */\n    resetStats() {\n        this._stats = {\n            totalListeners: this._stats.totalListeners, // 保留当前监听器数量\n            activeListeners: this._stats.activeListeners,\n            totalEvents: 0,\n            averageEventTime: 0,\n            lastCleanupTime: Date.now()\n        };\n    }\n    /**\n     * 获取配置信息\n     */\n    getConfig() {\n        return { ...this._config };\n    }\n    /**\n     * 销毁事件管理器\n     */\n    destroy() {\n        this._stopAutoCleanup();\n        this._listeners.clear();\n        this._stats.totalListeners = 0;\n        this._stats.activeListeners = 0;\n    }\n}\n//# sourceMappingURL=EventManager.js.map","/**\n * 高性能运行时类型检查工具\n *\n * @description\n * 提供全面的运行时类型检查和类型守卫功能,替代不安全的类型断言。\n * 支持基础类型、复合类型、自定义验证器等。\n *\n * @example\n * ```typescript\n * // 基础类型检查\n * if (TypeGuards.isString(value)) {\n *   // value 现在是 string 类型\n *   console.log(value.toUpperCase());\n * }\n *\n * // 复合类型检查\n * const result = TypeGuards.checkObject(data, {\n *   name: TypeGuards.validators.string,\n *   age: TypeGuards.validators.number,\n *   email: TypeGuards.validators.optional(TypeGuards.validators.string)\n * });\n *\n * // 数组类型检查\n * if (TypeGuards.isArrayOf(value, TypeGuards.isNumber)) {\n *   // value 现在是 number[] 类型\n *   const sum = value.reduce((a, b) => a + b, 0);\n * }\n *\n * // 自定义验证器\n * const isPositiveNumber = TypeGuards.createValidator<number>(\n *   (value): value is number => typeof value === 'number' && value > 0,\n *   'PositiveNumber'\n * );\n * ```\n */\nexport class TypeGuards {\n    // ===== 基础类型守卫 =====\n    /**\n     * 检查是否为字符串\n     */\n    static isString(value) {\n        return typeof value === 'string';\n    }\n    /**\n     * 检查是否为数字\n     */\n    static isNumber(value) {\n        return typeof value === 'number' && !isNaN(value);\n    }\n    /**\n     * 检查是否为布尔值\n     */\n    static isBoolean(value) {\n        return typeof value === 'boolean';\n    }\n    /**\n     * 检查是否为函数\n     */\n    static isFunction(value) {\n        return typeof value === 'function';\n    }\n    /**\n     * 检查是否为对象(非null)\n     */\n    static isObject(value) {\n        return typeof value === 'object' && value !== null;\n    }\n    /**\n     * 检查是否为数组\n     */\n    static isArray(value) {\n        return Array.isArray(value);\n    }\n    /**\n     * 检查是否为null或undefined\n     */\n    static isNullish(value) {\n        return value == null;\n    }\n    /**\n     * 检查是否不为null或undefined\n     */\n    static isNotNull(value) {\n        return value != null;\n    }\n    // ===== 复合类型守卫 =====\n    /**\n     * 检查是否为指定类型的数组\n     */\n    static isArrayOf(value, itemGuard) {\n        return Array.isArray(value) && value.every(itemGuard);\n    }\n    /**\n     * 检查是否为字符串数组\n     */\n    static isStringArray(value) {\n        return this.isArrayOf(value, this.isString);\n    }\n    /**\n     * 检查是否为数字数组\n     */\n    static isNumberArray(value) {\n        return this.isArrayOf(value, this.isNumber);\n    }\n    /**\n     * 检查是否为指定类的实例\n     */\n    static isInstanceOf(value, constructor) {\n        return value instanceof constructor;\n    }\n    /**\n     * 检查对象是否具有指定的属性\n     */\n    static hasProperty(value, property) {\n        return this.isObject(value) && property in value;\n    }\n    /**\n     * 检查对象是否具有指定类型的属性\n     */\n    static hasPropertyOfType(value, property, typeGuard) {\n        return this.hasProperty(value, property) &&\n            typeGuard(value[property]);\n    }\n    // ===== 高级类型检查 =====\n    /**\n     * 创建自定义验证器\n     */\n    static createValidator(guard, typeName, errorMessage) {\n        return {\n            validate: guard,\n            typeName,\n            errorMessage: errorMessage || `Expected ${typeName}`\n        };\n    }\n    /**\n     * 检查对象结构\n     */\n    static checkObject(value, schema) {\n        if (!this.isObject(value)) {\n            return {\n                success: false,\n                value: value,\n                error: 'Value is not an object',\n                expectedType: 'object',\n                actualType: typeof value\n            };\n        }\n        const obj = value;\n        const result = {};\n        for (const [key, validator] of Object.entries(schema)) {\n            const propValue = obj[key];\n            if (!validator.validate(propValue)) {\n                return {\n                    success: false,\n                    value: value,\n                    error: `Property '${key}' ${validator.errorMessage || `is not of type ${validator.typeName}`}`,\n                    expectedType: validator.typeName,\n                    actualType: typeof propValue\n                };\n            }\n            result[key] = propValue;\n        }\n        return {\n            success: true,\n            value: result\n        };\n    }\n    /**\n     * 安全类型转换\n     */\n    static safeCast(value, validator) {\n        if (validator.validate(value)) {\n            return {\n                success: true,\n                value\n            };\n        }\n        return {\n            success: false,\n            value: value,\n            error: validator.errorMessage || `Value is not of type ${validator.typeName}`,\n            expectedType: validator.typeName,\n            actualType: typeof value\n        };\n    }\n    /**\n     * 断言类型(开发模式下抛出错误)\n     */\n    static assertType(value, validator, message) {\n        if (!validator.validate(value)) {\n            const error = message ||\n                validator.errorMessage ||\n                `Type assertion failed: expected ${validator.typeName}, got ${typeof value}`;\n            throw new TypeError(error);\n        }\n    }\n    /**\n     * 尝试类型转换\n     */\n    static tryConvert(value, converter, validator) {\n        try {\n            const converted = converter(value);\n            if (validator.validate(converted)) {\n                return {\n                    success: true,\n                    value: converted\n                };\n            }\n            return {\n                success: false,\n                value: converted,\n                error: `Conversion result is not of type ${validator.typeName}`,\n                expectedType: validator.typeName,\n                actualType: typeof converted\n            };\n        }\n        catch (error) {\n            return {\n                success: false,\n                value: value,\n                error: `Conversion failed: ${error instanceof Error ? error.message : String(error)}`,\n                expectedType: validator.typeName,\n                actualType: typeof value\n            };\n        }\n    }\n    // ===== 常用转换器 =====\n    /**\n     * 字符串转数字\n     */\n    static stringToNumber(value) {\n        return this.tryConvert(value, (v) => {\n            if (typeof v === 'string') {\n                const num = Number(v);\n                if (isNaN(num)) {\n                    throw new Error('Invalid number format');\n                }\n                return num;\n            }\n            throw new Error('Value is not a string');\n        }, this.validators.number);\n    }\n    /**\n     * 任意值转字符串\n     */\n    static toString(value) {\n        return this.tryConvert(value, (v) => String(v), this.validators.string);\n    }\n    /**\n     * 任意值转布尔值\n     */\n    static toBoolean(value) {\n        return this.tryConvert(value, (v) => Boolean(v), this.validators.boolean);\n    }\n    // ===== 范围检查 =====\n    /**\n     * 检查数字是否在指定范围内\n     */\n    static isInRange(value, min, max, inclusive = true) {\n        if (!this.isNumber(value)) {\n            return false;\n        }\n        return inclusive ?\n            (value >= min && value <= max) :\n            (value > min && value < max);\n    }\n    /**\n     * 检查字符串长度是否在指定范围内\n     */\n    static isStringLengthInRange(value, minLength, maxLength) {\n        return this.isString(value) &&\n            value.length >= minLength &&\n            value.length <= maxLength;\n    }\n    /**\n     * 检查数组长度是否在指定范围内\n     */\n    static isArrayLengthInRange(value, minLength, maxLength) {\n        return this.isArray(value) &&\n            value.length >= minLength &&\n            value.length <= maxLength;\n    }\n    // ===== 模式匹配 =====\n    /**\n     * 检查字符串是否匹配正则表达式\n     */\n    static matchesPattern(value, pattern) {\n        return this.isString(value) && pattern.test(value);\n    }\n    /**\n     * 检查是否为有效的电子邮件地址\n     */\n    static isEmail(value) {\n        const emailPattern = /^[^\\s@]+@[^\\s@]+\\.[^\\s@]+$/;\n        return this.matchesPattern(value, emailPattern);\n    }\n    /**\n     * 检查是否为有效的URL\n     */\n    static isUrl(value) {\n        if (!this.isString(value)) {\n            return false;\n        }\n        try {\n            new URL(value);\n            return true;\n        }\n        catch {\n            return false;\n        }\n    }\n    /**\n     * 检查是否为有效的UUID\n     */\n    static isUuid(value) {\n        const uuidPattern = /^[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$/i;\n        return this.matchesPattern(value, uuidPattern);\n    }\n}\n/** 内置验证器 */\nTypeGuards.validators = {\n    /** 字符串验证器 */\n    string: TypeGuards.createValidator((value) => typeof value === 'string', 'string'),\n    /** 数字验证器 */\n    number: TypeGuards.createValidator((value) => typeof value === 'number' && !isNaN(value), 'number'),\n    /** 布尔值验证器 */\n    boolean: TypeGuards.createValidator((value) => typeof value === 'boolean', 'boolean'),\n    /** 函数验证器 */\n    function: TypeGuards.createValidator((value) => typeof value === 'function', 'function'),\n    /** 对象验证器 */\n    object: TypeGuards.createValidator((value) => typeof value === 'object' && value !== null, 'object'),\n    /** 数组验证器 */\n    array: TypeGuards.createValidator((value) => Array.isArray(value), 'array'),\n    /** 非空验证器 */\n    notNull: TypeGuards.createValidator((value) => value != null, 'not null'),\n    /** 整数验证器 */\n    integer: TypeGuards.createValidator((value) => typeof value === 'number' && Number.isInteger(value), 'integer'),\n    /** 正数验证器 */\n    positiveNumber: TypeGuards.createValidator((value) => typeof value === 'number' && value > 0, 'positive number'),\n    /** 非负数验证器 */\n    nonNegativeNumber: TypeGuards.createValidator((value) => typeof value === 'number' && value >= 0, 'non-negative number'),\n    /** 非空字符串验证器 */\n    nonEmptyString: TypeGuards.createValidator((value) => typeof value === 'string' && value.trim().length > 0, 'non-empty string'),\n    /** 可选验证器工厂 */\n    optional: (validator) => ({\n        validate: (value) => value === undefined || validator.validate(value),\n        typeName: `${validator.typeName} | undefined`,\n        errorMessage: `Expected ${validator.typeName} or undefined`\n    }),\n    /** 可空验证器工厂 */\n    nullable: (validator) => ({\n        validate: (value) => value === null || validator.validate(value),\n        typeName: `${validator.typeName} | null`,\n        errorMessage: `Expected ${validator.typeName} or null`\n    }),\n    /** 联合类型验证器工厂 */\n    union: (...validators) => ({\n        validate: (value) => validators.some(v => v.validate(value)),\n        typeName: validators.map(v => v.typeName).join(' | '),\n        errorMessage: `Expected one of: ${validators.map(v => v.typeName).join(', ')}`\n    })\n};\n//# sourceMappingURL=TypeGuards.js.map","/**\n * 行为树节点的执行状态枚举\n *\n * @description 定义了行为树中每个节点可能的执行状态\n */\nexport var TaskStatus;\n(function (TaskStatus) {\n    /**\n     * 无效状态 - 节点尚未执行或已被重置\n     */\n    TaskStatus[TaskStatus[\"Invalid\"] = 0] = \"Invalid\";\n    /**\n     * 成功状态 - 节点执行完成且成功\n     */\n    TaskStatus[TaskStatus[\"Success\"] = 1] = \"Success\";\n    /**\n     * 失败状态 - 节点执行完成但失败\n     */\n    TaskStatus[TaskStatus[\"Failure\"] = 2] = \"Failure\";\n    /**\n     * 运行中状态 - 节点正在执行,需要在下一帧继续\n     */\n    TaskStatus[TaskStatus[\"Running\"] = 3] = \"Running\";\n})(TaskStatus || (TaskStatus = {}));\n//# sourceMappingURL=TaskStatus.js.map","import { TaskStatus } from './TaskStatus';\n/**\n * 行为树节点的抽象基类\n *\n * @description 所有行为树节点的基类,定义了节点的生命周期和基本行为\n * @template T 上下文对象类型,通常包含游戏状态、AI数据等\n *\n * @example\n * ```typescript\n * class CustomAction<GameContext> extends Behavior<GameContext> {\n *   update(context: GameContext): TaskStatus {\n *     // 执行自定义逻辑\n *     return TaskStatus.Success;\n *   }\n * }\n * ```\n */\nexport class Behavior {\n    constructor() {\n        /**\n         * 当前节点的执行状态\n         * @default TaskStatus.Invalid\n         */\n        this.status = TaskStatus.Invalid;\n    }\n    /**\n     * 重置节点状态为无效\n     *\n     * @description 使该节点的状态无效,复合节点可以重写此方法来同时重置子节点\n     */\n    invalidate() {\n        this.status = TaskStatus.Invalid;\n    }\n    /**\n     * 节点开始执行时的回调\n     *\n     * @description 在节点首次执行或状态从Invalid变为其他状态时调用\n     * 用于初始化变量、重置状态等准备工作\n     */\n    onStart() { }\n    /**\n     * 节点执行结束时的回调\n     *\n     * @description 当节点状态变为Success或Failure时调用\n     * 用于清理资源、记录结果等收尾工作\n     */\n    onEnd() { }\n    /**\n     * 节点执行的主要入口点\n     *\n     * @description 处理节点的完整执行流程,包括生命周期管理\n     * 1. 如果状态为Invalid,调用onStart()\n     * 2. 调用update()执行核心逻辑\n     * 3. 如果状态不为Running,调用onEnd()\n     *\n     * @param context 执行上下文\n     * @returns 执行后的状态\n     */\n    tick(context) {\n        if (this.status == TaskStatus.Invalid)\n            this.onStart();\n        this.status = this.update(context);\n        if (this.status != TaskStatus.Running)\n            this.onEnd();\n        return this.status;\n    }\n}\n//# sourceMappingURL=Behavior.js.map","/**\n * 黑板变量类型枚举\n */\nexport var BlackboardValueType;\n(function (BlackboardValueType) {\n    BlackboardValueType[\"String\"] = \"string\";\n    BlackboardValueType[\"Number\"] = \"number\";\n    BlackboardValueType[\"Boolean\"] = \"boolean\";\n    BlackboardValueType[\"Vector2\"] = \"vector2\";\n    BlackboardValueType[\"Vector3\"] = \"vector3\";\n    BlackboardValueType[\"Object\"] = \"object\";\n    BlackboardValueType[\"Array\"] = \"array\";\n})(BlackboardValueType || (BlackboardValueType = {}));\n/**\n * 行为树黑板系统\n *\n * @description\n * 提供类型安全的变量存储和访问机制,支持:\n * - 类型化变量定义和访问\n * - 变量监听和回调\n * - 序列化和反序列化\n * - 实时调试和编辑\n *\n * @example\n * ```typescript\n * // 创建黑板实例\n * const blackboard = new Blackboard();\n *\n * // 定义变量\n * blackboard.defineVariable('playerHealth', BlackboardValueType.Number, 100, {\n *   description: '玩家生命值',\n *   min: 0,\n *   max: 100\n * });\n *\n * // 设置和获取值\n * blackboard.setValue('playerHealth', 80);\n * const health = blackboard.getValue<number>('playerHealth');\n *\n * // 监听变量变化\n * blackboard.addListener('playerHealth', (newVal, oldVal) => {\n *   console.log(`玩家生命值从 ${oldVal} 变为 ${newVal}`);\n * });\n * ```\n */\nexport class Blackboard {\n    constructor() {\n        /** 变量定义存储 */\n        this._variables = new Map();\n        /** 变量监听器存储 */\n        this._listeners = new Map();\n        /** 监听器计数器 */\n        this._listenerIdCounter = 0;\n        /** 变量修改历史 */\n        this._history = [];\n        /** 是否启用历史记录 */\n        this.enableHistory = false;\n    }\n    /**\n     * 定义一个黑板变量\n     *\n     * @param name 变量名\n     * @param type 变量类型\n     * @param defaultValue 默认值\n     * @param options 额外选项\n     */\n    defineVariable(name, type, defaultValue, options = {}) {\n        if (!name || typeof name !== 'string') {\n            throw new Error('变量名必须是非空字符串');\n        }\n        if (this._variables.has(name)) {\n            console.warn(`黑板变量 \"${name}\" 已存在,将被重新定义`);\n        }\n        // 验证默认值类型\n        if (!this._validateValueType(defaultValue, type)) {\n            throw new Error(`默认值类型与变量类型 \"${type}\" 不匹配`);\n        }\n        const variable = {\n            name,\n            type,\n            value: this._cloneValue(defaultValue),\n            defaultValue: this._cloneValue(defaultValue),\n            description: options.description || '',\n            readonly: options.readonly || false,\n            group: options.group || 'Default',\n            min: options.min,\n            max: options.max,\n            options: options.options ? [...options.options] : undefined\n        };\n        this._variables.set(name, variable);\n    }\n    /**\n     * 设置变量值\n     *\n     * @param name 变量名\n     * @param value 新值\n     * @param force 是否强制设置(忽略只读限制)\n     */\n    setValue(name, value, force = false) {\n        const variable = this._variables.get(name);\n        if (!variable) {\n            console.warn(`尝试设置不存在的黑板变量 \"${name}\"`);\n            return false;\n        }\n        if (variable.readonly && !force) {\n            console.warn(`尝试修改只读黑板变量 \"${name}\"`);\n            return false;\n        }\n        // 类型验证\n        if (!this._validateValueType(value, variable.type)) {\n            console.error(`设置的值类型与变量 \"${name}\" 的类型 \"${variable.type}\" 不匹配`);\n            return false;\n        }\n        // 数值范围验证\n        if (variable.type === BlackboardValueType.Number && typeof value === 'number') {\n            if (variable.min !== undefined && value < variable.min) {\n                console.warn(`变量 \"${name}\" 的值 ${value} 小于最小值 ${variable.min}`);\n                return false;\n            }\n            if (variable.max !== undefined && value > variable.max) {\n                console.warn(`变量 \"${name}\" 的值 ${value} 大于最大值 ${variable.max}`);\n                return false;\n            }\n        }\n        // 可选值验证\n        if (variable.options && !variable.options.includes(value)) {\n            console.warn(`变量 \"${name}\" 的值不在允许的选项中`);\n            return false;\n        }\n        const oldValue = this._cloneValue(variable.value);\n        const newValue = this._cloneValue(value);\n        // 更新值\n        variable.value = newValue;\n        // 记录历史\n        if (this.enableHistory) {\n            this._history.push({\n                variableName: name,\n                oldValue,\n                newValue,\n                timestamp: Date.now()\n            });\n        }\n        // 触发监听器\n        this._notifyListeners(name, newValue, oldValue);\n        return true;\n    }\n    /**\n     * 获取变量值\n     *\n     * @param name 变量名\n     * @param defaultValue 变量不存在时的默认返回值\n     * @returns 变量值\n     */\n    getValue(name, defaultValue) {\n        const variable = this._variables.get(name);\n        if (!variable) {\n            if (defaultValue !== undefined) {\n                return defaultValue;\n            }\n            console.warn(`尝试获取不存在的黑板变量 \"${name}\"`);\n            return undefined;\n        }\n        return this._cloneValue(variable.value);\n    }\n    /**\n     * 检查变量是否存在\n     */\n    hasVariable(name) {\n        return this._variables.has(name);\n    }\n    /**\n     * 获取变量定义\n     */\n    getVariableDefinition(name) {\n        const variable = this._variables.get(name);\n        return variable ? { ...variable } : undefined;\n    }\n    /**\n     * 获取所有变量名称\n     */\n    getVariableNames() {\n        return Array.from(this._variables.keys());\n    }\n    /**\n     * 按分组获取变量\n     */\n    getVariablesByGroup(group) {\n        return Array.from(this._variables.values())\n            .filter(v => v.group === group)\n            .map(v => ({ ...v }));\n    }\n    /**\n     * 获取所有分组\n     */\n    getGroups() {\n        const groups = new Set();\n        this._variables.forEach(variable => {\n            groups.add(variable.group || 'Default');\n        });\n        return Array.from(groups).sort();\n    }\n    /**\n     * 重置变量到默认值\n     */\n    resetVariable(name) {\n        const variable = this._variables.get(name);\n        if (!variable) {\n            return false;\n        }\n        return this.setValue(name, variable.defaultValue, true);\n    }\n    /**\n     * 重置所有变量到默认值\n     */\n    resetAll() {\n        this._variables.forEach((variable, name) => {\n            this.setValue(name, variable.defaultValue, true);\n        });\n    }\n    /**\n     * 删除变量\n     */\n    removeVariable(name) {\n        if (!this._variables.has(name)) {\n            return false;\n        }\n        this._variables.delete(name);\n        this._listeners.delete(name);\n        return true;\n    }\n    /**\n     * 添加变量监听器\n     */\n    addListener(variableName, callback) {\n        const id = `listener_${this._listenerIdCounter++}`;\n        const listener = {\n            variableName,\n            callback,\n            id\n        };\n        if (!this._listeners.has(variableName)) {\n            this._listeners.set(variableName, []);\n        }\n        this._listeners.get(variableName).push(listener);\n        return id;\n    }\n    /**\n     * 移除监听器\n     */\n    removeListener(listenerId) {\n        for (const [variableName, listeners] of this._listeners.entries()) {\n            const index = listeners.findIndex(l => l.id === listenerId);\n            if (index !== -1) {\n                listeners.splice(index, 1);\n                if (listeners.length === 0) {\n                    this._listeners.delete(variableName);\n                }\n                return true;\n            }\n        }\n        return false;\n    }\n    /**\n     * 序列化黑板数据\n     */\n    serialize() {\n        const data = {\n            variables: Array.from(this._variables.entries()).map(([name, variable]) => ({\n                name,\n                type: variable.type,\n                value: variable.value,\n                defaultValue: variable.defaultValue,\n                description: variable.description,\n                readonly: variable.readonly,\n                group: variable.group,\n                min: variable.min,\n                max: variable.max,\n                options: variable.options\n            }))\n        };\n        return JSON.stringify(data, null, 2);\n    }\n    /**\n     * 从序列化数据恢复黑板\n     */\n    deserialize(data) {\n        try {\n            const parsed = JSON.parse(data);\n            if (!parsed.variables || !Array.isArray(parsed.variables)) {\n                throw new Error('无效的黑板数据格式');\n            }\n            // 清空现有数据\n            this._variables.clear();\n            this._listeners.clear();\n            // 恢复变量定义\n            for (const varData of parsed.variables) {\n                this.defineVariable(varData.name, varData.type, varData.defaultValue, {\n                    description: varData.description,\n                    readonly: varData.readonly,\n                    group: varData.group,\n                    min: varData.min,\n                    max: varData.max,\n                    options: varData.options\n                });\n                // 设置当前值\n                this.setValue(varData.name, varData.value, true);\n            }\n            return true;\n        }\n        catch (error) {\n            console.error('反序列化黑板数据失败:', error);\n            return false;\n        }\n    }\n    /**\n     * 获取修改历史\n     */\n    getHistory() {\n        return [...this._history];\n    }\n    /**\n     * 清空历史记录\n     */\n    clearHistory() {\n        this._history.length = 0;\n    }\n    /**\n     * 验证值类型\n     */\n    _validateValueType(value, type) {\n        switch (type) {\n            case BlackboardValueType.String:\n                return typeof value === 'string';\n            case BlackboardValueType.Number:\n                return typeof value === 'number' && !isNaN(value);\n            case BlackboardValueType.Boolean:\n                return typeof value === 'boolean';\n            case BlackboardValueType.Vector2:\n                return this._isVector2(value);\n            case BlackboardValueType.Vector3:\n                return this._isVector3(value);\n            case BlackboardValueType.Object:\n                return typeof value === 'object' && value !== null && !Array.isArray(value);\n            case BlackboardValueType.Array:\n                return Array.isArray(value);\n            default:\n                return true;\n        }\n    }\n    /**\n     * 检查是否为Vector2\n     */\n    _isVector2(value) {\n        return typeof value === 'object' &&\n            value !== null &&\n            typeof value.x === 'number' &&\n            typeof value.y === 'number';\n    }\n    /**\n     * 检查是否为Vector3\n     */\n    _isVector3(value) {\n        return typeof value === 'object' &&\n            value !== null &&\n            typeof value.x === 'number' &&\n            typeof value.y === 'number' &&\n            typeof value.z === 'number';\n    }\n    /**\n     * 深拷贝值\n     */\n    _cloneValue(value) {\n        if (value === null || typeof value !== 'object') {\n            return value;\n        }\n        if (Array.isArray(value)) {\n            return value.map(item => this._cloneValue(item));\n        }\n        const cloned = {};\n        for (const key in value) {\n            if (value.hasOwnProperty(key)) {\n                cloned[key] = this._cloneValue(value[key]);\n            }\n        }\n        return cloned;\n    }\n    /**\n     * 通知监听器\n     */\n    _notifyListeners(variableName, newValue, oldValue) {\n        const listeners = this._listeners.get(variableName);\n        if (listeners) {\n            listeners.forEach(listener => {\n                try {\n                    listener.callback(newValue, oldValue);\n                }\n                catch (error) {\n                    console.error(`黑板监听器回调执行失败:`, error);\n                }\n            });\n        }\n    }\n}\n//# sourceMappingURL=Blackboard.js.map","import { TimeManager } from '../core/TimeManager';\nimport { ErrorHandler } from '../core/ErrorHandler';\nimport { Blackboard } from './Blackboard';\n/**\n * 行为树控制器\n *\n * @description 管理行为树的执行,支持定时更新和上下文管理\n * @template T 上下文对象类型\n *\n * @example\n * ```typescript\n * // 创建游戏AI的行为树\n * interface GameContext {\n *   player: Player;\n *   enemies: Enemy[];\n *   gameTime: number;\n * }\n *\n * const context: GameContext = { ... };\n * const rootNode = new Selector(...);\n * const behaviorTree = new BehaviorTree(context, rootNode, 0.1); // 每100ms更新一次\n *\n * // 在游戏循环中调用\n * behaviorTree.tick();\n * ```\n */\nexport class BehaviorTree {\n    /**\n     * 创建行为树实例\n     *\n     * @param context 执行上下文对象\n     * @param rootNode 根节点\n     * @param updatePeriod 更新周期,0表示每帧更新\n     * @param performanceMode 是否启用性能优化模式,默认false\n     * @param blackboard 可选的黑板实例,如果不提供将自动创建\n     * @throws {Error} 当context或rootNode为null时抛出错误\n     */\n    constructor(context, rootNode, updatePeriod = 0.2, performanceMode = false, blackboard) {\n        /** 上次更新的时间戳(秒) */\n        this._lastTime = 0;\n        /** 是否启用性能优化模式 */\n        this._performanceMode = false;\n        /** 性能统计信息 */\n        this._stats = {\n            totalTicks: 0,\n            totalExecutionTime: 0,\n            averageExecutionTime: 0,\n            lastExecutionTime: 0\n        };\n        if (context == null) {\n            throw new Error('上下文不能为null或undefined');\n        }\n        if (rootNode == null) {\n            throw new Error('根节点不能为null或undefined');\n        }\n        if (updatePeriod < 0) {\n            throw new Error('更新周期不能为负数');\n        }\n        this._context = context;\n        this._root = rootNode;\n        this.updatePeriod = this._elapsedTime = updatePeriod;\n        this._performanceMode = performanceMode;\n        this._lastTime = this._getCurrentTime();\n        this._blackboard = blackboard || new Blackboard();\n        // 将黑板注入到上下文中\n        this._context.blackboard = this._blackboard;\n    }\n    /**\n     * 获取当前时间(秒)\n     * 优先使用全局时间管理器,回退到本地时间计算\n     */\n    _getCurrentTime() {\n        // 优先使用全局时间管理器\n        try {\n            return TimeManager.getCurrentTime();\n        }\n        catch {\n            // 回退到本地时间计算\n            if (this._performanceMode) {\n                return Date.now() / 1000;\n            }\n            else {\n                return performance.now() / 1000;\n            }\n        }\n    }\n    /**\n     * 更新行为树\n     *\n     * @description\n     * 根据updatePeriod设置决定是否执行根节点:\n     * - updatePeriod > 0:按时间间隔更新\n     * - updatePeriod <= 0:每次调用都更新\n     *\n     * 通常在游戏主循环中每帧调用此方法\n     *\n     * @param deltaTime 可选的时间差值(秒),如果提供则使用此值而不是计算\n     */\n    tick(deltaTime) {\n        const startTime = this._performanceMode ? 0 : this._getCurrentTime();\n        try {\n            if (this.updatePeriod > 0) {\n                let actualDeltaTime;\n                if (deltaTime !== undefined) {\n                    // 使用提供的deltaTime,避免时间计算开销\n                    actualDeltaTime = deltaTime;\n                }\n                else {\n                    // 优先使用全局时间管理器的deltaTime\n                    try {\n                        actualDeltaTime = TimeManager.getDeltaTime();\n                        if (actualDeltaTime <= 0) {\n                            // 如果全局时间管理器未初始化,回退到本地计算\n                            const currentTime = this._getCurrentTime();\n                            actualDeltaTime = currentTime - this._lastTime;\n                            this._lastTime = currentTime;\n                        }\n                    }\n                    catch {\n                        // 回退到本地时间计算\n                        const currentTime = this._getCurrentTime();\n                        actualDeltaTime = currentTime - this._lastTime;\n                        this._lastTime = currentTime;\n                    }\n                }\n                // 验证deltaTime的有效性\n                if (actualDeltaTime < 0 || !isFinite(actualDeltaTime)) {\n                    ErrorHandler.warn('BehaviorTree: 无效的deltaTime值,跳过此次更新', { deltaTime: actualDeltaTime });\n                    return;\n                }\n                // 防止异常大的时间跳跃\n                actualDeltaTime = Math.min(actualDeltaTime, 1.0);\n                this._elapsedTime -= actualDeltaTime;\n                if (this._elapsedTime <= 0) {\n                    // 处理可能的时间累积,确保稳定的更新频率\n                    while (this._elapsedTime <= 0) {\n                        this._elapsedTime += this.updatePeriod;\n                    }\n                    this._executeRoot();\n                }\n            }\n            else {\n                // 每帧更新模式\n                this._executeRoot();\n            }\n        }\n        catch (error) {\n            ErrorHandler.warn('行为树更新时发生错误', { error, context: this._context });\n        }\n        finally {\n            // 更新性能统计\n            if (!this._performanceMode && startTime > 0) {\n                const executionTime = this._getCurrentTime() - startTime;\n                this._updateStats(executionTime);\n            }\n        }\n    }\n    /**\n     * 执行根节点\n     */\n    _executeRoot() {\n        this._root.tick(this._context);\n        this._stats.totalTicks++;\n    }\n    /**\n     * 更新性能统计信息\n     * @param executionTime 执行时间\n     */\n    _updateStats(executionTime) {\n        this._stats.lastExecutionTime = executionTime;\n        this._stats.totalExecutionTime += executionTime;\n        this._stats.averageExecutionTime = this._stats.totalExecutionTime / this._stats.totalTicks;\n    }\n    /**\n     * 获取当前上下文\n     * @returns 执行上下文对象\n     */\n    getContext() {\n        return this._context;\n    }\n    /**\n     * 获取黑板实例\n     * @returns 黑板实例\n     */\n    getBlackboard() {\n        return this._blackboard;\n    }\n    /**\n     * 更新上下文\n     * @param context 新的上下文对象\n     * @throws {Error} 当context为null时抛出错误\n     */\n    setContext(context) {\n        if (context == null) {\n            throw new Error('上下文不能为null或undefined');\n        }\n        this._context = context;\n        // 确保新上下文中也包含黑板引用\n        this._context.blackboard = this._blackboard;\n    }\n    /**\n     * 获取根节点\n     * @returns 根节点实例\n     */\n    getRoot() {\n        return this._root;\n    }\n    /**\n     * 设置新的根节点\n     * @param rootNode 新的根节点\n     * @throws {Error} 当rootNode为null时抛出错误\n     */\n    setRoot(rootNode) {\n        if (rootNode == null) {\n            throw new Error('根节点不能为null或undefined');\n        }\n        this._root = rootNode;\n    }\n    /**\n     * 强制重置整个行为树\n     * @description 将根节点及其所有子节点重置为Invalid状态\n     */\n    reset() {\n        try {\n            this._root.invalidate();\n            this._elapsedTime = this.updatePeriod;\n            this._lastTime = this._getCurrentTime();\n        }\n        catch (error) {\n            console.error('重置行为树时发生错误:', error);\n        }\n    }\n    /**\n     * 设置性能模式\n     * @param enabled 是否启用性能模式\n     */\n    setPerformanceMode(enabled) {\n        this._performanceMode = enabled;\n        if (enabled) {\n            console.log('行为树性能模式已启用:使用较低精度的时间计算以提高性能');\n        }\n    }\n    /**\n     * 获取性能统计信息\n     * @returns 性能统计对象\n     */\n    getStats() {\n        return { ...this._stats };\n    }\n    /**\n     * 重置性能统计信息\n     */\n    resetStats() {\n        this._stats = {\n            totalTicks: 0,\n            totalExecutionTime: 0,\n            averageExecutionTime: 0,\n            lastExecutionTime: 0\n        };\n    }\n    /**\n     * 检查行为树是否处于活动状态\n     * @returns 是否有待处理的更新\n     */\n    isActive() {\n        return this.updatePeriod <= 0 || this._elapsedTime <= 0;\n    }\n    /**\n     * 获取到下次更新的剩余时间\n     * @returns 剩余时间(秒),如果是每帧更新模式则返回0\n     */\n    getTimeToNextUpdate() {\n        return this.updatePeriod > 0 ? Math.max(this._elapsedTime, 0) : 0;\n    }\n}\n//# sourceMappingURL=BehaviorTree.js.map","export var AbortTypes;\n(function (AbortTypes) {\n    /**\n     * 没有中止类型。即使其他条件更改了状态,当前操作也将始终运行\n     */\n    AbortTypes[AbortTypes[\"None\"] = 0] = \"None\";\n    /**\n     * 如果一个更重要的有条件的任务改变了状态,它可以发出一个中止指令,使低优先级的任务停止运行,并将控制权转回高优先级的分支。\n     * 这种类型应该被设置在作为讨论中的复合体的子体的复合体上。\n     * 父复合体将检查它的子体,看它们是否有LowerPriority中止。\n     */\n    AbortTypes[AbortTypes[\"LowerPriority\"] = 1] = \"LowerPriority\";\n    /**\n     * 只有当它们都是复合体的子任务时,条件任务才能中止一个行动任务。\n     * 这个AbortType只影响它所设置的实际的Composite,不像LowerPriority会影响其父Composite。\n     */\n    AbortTypes[AbortTypes[\"Self\"] = 2] = \"Self\";\n    /**\n     * 检查LowerPriority和Self aborts\n     */\n    AbortTypes[AbortTypes[\"Both\"] = 3] = \"Both\";\n})(AbortTypes || (AbortTypes = {}));\nexport class AbortTypesExt {\n    static has(self, check) {\n        return (self & check) == check;\n    }\n}\n//# sourceMappingURL=AbortTypes.js.map","export function isIConditional(obj) {\n    return obj && obj.discriminator === 'IConditional';\n}\n//# sourceMappingURL=IConditional.js.map","import { Behavior } from '../Behavior';\nimport { TaskStatus } from '../TaskStatus';\nimport { AbortTypes, AbortTypesExt } from './AbortTypes';\nimport { isIConditional } from '../conditionals/IConditional';\n/**\n * 检查节点是否为条件装饰器\n * @param node 要检查的节点\n * @returns 如果是条件装饰器则返回true\n */\nfunction isConditionalDecorator(node) {\n    return isIConditional(node) &&\n        'abortType' in node &&\n        'executeConditional' in node &&\n        typeof node.executeConditional === 'function';\n}\n/**\n * 复合节点基类\n *\n * 所有复合节点(如Sequence、Selector等)都必须继承此类。\n * 提供子节点管理和中止类型处理的基础功能。\n *\n * @template T 上下文类型\n * @abstract\n */\nexport class Composite extends Behavior {\n    constructor() {\n        super(...arguments);\n        /** 中止类型,决定节点在何种情况下会被中止*/\n        this.abortType = AbortTypes.None;\n        /** 子节点数组*/\n        this._children = new Array();\n        /** 是否存在低优先级条件中止 */\n        this._hasLowerPriorityConditionalAbort = false;\n        /** 当前执行的子节点索引 */\n        this._currentChildIndex = 0;\n    }\n    /**\n     * 使节点及其所有子节点无效\n     *\n     * 重写父类方法,递归使所有子节点无效\n     */\n    invalidate() {\n        super.invalidate();\n        const childrenLength = this._children.length;\n        for (let i = 0; i < childrenLength; i++) {\n            this._children[i].invalidate();\n        }\n    }\n    /**\n     * 节点开始执行时的初始化\n     *\n     * 检查是否存在低优先级条件中止,并重置当前子节点索引\n     */\n    onStart() {\n        // 检查子节点中是否存在低优先级条件中止\n        this._hasLowerPriorityConditionalAbort = this.hasLowerPriorityConditionalAbortInChildren();\n        this._currentChildIndex = 0;\n    }\n    /**\n     * 节点执行结束时的清理\n     *\n     * 使所有子节点无效,为下一次执行做准备\n     */\n    onEnd() {\n        // 使所有子节点无效,为下一帧做准备\n        const childrenLength = this._children.length;\n        for (let i = 0; i < childrenLength; i++) {\n            this._children[i].invalidate();\n        }\n    }\n    /**\n     * 检查子节点中是否存在低优先级条件中止\n     *\n     * 遍历所有子节点,查找设置了LowerPriority中止类型的节点\n     *\n     * @returns 如果存在低优先级条件中止则返回true,否则返回false\n     * @private\n     */\n    hasLowerPriorityConditionalAbortInChildren() {\n        for (let i = 0; i < this._children.length; i++) {\n            const child = this._children[i];\n            // 检查条件装饰器的中止类型\n            if (isConditionalDecorator(child) && AbortTypesExt.has(child.abortType, AbortTypes.LowerPriority)) {\n                return true;\n            }\n            // 检查复合节点的中止类型\n            const composite = child;\n            if (composite != null && AbortTypesExt.has(composite.abortType, AbortTypes.LowerPriority)) {\n                // 确保第一个子节点是条件节点\n                if (composite.isFirstChildConditional())\n                    return true;\n            }\n        }\n        return false;\n    }\n    /**\n     * 添加子节点\n     *\n     * @param child 要添加的子节点\n     */\n    addChild(child) {\n        this._children.push(child);\n    }\n    /**\n     * 检查第一个子节点是否为条件节点\n     *\n     * 用于处理条件性中止逻辑\n     *\n     * @returns 如果第一个子节点是条件节点则返回true,否则返回false\n     */\n    isFirstChildConditional() {\n        return isIConditional(this._children[0]);\n    }\n    /**\n     * 更新自中止条件节点\n     *\n     * 检查当前索引之前的条件节点状态变化,支持自中止功能。\n     * 当条件节点状态不符合预期时,会重置当前索引并使后续子节点无效。\n     *\n     * @param context 执行上下文\n     * @param statusCheck 期望的状态值\n     * @protected\n     */\n    updateSelfAbortConditional(context, statusCheck) {\n        // 检查当前索引之前的条件节点\n        for (let i = 0; i < this._currentChildIndex; i++) {\n            const child = this._children[i];\n            if (!isIConditional(child)) {\n                continue;\n            }\n            const status = this.updateConditionalNode(context, child);\n            if (status !== statusCheck) {\n                this._currentChildIndex = i;\n                // 中止时使后续子节点无效\n                const childrenLength = this._children.length;\n                for (let j = i; j < childrenLength; j++) {\n                    this._children[j].invalidate();\n                }\n                break;\n            }\n        }\n    }\n    /**\n     * 更新低优先级中止条件节点\n     *\n     * 检查具有低优先级中止类型的组合节点,当其条件节点状态发生变化时\n     * 执行中止操作。\n     *\n     * @param context 执行上下文\n     * @param statusCheck 期望的状态值\n     * @protected\n     */\n    updateLowerPriorityAbortConditional(context, statusCheck) {\n        // 检查当前索引之前的低优先级任务\n        for (let i = 0; i < this._currentChildIndex; i++) {\n            const child = this._children[i];\n            // 检查是否为条件装饰器或设置了LowerPriority中止类型的复合节点\n            if (isConditionalDecorator(child) && AbortTypesExt.has(child.abortType, AbortTypes.LowerPriority)) {\n                // 对于条件装饰器,检查条件本身而不是装饰器的整体状态\n                const conditionStatus = child.executeConditional(context, true); // 强制更新条件\n                // 对于选择器:当高优先级条件变为Success时,应该中止低优先级任务\n                // 对于序列器:当高优先级条件变为Failure时,应该中止低优先级任务\n                const shouldAbort = (statusCheck === TaskStatus.Failure) ? (conditionStatus === TaskStatus.Success) : (conditionStatus === TaskStatus.Failure);\n                if (shouldAbort) {\n                    // 条件满足,需要中止当前执行,回到这个节点\n                    this._currentChildIndex = i;\n                    // 中止时使后续子节点无效\n                    const childrenLength = this._children.length;\n                    for (let j = i + 1; j < childrenLength; j++) {\n                        this._children[j].invalidate();\n                    }\n                    break;\n                }\n            }\n            else {\n                // 检查是否为设置了LowerPriority的复合节点\n                const composite = child;\n                if (composite && AbortTypesExt.has(composite.abortType, AbortTypes.LowerPriority)) {\n                    // 获取复合节点的第一个子节点作为条件\n                    const firstChild = composite._children[0];\n                    if (firstChild && isIConditional(firstChild)) {\n                        const status = this.updateConditionalNode(context, firstChild);\n                        // 对于选择器:当高优先级条件变为Success时,应该中止低优先级任务\n                        // 对于序列器:当高优先级条件变为Failure时,应该中止低优先级任务\n                        const shouldAbort = (statusCheck === TaskStatus.Failure) ? (status === TaskStatus.Success) : (status === TaskStatus.Failure);\n                        if (shouldAbort) {\n                            this._currentChildIndex = i;\n                            // 中止时使后续子节点无效\n                            const childrenLength = this._children.length;\n                            for (let j = i + 1; j < childrenLength; j++) {\n                                this._children[j].invalidate();\n                            }\n                            break;\n                        }\n                    }\n                }\n            }\n        }\n    }\n    /**\n     * 更新条件节点状态\n     *\n     * 辅助方法,用于获取条件节点或条件装饰器的任务状态\n     *\n     * @param context 执行上下文\n     * @param node 要更新的节点\n     * @returns 节点的执行状态\n     * @private\n     */\n    updateConditionalNode(context, node) {\n        // 直接调用节点的update方法获取状态\n        return node.update(context);\n    }\n}\n//# sourceMappingURL=Composite.js.map","import { Behavior } from '../Behavior';\nexport class Decorator extends Behavior {\n    invalidate() {\n        super.invalidate();\n        this.child?.invalidate();\n    }\n}\n//# sourceMappingURL=Decorator.js.map","import { Behavior } from '../Behavior';\nimport { TaskStatus } from '../TaskStatus';\n/**\n * 执行函数动作包装器\n *\n * @description\n * 包装一个函数以便可以作为行为树节点使用,避免为简单逻辑创建子类。\n * 适合快速原型开发和简单的行为逻辑。\n *\n * @template T 上下文类型\n *\n * @example\n * ```typescript\n * // 创建简单的执行动作\n * const moveAction = new ExecuteAction<GameContext>((context) => {\n *   context.player.move();\n *   return TaskStatus.Success;\n * });\n *\n * // 带条件的执行动作\n * const attackAction = new ExecuteAction<GameContext>((context) => {\n *   if (context.enemy.isInRange()) {\n *     context.player.attack();\n *     return TaskStatus.Success;\n *   }\n *   return TaskStatus.Failure;\n * });\n * ```\n */\nexport class ExecuteAction extends Behavior {\n    /**\n     * 创建执行动作\n     * @param action 要执行的函数,不能为null\n     * @param options 配置选项\n     * @throws {Error} 当action为null或undefined时抛出错误\n     */\n    constructor(action, options = {}) {\n        super();\n        if (action == null) {\n            throw new Error('动作函数不能为null或undefined');\n        }\n        if (typeof action !== 'function') {\n            throw new Error('动作必须是一个函数');\n        }\n        this._action = action;\n        this._enableErrorHandling = options.enableErrorHandling ?? true;\n        this._name = options.name;\n    }\n    /**\n     * 执行包装的函数\n     * @param context 执行上下文\n     * @returns 执行结果状态\n     */\n    update(context) {\n        if (this._enableErrorHandling) {\n            try {\n                const result = this._action(context);\n                // 验证返回值是否为有效的TaskStatus\n                if (!this.isValidTaskStatus(result)) {\n                    console.error(`ExecuteAction ${this._name || ''}: 动作函数返回了无效的TaskStatus: ${result}`);\n                    return TaskStatus.Failure;\n                }\n                return result;\n            }\n            catch (error) {\n                const actionName = this._name ? `\"${this._name}\"` : '';\n                console.error(`ExecuteAction ${actionName} 执行时发生错误:`, error);\n                return TaskStatus.Failure;\n            }\n        }\n        else {\n            // 高性能模式:跳过错误处理\n            return this._action(context);\n        }\n    }\n    /**\n     * 验证TaskStatus是否有效\n     * @param status 要验证的状态\n     * @returns 是否为有效状态\n     */\n    isValidTaskStatus(status) {\n        return status === TaskStatus.Success ||\n            status === TaskStatus.Failure ||\n            status === TaskStatus.Running;\n    }\n    /**\n     * 获取动作名称\n     * @returns 动作名称或函数名\n     */\n    getName() {\n        return this._name || this._action.name || 'Anonymous Action';\n    }\n    /**\n     * 创建一个始终成功的执行动作\n     * @param action 要执行的无返回值函数\n     * @param name 动作名称\n     * @returns 新的ExecuteAction实例\n     */\n    static createAlwaysSuccess(action, name) {\n        return new ExecuteAction((context) => {\n            action(context);\n            return TaskStatus.Success;\n        }, { name: name || 'Always Success Action' });\n    }\n    /**\n     * 创建一个条件执行动作\n     * @param predicate 条件函数\n     * @param name 动作名称\n     * @returns 新的ExecuteAction实例\n     */\n    static createConditional(predicate, name) {\n        return new ExecuteAction((context) => {\n            return predicate(context) ? TaskStatus.Success : TaskStatus.Failure;\n        }, { name: name || 'Conditional Action' });\n    }\n}\n//# sourceMappingURL=ExecuteAction.js.map","import { ExecuteAction } from '../actions/ExecuteAction';\nimport { TaskStatus } from '../TaskStatus';\n/**\n * 执行动作条件包装器\n *\n * @description\n * 包装一个ExecuteAction,使其可以作为条件节点使用。\n * 适用于需要将简单的函数逻辑用作条件判断的场景。\n *\n * @template T 上下文类型\n *\n * @example\n * ```typescript\n * // 创建一个检查玩家血量的条件\n * const healthCheck = new ExecuteActionConditional<GameContext>((context) => {\n *   return context.player.health > 50 ? TaskStatus.Success : TaskStatus.Failure;\n * }, { name: 'HealthCheck' });\n *\n * // 创建一个检查敌人距离的条件\n * const enemyInRange = ExecuteActionConditional.createPredicate<GameContext>(\n *   (context) => context.getClosestEnemy()?.distance < 10,\n *   'EnemyInRange'\n * );\n * ```\n */\nexport class ExecuteActionConditional extends ExecuteAction {\n    /**\n     * 创建执行动作条件\n     * @param action 条件判断函数,应返回Success或Failure\n     * @param options 配置选项\n     */\n    constructor(action, options = {}) {\n        super(action, options);\n        /** 条件节点标识符 */\n        this.discriminator = \"IConditional\";\n    }\n    /**\n     * 创建基于布尔值的条件\n     * @param predicate 返回布尔值的判断函数\n     * @param name 条件名称\n     * @returns 新的ExecuteActionConditional实例\n     */\n    static createPredicate(predicate, name) {\n        return new ExecuteActionConditional((context) => {\n            return predicate(context) ? TaskStatus.Success : TaskStatus.Failure;\n        }, { name: name || 'Predicate Condition' });\n    }\n    /**\n     * 创建数值比较条件\n     * @param getValue 获取数值的函数\n     * @param threshold 阈值\n     * @param comparison 比较类型\n     * @param name 条件名称\n     * @returns 新的ExecuteActionConditional实例\n     */\n    static createNumericComparison(getValue, threshold, comparison, name) {\n        const compareFunctions = {\n            greater: (value, threshold) => value > threshold,\n            less: (value, threshold) => value < threshold,\n            equal: (value, threshold) => Math.abs(value - threshold) < Number.EPSILON,\n            greaterEqual: (value, threshold) => value >= threshold,\n            lessEqual: (value, threshold) => value <= threshold\n        };\n        const compareFunc = compareFunctions[comparison];\n        const conditionName = name || `Numeric ${comparison} ${threshold}`;\n        return new ExecuteActionConditional((context) => {\n            try {\n                const value = getValue(context);\n                if (typeof value !== 'number' || isNaN(value)) {\n                    console.warn(`${conditionName}: getValue返回了无效的数值: ${value}`);\n                    return TaskStatus.Failure;\n                }\n                return compareFunc(value, threshold) ? TaskStatus.Success : TaskStatus.Failure;\n            }\n            catch (error) {\n                console.error(`${conditionName}: 获取数值时发生错误:`, error);\n                return TaskStatus.Failure;\n            }\n        }, { name: conditionName });\n    }\n    /**\n     * 创建属性存在检查条件\n     * @param getProperty 获取属性的函数\n     * @param name 条件名称\n     * @returns 新的ExecuteActionConditional实例\n     */\n    static createPropertyExists(getProperty, name) {\n        return new ExecuteActionConditional((context) => {\n            try {\n                const property = getProperty(context);\n                return (property != null) ? TaskStatus.Success : TaskStatus.Failure;\n            }\n            catch (error) {\n                console.error(`${name || 'Property Check'}: 检查属性时发生错误:`, error);\n                return TaskStatus.Failure;\n            }\n        }, { name: name || 'Property Exists Check' });\n    }\n    /**\n     * 创建组合条件(AND逻辑)\n     * @param conditions 条件函数数组\n     * @param name 条件名称\n     * @returns 新的ExecuteActionConditional实例\n     */\n    static createAnd(conditions, name) {\n        return new ExecuteActionConditional((context) => {\n            for (const condition of conditions) {\n                if (!condition(context)) {\n                    return TaskStatus.Failure;\n                }\n            }\n            return TaskStatus.Success;\n        }, { name: name || 'AND Condition' });\n    }\n    /**\n     * 创建组合条件(OR逻辑)\n     * @param conditions 条件函数数组\n     * @param name 条件名称\n     * @returns 新的ExecuteActionConditional实例\n     */\n    static createOr(conditions, name) {\n        return new ExecuteActionConditional((context) => {\n            for (const condition of conditions) {\n                if (condition(context)) {\n                    return TaskStatus.Success;\n                }\n            }\n            return TaskStatus.Failure;\n        }, { name: name || 'OR Condition' });\n    }\n}\n//# sourceMappingURL=ExecuteActionConditional.js.map","import { Blackboard } from '../Blackboard';\nimport { TaskStatus } from '../TaskStatus';\n/**\n * 黑板比较操作符\n */\nexport var CompareOperator;\n(function (CompareOperator) {\n    CompareOperator[\"Equal\"] = \"equal\";\n    CompareOperator[\"NotEqual\"] = \"notEqual\";\n    CompareOperator[\"Greater\"] = \"greater\";\n    CompareOperator[\"GreaterOrEqual\"] = \"greaterOrEqual\";\n    CompareOperator[\"Less\"] = \"less\";\n    CompareOperator[\"LessOrEqual\"] = \"lessOrEqual\";\n    CompareOperator[\"Contains\"] = \"contains\";\n    CompareOperator[\"NotContains\"] = \"notContains\";\n})(CompareOperator || (CompareOperator = {}));\n/**\n * 黑板值比较条件\n *\n * @description 比较黑板变量与指定值或另一个黑板变量\n *\n * @example\n * ```typescript\n * // 检查玩家生命值是否大于50\n * const healthCheck = new BlackboardValueComparison<GameContext>(\n *   'playerHealth',\n *   CompareOperator.Greater,\n *   50\n * );\n *\n * // 比较两个黑板变量\n * const compareVars = new BlackboardValueComparison<GameContext>(\n *   'playerHealth',\n *   CompareOperator.Greater,\n *   null,\n *   'enemyHealth'\n * );\n * ```\n */\nexport class BlackboardValueComparison {\n    constructor(variableName, operator, compareValue = null, compareVariable) {\n        this.discriminator = 'IConditional';\n        this.variableName = variableName;\n        this.operator = operator;\n        this.compareValue = compareValue;\n        this.compareVariable = compareVariable;\n    }\n    /**\n     * 检查条件是否满足\n     */\n    update(context) {\n        const blackboard = context.blackboard;\n        if (!blackboard || !(blackboard instanceof Blackboard)) {\n            console.warn('BlackboardValueComparison: 上下文中未找到Blackboard实例');\n            return TaskStatus.Failure;\n        }\n        if (!blackboard.hasVariable(this.variableName)) {\n            console.warn(`BlackboardValueComparison: 变量 \"${this.variableName}\" 不存在`);\n            return TaskStatus.Failure;\n        }\n        const leftValue = blackboard.getValue(this.variableName);\n        let rightValue;\n        if (this.compareVariable) {\n            if (!blackboard.hasVariable(this.compareVariable)) {\n                console.warn(`BlackboardValueComparison: 比较变量 \"${this.compareVariable}\" 不存在`);\n                return TaskStatus.Failure;\n            }\n            rightValue = blackboard.getValue(this.compareVariable);\n        }\n        else {\n            rightValue = this.compareValue;\n        }\n        const result = this._performComparison(leftValue, rightValue, this.operator);\n        return result ? TaskStatus.Success : TaskStatus.Failure;\n    }\n    /**\n     * 执行比较操作\n     */\n    _performComparison(left, right, operator) {\n        switch (operator) {\n            case CompareOperator.Equal:\n                return left === right;\n            case CompareOperator.NotEqual:\n                return left !== right;\n            case CompareOperator.Greater:\n                return typeof left === 'number' && typeof right === 'number' && left > right;\n            case CompareOperator.GreaterOrEqual:\n                return typeof left === 'number' && typeof right === 'number' && left >= right;\n            case CompareOperator.Less:\n                return typeof left === 'number' && typeof right === 'number' && left < right;\n            case CompareOperator.LessOrEqual:\n                return typeof left === 'number' && typeof right === 'number' && left <= right;\n            case CompareOperator.Contains:\n                if (typeof left === 'string' && typeof right === 'string') {\n                    return left.includes(right);\n                }\n                if (Array.isArray(left)) {\n                    return left.includes(right);\n                }\n                return false;\n            case CompareOperator.NotContains:\n                if (typeof left === 'string' && typeof right === 'string') {\n                    return !left.includes(right);\n                }\n                if (Array.isArray(left)) {\n                    return !left.includes(right);\n                }\n                return true;\n            default:\n                return false;\n        }\n    }\n}\n/**\n * 黑板变量存在性检查\n *\n * @description 检查指定的黑板变量是否存在且不为null/undefined\n */\nexport class BlackboardVariableExists {\n    constructor(variableName, invert = false) {\n        this.discriminator = 'IConditional';\n        this.variableName = variableName;\n        this.invert = invert;\n    }\n    update(context) {\n        const blackboard = context.blackboard;\n        if (!blackboard || !(blackboard instanceof Blackboard)) {\n            console.warn('BlackboardVariableExists: 上下文中未找到Blackboard实例');\n            return this.invert ? TaskStatus.Success : TaskStatus.Failure;\n        }\n        const exists = blackboard.hasVariable(this.variableName);\n        const value = exists ? blackboard.getValue(this.variableName) : undefined;\n        const isValid = exists && value !== null && value !== undefined;\n        const result = this.invert ? !isValid : isValid;\n        return result ? TaskStatus.Success : TaskStatus.Failure;\n    }\n}\n/**\n * 黑板变量类型检查\n *\n * @description 检查黑板变量是否为指定类型\n */\nexport class BlackboardVariableTypeCheck {\n    constructor(variableName, expectedType) {\n        this.discriminator = 'IConditional';\n        this.variableName = variableName;\n        this.expectedType = expectedType;\n    }\n    update(context) {\n        const blackboard = context.blackboard;\n        if (!blackboard || !(blackboard instanceof Blackboard)) {\n            console.warn('BlackboardVariableTypeCheck: 上下文中未找到Blackboard实例');\n            return TaskStatus.Failure;\n        }\n        const variableDefinition = blackboard.getVariableDefinition(this.variableName);\n        if (!variableDefinition) {\n            return TaskStatus.Failure;\n        }\n        const result = variableDefinition.type === this.expectedType;\n        return result ? TaskStatus.Success : TaskStatus.Failure;\n    }\n}\n/**\n * 黑板变量范围检查\n *\n * @description 检查数值型黑板变量是否在指定范围内\n */\nexport class BlackboardVariableRangeCheck {\n    constructor(variableName, minValue, maxValue) {\n        this.discriminator = 'IConditional';\n        this.variableName = variableName;\n        this.minValue = minValue;\n        this.maxValue = maxValue;\n    }\n    update(context) {\n        const blackboard = context.blackboard;\n        if (!blackboard || !(blackboard instanceof Blackboard)) {\n            console.warn('BlackboardVariableRangeCheck: 上下文中未找到Blackboard实例');\n            return TaskStatus.Failure;\n        }\n        if (!blackboard.hasVariable(this.variableName)) {\n            return TaskStatus.Failure;\n        }\n        const value = blackboard.getValue(this.variableName);\n        if (typeof value !== 'number') {\n            return TaskStatus.Failure;\n        }\n        const result = value >= this.minValue && value <= this.maxValue;\n        return result ? TaskStatus.Success : TaskStatus.Failure;\n    }\n}\n//# sourceMappingURL=BlackboardConditionals.js.map","import { ExecuteActionConditional } from '../conditionals/ExecuteActionConditional';\nimport { BlackboardValueComparison, CompareOperator } from '../conditionals/BlackboardConditionals';\nimport { TaskStatus } from '../TaskStatus';\n/**\n * 条件处理器工厂类\n * @description 专门负责创建各种类型的条件节点,保持代码整洁和可维护性\n */\nexport class ConditionFactory {\n    /**\n     * 从条件配置创建条件节点\n     * @param condition 条件配置\n     * @param nodeProperties 父节点的属性(用于条件装饰器)\n     * @param context 执行上下文\n     * @returns 条件节点实例\n     */\n    static createCondition(condition, nodeProperties = {}, context) {\n        if (!condition) {\n            return new ExecuteActionConditional(() => TaskStatus.Success);\n        }\n        switch (condition.type) {\n            case 'blackboard-value-comparison':\n                return ConditionFactory.createBlackboardComparison(nodeProperties);\n            case 'condition-custom':\n                return ConditionFactory.createCustomCondition(condition.properties || nodeProperties);\n            case 'event-condition':\n                return ConditionFactory.createEventCondition(condition.properties || nodeProperties, context);\n            default:\n                console.warn(`未知的条件类型: ${condition.type},使用默认成功条件`);\n                return new ExecuteActionConditional(() => TaskStatus.Success);\n        }\n    }\n    /**\n     * 创建黑板值比较条件\n     * @param properties 节点属性\n     * @returns 黑板比较条件实例\n     */\n    static createBlackboardComparison(properties) {\n        // 提取嵌套的属性值\n        const variableName = ConditionFactory.extractNestedValue(properties.variableName) || 'variable';\n        const operator = ConditionFactory.extractNestedValue(properties.operator) || 'equal';\n        const compareValue = ConditionFactory.extractNestedValue(properties.compareValue);\n        const compareVariable = ConditionFactory.extractNestedValue(properties.compareVariable);\n        // 映射操作符字符串到枚举\n        const operatorEnum = ConditionFactory.mapOperatorToEnum(operator);\n        // 处理黑板变量引用(如 \"{{variableName}}\")\n        const cleanVariableName = ConditionFactory.cleanVariableName(variableName);\n        const cleanCompareVariable = compareVariable ? ConditionFactory.cleanVariableName(compareVariable) : undefined;\n        // 处理类型转换 - 特别是布尔值的字符串表示\n        let processedCompareValue = compareValue;\n        if (typeof compareValue === 'string') {\n            // 如果比较值是字符串,尝试转换为对应的类型\n            if (compareValue.toLowerCase() === 'true') {\n                processedCompareValue = true;\n            }\n            else if (compareValue.toLowerCase() === 'false') {\n                processedCompareValue = false;\n            }\n            else if (!isNaN(Number(compareValue)) && compareValue.trim() !== '') {\n                // 如果是数字字符串,转换为数字\n                processedCompareValue = Number(compareValue);\n            }\n        }\n        return new BlackboardValueComparison(cleanVariableName, operatorEnum, processedCompareValue, cleanCompareVariable);\n    }\n    /**\n     * 创建自定义条件\n     * @param properties 条件属性\n     * @returns 自定义条件实例\n     */\n    static createCustomCondition(properties = {}) {\n        const conditionCodeConfig = properties.conditionCode;\n        const conditionCode = typeof conditionCodeConfig === 'string' ? conditionCodeConfig :\n            (typeof conditionCodeConfig === 'object' && conditionCodeConfig && 'value' in conditionCodeConfig ?\n                String(conditionCodeConfig.value) : undefined);\n        if (conditionCode && typeof conditionCode === 'string') {\n            try {\n                const condFunc = new Function('context', `\r\n                    try {\r\n                        return (${conditionCode})(context);\r\n                    } catch (error) {\r\n                        console.error('自定义条件函数执行错误:', error);\r\n                        return false;\r\n                    }\r\n                `);\n                return new ExecuteActionConditional((ctx) => {\n                    try {\n                        const result = condFunc(ctx);\n                        return result ? TaskStatus.Success : TaskStatus.Failure;\n                    }\n                    catch (error) {\n                        console.error('自定义条件函数执行失败:', error);\n                        return TaskStatus.Failure;\n                    }\n                });\n            }\n            catch (error) {\n                console.warn('解析自定义条件函数失败:', error);\n            }\n        }\n        return new ExecuteActionConditional(() => TaskStatus.Failure);\n    }\n    /**\n     * 创建事件条件\n     * @param properties 条件属性\n     * @param context 执行上下文\n     * @returns 事件条件实例\n     */\n    static createEventCondition(properties = {}, context) {\n        const eventName = ConditionFactory.extractNestedValue(properties.eventName);\n        if (!eventName || typeof eventName !== 'string') {\n            console.warn('[event-condition] 缺少有效的 eventName 属性');\n            return new ExecuteActionConditional(() => TaskStatus.Failure);\n        }\n        return new ExecuteActionConditional((ctx) => {\n            try {\n                // 从上下文中获取事件注册表\n                const eventRegistry = ctx.eventRegistry;\n                if (!eventRegistry) {\n                    console.warn(`[event-condition] 未找到事件注册表,请在执行上下文中提供 eventRegistry`);\n                    return TaskStatus.Failure;\n                }\n                // 获取条件处理器\n                const checker = eventRegistry.getConditionHandler ?\n                    eventRegistry.getConditionHandler(eventName) :\n                    eventRegistry.handlers?.get(eventName);\n                if (!checker) {\n                    console.warn(`[event-condition] 未找到条件处理器: ${eventName}`);\n                    return TaskStatus.Failure;\n                }\n                // 解析参数\n                let parameters = {};\n                const parametersValue = ConditionFactory.extractNestedValue(properties.parameters);\n                if (parametersValue) {\n                    if (typeof parametersValue === 'string') {\n                        try {\n                            parameters = JSON.parse(parametersValue);\n                        }\n                        catch (e) {\n                            console.warn(`[event-condition] 参数解析失败: ${parametersValue}`);\n                        }\n                    }\n                    else {\n                        parameters = parametersValue;\n                    }\n                    // 支持黑板变量替换\n                    const blackboard = ctx.blackboard;\n                    if (blackboard) {\n                        parameters = ConditionFactory.replaceBlackboardVariables(parameters, blackboard);\n                    }\n                }\n                // 执行条件检查\n                const result = checker(ctx, parameters);\n                // 处理异步结果\n                if (result instanceof Promise) {\n                    console.warn(`[event-condition] 条件 ${eventName} 返回Promise,条件节点不支持异步操作`);\n                    return TaskStatus.Failure;\n                }\n                return result ? TaskStatus.Success : TaskStatus.Failure;\n            }\n            catch (error) {\n                console.error(`[event-condition] 条件 ${eventName} 检查失败:`, error);\n                return TaskStatus.Failure;\n            }\n        });\n    }\n    /**\n     * 映射操作符字符串到枚举\n     * @param operator 操作符字符串\n     * @returns 操作符枚举值\n     */\n    static mapOperatorToEnum(operator) {\n        switch (operator.toLowerCase()) {\n            case 'equal': return CompareOperator.Equal;\n            case 'notequal':\n            case 'not_equal': return CompareOperator.NotEqual;\n            case 'greater': return CompareOperator.Greater;\n            case 'greaterorequal':\n            case 'greater_or_equal': return CompareOperator.GreaterOrEqual;\n            case 'less': return CompareOperator.Less;\n            case 'lessorequal':\n            case 'less_or_equal': return CompareOperator.LessOrEqual;\n            case 'contains': return CompareOperator.Contains;\n            case 'notcontains':\n            case 'not_contains': return CompareOperator.NotContains;\n            default: return CompareOperator.Equal;\n        }\n    }\n    /**\n     * 清理变量名,移除黑板变量引用语法\n     * @param variableName 原始变量名\n     * @returns 清理后的变量名\n     */\n    static cleanVariableName(variableName) {\n        if (typeof variableName !== 'string') {\n            return String(variableName);\n        }\n        return variableName.replace(/^\\{\\{|\\}\\}$/g, '');\n    }\n    /**\n     * 提取嵌套属性值\n     * @description 处理编辑器生成的嵌套属性结构\n     * @param prop 属性配置对象或直接值\n     * @returns 提取的值\n     */\n    static extractNestedValue(prop) {\n        if (prop === null || prop === undefined) {\n            return prop;\n        }\n        // 如果是简单值,直接返回\n        if (typeof prop !== 'object') {\n            return prop;\n        }\n        // 如果有value属性,递归提取\n        if ('value' in prop) {\n            return ConditionFactory.extractNestedValue(prop.value);\n        }\n        return prop;\n    }\n    /**\n     * 替换黑板变量引用\n     * @param obj 要处理的对象\n     * @param blackboard 黑板实例\n     * @returns 处理后的对象\n     */\n    static replaceBlackboardVariables(obj, blackboard) {\n        if (typeof obj === 'string') {\n            // 匹配 {{variableName}} 格式的变量引用\n            return obj.replace(/\\{\\{([^}]+)\\}\\}/g, (match, variableName) => {\n                const value = blackboard.get ? blackboard.get(variableName) : blackboard[variableName];\n                return value !== undefined ? value : match;\n            });\n        }\n        else if (Array.isArray(obj)) {\n            return obj.map(item => ConditionFactory.replaceBlackboardVariables(item, blackboard));\n        }\n        else if (obj && typeof obj === 'object') {\n            const result = {};\n            for (const key in obj) {\n                if (obj.hasOwnProperty(key)) {\n                    result[key] = ConditionFactory.replaceBlackboardVariables(obj[key], blackboard);\n                }\n            }\n            return result;\n        }\n        return obj;\n    }\n}\n//# sourceMappingURL=ConditionFactory.js.map","import { Behavior } from '../Behavior';\nimport { TaskStatus } from '../TaskStatus';\n/**\n * 简单的任务,它将输出指定的文本并返回成功。 它可以用于调试。\n */\nexport class LogAction extends Behavior {\n    constructor(text) {\n        super();\n        /** 是否输出error还是log */\n        this.isError = false;\n        this.text = text;\n    }\n    update(_context) {\n        if (this.isError)\n            console.error(this.text);\n        else\n            console.log(this.text);\n        return TaskStatus.Success;\n    }\n}\n//# sourceMappingURL=LogAction.js.map","import { Behavior } from '../Behavior';\nimport { TaskStatus } from '../TaskStatus';\n/**\n * 类型守卫:检查对象是否包含时间信息\n * @param obj 要检查的对象\n * @returns 是否为时间上下文对象\n */\nfunction hasTimeContext(obj) {\n    return obj != null &&\n        typeof obj === 'object' &&\n        'deltaTime' in obj &&\n        typeof obj.deltaTime === 'number';\n}\n/**\n * 等待指定时间的行为节点\n *\n * @description\n * 在指定时间内返回Running状态,时间到达后返回Success状态。\n * 支持外部时间管理以提高性能。\n *\n * @template T 上下文类型\n *\n * @example\n * ```typescript\n * // 基本用法\n * const waitAction = new WaitAction<any>(2.0); // 等待2秒\n *\n * // 使用外部时间管理\n * interface GameContext extends ITimeContext {\n *   player: Player;\n *   deltaTime: number;\n * }\n * const waitAction = new WaitAction<GameContext>(1.5, true);\n * ```\n */\nexport class WaitAction extends Behavior {\n    /**\n     * 创建等待动作\n     * @param waitTime 等待时间(秒),必须大于0\n     * @param useExternalTime 是否使用外部时间管理,默认false\n     * @throws {Error} 当waitTime小于等于0时抛出错误\n     */\n    constructor(waitTime, useExternalTime = false) {\n        super();\n        /** 已等待的时间(秒) */\n        this._elapsedTime = 0;\n        /** 是否使用外部时间管理 */\n        this._useExternalTime = false;\n        /** 上次更新的时间戳(用于内部时间计算) */\n        this._lastUpdateTime = 0;\n        if (waitTime <= 0) {\n            throw new Error('等待时间必须大于0');\n        }\n        this.waitTime = waitTime;\n        this._useExternalTime = useExternalTime;\n    }\n    onStart() {\n        this._elapsedTime = 0;\n        this._lastUpdateTime = performance.now() / 1000;\n    }\n    /**\n     * 更新等待状态\n     * @param context 上下文对象,如果包含deltaTime属性则使用外部时间\n     * @returns 当前执行状态\n     */\n    update(context) {\n        let deltaTime;\n        if (this._useExternalTime && hasTimeContext(context)) {\n            // 使用外部提供的deltaTime\n            deltaTime = context.deltaTime;\n            // 验证deltaTime的有效性\n            if (deltaTime < 0 || !isFinite(deltaTime)) {\n                console.warn('WaitAction: 无效的deltaTime值,回退到内部时间计算');\n                deltaTime = this._calculateInternalDeltaTime();\n            }\n        }\n        else {\n            // 使用内部时间计算\n            deltaTime = this._calculateInternalDeltaTime();\n        }\n        this._elapsedTime += deltaTime;\n        if (this._elapsedTime >= this.waitTime) {\n            return TaskStatus.Success;\n        }\n        return TaskStatus.Running;\n    }\n    /**\n     * 计算内部时间差\n     * @returns 时间差(秒)\n     */\n    _calculateInternalDeltaTime() {\n        const currentTime = performance.now() / 1000;\n        const deltaTime = currentTime - this._lastUpdateTime;\n        this._lastUpdateTime = currentTime;\n        // 防止异常大的时间跳跃(比如页面失焦后恢复)\n        return Math.min(deltaTime, 0.1); // 最大100ms\n    }\n    /**\n     * 获取等待进度(0-1)\n     * @returns 当前进度百分比\n     */\n    getProgress() {\n        return Math.min(this._elapsedTime / this.waitTime, 1.0);\n    }\n    /**\n     * 获取剩余等待时间\n     * @returns 剩余时间(秒)\n     */\n    getRemainingTime() {\n        return Math.max(this.waitTime - this._elapsedTime, 0);\n    }\n    /**\n     * 设置新的等待时间\n     * @param newWaitTime 新的等待时间(秒)\n     * @param resetProgress 是否重置当前进度,默认false\n     * @throws {Error} 当newWaitTime小于等于0时抛出错误\n     */\n    setWaitTime(newWaitTime, resetProgress = false) {\n        if (newWaitTime <= 0) {\n            throw new Error('等待时间必须大于0');\n        }\n        this.waitTime = newWaitTime;\n        if (resetProgress) {\n            this._elapsedTime = 0;\n            this._lastUpdateTime = performance.now() / 1000;\n        }\n    }\n    /**\n     * 检查是否已完成等待\n     * @returns 是否已完成\n     */\n    isCompleted() {\n        return this._elapsedTime >= this.waitTime;\n    }\n}\n//# sourceMappingURL=WaitAction.js.map","import { Behavior } from '../Behavior';\nimport { TaskStatus } from '../TaskStatus';\n/**\n * 作为子项运行整个BehaviorTree并返回成功\n */\nexport class BehaviorTreeReference extends Behavior {\n    constructor(tree) {\n        super();\n        this._childTree = tree;\n    }\n    update(_context) {\n        this._childTree.tick();\n        return TaskStatus.Success;\n    }\n}\n//# sourceMappingURL=BehaviorTreeReference.js.map","import { Decorator } from './Decorator';\nimport { TaskStatus } from '../TaskStatus';\nimport { isIConditional } from '../conditionals/IConditional';\nimport { AbortTypes } from '../composites/AbortTypes';\n/**\n * 装饰器,只有在满足条件的情况下才会运行其子程序。\n * 默认情况下,该条件将在每一次执行中被重新评估\n */\nexport class ConditionalDecorator extends Decorator {\n    constructor(conditional, shouldReevalute = true, abortType = AbortTypes.None) {\n        super();\n        this.discriminator = \"IConditional\";\n        /** 中止类型,决定节点在何种情况下会被中止 */\n        this.abortType = AbortTypes.None;\n        this._conditionalStatus = TaskStatus.Invalid;\n        if (!isIConditional(conditional)) {\n            throw new Error(\"conditional 必须继承 IConditional\");\n        }\n        this._conditional = conditional;\n        this._shouldReevaluate = shouldReevalute;\n        this.abortType = abortType;\n    }\n    invalidate() {\n        super.invalidate();\n        this._conditionalStatus = TaskStatus.Invalid;\n    }\n    onStart() {\n        this._conditionalStatus = TaskStatus.Invalid;\n    }\n    update(context) {\n        if (!this.child) {\n            throw new Error(\"child不能为空\");\n        }\n        // 如果子节点正在运行且shouldReevaluate为false,直接继续执行子节点\n        if (!this._shouldReevaluate && this.child.status === TaskStatus.Running) {\n            return this.child.tick(context);\n        }\n        // 否则正常评估条件\n        this._conditionalStatus = this.executeConditional(context);\n        if (this._conditionalStatus == TaskStatus.Success) {\n            const childStatus = this.child.tick(context);\n            return childStatus;\n        }\n        return TaskStatus.Failure;\n    }\n    /**\n     * 在shouldReevaluate标志之后执行条件,或者用一个选项来强制更新。\n     * 终止将强制更新,以确保他们在条件变化时得到适当的数据。\n     */\n    executeConditional(context, forceUpdate = false) {\n        if (forceUpdate || this._shouldReevaluate || this._conditionalStatus == TaskStatus.Invalid)\n            this._conditionalStatus = this._conditional.update(context);\n        return this._conditionalStatus;\n    }\n}\n//# sourceMappingURL=ConditionalDecorator.js.map","import { Decorator } from './Decorator';\nimport { TaskStatus } from '../TaskStatus';\n/**\n * 将总是返回失败,除了当子任务正在运行时\n */\nexport class AlwaysFail extends Decorator {\n    update(context) {\n        if (!this.child) {\n            throw new Error(\"child必须不能为空\");\n        }\n        let status = this.child.update(context);\n        if (status == TaskStatus.Running)\n            return TaskStatus.Running;\n        return TaskStatus.Failure;\n    }\n}\n//# sourceMappingURL=AlwaysFail.js.map","import { Decorator } from './Decorator';\nimport { TaskStatus } from '../TaskStatus';\n/**\n *  将总是返回成功,除了当子任务正在运行时\n */\nexport class AlwaysSucceed extends Decorator {\n    update(context) {\n        if (!this.child) {\n            throw new Error(\"child必须不能为空\");\n        }\n        let status = this.child.update(context);\n        if (status == TaskStatus.Running)\n            return TaskStatus.Running;\n        return TaskStatus.Success;\n    }\n}\n//# sourceMappingURL=AlwaysSucceed.js.map","import { Decorator } from './Decorator';\nimport { TaskStatus } from '../TaskStatus';\n/**\n * 反转结果的子节点\n */\nexport class Inverter extends Decorator {\n    update(context) {\n        if (!this.child) {\n            throw new Error(\"child必须不能为空\");\n        }\n        let status = this.child.tick(context);\n        if (status == TaskStatus.Success)\n            return TaskStatus.Failure;\n        if (status == TaskStatus.Failure)\n            return TaskStatus.Success;\n        return TaskStatus.Running;\n    }\n}\n//# sourceMappingURL=Inverter.js.map","import { Decorator } from './Decorator';\nimport { TaskStatus } from '../TaskStatus';\n/**\n * 重复执行装饰器\n *\n * @description\n * 重复执行其子节点,直到达到指定次数或条件满足。\n * 支持无限重复、失败时停止等多种模式。\n *\n * @template T 上下文类型\n *\n * @example\n * ```typescript\n * // 重复3次\n * const repeater = new Repeater<GameContext>(3);\n * repeater.child = new AttackAction();\n *\n * // 无限重复,失败时停止\n * const infiniteRepeater = new Repeater<GameContext>(-1, true);\n *\n * // 重复直到成功\n * const untilSuccess = Repeater.createUntilSuccess<GameContext>();\n * ```\n */\nexport class Repeater extends Decorator {\n    /**\n     * 创建重复装饰器\n     * @param count 重复次数,-1表示无限重复,必须是整数\n     * @param endOnFailure 子节点失败时是否停止,默认false\n     * @param endOnSuccess 子节点成功时是否停止,默认false\n     * @throws {Error} 当count不是有效整数时抛出错误\n     */\n    constructor(count, endOnFailure = false, endOnSuccess = false) {\n        super();\n        /** 当前已执行的迭代次数 */\n        this._iterationCount = 0;\n        /** 最后一次子节点的执行结果 */\n        this._lastChildStatus = TaskStatus.Invalid;\n        if (!Number.isInteger(count) || count < -1 || count === 0) {\n            throw new Error('重复次数必须是正整数或-1(无限重复)');\n        }\n        this.count = count;\n        this.endOnFailure = endOnFailure;\n        this.endOnSuccess = endOnSuccess;\n    }\n    /**\n     * 是否永远重复\n     */\n    get repeatForever() {\n        return this.count === -1;\n    }\n    /**\n     * 设置是否永远重复\n     */\n    set repeatForever(value) {\n        this.count = value ? -1 : Math.max(1, this.count);\n    }\n    onStart() {\n        this._iterationCount = 0;\n        this._lastChildStatus = TaskStatus.Invalid;\n    }\n    update(context) {\n        if (!this.child) {\n            throw new Error('子节点不能为空');\n        }\n        // 检查是否已经达到重复次数(非无限重复的情况)\n        if (!this.repeatForever && this._iterationCount >= this.count) {\n            return TaskStatus.Success;\n        }\n        // 执行子节点\n        const status = this.child.tick(context);\n        this._lastChildStatus = status;\n        // 如果子节点仍在运行,继续等待\n        if (status === TaskStatus.Running) {\n            return TaskStatus.Running;\n        }\n        // 子节点完成了一次执行\n        this._iterationCount++;\n        // 检查停止条件\n        if (this.endOnFailure && status === TaskStatus.Failure) {\n            return TaskStatus.Success;\n        }\n        if (this.endOnSuccess && status === TaskStatus.Success) {\n            return TaskStatus.Success;\n        }\n        // 检查是否已经达到重复次数\n        if (!this.repeatForever && this._iterationCount >= this.count) {\n            return TaskStatus.Success;\n        }\n        // 重置子节点状态以便下次执行\n        this.child.invalidate();\n        return TaskStatus.Running;\n    }\n    /**\n     * 获取当前执行次数\n     * @returns 已执行的次数\n     */\n    getIterationCount() {\n        return this._iterationCount;\n    }\n    /**\n     * 获取剩余执行次数\n     * @returns 剩余次数,无限重复时返回-1\n     */\n    getRemainingCount() {\n        if (this.repeatForever) {\n            return -1;\n        }\n        return Math.max(0, this.count - this._iterationCount);\n    }\n    /**\n     * 获取执行进度(0-1)\n     * @returns 进度百分比,无限重复时返回-1\n     */\n    getProgress() {\n        if (this.repeatForever) {\n            return -1;\n        }\n        return Math.min(this._iterationCount / this.count, 1.0);\n    }\n    /**\n     * 获取最后一次子节点的执行结果\n     * @returns 最后的执行状态\n     */\n    getLastChildStatus() {\n        return this._lastChildStatus;\n    }\n    /**\n     * 重置重复器状态\n     */\n    reset() {\n        this._iterationCount = 0;\n        this._lastChildStatus = TaskStatus.Invalid;\n        if (this.child) {\n            this.child.invalidate();\n        }\n    }\n    /**\n     * 创建一个重复直到成功的装饰器\n     * @param maxAttempts 最大尝试次数,-1表示无限\n     * @returns 新的Repeater实例\n     */\n    static createUntilSuccess(maxAttempts = -1) {\n        return new Repeater(maxAttempts, false, true);\n    }\n    /**\n     * 创建一个重复直到失败的装饰器\n     * @param maxAttempts 最大尝试次数,-1表示无限\n     * @returns 新的Repeater实例\n     */\n    static createUntilFailure(maxAttempts = -1) {\n        return new Repeater(maxAttempts, true, false);\n    }\n    /**\n     * 创建一个无限重复的装饰器\n     * @returns 新的Repeater实例\n     */\n    static createInfinite() {\n        return new Repeater(-1, false, false);\n    }\n}\n//# sourceMappingURL=Repeater.js.map","import { Decorator } from './Decorator';\nimport { TaskStatus } from '../TaskStatus';\n/**\n * 将继续执行其子任务,直到子任务返回失败\n */\nexport class UntilFail extends Decorator {\n    update(context) {\n        if (!this.child) {\n            throw new Error(\"child必须不为空\");\n        }\n        let status = this.child.update(context);\n        if (status != TaskStatus.Failure)\n            return TaskStatus.Running;\n        return TaskStatus.Success;\n    }\n}\n//# sourceMappingURL=UntilFail.js.map","import { Decorator } from './Decorator';\nimport { TaskStatus } from '../TaskStatus';\n/**\n * 将继续执行其子任务,直到子任务返回成功\n */\nexport class UntilSuccess extends Decorator {\n    update(context) {\n        if (!this.child) {\n            throw new Error(\"child必须不为空\");\n        }\n        let status = this.child.update(context);\n        if (status != TaskStatus.Success)\n            return TaskStatus.Running;\n        return TaskStatus.Success;\n    }\n}\n//# sourceMappingURL=UntilSuccess.js.map","import { Composite } from './Composite';\nimport { TaskStatus } from '../TaskStatus';\n/**\n * 并行组合器\n *\n * @description\n * 同时执行所有子节点,直到满足终止条件:\n * - 任何子节点失败时返回失败\n * - 所有子节点成功时返回成功\n * - 其他情况返回运行中\n *\n * @template T 上下文类型\n */\nexport class Parallel extends Composite {\n    constructor() {\n        super(...arguments);\n        /** 缓存的子节点数量,避免重复访问length属性*/\n        this._childCount = 0;\n    }\n    onStart() {\n        super.onStart();\n        this._childCount = this._children.length;\n    }\n    update(context) {\n        if (this._childCount === 0) {\n            return TaskStatus.Success;\n        }\n        let successCount = 0;\n        // 使用缓存的长度和提前退出优化\n        for (let i = 0; i < this._childCount; i++) {\n            const child = this._children[i];\n            child.tick(context);\n            const status = child.status;\n            // 提前退出:任何子节点失败立即返回失败\n            if (status === TaskStatus.Failure) {\n                return TaskStatus.Failure;\n            }\n            // 计数成功的子节点\n            if (status === TaskStatus.Success) {\n                successCount++;\n            }\n        }\n        // 所有子节点都成功\n        if (successCount === this._childCount) {\n            return TaskStatus.Success;\n        }\n        return TaskStatus.Running;\n    }\n    /**\n     * 添加子节点时更新缓存\n     */\n    addChild(child) {\n        super.addChild(child);\n        this._childCount = this._children.length;\n    }\n}\n//# sourceMappingURL=Parallel.js.map","import { Composite } from './Composite';\nimport { TaskStatus } from '../TaskStatus';\n/**\n * 并行选择器\n *\n * @description\n * 同时执行所有子节点,直到满足终止条件:\n * - 任何子节点成功时返回成功\n * - 所有子节点失败时返回失败\n * - 其他情况返回运行中\n *\n * @template T 上下文类型\n */\nexport class ParallelSelector extends Composite {\n    constructor() {\n        super(...arguments);\n        /** 缓存的子节点数量,避免重复访问length属性*/\n        this._childCount = 0;\n    }\n    onStart() {\n        super.onStart();\n        this._childCount = this._children.length;\n    }\n    update(context) {\n        if (this._childCount === 0) {\n            return TaskStatus.Failure;\n        }\n        let failureCount = 0;\n        // 使用缓存的长度和提前退出优化\n        for (let i = 0; i < this._childCount; i++) {\n            const child = this._children[i];\n            child.tick(context);\n            const status = child.status;\n            // 提前退出:任何子节点成功立即返回成功\n            if (status === TaskStatus.Success) {\n                return TaskStatus.Success;\n            }\n            // 计数失败的子节点\n            if (status === TaskStatus.Failure) {\n                failureCount++;\n            }\n        }\n        // 所有子节点都失败\n        if (failureCount === this._childCount) {\n            return TaskStatus.Failure;\n        }\n        return TaskStatus.Running;\n    }\n    /**\n     * 添加子节点时更新缓存\n     */\n    addChild(child) {\n        super.addChild(child);\n        this._childCount = this._children.length;\n    }\n}\n//# sourceMappingURL=ParallelSelector.js.map","import { Composite } from './Composite';\nimport { TaskStatus } from '../TaskStatus';\nimport { AbortTypes, AbortTypesExt } from './AbortTypes';\n/**\n * 选择器组合器\n *\n * @description\n * 类似于逻辑\"或\"操作,按顺序执行子节点直到找到成功的节点:\n * - 任何子节点成功时返回成功\n * - 所有子节点失败时返回失败\n * - 子节点运行中时返回运行中\n *\n * @template T 上下文类型\n */\nexport class Selector extends Composite {\n    constructor(abortType = AbortTypes.None) {\n        super();\n        /** 缓存的子节点数量,避免重复访问length属性*/\n        this._childCount = 0;\n        this.abortType = abortType;\n    }\n    onStart() {\n        super.onStart();\n        this._childCount = this._children.length;\n        // 确保每次开始时都从第一个子节点开始\n        this._currentChildIndex = 0;\n    }\n    update(context) {\n        // 检查是否有子节点\n        if (this._childCount === 0) {\n            return TaskStatus.Failure;\n        }\n        // 处理条件性中止\n        if (this._currentChildIndex !== 0) {\n            this.handleConditionalAborts(context);\n        }\n        // 确保索引有效\n        if (this._currentChildIndex >= this._childCount) {\n            this._currentChildIndex = 0;\n            return TaskStatus.Failure;\n        }\n        const current = this._children[this._currentChildIndex];\n        const status = current.tick(context);\n        // 如果子节点成功或仍在运行,直接返回\n        if (status !== TaskStatus.Failure) {\n            return status;\n        }\n        this._currentChildIndex++;\n        // 如果已经是最后一个子节点,整个选择器失败\n        if (this._currentChildIndex >= this._childCount) {\n            this._currentChildIndex = 0;\n            return TaskStatus.Failure;\n        }\n        return TaskStatus.Running;\n    }\n    /**\n     * 重写invalidate方法,确保在节点无效化时重置索引\n     */\n    invalidate() {\n        super.invalidate();\n        this._currentChildIndex = 0;\n    }\n    /**\n     * 添加子节点时更新缓存\n     */\n    addChild(child) {\n        super.addChild(child);\n        this._childCount = this._children.length;\n    }\n    /**\n     * 处理条件性中止\n     */\n    handleConditionalAborts(context) {\n        // 检查低优先级任务的状态变化\n        if (this._hasLowerPriorityConditionalAbort) {\n            this.updateLowerPriorityAbortConditional(context, TaskStatus.Failure);\n        }\n        // 检查自中止条件\n        if (AbortTypesExt.has(this.abortType, AbortTypes.Self)) {\n            this.updateSelfAbortConditional(context, TaskStatus.Failure);\n        }\n    }\n}\n//# sourceMappingURL=Selector.js.map","import { Selector } from './Selector';\nimport { ArrayExt } from '../../core/ArrayExt';\nimport { AbortTypes } from './AbortTypes';\n/**\n * 随机选择器节点\n *\n * @description\n * 与Selector相同的执行逻辑,但在开始时会随机打乱子节点的执行顺序。\n * 适用于需要随机化选择优先级的场景,增加AI决策的多样性。\n *\n * @template T 上下文类型\n *\n * @example\n * ```typescript\n * // 创建一个随机选择攻击方式的选择器\n * const randomAttack = new RandomSelector<GameContext>();\n * randomAttack.addChild(new MeleeAttack());\n * randomAttack.addChild(new RangedAttack());\n * randomAttack.addChild(new SpecialAttack());\n * // 每次执行时,攻击方式的优先级都会被随机打乱\n * ```\n */\nexport class RandomSelector extends Selector {\n    /**\n     * 创建随机选择器节点\n     * @param abortType 中止类型,默认为None\n     * @param reshuffleOnRestart 是否在每次重新开始时都重新洗牌,默认true\n     */\n    constructor(abortType = AbortTypes.None, reshuffleOnRestart = true) {\n        super(abortType);\n        /** 原始子节点顺序的备份 */\n        this._originalOrder = null;\n        this._reshuffleOnRestart = reshuffleOnRestart;\n    }\n    /**\n     * 节点开始时的处理\n     * 随机打乱子节点顺序\n     */\n    onStart() {\n        // 首先调用父类的onStart方法,重置_currentChildIndex\n        super.onStart();\n        // 备份原始顺序(仅在第一次时)\n        if (this._originalOrder === null && this._children.length > 0) {\n            this._originalOrder = [...this._children];\n        }\n        // 只有在有多个子节点时才进行洗牌\n        if (this._children.length > 1) {\n            try {\n                ArrayExt.shuffle(this._children);\n            }\n            catch (error) {\n                console.error('RandomSelector: 洗牌子节点时发生错误:', error);\n                // 如果洗牌失败,恢复原始顺序\n                if (this._originalOrder) {\n                    this._children = [...this._originalOrder];\n                }\n            }\n        }\n    }\n    /**\n     * 重置节点状态\n     * 如果启用了reshuffleOnRestart,会在下次开始时重新洗牌\n     */\n    invalidate() {\n        super.invalidate();\n        // 如果不需要每次重启都洗牌,恢复原始顺序\n        if (!this._reshuffleOnRestart && this._originalOrder) {\n            this._children = [...this._originalOrder];\n        }\n    }\n    /**\n     * 设置是否在重新开始时重新洗牌\n     * @param enabled 是否启用\n     */\n    setReshuffleOnRestart(enabled) {\n        this._reshuffleOnRestart = enabled;\n    }\n    /**\n     * 获取是否在重新开始时重新洗牌\n     * @returns 当前设置\n     */\n    getReshuffleOnRestart() {\n        return this._reshuffleOnRestart;\n    }\n    /**\n     * 恢复原始子节点顺序\n     * @description 将子节点顺序恢复到添加时的原始顺序\n     */\n    restoreOriginalOrder() {\n        if (this._originalOrder) {\n            this._children = [...this._originalOrder];\n        }\n    }\n    /**\n     * 手动重新洗牌子节点\n     * @description 立即重新洗牌子节点顺序,不等待下次开始\n     */\n    reshuffleNow() {\n        if (this._children.length > 1) {\n            try {\n                ArrayExt.shuffle(this._children);\n            }\n            catch (error) {\n                console.error('RandomSelector: 手动洗牌时发生错误', error);\n            }\n        }\n    }\n}\n//# sourceMappingURL=RandomSelector.js.map","import { Composite } from './Composite';\nimport { TaskStatus } from '../TaskStatus';\nimport { AbortTypes, AbortTypesExt } from './AbortTypes';\n/**\n * 序列组合器\n *\n * @description\n * 类似于逻辑\"与\"操作,按顺序执行子节点直到所有节点成功:\n * - 任何子节点失败时返回失败\n * - 所有子节点成功时返回成功\n * - 子节点运行中时返回运行中\n *\n * @template T 上下文类型\n */\nexport class Sequence extends Composite {\n    constructor(abortType = AbortTypes.None) {\n        super();\n        /** 缓存的子节点数量,避免重复访问length属性*/\n        this._childCount = 0;\n        this.abortType = abortType;\n    }\n    onStart() {\n        super.onStart();\n        this._childCount = this._children.length;\n        // 确保每次开始时都从第一个子节点开始\n        this._currentChildIndex = 0;\n    }\n    update(context) {\n        // 检查是否有子节点\n        if (this._childCount === 0) {\n            return TaskStatus.Success;\n        }\n        // 处理条件性中止\n        if (this._currentChildIndex !== 0) {\n            this.handleConditionalAborts(context);\n        }\n        // 确保索引有效\n        if (this._currentChildIndex >= this._childCount) {\n            this._currentChildIndex = 0;\n            return TaskStatus.Success;\n        }\n        const current = this._children[this._currentChildIndex];\n        const status = current.tick(context);\n        // 如果子节点失败或仍在运行,直接返回\n        if (status !== TaskStatus.Success) {\n            return status;\n        }\n        this._currentChildIndex++;\n        // 如果已经是最后一个子节点,整个序列成功\n        if (this._currentChildIndex >= this._childCount) {\n            this._currentChildIndex = 0;\n            return TaskStatus.Success;\n        }\n        return TaskStatus.Running;\n    }\n    /**\n     * 重写invalidate方法,确保在节点无效化时重置索引\n     */\n    invalidate() {\n        super.invalidate();\n        this._currentChildIndex = 0;\n    }\n    /**\n     * 添加子节点时更新缓存\n     */\n    addChild(child) {\n        super.addChild(child);\n        this._childCount = this._children.length;\n    }\n    /**\n     * 处理条件性中止\n     */\n    handleConditionalAborts(context) {\n        // 检查低优先级任务的状态变化\n        if (this._hasLowerPriorityConditionalAbort) {\n            this.updateLowerPriorityAbortConditional(context, TaskStatus.Success);\n        }\n        // 检查自中止条件\n        if (AbortTypesExt.has(this.abortType, AbortTypes.Self)) {\n            this.updateSelfAbortConditional(context, TaskStatus.Success);\n        }\n    }\n}\n//# sourceMappingURL=Sequence.js.map","import { Sequence } from './Sequence';\nimport { ArrayExt } from '../../core/ArrayExt';\nimport { AbortTypes } from './AbortTypes';\n/**\n * 随机序列节点\n *\n * @description\n * 与Sequence相同的执行逻辑,但在开始时会随机打乱子节点的执行顺序。\n * 适用于需要随机化行为执行顺序的场景,增加AI行为的不可预测性。\n *\n * @template T 上下文类型\n *\n * @example\n * ```typescript\n * // 创建一个随机执行巡逻点的序列\n * const randomPatrol = new RandomSequence<GameContext>();\n * randomPatrol.addChild(new MoveToPoint(point1));\n * randomPatrol.addChild(new MoveToPoint(point2));\n * randomPatrol.addChild(new MoveToPoint(point3));\n * // 每次执行时,巡逻点的顺序都会被随机打乱\n * ```\n */\nexport class RandomSequence extends Sequence {\n    /**\n     * 创建随机序列节点\n     * @param abortType 中止类型,默认为None\n     * @param reshuffleOnRestart 是否在每次重新开始时都重新洗牌,默认true\n     */\n    constructor(abortType = AbortTypes.None, reshuffleOnRestart = true) {\n        super(abortType);\n        /** 原始子节点顺序的备份 */\n        this._originalOrder = null;\n        this._reshuffleOnRestart = reshuffleOnRestart;\n    }\n    /**\n     * 节点开始时的处理\n     * 随机打乱子节点顺序\n     */\n    onStart() {\n        // 首先调用父类的onStart方法,重置_currentChildIndex\n        super.onStart();\n        // 备份原始顺序(仅在第一次时)\n        if (this._originalOrder === null && this._children.length > 0) {\n            this._originalOrder = [...this._children];\n        }\n        // 只有在有多个子节点时才进行洗牌\n        if (this._children.length > 1) {\n            try {\n                ArrayExt.shuffle(this._children);\n            }\n            catch (error) {\n                console.error('RandomSequence: 洗牌子节点时发生错误:', error);\n                // 如果洗牌失败,恢复原始顺序\n                if (this._originalOrder) {\n                    this._children = [...this._originalOrder];\n                }\n            }\n        }\n    }\n    /**\n     * 重置节点状态\n     * 如果启用了reshuffleOnRestart,会在下次开始时重新洗牌\n     */\n    invalidate() {\n        super.invalidate();\n        // 如果不需要每次重启都洗牌,恢复原始顺序\n        if (!this._reshuffleOnRestart && this._originalOrder) {\n            this._children = [...this._originalOrder];\n        }\n    }\n    /**\n     * 设置是否在重新开始时重新洗牌\n     * @param enabled 是否启用\n     */\n    setReshuffleOnRestart(enabled) {\n        this._reshuffleOnRestart = enabled;\n    }\n    /**\n     * 获取是否在重新开始时重新洗牌\n     * @returns 当前设置\n     */\n    getReshuffleOnRestart() {\n        return this._reshuffleOnRestart;\n    }\n    /**\n     * 恢复原始子节点顺序\n     * @description 将子节点顺序恢复到添加时的原始顺序\n     */\n    restoreOriginalOrder() {\n        if (this._originalOrder) {\n            this._children = [...this._originalOrder];\n        }\n    }\n    /**\n     * 手动重新洗牌子节点\n     * @description 立即重新洗牌子节点顺序,不等待下次开始\n     */\n    reshuffleNow() {\n        if (this._children.length > 1) {\n            try {\n                ArrayExt.shuffle(this._children);\n            }\n            catch (error) {\n                console.error('RandomSequence: 手动洗牌时发生错误', error);\n            }\n        }\n    }\n}\n//# sourceMappingURL=RandomSequence.js.map","import { Behavior } from '../Behavior';\nimport { TaskStatus } from '../TaskStatus';\nimport { Blackboard, BlackboardValueType } from '../Blackboard';\n/**\n * 设置黑板变量值\n *\n * @description 将指定值或另一个黑板变量的值设置到目标变量\n *\n * @example\n * ```typescript\n * // 设置固定值\n * const setHealth = new SetBlackboardValue<GameContext>('playerHealth', 100);\n *\n * // 从另一个变量复制值\n * const copyValue = new SetBlackboardValue<GameContext>('targetHealth', null, 'playerHealth');\n * ```\n */\nexport class SetBlackboardValue extends Behavior {\n    constructor(variableName, value = null, sourceVariable, force = false) {\n        super();\n        this.variableName = variableName;\n        this.value = value;\n        this.sourceVariable = sourceVariable;\n        this.force = force;\n    }\n    update(context) {\n        const blackboard = context.blackboard;\n        if (!blackboard || !(blackboard instanceof Blackboard)) {\n            console.warn('SetBlackboardValue: 上下文中未找到Blackboard实例');\n            return TaskStatus.Failure;\n        }\n        let valueToSet;\n        if (this.sourceVariable) {\n            if (!blackboard.hasVariable(this.sourceVariable)) {\n                console.warn(`SetBlackboardValue: 源变量 \"${this.sourceVariable}\" 不存在`);\n                return TaskStatus.Failure;\n            }\n            valueToSet = blackboard.getValue(this.sourceVariable);\n        }\n        else {\n            valueToSet = this.value;\n            // 处理黑板变量引用,如 \"{{variableName}}\"\n            if (typeof valueToSet === 'string') {\n                // 检查是否是纯黑板变量引用(如 \"{{variableName}}\")\n                const pureVariableMatch = valueToSet.match(/^{{\\s*(\\w+)\\s*}}$/);\n                if (pureVariableMatch) {\n                    // 纯变量引用,返回原始类型的值\n                    const varName = pureVariableMatch[1];\n                    if (blackboard.hasVariable(varName)) {\n                        valueToSet = blackboard.getValue(varName);\n                    }\n                    else {\n                        console.warn(`SetBlackboardValue: 引用的变量 \"${varName}\" 不存在`);\n                        return TaskStatus.Failure;\n                    }\n                }\n                else {\n                    // 包含变量的字符串模板,进行字符串替换\n                    valueToSet = valueToSet.replace(/\\{\\{(\\w+)\\}\\}/g, (match, varName) => {\n                        if (blackboard.hasVariable(varName)) {\n                            const value = blackboard.getValue(varName);\n                            return value !== undefined ? String(value) : match;\n                        }\n                        return match;\n                    });\n                }\n            }\n        }\n        // 获取目标变量的类型定义,确保类型匹配\n        const targetVariableDef = blackboard.getVariableDefinition(this.variableName);\n        if (targetVariableDef && valueToSet !== null && valueToSet !== undefined) {\n            // 根据目标变量类型转换值\n            valueToSet = this.convertValueToTargetType(valueToSet, targetVariableDef.type);\n        }\n        const success = blackboard.setValue(this.variableName, valueToSet, this.force);\n        return success ? TaskStatus.Success : TaskStatus.Failure;\n    }\n    /**\n     * 将值转换为目标类型\n     */\n    convertValueToTargetType(value, targetType) {\n        if (value === null || value === undefined) {\n            return value;\n        }\n        // 处理枚举值和字符串值\n        const typeStr = targetType === BlackboardValueType.Number || targetType === 'number' ? 'number' :\n            targetType === BlackboardValueType.String || targetType === 'string' ? 'string' :\n                targetType === BlackboardValueType.Boolean || targetType === 'boolean' ? 'boolean' :\n                    'unknown';\n        // 如果已经是正确类型,直接返回\n        switch (typeStr) {\n            case 'string':\n                return typeof value === 'string' ? value : String(value);\n            case 'number':\n                if (typeof value === 'number')\n                    return value;\n                if (typeof value === 'string') {\n                    const num = parseFloat(value);\n                    return isNaN(num) ? 0 : num;\n                }\n                return Number(value) || 0;\n            case 'boolean':\n                if (typeof value === 'boolean')\n                    return value;\n                if (typeof value === 'string') {\n                    return value.toLowerCase() === 'true';\n                }\n                return Boolean(value);\n            default:\n                return value;\n        }\n    }\n}\n/**\n * 增加数值型黑板变量\n *\n * @description 将数值型变量增加指定的数值,支持从另一个变量获取增量\n */\nexport class AddToBlackboardValue extends Behavior {\n    constructor(variableName, increment, incrementVariable) {\n        super();\n        this.variableName = variableName;\n        this.increment = increment;\n        this.incrementVariable = incrementVariable;\n    }\n    update(context) {\n        const blackboard = context.blackboard;\n        if (!blackboard || !(blackboard instanceof Blackboard)) {\n            console.warn('AddToBlackboardValue: 上下文中未找到Blackboard实例');\n            return TaskStatus.Failure;\n        }\n        if (!blackboard.hasVariable(this.variableName)) {\n            console.warn(`AddToBlackboardValue: 变量 \"${this.variableName}\" 不存在`);\n            return TaskStatus.Failure;\n        }\n        const currentValue = blackboard.getValue(this.variableName);\n        if (typeof currentValue !== 'number') {\n            console.warn(`AddToBlackboardValue: 变量 \"${this.variableName}\" 不是数值类型`);\n            return TaskStatus.Failure;\n        }\n        let incrementValue;\n        if (this.incrementVariable) {\n            if (!blackboard.hasVariable(this.incrementVariable)) {\n                console.warn(`AddToBlackboardValue: 增量变量 \"${this.incrementVariable}\" 不存在`);\n                return TaskStatus.Failure;\n            }\n            incrementValue = blackboard.getValue(this.incrementVariable);\n            if (typeof incrementValue !== 'number') {\n                console.warn(`AddToBlackboardValue: 增量变量 \"${this.incrementVariable}\" 不是数值类型`);\n                return TaskStatus.Failure;\n            }\n        }\n        else {\n            incrementValue = this.increment;\n        }\n        const newValue = currentValue + incrementValue;\n        const success = blackboard.setValue(this.variableName, newValue);\n        return success ? TaskStatus.Success : TaskStatus.Failure;\n    }\n}\n/**\n * 切换布尔型黑板变量\n *\n * @description 将布尔型变量的值取反\n */\nexport class ToggleBlackboardBool extends Behavior {\n    constructor(variableName) {\n        super();\n        this.variableName = variableName;\n    }\n    update(context) {\n        const blackboard = context.blackboard;\n        if (!blackboard || !(blackboard instanceof Blackboard)) {\n            console.warn('ToggleBlackboardBool: 上下文中未找到Blackboard实例');\n            return TaskStatus.Failure;\n        }\n        if (!blackboard.hasVariable(this.variableName)) {\n            console.warn(`ToggleBlackboardBool: 变量 \"${this.variableName}\" 不存在`);\n            return TaskStatus.Failure;\n        }\n        const currentValue = blackboard.getValue(this.variableName);\n        if (typeof currentValue !== 'boolean') {\n            console.warn(`ToggleBlackboardBool: 变量 \"${this.variableName}\" 不是布尔类型`);\n            return TaskStatus.Failure;\n        }\n        const success = blackboard.setValue(this.variableName, !currentValue);\n        return success ? TaskStatus.Success : TaskStatus.Failure;\n    }\n}\n/**\n * 重置黑板变量到默认值\n *\n * @description 将指定变量重置为其定义时的默认值\n */\nexport class ResetBlackboardVariable extends Behavior {\n    constructor(variableName) {\n        super();\n        this.variableName = variableName;\n    }\n    update(context) {\n        const blackboard = context.blackboard;\n        if (!blackboard || !(blackboard instanceof Blackboard)) {\n            console.warn('ResetBlackboardVariable: 上下文中未找到Blackboard实例');\n            return TaskStatus.Failure;\n        }\n        const success = blackboard.resetVariable(this.variableName);\n        return success ? TaskStatus.Success : TaskStatus.Failure;\n    }\n}\n/**\n * 等待黑板变量满足条件\n *\n * @description 等待指定的黑板变量满足某个条件,常用于同步操作\n */\nexport class WaitForBlackboardCondition extends Behavior {\n    constructor(variableName, expectedValue, compareFn) {\n        super();\n        this.variableName = variableName;\n        this.expectedValue = expectedValue;\n        this.compareFn = compareFn;\n    }\n    update(context) {\n        const blackboard = context.blackboard;\n        if (!blackboard || !(blackboard instanceof Blackboard)) {\n            console.warn('WaitForBlackboardCondition: 上下文中未找到Blackboard实例');\n            return TaskStatus.Failure;\n        }\n        if (!blackboard.hasVariable(this.variableName)) {\n            console.warn(`WaitForBlackboardCondition: 变量 \"${this.variableName}\" 不存在`);\n            return TaskStatus.Failure;\n        }\n        const currentValue = blackboard.getValue(this.variableName);\n        let conditionMet;\n        if (this.compareFn) {\n            conditionMet = this.compareFn(currentValue, this.expectedValue);\n        }\n        else {\n            conditionMet = currentValue === this.expectedValue;\n        }\n        return conditionMet ? TaskStatus.Success : TaskStatus.Running;\n    }\n}\n/**\n * 记录黑板变量到控制台\n *\n * @description 将黑板变量的当前值记录到控制台,用于调试\n */\nexport class LogBlackboardValue extends Behavior {\n    constructor(variableName, prefix = '[Blackboard]') {\n        super();\n        this.variableName = variableName;\n        this.prefix = prefix;\n    }\n    update(context) {\n        const blackboard = context.blackboard;\n        if (!blackboard || !(blackboard instanceof Blackboard)) {\n            console.warn('LogBlackboardValue: 上下文中未找到Blackboard实例');\n            return TaskStatus.Failure;\n        }\n        if (!blackboard.hasVariable(this.variableName)) {\n            console.warn(`LogBlackboardValue: 变量 \"${this.variableName}\" 不存在`);\n            return TaskStatus.Failure;\n        }\n        const value = blackboard.getValue(this.variableName);\n        const variableDefinition = blackboard.getVariableDefinition(this.variableName);\n        console.log(`${this.prefix} ${this.variableName} (${variableDefinition?.type}):`, value);\n        return TaskStatus.Success;\n    }\n}\n/**\n * 数学运算黑板变量\n *\n * @description 对数值型黑板变量执行数学运算\n */\nexport var MathOperation;\n(function (MathOperation) {\n    MathOperation[\"Add\"] = \"add\";\n    MathOperation[\"Subtract\"] = \"subtract\";\n    MathOperation[\"Multiply\"] = \"multiply\";\n    MathOperation[\"Divide\"] = \"divide\";\n    MathOperation[\"Modulo\"] = \"modulo\";\n    MathOperation[\"Power\"] = \"power\";\n    MathOperation[\"Min\"] = \"min\";\n    MathOperation[\"Max\"] = \"max\";\n})(MathOperation || (MathOperation = {}));\nexport class MathBlackboardOperation extends Behavior {\n    constructor(targetVariable, operand1Variable, operand2, operation) {\n        super();\n        this.targetVariable = targetVariable;\n        this.operand1Variable = operand1Variable;\n        this.operand2 = operand2;\n        this.operation = operation;\n    }\n    update(context) {\n        const blackboard = context.blackboard;\n        if (!blackboard || !(blackboard instanceof Blackboard)) {\n            console.warn('MathBlackboardOperation: 上下文中未找到Blackboard实例');\n            return TaskStatus.Failure;\n        }\n        // 获取第一个操作数\n        if (!blackboard.hasVariable(this.operand1Variable)) {\n            console.warn(`MathBlackboardOperation: 操作数变量 \"${this.operand1Variable}\" 不存在`);\n            return TaskStatus.Failure;\n        }\n        const operand1 = blackboard.getValue(this.operand1Variable);\n        if (typeof operand1 !== 'number') {\n            console.warn(`MathBlackboardOperation: 操作数变量 \"${this.operand1Variable}\" 不是数值类型`);\n            return TaskStatus.Failure;\n        }\n        // 获取第二个操作数\n        let operand2;\n        if (typeof this.operand2 === 'string') {\n            if (!blackboard.hasVariable(this.operand2)) {\n                console.warn(`MathBlackboardOperation: 操作数变量 \"${this.operand2}\" 不存在`);\n                return TaskStatus.Failure;\n            }\n            operand2 = blackboard.getValue(this.operand2);\n            if (typeof operand2 !== 'number') {\n                console.warn(`MathBlackboardOperation: 操作数变量 \"${this.operand2}\" 不是数值类型`);\n                return TaskStatus.Failure;\n            }\n        }\n        else {\n            operand2 = this.operand2;\n        }\n        // 执行数学运算\n        let result;\n        try {\n            switch (this.operation) {\n                case MathOperation.Add:\n                    result = operand1 + operand2;\n                    break;\n                case MathOperation.Subtract:\n                    result = operand1 - operand2;\n                    break;\n                case MathOperation.Multiply:\n                    result = operand1 * operand2;\n                    break;\n                case MathOperation.Divide:\n                    if (operand2 === 0) {\n                        console.warn('MathBlackboardOperation: 除数不能为零');\n                        return TaskStatus.Failure;\n                    }\n                    result = operand1 / operand2;\n                    break;\n                case MathOperation.Modulo:\n                    if (operand2 === 0) {\n                        console.warn('MathBlackboardOperation: 模运算的除数不能为零');\n                        return TaskStatus.Failure;\n                    }\n                    result = operand1 % operand2;\n                    break;\n                case MathOperation.Power:\n                    result = Math.pow(operand1, operand2);\n                    break;\n                case MathOperation.Min:\n                    result = Math.min(operand1, operand2);\n                    break;\n                case MathOperation.Max:\n                    result = Math.max(operand1, operand2);\n                    break;\n                default:\n                    console.warn(`MathBlackboardOperation: 不支持的数学操作 \"${this.operation}\"`);\n                    return TaskStatus.Failure;\n            }\n        }\n        catch (error) {\n            console.error('MathBlackboardOperation: 数学运算执行失败:', error);\n            return TaskStatus.Failure;\n        }\n        // 设置结果\n        const success = blackboard.setValue(this.targetVariable, result);\n        return success ? TaskStatus.Success : TaskStatus.Failure;\n    }\n}\n//# sourceMappingURL=BlackboardActions.js.map","import { TaskStatus } from '../TaskStatus';\n/**\n * 数值比较条件\n *\n * @description 对上下文中的数值属性进行比较\n */\nexport class NumericComparison {\n    constructor(propertyPath, compareOperator, compareValue) {\n        this.discriminator = 'IConditional';\n        this.propertyPath = propertyPath;\n        this.compareOperator = compareOperator;\n        this.compareValue = compareValue;\n    }\n    update(context) {\n        try {\n            const value = this._getNestedProperty(context, this.propertyPath);\n            if (typeof value !== 'number') {\n                console.warn(`NumericComparison: 属性 \"${this.propertyPath}\" 不是数值类型,值为: ${value}`);\n                return TaskStatus.Failure;\n            }\n            const result = this._performComparison(value, this.compareValue, this.compareOperator);\n            return result ? TaskStatus.Success : TaskStatus.Failure;\n        }\n        catch (error) {\n            console.error(`NumericComparison: 访问属性 \"${this.propertyPath}\" 时发生错误:`, error);\n            return TaskStatus.Failure;\n        }\n    }\n    /**\n     * 获取嵌套属性值\n     */\n    _getNestedProperty(obj, path) {\n        return path.split('.').reduce((current, key) => {\n            return current && current[key] !== undefined ? current[key] : undefined;\n        }, obj);\n    }\n    /**\n     * 执行数值比较\n     */\n    _performComparison(left, right, operator) {\n        switch (operator) {\n            case 'greater': return left > right;\n            case 'less': return left < right;\n            case 'equal': return left === right;\n            case 'greaterEqual': return left >= right;\n            case 'lessEqual': return left <= right;\n            case 'notEqual': return left !== right;\n            default:\n                console.warn(`NumericComparison: 未知的比较操作符: ${operator}`);\n                return false;\n        }\n    }\n}\n/**\n * 属性存在检查条件\n *\n * @description 检查上下文对象中是否存在指定的属性\n */\nexport class PropertyExists {\n    constructor(propertyPath) {\n        this.discriminator = 'IConditional';\n        this.propertyPath = propertyPath;\n    }\n    update(context) {\n        try {\n            const value = this._getNestedProperty(context, this.propertyPath);\n            const exists = value !== undefined && value !== null;\n            return exists ? TaskStatus.Success : TaskStatus.Failure;\n        }\n        catch (error) {\n            console.error(`PropertyExists: 访问属性 \"${this.propertyPath}\" 时发生错误:`, error);\n            return TaskStatus.Failure;\n        }\n    }\n    /**\n     * 获取嵌套属性值\n     */\n    _getNestedProperty(obj, path) {\n        return path.split('.').reduce((current, key) => {\n            return current && current[key] !== undefined ? current[key] : undefined;\n        }, obj);\n    }\n}\n//# sourceMappingURL=GeneralConditionals.js.map","import { Decorator } from './Decorator';\nimport { TaskStatus } from '../TaskStatus';\n/**\n * 冷却装饰器\n *\n * @description 在指定时间内阻止子节点重复执行,实现技能冷却等机制\n */\nexport class CooldownDecorator extends Decorator {\n    constructor(cooldownTime) {\n        super();\n        /** 上次执行时间 */\n        this.lastExecutionTime = 0;\n        this.cooldownTime = cooldownTime;\n    }\n    onStart() {\n        if (this.child && this.child.onStart) {\n            this.child.onStart();\n        }\n    }\n    update(context) {\n        const currentTime = performance.now() / 1000;\n        // 检查是否还在冷却中\n        if (currentTime - this.lastExecutionTime < this.cooldownTime) {\n            return TaskStatus.Failure; // 还在冷却中\n        }\n        // 执行子节点\n        const childResult = this.child ? this.child.update(context) : TaskStatus.Success;\n        // 如果子节点执行完成(成功或失败),更新最后执行时间\n        if (childResult === TaskStatus.Success || childResult === TaskStatus.Failure) {\n            this.lastExecutionTime = currentTime;\n        }\n        return childResult;\n    }\n    onEnd() {\n        if (this.child && this.child.onEnd) {\n            this.child.onEnd();\n        }\n    }\n    /**\n     * 重置冷却时间\n     */\n    resetCooldown() {\n        this.lastExecutionTime = 0;\n    }\n    /**\n     * 获取剩余冷却时间\n     */\n    getRemainingCooldownTime() {\n        const currentTime = performance.now() / 1000;\n        const remaining = this.cooldownTime - (currentTime - this.lastExecutionTime);\n        return Math.max(0, remaining);\n    }\n    /**\n     * 检查是否在冷却中\n     */\n    isOnCooldown() {\n        return this.getRemainingCooldownTime() > 0;\n    }\n}\n//# sourceMappingURL=CooldownDecorator.js.map","import { Decorator } from './Decorator';\nimport { TaskStatus } from '../TaskStatus';\n/**\n * 超时装饰器\n *\n * @description 如果子节点执行时间超过指定限制,则强制返回失败状态\n */\nexport class TimeoutDecorator extends Decorator {\n    constructor(timeoutDuration) {\n        super();\n        /** 开始执行时间 */\n        this.startTime = 0;\n        /** 是否已开始执行 */\n        this.hasStarted = false;\n        this.timeoutDuration = timeoutDuration;\n    }\n    onStart() {\n        this.startTime = performance.now() / 1000;\n        this.hasStarted = true;\n        if (this.child && this.child.onStart) {\n            this.child.onStart();\n        }\n    }\n    update(context) {\n        if (!this.hasStarted) {\n            return TaskStatus.Failure;\n        }\n        const currentTime = performance.now() / 1000;\n        const elapsedTime = currentTime - this.startTime;\n        // 检查是否超时\n        if (elapsedTime >= this.timeoutDuration) {\n            console.warn(`TimeoutDecorator: 子节点执行超时 (${elapsedTime.toFixed(2)}s >= ${this.timeoutDuration}s)`);\n            return TaskStatus.Failure; // 超时失败\n        }\n        // 执行子节点\n        const childResult = this.child ? this.child.update(context) : TaskStatus.Success;\n        // 如果子节点完成,重置状态\n        if (childResult !== TaskStatus.Running) {\n            this.hasStarted = false;\n        }\n        return childResult;\n    }\n    onEnd() {\n        this.hasStarted = false;\n        if (this.child && this.child.onEnd) {\n            this.child.onEnd();\n        }\n    }\n    /**\n     * 获取剩余时间\n     */\n    getRemainingTime() {\n        if (!this.hasStarted) {\n            return this.timeoutDuration;\n        }\n        const currentTime = performance.now() / 1000;\n        const elapsedTime = currentTime - this.startTime;\n        return Math.max(0, this.timeoutDuration - elapsedTime);\n    }\n    /**\n     * 获取已执行时间\n     */\n    getElapsedTime() {\n        if (!this.hasStarted) {\n            return 0;\n        }\n        const currentTime = performance.now() / 1000;\n        return currentTime - this.startTime;\n    }\n    /**\n     * 检查是否已超时\n     */\n    isTimedOut() {\n        return this.getRemainingTime() <= 0;\n    }\n}\n//# sourceMappingURL=TimeoutDecorator.js.map","import { Decorator } from './Decorator';\nimport { TaskStatus } from '../TaskStatus';\n/**\n * 概率装饰器\n *\n * @description 以指定概率执行子节点,用于实现随机性行为\n */\nexport class ChanceDecorator extends Decorator {\n    constructor(successChance) {\n        super();\n        this.successChance = Math.max(0, Math.min(1, successChance)); // 确保在0-1范围内\n    }\n    onStart() {\n        if (this.child && this.child.onStart) {\n            this.child.onStart();\n        }\n    }\n    update(context) {\n        // 进行概率检查\n        const random = Math.random();\n        if (random > this.successChance) {\n            // 概率检查失败,不执行子节点\n            return TaskStatus.Failure;\n        }\n        // 概率检查成功,执行子节点\n        return this.child ? this.child.update(context) : TaskStatus.Success;\n    }\n    onEnd() {\n        if (this.child && this.child.onEnd) {\n            this.child.onEnd();\n        }\n    }\n    /**\n     * 设置成功概率\n     */\n    setSuccessChance(chance) {\n        this.successChance = Math.max(0, Math.min(1, chance));\n    }\n    /**\n     * 获取成功概率\n     */\n    getSuccessChance() {\n        return this.successChance;\n    }\n    /**\n     * 获取成功概率百分比\n     */\n    getSuccessChancePercentage() {\n        return this.successChance * 100;\n    }\n}\n//# sourceMappingURL=ChanceDecorator.js.map","import { BehaviorTree } from './BehaviorTree';\nimport { TaskStatus } from './TaskStatus';\nimport { Composite } from './composites/Composite';\nimport { Decorator } from './decorators/Decorator';\nimport { ExecuteAction } from './actions/ExecuteAction';\nimport { ExecuteActionConditional } from './conditionals/ExecuteActionConditional';\nimport { ConditionFactory } from './factories/ConditionFactory';\nimport { LogAction } from './actions/LogAction';\nimport { WaitAction } from './actions/WaitAction';\nimport { BehaviorTreeReference } from './actions/BehaviorTreeReference';\nimport { ConditionalDecorator } from './decorators/ConditionalDecorator';\nimport { AlwaysFail } from './decorators/AlwaysFail';\nimport { AlwaysSucceed } from './decorators/AlwaysSucceed';\nimport { Inverter } from './decorators/Inverter';\nimport { Repeater } from './decorators/Repeater';\nimport { UntilFail } from './decorators/UntilFail';\nimport { UntilSuccess } from './decorators/UntilSuccess';\nimport { Parallel } from './composites/Parallel';\nimport { ParallelSelector } from './composites/ParallelSelector';\nimport { Selector } from './composites/Selector';\nimport { RandomSelector } from './composites/RandomSelector';\nimport { Sequence } from './composites/Sequence';\nimport { RandomSequence } from './composites/RandomSequence';\nimport { AbortTypes } from './composites/AbortTypes';\nimport { Blackboard, BlackboardValueType } from './Blackboard';\n// 黑板动作节点导入\nimport { SetBlackboardValue, AddToBlackboardValue, ToggleBlackboardBool, ResetBlackboardVariable, MathBlackboardOperation, MathOperation, LogBlackboardValue, WaitForBlackboardCondition } from './actions/BlackboardActions';\n// 黑板条件节点导入\nimport { BlackboardValueComparison, CompareOperator, BlackboardVariableExists, BlackboardVariableTypeCheck, BlackboardVariableRangeCheck } from './conditionals/BlackboardConditionals';\n// 通用条件节点导入\nimport { NumericComparison, PropertyExists } from './conditionals/GeneralConditionals';\n// 高级装饰器导入\nimport { CooldownDecorator } from './decorators/CooldownDecorator';\nimport { TimeoutDecorator } from './decorators/TimeoutDecorator';\nimport { ChanceDecorator } from './decorators/ChanceDecorator';\n/**\n * 行为树构建器类\n * @description 提供构建行为树的流畅API和配置加载功能\n * @template T 执行上下文类型\n *\n * @example\n * ```typescript\n * // 使用流畅API构建\n * const tree = BehaviorTreeBuilder.begin(context)\n *   .selector()\n *     .sequence()\n *       .logAction(\"开始执行\")\n *       .waitAction(1.0)\n *     .endComposite()\n *     .logAction(\"备选方案\")\n *   .endComposite()\n *   .build();\n *\n * // 从JSON配置构建\n * const result = BehaviorTreeBuilder.fromBehaviorTreeConfig(jsonConfig, context);\n * ```\n */\nexport class BehaviorTreeBuilder {\n    /**\n     * 构造函数\n     * @param context 执行上下文\n     */\n    constructor(context) {\n        /** 父节点堆栈,用于流畅API构建 */\n        this._parentNodeStack = new Array();\n        this._context = context;\n    }\n    /**\n     * 开始构建行为树\n     * @param context 执行上下文\n     * @returns 新的构建器实例\n     */\n    static begin(context) {\n        return new BehaviorTreeBuilder(context);\n    }\n    /**\n     * 设置子节点到父节点\n     * @param child 子节点\n     * @returns 构建器实例\n     */\n    setChildOnParent(child) {\n        const parent = this._parentNodeStack[this._parentNodeStack.length - 1];\n        if (parent instanceof Composite) {\n            parent.addChild(child);\n        }\n        else if (parent instanceof Decorator) {\n            // 装饰器只有一个子节点,所以自动结束\n            parent.child = child;\n            this.endDecorator();\n        }\n        return this;\n    }\n    /**\n     * 将节点推入父节点堆栈\n     * @param composite 复合节点或装饰器节点\n     * @returns 构建器实例\n     */\n    pushParentNode(composite) {\n        if (this._parentNodeStack.length > 0) {\n            this.setChildOnParent(composite);\n        }\n        this._parentNodeStack.push(composite);\n        return this;\n    }\n    /**\n     * 结束装饰器节点\n     * @returns 构建器实例\n     */\n    endDecorator() {\n        this._currentNode = this._parentNodeStack.pop();\n        return this;\n    }\n    /**\n     * 添加动作节点\n     * @param func 动作执行函数\n     * @returns 构建器实例\n     */\n    action(func) {\n        if (this._parentNodeStack.length === 0) {\n            throw new Error(\"无法创建无嵌套的动作节点,它必须是一个叶节点\");\n        }\n        return this.setChildOnParent(new ExecuteAction(func));\n    }\n    /**\n     * 添加返回布尔值的动作节点\n     * @param func 返回布尔值的函数\n     * @returns 构建器实例\n     */\n    actionR(func) {\n        return this.action(t => func(t) ? TaskStatus.Success : TaskStatus.Failure);\n    }\n    /**\n     * 添加条件节点\n     * @param func 条件检查函数\n     * @returns 构建器实例\n     */\n    conditional(func) {\n        if (this._parentNodeStack.length === 0) {\n            throw new Error(\"无法创建无嵌套的条件节点,它必须是一个叶节点\");\n        }\n        return this.setChildOnParent(new ExecuteActionConditional(func));\n    }\n    /**\n     * 添加返回布尔值的条件节点\n     * @param func 返回布尔值的条件函数\n     * @returns 构建器实例\n     */\n    conditionalR(func) {\n        return this.conditional(t => func(t) ? TaskStatus.Success : TaskStatus.Failure);\n    }\n    /**\n     * 添加日志动作节点\n     * @param text 日志文本\n     * @returns 构建器实例\n     */\n    logAction(text) {\n        if (this._parentNodeStack.length === 0) {\n            throw new Error(\"无法创建无嵌套的动作节点,它必须是一个叶节点\");\n        }\n        return this.setChildOnParent(new LogAction(text));\n    }\n    /**\n     * 添加等待动作节点\n     * @param waitTime 等待时间(秒)\n     * @returns 构建器实例\n     */\n    waitAction(waitTime) {\n        if (this._parentNodeStack.length === 0) {\n            throw new Error(\"无法创建无嵌套的动作节点,它必须是一个叶节点\");\n        }\n        return this.setChildOnParent(new WaitAction(waitTime));\n    }\n    /**\n     * 添加子行为树节点\n     * @param subTree 子行为树实例\n     * @returns 构建器实例\n     */\n    subTree(subTree) {\n        if (this._parentNodeStack.length === 0) {\n            throw new Error(\"无法创建无嵌套的动作节点,它必须是一个叶节点\");\n        }\n        return this.setChildOnParent(new BehaviorTreeReference(subTree));\n    }\n    /**\n     * 添加条件装饰器\n     * @param func 条件函数\n     * @param shouldReevaluate 是否重新评估\n     * @returns 构建器实例\n     */\n    conditionalDecorator(func, shouldReevaluate = true) {\n        const conditional = new ExecuteActionConditional(func);\n        return this.pushParentNode(new ConditionalDecorator(conditional, shouldReevaluate));\n    }\n    /**\n     * 添加返回布尔值的条件装饰器\n     * @param func 返回布尔值的条件函数\n     * @param shouldReevaluate 是否重新评估\n     * @returns 构建器实例\n     */\n    conditionalDecoratorR(func, shouldReevaluate = true) {\n        return this.conditionalDecorator(t => func(t) ? TaskStatus.Success : TaskStatus.Failure, shouldReevaluate);\n    }\n    /**\n     * 添加总是失败装饰器\n     * @returns 构建器实例\n     */\n    alwaysFail() {\n        return this.pushParentNode(new AlwaysFail());\n    }\n    /**\n     * 添加总是成功装饰器\n     * @returns 构建器实例\n     */\n    alwaysSucceed() {\n        return this.pushParentNode(new AlwaysSucceed());\n    }\n    /**\n     * 添加反转装饰器\n     * @returns 构建器实例\n     */\n    inverter() {\n        return this.pushParentNode(new Inverter());\n    }\n    /**\n     * 添加重复装饰器\n     * @param count 重复次数\n     * @returns 构建器实例\n     */\n    repeater(count) {\n        return this.pushParentNode(new Repeater(count));\n    }\n    /**\n     * 添加直到失败装饰器\n     * @returns 构建器实例\n     */\n    untilFail() {\n        return this.pushParentNode(new UntilFail());\n    }\n    /**\n     * 添加直到成功装饰器\n     * @returns 构建器实例\n     */\n    untilSuccess() {\n        return this.pushParentNode(new UntilSuccess());\n    }\n    /**\n     * 添加并行节点\n     * @returns 构建器实例\n     */\n    paraller() {\n        return this.pushParentNode(new Parallel());\n    }\n    /**\n     * 添加并行选择器节点\n     * @returns 构建器实例\n     */\n    parallelSelector() {\n        return this.pushParentNode(new ParallelSelector());\n    }\n    /**\n     * 添加选择器节点\n     * @param abortType 中止类型\n     * @returns 构建器实例\n     */\n    selector(abortType = AbortTypes.None) {\n        return this.pushParentNode(new Selector(abortType));\n    }\n    /**\n     * 添加随机选择器节点\n     * @returns 构建器实例\n     */\n    randomSelector() {\n        return this.pushParentNode(new RandomSelector());\n    }\n    /**\n     * 添加序列节点\n     * @param abortType 中止类型\n     * @returns 构建器实例\n     */\n    sequence(abortType = AbortTypes.None) {\n        return this.pushParentNode(new Sequence(abortType));\n    }\n    /**\n     * 添加随机序列节点\n     * @returns 构建器实例\n     */\n    randomSequence() {\n        return this.pushParentNode(new RandomSequence());\n    }\n    /**\n     * 结束复合节点\n     * @returns 构建器实例\n     */\n    endComposite() {\n        const topNode = this._parentNodeStack[this._parentNodeStack.length - 1];\n        if (!(topNode instanceof Composite)) {\n            throw new Error(\"尝试结束复合器,但顶部节点是装饰器\");\n        }\n        this._currentNode = this._parentNodeStack.pop();\n        return this;\n    }\n    /**\n     * 构建最终的行为树\n     * @param updatePeriod 更新周期(秒),默认0.2秒\n     * @returns 构建好的行为树实例\n     */\n    build(updatePeriod = 0.2) {\n        if (!this._currentNode) {\n            throw new Error('无法创建零节点的行为树');\n        }\n        return new BehaviorTree(this._context, this._currentNode, updatePeriod);\n    }\n    /**\n     * 从配置对象创建行为树\n     * @param config 行为树配置\n     * @param context 执行上下文\n     * @returns 构建好的行为树\n     */\n    static fromConfig(config, context) {\n        try {\n            if (!config || !config.tree) {\n                throw new Error('配置无效:缺少tree属性');\n            }\n            const rootNode = BehaviorTreeBuilder.createNodeFromConfig(config.tree);\n            const updatePeriod = config.metadata?.updatePeriod ?? 0.2;\n            return new BehaviorTree(context, rootNode, updatePeriod);\n        }\n        catch (error) {\n            const errorMessage = error instanceof Error ? error.message : String(error);\n            throw new Error(`从配置创建行为树失败: ${errorMessage}`);\n        }\n    }\n    /**\n     * 从JSON配置创建行为树\n     * @description 自动初始化黑板变量和构建节点树,提供一键式行为树创建\n     * @param config JSON格式的行为树配置\n     * @param context 执行上下文(可选,如果不提供将创建默认上下文)\n     * @returns 包含行为树、黑板和增强上下文的结果对象\n     *\n     * @example\n     * ```typescript\n     * const config = {\n     *   nodes: [...],\n     *   blackboard: [...],\n     *   metadata: { name: \"MyBehaviorTree\" }\n     * };\n     * const result = BehaviorTreeBuilder.fromBehaviorTreeConfig(config, context);\n     * const { tree, blackboard, context: enhancedContext } = result;\n     * ```\n     */\n    static fromBehaviorTreeConfig(config, context) {\n        try {\n            // 验证配置\n            if (!config || !config.nodes || config.nodes.length === 0) {\n                throw new Error('配置无效:缺少nodes属性或nodes为空');\n            }\n            // 创建黑板并初始化变量\n            const blackboard = new Blackboard();\n            if (config.blackboard && config.blackboard.length > 0) {\n                for (const variable of config.blackboard) {\n                    // 映射类型字符串到枚举\n                    const blackboardType = BehaviorTreeBuilder.mapToBlackboardType(variable.type);\n                    // 转换值类型以匹配黑板期望的类型\n                    const convertedValue = BehaviorTreeBuilder.convertBlackboardValue(variable.value, blackboardType);\n                    blackboard.defineVariable(variable.name, blackboardType, convertedValue, {\n                        description: variable.description,\n                        group: variable.group || 'Default',\n                        readonly: variable.constraints?.readonly ?? false\n                    });\n                }\n            }\n            // 创建或增强执行上下文\n            const enhancedContext = (context || {});\n            enhancedContext.blackboard = blackboard;\n            // 构建节点树\n            const nodeMap = new Map();\n            // 建立节点映射\n            for (const node of config.nodes) {\n                nodeMap.set(node.id, node);\n            }\n            // 找到根节点(通常是第一个节点或type为'root'的节点)\n            const rootNodeConfig = config.nodes.find(n => n.type === 'root') || config.nodes[0];\n            if (!rootNodeConfig) {\n                throw new Error('未找到根节点');\n            }\n            // 递归构建节点树\n            const rootNode = BehaviorTreeBuilder.createNodeFromJSONConfig(rootNodeConfig, nodeMap, enhancedContext);\n            // 创建行为树\n            const updatePeriod = config.metadata?.updatePeriod ?? 0.2;\n            const tree = new BehaviorTree(enhancedContext, rootNode, updatePeriod, false, blackboard);\n            return { tree, blackboard, context: enhancedContext };\n        }\n        catch (error) {\n            const errorMessage = error instanceof Error ? error.message : String(error);\n            throw new Error(`从配置创建行为树失败: ${errorMessage}`);\n        }\n    }\n    /**\n     * 映射字符串类型到BlackboardValueType枚举\n     * @param typeString 类型字符串\n     * @returns 对应的黑板值类型枚举\n     */\n    static mapToBlackboardType(typeString) {\n        switch (typeString.toLowerCase()) {\n            case 'string':\n                return BlackboardValueType.String;\n            case 'number':\n                return BlackboardValueType.Number;\n            case 'boolean':\n                return BlackboardValueType.Boolean;\n            case 'vector2':\n                return BlackboardValueType.Vector2;\n            case 'vector3':\n                return BlackboardValueType.Vector3;\n            case 'object':\n                return BlackboardValueType.Object;\n            case 'array':\n                return BlackboardValueType.Array;\n            default:\n                console.warn(`未知的变量类型: ${typeString}, 默认使用Object类型`);\n                return BlackboardValueType.Object;\n        }\n    }\n    /**\n     * 转换黑板变量值到正确的类型\n     * @param value 原始值(通常来自JSON,都是字符串)\n     * @param targetType 目标类型\n     * @returns 转换后的值\n     */\n    static convertBlackboardValue(value, targetType) {\n        // 为不同类型提供合理的默认值\n        if (value === null || value === undefined || value === '') {\n            switch (targetType) {\n                case BlackboardValueType.String:\n                    return '';\n                case BlackboardValueType.Number:\n                    return 0;\n                case BlackboardValueType.Boolean:\n                    return false; // 布尔类型默认为false\n                case BlackboardValueType.Vector2:\n                    return { x: 0, y: 0 };\n                case BlackboardValueType.Vector3:\n                    return { x: 0, y: 0, z: 0 };\n                case BlackboardValueType.Object:\n                    return {};\n                case BlackboardValueType.Array:\n                    return [];\n                default:\n                    return null;\n            }\n        }\n        switch (targetType) {\n            case BlackboardValueType.String:\n                return String(value);\n            case BlackboardValueType.Number:\n                if (typeof value === 'string') {\n                    const num = parseFloat(value);\n                    if (isNaN(num)) {\n                        console.warn(`无法将 \"${value}\" 转换为数字,使用默认值 0`);\n                        return 0;\n                    }\n                    return num;\n                }\n                return typeof value === 'number' ? value : 0;\n            case BlackboardValueType.Boolean:\n                if (typeof value === 'string') {\n                    // 处理空字符串的情况\n                    if (value === '')\n                        return false;\n                    return value.toLowerCase() === 'true';\n                }\n                return Boolean(value);\n            case BlackboardValueType.Vector2:\n                if (typeof value === 'string') {\n                    try {\n                        const parsed = JSON.parse(value);\n                        return parsed && typeof parsed === 'object' && 'x' in parsed && 'y' in parsed\n                            ? parsed\n                            : { x: 0, y: 0 };\n                    }\n                    catch {\n                        console.warn(`无法解析Vector2值 \"${value}\",使用默认值 {x:0, y:0}`);\n                        return { x: 0, y: 0 };\n                    }\n                }\n                return value && typeof value === 'object' && 'x' in value && 'y' in value\n                    ? value\n                    : { x: 0, y: 0 };\n            case BlackboardValueType.Vector3:\n                if (typeof value === 'string') {\n                    try {\n                        const parsed = JSON.parse(value);\n                        return parsed && typeof parsed === 'object' && 'x' in parsed && 'y' in parsed && 'z' in parsed\n                            ? parsed\n                            : { x: 0, y: 0, z: 0 };\n                    }\n                    catch {\n                        console.warn(`无法解析Vector3值 \"${value}\",使用默认值 {x:0, y:0, z:0}`);\n                        return { x: 0, y: 0, z: 0 };\n                    }\n                }\n                return value && typeof value === 'object' && 'x' in value && 'y' in value && 'z' in value\n                    ? value\n                    : { x: 0, y: 0, z: 0 };\n            case BlackboardValueType.Object:\n                if (typeof value === 'string') {\n                    try {\n                        return JSON.parse(value);\n                    }\n                    catch {\n                        console.warn(`无法解析Object值 \"${value}\",使用默认值 {}`);\n                        return {};\n                    }\n                }\n                return typeof value === 'object' ? value : {};\n            case BlackboardValueType.Array:\n                if (typeof value === 'string') {\n                    try {\n                        const parsed = JSON.parse(value);\n                        return Array.isArray(parsed) ? parsed : [];\n                    }\n                    catch {\n                        console.warn(`无法解析Array值 \"${value}\",使用默认值 []`);\n                        return [];\n                    }\n                }\n                return Array.isArray(value) ? value : [];\n            default:\n                return value;\n        }\n    }\n    /**\n     * 从节点配置创建节点实例\n     * @param nodeConfig 节点配置\n     * @returns 创建的节点实例\n     */\n    static createNodeFromConfig(nodeConfig) {\n        let node;\n        // 根据节点类型创建对应的节点实例\n        switch (nodeConfig.type) {\n            // 复合节点\n            case 'Sequence':\n                const sequenceAbortValue = nodeConfig.properties?.abortType?.value;\n                const sequenceAbortType = BehaviorTreeBuilder.getAbortType(typeof sequenceAbortValue === 'string' ? sequenceAbortValue : 'None');\n                node = new Sequence(sequenceAbortType);\n                break;\n            case 'Selector':\n                const selectorAbortValue = nodeConfig.properties?.abortType?.value;\n                const selectorAbortType = BehaviorTreeBuilder.getAbortType(typeof selectorAbortValue === 'string' ? selectorAbortValue : 'None');\n                node = new Selector(selectorAbortType);\n                break;\n            case 'Parallel':\n                node = new Parallel();\n                break;\n            case 'ParallelSelector':\n                node = new ParallelSelector();\n                break;\n            case 'RandomSelector':\n                node = new RandomSelector();\n                break;\n            case 'RandomSequence':\n                node = new RandomSequence();\n                break;\n            // 装饰器节点\n            case 'AlwaysSucceed':\n                node = new AlwaysSucceed();\n                break;\n            case 'AlwaysFail':\n                node = new AlwaysFail();\n                break;\n            case 'Inverter':\n                node = new Inverter();\n                break;\n            case 'Repeater':\n                const countValue = nodeConfig.properties?.count?.value;\n                const count = typeof countValue === 'number' ? countValue : 1;\n                node = new Repeater(count);\n                break;\n            case 'UntilSuccess':\n                node = new UntilSuccess();\n                break;\n            case 'UntilFail':\n                node = new UntilFail();\n                break;\n            // 动作节点\n            case 'LogAction':\n                const messageValue = nodeConfig.properties?.message?.value;\n                const message = typeof messageValue === 'string' ? messageValue : 'Default log message';\n                node = new LogAction(message);\n                break;\n            case 'WaitAction':\n                const waitTimeValue = nodeConfig.properties?.waitTime?.value;\n                const waitTime = typeof waitTimeValue === 'number' ? waitTimeValue : 1.0;\n                node = new WaitAction(waitTime);\n                break;\n            case 'ExecuteAction':\n                // 对于自定义动作,我们创建一个默认的执行函数\n                const actionCode = nodeConfig.properties?.actionCode?.value;\n                if (actionCode && typeof actionCode === 'string') {\n                    try {\n                        // 简单的代码执行(在实际项目中应该更安全地处理)\n                        const actionFunc = new Function('context', 'TaskStatus', `\r\n                            const { Success, Failure, Running } = TaskStatus;\r\n                            ${actionCode}\r\n                        `);\n                        node = new ExecuteAction((context) => {\n                            try {\n                                return actionFunc(context, TaskStatus);\n                            }\n                            catch (error) {\n                                console.error('执行动作失败:', error);\n                                return TaskStatus.Failure;\n                            }\n                        });\n                    }\n                    catch (error) {\n                        console.warn('解析动作代码失败,使用默认动作:', error);\n                        node = new ExecuteAction(() => TaskStatus.Success);\n                    }\n                }\n                else {\n                    node = new ExecuteAction(() => TaskStatus.Success);\n                }\n                break;\n            default:\n                console.warn('⚠️ 未知的节点类型:', nodeConfig.type, ',使用默认动作节点');\n                node = new ExecuteAction(() => TaskStatus.Success);\n                break;\n        }\n        // 为复合节点和装饰器添加子节点\n        if (nodeConfig.children && nodeConfig.children.length > 0) {\n            if (node instanceof Composite) {\n                // 复合节点可以有多个子节点\n                for (const childConfig of nodeConfig.children) {\n                    const childNode = BehaviorTreeBuilder.createNodeFromConfig(childConfig);\n                    node.addChild(childNode);\n                }\n            }\n            else if (node instanceof Decorator) {\n                // 装饰器只能有一个子节点\n                if (nodeConfig.children.length > 1) {\n                    console.warn('⚠️ 装饰器节点只能有一个子节点,将使用第一个');\n                }\n                const childNode = BehaviorTreeBuilder.createNodeFromConfig(nodeConfig.children[0]);\n                node.child = childNode;\n            }\n        }\n        return node;\n    }\n    /**\n     * 解析中止类型字符串为枚举值\n     * @param value 中止类型字符串\n     * @returns 对应的中止类型枚举值\n     */\n    static getAbortType(value) {\n        switch (value) {\n            case 'LowerPriority':\n                return AbortTypes.LowerPriority;\n            case 'Self':\n                return AbortTypes.Self;\n            case 'Both':\n                return AbortTypes.Both;\n            default:\n                return AbortTypes.None;\n        }\n    }\n    /**\n     * 从JSON节点配置创建节点实例\n     * @description 递归创建节点树,支持所有标准行为树节点类型\n     * @param nodeConfig 当前节点配置\n     * @param nodeMap 节点ID到配置的映射表\n     * @param context 执行上下文\n     * @returns 创建的节点实例\n     */\n    static createNodeFromJSONConfig(nodeConfig, nodeMap, context) {\n        let node;\n        const props = nodeConfig.properties || {};\n        // 根据节点类型创建对应的节点实例\n        switch (nodeConfig.type) {\n            // 根节点 - 通常是一个简单的传递节点\n            case 'root':\n                // 根节点本身不执行逻辑,直接处理第一个子节点\n                if (nodeConfig.children && nodeConfig.children.length > 0) {\n                    const firstChildId = nodeConfig.children[0];\n                    const firstChildConfig = nodeMap.get(firstChildId);\n                    if (firstChildConfig) {\n                        return BehaviorTreeBuilder.createNodeFromJSONConfig(firstChildConfig, nodeMap, context);\n                    }\n                }\n                // 如果没有子节点,创建一个默认成功节点\n                node = new ExecuteAction(() => TaskStatus.Success);\n                break;\n            // 复合节点\n            case 'selector':\n                const selectorAbortType = BehaviorTreeBuilder.getAbortType(String(props.abortType || 'None'));\n                node = new Selector(selectorAbortType);\n                break;\n            case 'sequence':\n                const sequenceAbortType = BehaviorTreeBuilder.getAbortType(String(props.abortType || 'None'));\n                node = new Sequence(sequenceAbortType);\n                break;\n            case 'parallel':\n                node = new Parallel();\n                break;\n            case 'parallel-selector':\n                node = new ParallelSelector();\n                break;\n            case 'random-selector':\n                node = new RandomSelector();\n                break;\n            case 'random-sequence':\n                node = new RandomSequence();\n                break;\n            // 装饰器节点\n            case 'repeater':\n                const countProp = props.count;\n                const count = typeof countProp === 'number' ? countProp : -1; // -1 表示无限重复\n                node = new Repeater(count);\n                break;\n            case 'inverter':\n                node = new Inverter();\n                break;\n            case 'always-succeed':\n                node = new AlwaysSucceed();\n                break;\n            case 'always-fail':\n                node = new AlwaysFail();\n                break;\n            case 'until-success':\n                node = new UntilSuccess();\n                break;\n            case 'until-fail':\n                node = new UntilFail();\n                break;\n            case 'conditional-decorator':\n                // 创建条件装饰器 - 使用新的条件工厂\n                let conditionConfig = nodeConfig.condition;\n                // 根据conditionType属性确定条件类型\n                if (props.conditionType === 'blackboardCompare') {\n                    conditionConfig = { type: 'blackboard-value-comparison' };\n                }\n                else if (props.conditionType === 'eventCondition') {\n                    conditionConfig = { type: 'event-condition' };\n                }\n                else if (props.conditionType === 'custom') {\n                    conditionConfig = { type: 'condition-custom' };\n                }\n                // 使用条件工厂创建条件\n                const conditionalNode = ConditionFactory.createCondition(conditionConfig, props, context);\n                const shouldReevaluateValue = BehaviorTreeBuilder.extractNestedValue(props.shouldReevaluate);\n                const shouldReevaluate = shouldReevaluateValue !== false && shouldReevaluateValue !== \"false\";\n                const abortType = BehaviorTreeBuilder.getAbortType(BehaviorTreeBuilder.extractNestedValue(props.abortType) || 'None');\n                node = new ConditionalDecorator(conditionalNode, shouldReevaluate, abortType);\n                break;\n            // 动作节点\n            case 'log-action':\n                const message = props.message || 'Default log message';\n                // 支持变量替换\n                node = new ExecuteAction((ctx) => {\n                    const blackboard = ctx.blackboard;\n                    let finalMessage = message;\n                    // 简单的变量替换 {{variableName}}\n                    if (blackboard && typeof message === 'string') {\n                        finalMessage = message.replace(/\\{\\{(\\w+)\\}\\}/g, (match, varName) => {\n                            const value = blackboard.getValue(varName);\n                            return value !== undefined ? String(value) : match;\n                        });\n                    }\n                    console.log(`[BehaviorTree] ${finalMessage}`);\n                    if (ctx.log) {\n                        ctx.log(finalMessage, props.logLevel || 'info');\n                    }\n                    return TaskStatus.Success;\n                });\n                break;\n            case 'wait-action':\n                const waitTimeProp = props.waitTime;\n                const waitTime = typeof waitTimeProp === 'number' ? waitTimeProp : 1.0;\n                node = new WaitAction(waitTime);\n                break;\n            case 'behavior-tree-reference':\n                const subTreePath = props.subTreePath || props.treePath;\n                if (subTreePath && typeof subTreePath === 'string') {\n                    try {\n                        // 这里需要从路径加载子行为树\n                        // 在实际应用中,应该有一个行为树管理器来处理这个\n                        console.warn(`behavior-tree-reference节点需要实现子行为树加载机制: ${subTreePath}`);\n                        node = new ExecuteAction((ctx) => {\n                            console.log(`执行子行为树引用: ${subTreePath}`);\n                            return TaskStatus.Success;\n                        });\n                    }\n                    catch (error) {\n                        console.error('加载子行为树失败:', error);\n                        node = new ExecuteAction(() => TaskStatus.Failure);\n                    }\n                }\n                else {\n                    console.warn('behavior-tree-reference节点缺少subTreePath属性');\n                    node = new ExecuteAction(() => TaskStatus.Failure);\n                }\n                break;\n            case 'execute-action':\n                const actionCode = props.actionCode;\n                if (actionCode && typeof actionCode === 'string') {\n                    try {\n                        // 创建安全的执行函数\n                        const actionFunc = new Function('context', 'TaskStatus', `\r\n                            const { Success, Failure, Running, Invalid } = TaskStatus;\r\n                            try {\r\n                                ${actionCode}\r\n                            } catch (error) {\r\n                                console.error('动作执行错误:', error);\r\n                                return TaskStatus.Failure;\r\n                            }\r\n                        `);\n                        node = new ExecuteAction((ctx) => {\n                            try {\n                                const result = actionFunc(ctx, TaskStatus);\n                                return result || TaskStatus.Success;\n                            }\n                            catch (error) {\n                                console.error('执行动作失败:', error);\n                                return TaskStatus.Failure;\n                            }\n                        });\n                    }\n                    catch (error) {\n                        console.warn('解析动作代码失败,使用默认动作:', error);\n                        node = new ExecuteAction(() => TaskStatus.Success);\n                    }\n                }\n                else {\n                    node = new ExecuteAction(() => TaskStatus.Success);\n                }\n                break;\n            // 条件节点\n            case 'condition-random':\n                const probabilityProp = props.successProbability;\n                const probability = typeof probabilityProp === 'number' ? probabilityProp : 0.5;\n                node = new ExecuteActionConditional(() => {\n                    return Math.random() < probability ? TaskStatus.Success : TaskStatus.Failure;\n                });\n                break;\n            case 'condition-custom':\n                const conditionCodeProp = props.conditionCode;\n                const conditionCode = typeof conditionCodeProp === 'string' ? conditionCodeProp :\n                    (typeof conditionCodeProp === 'object' && conditionCodeProp && 'value' in conditionCodeProp ?\n                        String(conditionCodeProp.value) : undefined);\n                if (conditionCode && typeof conditionCode === 'string') {\n                    try {\n                        const condFunc = new Function('context', `\r\n                            try {\r\n                                ${conditionCode}\r\n                            } catch (error) {\r\n                                console.error('条件检查错误:', error);\r\n                                return false;\r\n                            }\r\n                        `);\n                        node = new ExecuteActionConditional((ctx) => {\n                            try {\n                                const result = condFunc(ctx);\n                                return result ? TaskStatus.Success : TaskStatus.Failure;\n                            }\n                            catch (error) {\n                                console.error('条件检查失败:', error);\n                                return TaskStatus.Failure;\n                            }\n                        });\n                    }\n                    catch (error) {\n                        console.warn('解析条件代码失败:', error);\n                        node = new ExecuteActionConditional(() => TaskStatus.Failure);\n                    }\n                }\n                else {\n                    node = new ExecuteActionConditional(() => TaskStatus.Success);\n                }\n                break;\n            case 'condition-numeric':\n                node = new ExecuteActionConditional((ctx) => {\n                    const conditional = new NumericComparison(String(props.propertyPath || 'value'), String(props.compareOperator || 'equal'), Number(props.compareValue) || 0);\n                    return conditional.update(ctx);\n                });\n                break;\n            case 'condition-property':\n                node = new ExecuteActionConditional((ctx) => {\n                    const conditional = new PropertyExists(String(props.propertyPath || 'property'));\n                    return conditional.update(ctx);\n                });\n                break;\n            // 事件驱动节点\n            case 'event-action':\n                const eventActionName = props.eventName;\n                if (eventActionName && typeof eventActionName === 'string') {\n                    node = new ExecuteAction((ctx) => {\n                        try {\n                            // 从上下文中获取事件注册表\n                            const eventRegistry = ctx.eventRegistry;\n                            if (!eventRegistry) {\n                                console.warn(`[event-action] 未找到事件注册表,请在执行上下文中提供 eventRegistry`);\n                                return TaskStatus.Failure;\n                            }\n                            // 获取事件处理器\n                            const handler = eventRegistry.getActionHandler ?\n                                eventRegistry.getActionHandler(eventActionName) :\n                                eventRegistry.handlers?.get(eventActionName);\n                            if (!handler) {\n                                console.warn(`[event-action] 未找到事件处理器: ${eventActionName}`);\n                                return TaskStatus.Failure;\n                            }\n                            // 解析参数\n                            let parameters = {};\n                            if (props.parameters) {\n                                if (typeof props.parameters === 'string') {\n                                    try {\n                                        parameters = JSON.parse(props.parameters);\n                                    }\n                                    catch (e) {\n                                        console.warn(`[event-action] 参数解析失败: ${props.parameters}`);\n                                    }\n                                }\n                                else {\n                                    parameters = props.parameters;\n                                }\n                                // 支持黑板变量替换\n                                const blackboard = ctx.blackboard;\n                                if (blackboard) {\n                                    parameters = BehaviorTreeBuilder.replaceBlackboardVariables(parameters, blackboard);\n                                }\n                            }\n                            // 执行事件处理器\n                            const result = handler(ctx, parameters);\n                            // 处理异步结果\n                            if (result instanceof Promise) {\n                                if (props.async !== false) {\n                                    result.then((asyncResult) => {\n                                        console.log(`[event-action] 异步事件 ${eventActionName} 完成: ${asyncResult}`);\n                                    }).catch((error) => {\n                                        console.error(`[event-action] 异步事件 ${eventActionName} 失败:`, error);\n                                    });\n                                    return TaskStatus.Running;\n                                }\n                                else {\n                                    console.warn(`[event-action] 事件 ${eventActionName} 返回Promise但未标记为异步,将阻塞执行`);\n                                    return TaskStatus.Running;\n                                }\n                            }\n                            // 处理同步结果\n                            if (typeof result === 'string') {\n                                switch (result.toLowerCase()) {\n                                    case 'success': return TaskStatus.Success;\n                                    case 'failure': return TaskStatus.Failure;\n                                    case 'running': return TaskStatus.Running;\n                                    default: return TaskStatus.Success;\n                                }\n                            }\n                            return result === true ? TaskStatus.Success :\n                                result === false ? TaskStatus.Failure : TaskStatus.Success;\n                        }\n                        catch (error) {\n                            console.error(`[event-action] 事件 ${eventActionName} 执行失败:`, error);\n                            return TaskStatus.Failure;\n                        }\n                    });\n                }\n                else {\n                    console.warn('[event-action] 缺少 eventName 属性');\n                    node = new ExecuteAction(() => TaskStatus.Failure);\n                }\n                break;\n            case 'event-condition':\n                const eventConditionName = props.eventName;\n                if (eventConditionName && typeof eventConditionName === 'string') {\n                    node = new ExecuteActionConditional((ctx) => {\n                        try {\n                            // 从上下文中获取事件注册表\n                            const eventRegistry = ctx.eventRegistry;\n                            if (!eventRegistry) {\n                                console.warn(`[event-condition] 未找到事件注册表,请在执行上下文中提供 eventRegistry`);\n                                return TaskStatus.Failure;\n                            }\n                            // 获取条件处理器\n                            const checker = eventRegistry.getConditionHandler ?\n                                eventRegistry.getConditionHandler(eventConditionName) :\n                                eventRegistry.handlers?.get(eventConditionName);\n                            if (!checker) {\n                                console.warn(`[event-condition] 未找到条件处理器: ${eventConditionName}`);\n                                return TaskStatus.Failure;\n                            }\n                            // 解析参数\n                            let parameters = {};\n                            if (props.parameters) {\n                                if (typeof props.parameters === 'string') {\n                                    try {\n                                        parameters = JSON.parse(props.parameters);\n                                    }\n                                    catch (e) {\n                                        console.warn(`[event-condition] 参数解析失败: ${props.parameters}`);\n                                    }\n                                }\n                                else {\n                                    parameters = props.parameters;\n                                }\n                                // 支持黑板变量替换\n                                const blackboard = ctx.blackboard;\n                                if (blackboard) {\n                                    parameters = BehaviorTreeBuilder.replaceBlackboardVariables(parameters, blackboard);\n                                }\n                            }\n                            // 执行条件检查\n                            const result = checker(ctx, parameters);\n                            // 处理异步结果\n                            if (result instanceof Promise) {\n                                console.warn(`[event-condition] 条件 ${eventConditionName} 返回Promise,条件节点不支持异步操作`);\n                                return TaskStatus.Failure;\n                            }\n                            return result ? TaskStatus.Success : TaskStatus.Failure;\n                        }\n                        catch (error) {\n                            console.error(`[event-condition] 条件 ${eventConditionName} 检查失败:`, error);\n                            return TaskStatus.Failure;\n                        }\n                    });\n                }\n                else {\n                    console.warn('[event-condition] 缺少 eventName 属性');\n                    node = new ExecuteActionConditional(() => TaskStatus.Failure);\n                }\n                break;\n            // ========== 黑板动作节点 ==========\n            case 'set-blackboard-value':\n                const rawVariableName = String(props.variableName || 'variable');\n                // 清理变量名,移除黑板变量引用语法 {{variableName}}\n                const setVariableName = rawVariableName.replace(/^\\{\\{|\\}\\}$/g, '');\n                const setValue = props.value;\n                const setSourceVariable = props.sourceVariable ? String(props.sourceVariable).replace(/^\\{\\{|\\}\\}$/g, '') : undefined;\n                const setForce = props.force === true;\n                node = new SetBlackboardValue(setVariableName, setValue, setSourceVariable, setForce);\n                break;\n            case 'add-to-blackboard':\n            case 'add-blackboard-value':\n                node = new AddToBlackboardValue(String(props.variableName || 'variable'), Number(props.increment) || 1, props.incrementVariable ? String(props.incrementVariable) : undefined);\n                break;\n            case 'toggle-blackboard-bool':\n                node = new ToggleBlackboardBool(String(props.variableName || 'variable'));\n                break;\n            case 'reset-blackboard-variable':\n                node = new ResetBlackboardVariable(String(props.variableName || 'variable'));\n                break;\n            case 'math-blackboard-operation':\n                const mathOperation = String(props.operation || 'add');\n                const mathOperand2Value = typeof props.operand2 === 'string' ? props.operand2 : Number(props.operand2 || 0);\n                node = new MathBlackboardOperation(String(props.targetVariable || 'result'), String(props.operand1Variable || 'operand1'), mathOperand2Value, MathOperation[mathOperation] || MathOperation.Add);\n                break;\n            case 'log-blackboard-value':\n                node = new LogBlackboardValue(String(props.variableName || 'variable'), String(props.prefix || '[Blackboard]'));\n                break;\n            case 'wait-blackboard-condition':\n                const waitVarName = String(props.variableName || 'variable');\n                const expectedValue = props.expectedValue;\n                node = new WaitForBlackboardCondition(waitVarName, expectedValue);\n                break;\n            // ========== 黑板条件节点 ==========\n            case 'blackboard-value-comparison':\n                const operatorStr = String(props.operator || props.compareOperator || 'equal');\n                // 映射操作符字符串到枚举\n                let operator;\n                switch (operatorStr.toLowerCase()) {\n                    case 'equal':\n                        operator = CompareOperator.Equal;\n                        break;\n                    case 'notequal':\n                    case 'not_equal':\n                        operator = CompareOperator.NotEqual;\n                        break;\n                    case 'greater':\n                        operator = CompareOperator.Greater;\n                        break;\n                    case 'greaterorequal':\n                    case 'greater_or_equal':\n                        operator = CompareOperator.GreaterOrEqual;\n                        break;\n                    case 'less':\n                        operator = CompareOperator.Less;\n                        break;\n                    case 'lessorequal':\n                    case 'less_or_equal':\n                        operator = CompareOperator.LessOrEqual;\n                        break;\n                    case 'contains':\n                        operator = CompareOperator.Contains;\n                        break;\n                    case 'notcontains':\n                    case 'not_contains':\n                        operator = CompareOperator.NotContains;\n                        break;\n                    default:\n                        operator = CompareOperator.Equal;\n                        break;\n                }\n                node = new ExecuteActionConditional((ctx) => {\n                    const conditional = new BlackboardValueComparison(String(props.variableName || 'variable'), operator, props.compareValue, props.compareVariable ? String(props.compareVariable) : undefined);\n                    return conditional.update(ctx);\n                });\n                break;\n            case 'blackboard-variable-exists':\n                node = new ExecuteActionConditional((ctx) => {\n                    const conditional = new BlackboardVariableExists(String(props.variableName || 'variable'), props.invert === true);\n                    return conditional.update(ctx);\n                });\n                break;\n            case 'blackboard-variable-type-check':\n                const expectedTypeStr = String(props.expectedType || 'string');\n                // 映射类型字符串到枚举\n                const expectedType = BehaviorTreeBuilder.mapToBlackboardType(expectedTypeStr);\n                node = new ExecuteActionConditional((ctx) => {\n                    const conditional = new BlackboardVariableTypeCheck(String(props.variableName || 'variable'), expectedType);\n                    return conditional.update(ctx);\n                });\n                break;\n            case 'blackboard-variable-range-check':\n                node = new ExecuteActionConditional((ctx) => {\n                    const conditional = new BlackboardVariableRangeCheck(String(props.variableName || 'variable'), Number(props.minValue) || 0, Number(props.maxValue) || 100);\n                    return conditional.update(ctx);\n                });\n                break;\n            // ========== 通用条件节点 ==========\n            case 'numeric-comparison':\n                node = new ExecuteActionConditional((ctx) => {\n                    const conditional = new NumericComparison(String(props.propertyPath || 'value'), String(props.compareOperator || 'equal'), Number(props.compareValue) || 0);\n                    return conditional.update(ctx);\n                });\n                break;\n            case 'property-exists':\n                node = new ExecuteActionConditional((ctx) => {\n                    const conditional = new PropertyExists(String(props.propertyPath || 'property'));\n                    return conditional.update(ctx);\n                });\n                break;\n            // ========== 高级装饰器节点 ==========\n            case 'cooldown':\n                const cooldownTime = Number(props.cooldownTime) || 1.0;\n                node = new CooldownDecorator(cooldownTime);\n                break;\n            case 'timeout':\n                const timeoutDuration = Number(props.timeoutDuration) || 5.0;\n                node = new TimeoutDecorator(timeoutDuration);\n                break;\n            case 'chance':\n                const successChance = Number(props.successChance) || 0.5;\n                node = new ChanceDecorator(successChance);\n                break;\n            default:\n                console.warn('⚠️ 未知的节点类型:', nodeConfig.type, ',使用默认成功节点');\n                node = new ExecuteAction(() => TaskStatus.Success);\n                break;\n        }\n        // 为复合节点和装饰器添加子节点\n        if (nodeConfig.children && nodeConfig.children.length > 0) {\n            if (node instanceof Composite) {\n                // 复合节点可以有多个子节点\n                for (const childId of nodeConfig.children) {\n                    const childConfig = nodeMap.get(childId);\n                    if (childConfig) {\n                        const childNode = BehaviorTreeBuilder.createNodeFromJSONConfig(childConfig, nodeMap, context);\n                        node.addChild(childNode);\n                    }\n                    else {\n                        console.warn(`⚠️ 未找到子节点配置: ${childId}`);\n                    }\n                }\n            }\n            else if (node instanceof Decorator) {\n                // 装饰器只能有一个子节点\n                if (nodeConfig.children.length > 1) {\n                    console.warn('⚠️ 装饰器节点只能有一个子节点,将使用第一个');\n                }\n                const childId = nodeConfig.children[0];\n                const childConfig = nodeMap.get(childId);\n                if (childConfig) {\n                    const childNode = BehaviorTreeBuilder.createNodeFromJSONConfig(childConfig, nodeMap, context);\n                    node.child = childNode;\n                }\n                else {\n                    console.warn(`⚠️ 未找到子节点配置: ${childId}`);\n                }\n            }\n        }\n        return node;\n    }\n    /**\n     * 创建条件函数\n     * @param condition 条件配置\n     * @param context 执行上下文\n     * @returns 条件检查函数\n     */\n    static createConditionFunction(condition, context) {\n        if (!condition) {\n            return () => TaskStatus.Success;\n        }\n        if (condition.type === 'condition-custom') {\n            const conditionCodeConfig = condition.properties?.conditionCode;\n            const conditionCode = typeof conditionCodeConfig === 'string' ? conditionCodeConfig :\n                (typeof conditionCodeConfig === 'object' && conditionCodeConfig && 'value' in conditionCodeConfig ?\n                    String(conditionCodeConfig.value) : undefined);\n            if (conditionCode && typeof conditionCode === 'string') {\n                try {\n                    const condFunc = new Function('context', `\r\n                        try {\r\n                            return (${conditionCode})(context);\r\n                        } catch (error) {\r\n                            console.error('条件函数执行错误:', error);\r\n                            return false;\r\n                        }\r\n                    `);\n                    return (ctx) => {\n                        try {\n                            const result = condFunc(ctx);\n                            return result ? TaskStatus.Success : TaskStatus.Failure;\n                        }\n                        catch (error) {\n                            console.error('条件函数执行失败:', error);\n                            return TaskStatus.Failure;\n                        }\n                    };\n                }\n                catch (error) {\n                    console.warn('解析条件函数失败:', error);\n                }\n            }\n        }\n        return () => TaskStatus.Success;\n    }\n    /**\n     * 替换对象中的黑板变量引用\n     * @param obj 要处理的对象\n     * @param blackboard 黑板实例\n     * @returns 替换后的对象\n     */\n    static replaceBlackboardVariables(obj, blackboard) {\n        if (obj === null || obj === undefined) {\n            return obj;\n        }\n        if (typeof obj === 'string') {\n            // 检查是否是纯黑板变量引用(如 \"{{variableName}}\")\n            const pureVariableMatch = obj.match(/^{{\\s*(\\w+)\\s*}}$/);\n            if (pureVariableMatch) {\n                // 纯变量引用,返回原始类型的值\n                const varName = pureVariableMatch[1];\n                const value = blackboard.getValue(varName);\n                if (value !== undefined) {\n                    return value; // 保持原始类型\n                }\n                return obj; // 变量不存在,返回原字符串\n            }\n            // 包含变量的字符串模板,进行字符串替换\n            return obj.replace(/\\{\\{(\\w+)\\}\\}/g, (match, varName) => {\n                const value = blackboard.getValue(varName);\n                return value !== undefined ? String(value) : match;\n            });\n        }\n        if (Array.isArray(obj)) {\n            // 处理数组\n            return obj.map(item => BehaviorTreeBuilder.replaceBlackboardVariables(item, blackboard));\n        }\n        if (typeof obj === 'object') {\n            // 处理对象\n            const result = {};\n            for (const [key, value] of Object.entries(obj)) {\n                result[key] = BehaviorTreeBuilder.replaceBlackboardVariables(value, blackboard);\n            }\n            return result;\n        }\n        return obj;\n    }\n    /**\n     * 提取嵌套属性值\n     * @param prop 属性配置对象或直接值\n     * @returns 提取的值\n     */\n    static extractNestedValue(prop) {\n        if (prop === null || prop === undefined) {\n            return prop;\n        }\n        // 如果是简单值,直接返回\n        if (typeof prop !== 'object') {\n            return prop;\n        }\n        // 如果有value属性,递归提取\n        if ('value' in prop) {\n            return BehaviorTreeBuilder.extractNestedValue(prop.value);\n        }\n        return prop;\n    }\n}\n//# sourceMappingURL=BehaviorTreeBuilder.js.map","/**\n * 通用对象池,用于减少对象创建和销毁的开销\n *\n * @template T 池中对象的类型\n *\n * @example\n * ```typescript\n * // 创建一个ExecuteAction的对象池\n * const actionPool = new ObjectPool(\n *   () => new ExecuteAction(() => TaskStatus.Success),\n *   (action) => action.invalidate(),\n *   50 // 最大池大小\n * );\n *\n * // 获取对象\n * const action = actionPool.get();\n *\n * // 使用完毕后归还\n * actionPool.release(action);\n * ```\n */\nexport class ObjectPool {\n    /**\n     * 创建对象池\n     * @param createFn 创建新对象的函数\n     * @param resetFn 重置对象状态的函数(可选)\n     * @param maxSize 池的最大大小,必须大于0,默认100\n     * @throws {Error} 当maxSize小于等于0时抛出错误\n     */\n    constructor(createFn, resetFn, maxSize = 100) {\n        this._pool = [];\n        if (maxSize <= 0) {\n            throw new Error('池的最大大小必须大于0');\n        }\n        if (typeof createFn !== 'function') {\n            throw new Error('createFn必须是一个函数');\n        }\n        this._createFn = createFn;\n        this._resetFn = resetFn;\n        this._maxSize = maxSize;\n    }\n    /**\n     * 从池中获取一个对象\n     * 如果池为空,则创建新对象\n     * @returns 池中的对象或新创建的对象\n     */\n    get() {\n        if (this._pool.length > 0) {\n            return this._pool.pop();\n        }\n        return this._createFn();\n    }\n    /**\n     * 将对象归还到池中\n     * @param obj 要归还的对象\n     * @throws {Error} 当obj为null或undefined时抛出错误\n     */\n    release(obj) {\n        if (obj == null) {\n            throw new Error('不能归还null或undefined对象到池中');\n        }\n        // 检查是否已经在池中(避免重复归还)\n        if (this._pool.includes(obj)) {\n            console.warn('对象已经在池中,忽略重复归还');\n            return;\n        }\n        if (this._pool.length < this._maxSize) {\n            // 重置对象状态\n            if (this._resetFn) {\n                try {\n                    this._resetFn(obj);\n                }\n                catch (error) {\n                    console.error('重置对象时发生错误:', error);\n                    // 即使重置失败,也不将对象放回池中\n                    return;\n                }\n            }\n            this._pool.push(obj);\n        }\n        // 如果池已满,对象会被丢弃,由GC回收\n    }\n    /**\n     * 预填充池\n     * @param count 要预创建的对象数量,必须大于等于0\n     * @throws {Error} 当count小于0时抛出错误\n     */\n    prewarm(count) {\n        if (count < 0) {\n            throw new Error('预填充数量不能小于0');\n        }\n        const actualCount = Math.min(count, this._maxSize - this._pool.length);\n        for (let i = 0; i < actualCount; i++) {\n            try {\n                this._pool.push(this._createFn());\n            }\n            catch (error) {\n                console.error('预填充对象时发生错误:', error);\n                break; // 停止预填充\n            }\n        }\n    }\n    /**\n     * 清空池\n     */\n    clear() {\n        this._pool.length = 0;\n    }\n    /**\n     * 获取池的当前大小\n     */\n    get size() {\n        return this._pool.length;\n    }\n    /**\n     * 获取池的最大大小\n     */\n    get maxSize() {\n        return this._maxSize;\n    }\n    /**\n     * 设置池的最大大小\n     * @param value 新的最大大小,必须大于0\n     * @throws {Error} 当value小于等于0时抛出错误\n     */\n    set maxSize(value) {\n        if (value <= 0) {\n            throw new Error('池的最大大小必须大于0');\n        }\n        this._maxSize = value;\n        // 如果当前池大小超过新的最大值,移除多余的对象\n        while (this._pool.length > this._maxSize) {\n            this._pool.pop();\n        }\n    }\n    /**\n     * 获取池的使用率(0-1之间)\n     * @returns 当前大小与最大大小的比率\n     */\n    get utilization() {\n        return this._pool.length / this._maxSize;\n    }\n    /**\n     * 检查池是否为空\n     */\n    get isEmpty() {\n        return this._pool.length === 0;\n    }\n    /**\n     * 检查池是否已满\n     */\n    get isFull() {\n        return this._pool.length >= this._maxSize;\n    }\n}\n/**\n * 行为树节点池管理器\n * 为常用的行为树节点类型提供专门的对象池\n *\n * @example\n * ```typescript\n * const poolManager = BehaviorNodePoolManager.getInstance();\n *\n * // 注册节点池\n * poolManager.registerPool('ExecuteAction',\n *   () => new ExecuteAction(() => TaskStatus.Success),\n *   (action) => action.invalidate()\n * );\n *\n * // 获取和归还对象\n * const action = poolManager.get<ExecuteAction>('ExecuteAction');\n * poolManager.release('ExecuteAction', action);\n * ```\n */\nexport class BehaviorNodePoolManager {\n    constructor() {\n        this._pools = new Map();\n    }\n    /**\n     * 获取单例实例\n     */\n    static getInstance() {\n        if (!this._instance) {\n            this._instance = new BehaviorNodePoolManager();\n        }\n        return this._instance;\n    }\n    /**\n     * 注册一个节点类型的对象池\n     * @param typeName 节点类型名称,不能为空字符串\n     * @param createFn 创建函数\n     * @param resetFn 重置函数\n     * @param maxSize 最大池大小,默认50\n     * @throws {Error} 当typeName为空或已存在时抛出错误\n     */\n    registerPool(typeName, createFn, resetFn, maxSize = 50) {\n        if (!typeName || typeName.trim() === '') {\n            throw new Error('节点类型名称不能为空');\n        }\n        if (this._pools.has(typeName)) {\n            throw new Error(`节点类型 \"${typeName}\" 的池已经存在`);\n        }\n        const pool = new ObjectPool(createFn, resetFn, maxSize);\n        this._pools.set(typeName, pool);\n    }\n    /**\n     * 从指定类型的池中获取对象\n     * @param typeName 节点类型名称\n     * @returns 池中的对象,如果池不存在则返回null\n     */\n    get(typeName) {\n        const pool = this._pools.get(typeName);\n        return pool ? pool.get() : null;\n    }\n    /**\n     * 将对象归还到对应的池中\n     * @param typeName 节点类型名称\n     * @param obj 要归还的对象\n     * @returns 是否成功归还\n     */\n    release(typeName, obj) {\n        const pool = this._pools.get(typeName);\n        if (pool && obj != null) {\n            try {\n                pool.release(obj);\n                return true;\n            }\n            catch (error) {\n                console.error(`归还对象到池 \"${typeName}\" 时发生错误:`, error);\n                return false;\n            }\n        }\n        return false;\n    }\n    /**\n     * 预热所有池\n     * @param count 每个池预创建的对象数量,默认10\n     */\n    prewarmAll(count = 10) {\n        for (const [typeName, pool] of this._pools.entries()) {\n            try {\n                pool.prewarm(count);\n            }\n            catch (error) {\n                console.error(`预热池 \"${typeName}\" 时发生错误:`, error);\n            }\n        }\n    }\n    /**\n     * 清空所有池\n     */\n    clearAll() {\n        for (const pool of this._pools.values()) {\n            pool.clear();\n        }\n    }\n    /**\n     * 移除指定类型的池\n     * @param typeName 节点类型名称\n     * @returns 是否成功移除\n     */\n    removePool(typeName) {\n        const pool = this._pools.get(typeName);\n        if (pool) {\n            pool.clear();\n            this._pools.delete(typeName);\n            return true;\n        }\n        return false;\n    }\n    /**\n     * 获取池的统计信息\n     * @returns 包含所有池统计信息的对象\n     */\n    getStats() {\n        const stats = {};\n        for (const [typeName, pool] of this._pools.entries()) {\n            stats[typeName] = {\n                size: pool.size,\n                maxSize: pool.maxSize,\n                utilization: pool.utilization\n            };\n        }\n        return stats;\n    }\n    /**\n     * 获取已注册的池类型列表\n     */\n    getRegisteredTypes() {\n        return Array.from(this._pools.keys());\n    }\n}\n//# sourceMappingURL=ObjectPool.js.map","/**\n * 高性能分层对象池系统\n *\n * @description\n * 提供比原始ObjectPool更高性能的对象池实现:\n * - 使用WeakSet跟踪池中对象,避免includes()开销\n * - 实现分层池,根据使用频率分配不同大小的池\n * - 支持全局内存限制和自动清理\n * - 提供详细的性能统计\n *\n * @template T 池中对象的类型\n */\n/**\n * 池优先级枚举\n */\nexport var PoolPriority;\n(function (PoolPriority) {\n    /** 低优先级 - 优先清理 */\n    PoolPriority[PoolPriority[\"Low\"] = 0] = \"Low\";\n    /** 普通优先级 */\n    PoolPriority[PoolPriority[\"Normal\"] = 1] = \"Normal\";\n    /** 高优先级 - 最后清理 */\n    PoolPriority[PoolPriority[\"High\"] = 2] = \"High\";\n    /** 关键优先级 - 不会被自动清理 */\n    PoolPriority[PoolPriority[\"Critical\"] = 3] = \"Critical\";\n})(PoolPriority || (PoolPriority = {}));\n/**\n * 高性能对象池\n */\nexport class AdvancedObjectPool {\n    /**\n     * 创建高性能对象池\n     * @param createFn 创建新对象的函数\n     * @param resetFn 重置对象状态的函数(可选)\n     * @param config 池配置选项\n     */\n    constructor(createFn, resetFn, config = {}) {\n        this._pool = [];\n        this._poolSet = new WeakSet();\n        // 性能优化\n        this._lastCleanupTime = 0;\n        this._cleanupInterval = 5000; // 5秒清理一次\n        if (typeof createFn !== 'function') {\n            throw new Error('createFn必须是一个函数');\n        }\n        this._createFn = createFn;\n        this._resetFn = resetFn;\n        this._validator = config.validator;\n        // 设置默认配置\n        this._config = {\n            initialSize: config.initialSize ?? 0,\n            maxSize: config.maxSize ?? 100,\n            priority: config.priority ?? PoolPriority.Normal,\n            enableStats: config.enableStats ?? true,\n            validator: config.validator\n        };\n        if (this._config.maxSize <= 0) {\n            throw new Error('最大池大小必须大于0');\n        }\n        // 初始化统计信息\n        this._stats = {\n            currentSize: 0,\n            maxSize: this._config.maxSize,\n            totalGets: 0,\n            totalReleases: 0,\n            totalCreations: 0,\n            hitRate: 0,\n            utilization: 0,\n            priority: this._config.priority\n        };\n        // 预填充池\n        if (this._config.initialSize > 0) {\n            this.prewarm(this._config.initialSize);\n        }\n        // 注册到全局池管理器\n        AdvancedPoolManager.registerPool(this);\n    }\n    /**\n     * 从池中获取一个对象\n     * @returns 池中的对象或新创建的对象\n     */\n    get() {\n        this._updateStats('get');\n        // 尝试从池中获取\n        if (this._pool.length > 0) {\n            const obj = this._pool.pop();\n            this._poolSet.delete(obj);\n            this._updateStats('hit');\n            return obj;\n        }\n        // 池为空,创建新对象\n        const newObj = this._createObject();\n        this._updateStats('creation');\n        return newObj;\n    }\n    /**\n     * 将对象归还到池中\n     * @param obj 要归还的对象\n     * @returns 是否成功归还\n     */\n    release(obj) {\n        if (obj == null) {\n            console.warn('不能归还null或undefined对象到池中');\n            return false;\n        }\n        // 检查对象是否已在池中\n        if (this._poolSet.has(obj)) {\n            console.warn('对象已经在池中,忽略重复归还');\n            return false;\n        }\n        // 验证对象\n        if (this._validator && !this._validator(obj)) {\n            console.warn('对象验证失败,拒绝归还到池中');\n            return false;\n        }\n        // 检查池是否已满\n        if (this._pool.length >= this._config.maxSize) {\n            return false; // 池已满,对象将被GC回收\n        }\n        // 重置对象状态\n        if (this._resetFn) {\n            try {\n                this._resetFn(obj);\n            }\n            catch (error) {\n                console.error('重置对象时发生错误:', error);\n                return false;\n            }\n        }\n        // 归还到池中\n        this._pool.push(obj);\n        this._poolSet.add(obj);\n        this._updateStats('release');\n        return true;\n    }\n    /**\n     * 创建新对象\n     */\n    _createObject() {\n        try {\n            return this._createFn();\n        }\n        catch (error) {\n            console.error('创建对象时发生错误:', error);\n            throw error;\n        }\n    }\n    /**\n     * 更新统计信息\n     */\n    _updateStats(operation) {\n        if (!this._config.enableStats) {\n            return;\n        }\n        switch (operation) {\n            case 'get':\n                this._stats.totalGets++;\n                break;\n            case 'release':\n                this._stats.totalReleases++;\n                break;\n            case 'creation':\n                this._stats.totalCreations++;\n                break;\n            case 'hit':\n                // 命中率在get时计算\n                break;\n        }\n        // 更新派生统计信息\n        this._stats.currentSize = this._pool.length;\n        this._stats.hitRate = this._stats.totalGets > 0 ?\n            (this._stats.totalGets - this._stats.totalCreations) / this._stats.totalGets : 0;\n        this._stats.utilization = this._stats.currentSize / this._stats.maxSize;\n    }\n    /**\n     * 预填充池\n     * @param count 要预创建的对象数量\n     */\n    prewarm(count) {\n        if (count < 0) {\n            throw new Error('预填充数量不能小于0');\n        }\n        const actualCount = Math.min(count, this._config.maxSize - this._pool.length);\n        for (let i = 0; i < actualCount; i++) {\n            try {\n                const obj = this._createObject();\n                this._pool.push(obj);\n                this._poolSet.add(obj);\n                this._updateStats('creation');\n            }\n            catch (error) {\n                console.error('预填充对象时发生错误:', error);\n                break;\n            }\n        }\n    }\n    /**\n     * 清空池\n     * @param force 是否强制清空(忽略优先级)\n     */\n    clear(force = false) {\n        if (!force && this._config.priority === PoolPriority.Critical) {\n            return; // 关键优先级的池不会被清空\n        }\n        this._pool.length = 0;\n        // WeakSet会自动清理\n        this._updateStats('release'); // 更新统计信息\n    }\n    /**\n     * 收缩池到指定大小\n     * @param targetSize 目标大小\n     */\n    shrink(targetSize) {\n        if (targetSize < 0) {\n            targetSize = 0;\n        }\n        while (this._pool.length > targetSize) {\n            const obj = this._pool.pop();\n            if (obj) {\n                this._poolSet.delete(obj);\n            }\n        }\n        this._updateStats('release');\n    }\n    /**\n     * 执行定期清理\n     */\n    performMaintenance() {\n        const now = Date.now();\n        if (now - this._lastCleanupTime < this._cleanupInterval) {\n            return;\n        }\n        this._lastCleanupTime = now;\n        // 根据使用率决定是否收缩池\n        if (this._stats.utilization < 0.3 && this._pool.length > this._config.initialSize) {\n            const targetSize = Math.max(this._config.initialSize, Math.floor(this._pool.length * 0.7));\n            this.shrink(targetSize);\n        }\n    }\n    /**\n     * 获取池的当前大小\n     */\n    get size() {\n        return this._pool.length;\n    }\n    /**\n     * 获取池的最大大小\n     */\n    get maxSize() {\n        return this._config.maxSize;\n    }\n    /**\n     * 获取池的优先级\n     */\n    get priority() {\n        return this._config.priority;\n    }\n    /**\n     * 设置池的最大大小\n     */\n    set maxSize(value) {\n        if (value <= 0) {\n            throw new Error('最大池大小必须大于0');\n        }\n        this._config.maxSize = value;\n        this._stats.maxSize = value;\n        // 如果当前池大小超过新的最大值,收缩池\n        if (this._pool.length > value) {\n            this.shrink(value);\n        }\n    }\n    /**\n     * 获取池的统计信息\n     */\n    getStats() {\n        this._updateStats('get'); // 更新当前统计信息\n        return { ...this._stats };\n    }\n    /**\n     * 重置统计信息\n     */\n    resetStats() {\n        this._stats.totalGets = 0;\n        this._stats.totalReleases = 0;\n        this._stats.totalCreations = 0;\n        this._stats.hitRate = 0;\n    }\n    /**\n     * 检查池是否为空\n     */\n    get isEmpty() {\n        return this._pool.length === 0;\n    }\n    /**\n     * 检查池是否已满\n     */\n    get isFull() {\n        return this._pool.length >= this._config.maxSize;\n    }\n}\n/**\n * 全局高级池管理器\n */\nexport class AdvancedPoolManager {\n    /**\n     * 注册池到全局管理器\n     */\n    static registerPool(pool) {\n        this._pools.add(pool);\n    }\n    /**\n     * 从全局管理器注销池\n     */\n    static unregisterPool(pool) {\n        this._pools.delete(pool);\n    }\n    /**\n     * 执行全局内存清理\n     */\n    static performGlobalCleanup() {\n        // 按优先级排序池(低优先级先清理)\n        const sortedPools = Array.from(this._pools).sort((a, b) => a.priority - b.priority);\n        for (const pool of sortedPools) {\n            if (pool.priority === PoolPriority.Critical) {\n                continue; // 跳过关键优先级的池\n            }\n            // 收缩池到初始大小的一半\n            const targetSize = Math.floor(pool.size * 0.5);\n            pool.shrink(targetSize);\n        }\n    }\n    /**\n     * 执行全局维护\n     */\n    static performGlobalMaintenance() {\n        const now = Date.now();\n        if (now - this._lastMaintenanceTime < this._maintenanceInterval) {\n            return;\n        }\n        this._lastMaintenanceTime = now;\n        // 对所有池执行维护\n        for (const pool of this._pools) {\n            pool.performMaintenance();\n        }\n        // 检查是否需要全局清理\n        const totalPools = this._pools.size;\n        if (totalPools > 50) { // 如果池数量过多,执行清理\n            this.performGlobalCleanup();\n        }\n    }\n    /**\n     * 获取全局统计信息\n     */\n    static getGlobalStats() {\n        let totalObjects = 0;\n        const poolsByPriority = {\n            [PoolPriority.Low]: 0,\n            [PoolPriority.Normal]: 0,\n            [PoolPriority.High]: 0,\n            [PoolPriority.Critical]: 0\n        };\n        for (const pool of this._pools) {\n            totalObjects += pool.size;\n            poolsByPriority[pool.priority]++;\n        }\n        return {\n            totalPools: this._pools.size,\n            totalObjects,\n            totalMemoryUsage: totalObjects * 64, // 估算内存使用(每个对象64字节)\n            poolsByPriority\n        };\n    }\n    /**\n     * 清理所有池\n     */\n    static clearAllPools(force = false) {\n        for (const pool of this._pools) {\n            pool.clear(force);\n        }\n    }\n}\nAdvancedPoolManager._pools = new Set();\nAdvancedPoolManager._maintenanceInterval = 10000; // 10秒\nAdvancedPoolManager._lastMaintenanceTime = 0;\n//# sourceMappingURL=AdvancedObjectPool.js.map","import { Behavior } from '../Behavior';\nimport { TaskStatus } from '../TaskStatus';\n/**\n * 当随机概率高于successProbability概率时返回成功。\n * 否则它将返回失败。\n * successProbability应该在0和1之间\n */\nexport class RandomProbability extends Behavior {\n    constructor(successProbability) {\n        super();\n        this.discriminator = \"IConditional\";\n        this._successProbability = successProbability;\n    }\n    update(_context) {\n        if (Math.random() > this._successProbability)\n            return TaskStatus.Success;\n        return TaskStatus.Failure;\n    }\n}\n//# sourceMappingURL=RandomProbability.js.map","/**\n * 事件注册表类\n * 管理行为树中的动作和条件事件处理器\n * 支持精确匹配和正则表达式匹配\n *\n * @example\n * ```typescript\n * // 定义自定义上下文类型\n * interface GameContext extends IBehaviorTreeContext {\n *     player: Player;\n *     enemies: Enemy[];\n * }\n *\n * // 定义参数类型\n * interface MoveParams {\n *     targetX: number;\n *     targetY: number;\n *     speed?: number;\n * }\n *\n * const registry = new EventRegistry();\n *\n * // 注册精确匹配的动作处理器\n * registry.registerAction<GameContext, MoveParams>(\n *     'move-to',\n *     (context, params) => {\n *         context.player.moveTo(params.targetX, params.targetY, params.speed || 1);\n *         return 'success';\n *     }\n * );\n *\n * // 注册正则表达式动作处理器 - 匹配所有以 \"enemy.\" 开头的事件\n * registry.registerActionRegex<GameContext>(\n *     /^enemy\\..+$/,\n *     (context, params) => {\n *         // 处理所有敌人相关的动作:enemy.attack, enemy.move, enemy.die 等\n *         console.log('处理敌人动作:', params);\n *         return 'success';\n *     }\n * );\n *\n * // 注册正则表达式条件检查器 - 匹配所有以 \"player.\" 开头的条件\n * registry.registerConditionRegex<GameContext>(\n *     /^player\\..+$/,\n *     (context, params) => {\n *         // 处理所有玩家相关的条件:player.alive, player.hasItem, player.canMove 等\n *         return context.player.health > 0;\n *     }\n * );\n *\n * // 异步动作示例\n * registry.registerAction<GameContext>(\n *     'async-action',\n *     async (context) => {\n *         await context.player.performComplexAction();\n *         return 'success';\n *     }\n * );\n * ```\n */\nexport class EventRegistry {\n    constructor() {\n        this.actionHandlers = new Map();\n        this.conditionHandlers = new Map();\n        // 正则表达式处理器存储\n        this.regexActionHandlers = new Map();\n        this.regexConditionHandlers = new Map();\n    }\n    /**\n     * 注册动作处理器\n     * @template TContext 上下文类型\n     * @template TParams 参数类型\n     * @param eventName 事件名称\n     * @param handler 处理器函数,必须返回 ActionResult 类型\n     */\n    registerAction(eventName, handler) {\n        this.actionHandlers.set(eventName, handler);\n    }\n    /**\n     * 注册正则表达式动作处理器\n     * @template TContext 上下文类型\n     * @template TParams 参数类型\n     * @param eventPattern 事件名称正则表达式\n     * @param handler 处理器函数,必须返回 ActionResult 类型\n     */\n    registerActionRegex(eventPattern, handler) {\n        this.regexActionHandlers.set(eventPattern, handler);\n    }\n    /**\n     * 注册条件检查器\n     * @template TContext 上下文类型\n     * @template TParams 参数类型\n     * @param eventName 事件名称\n     * @param checker 检查器函数,必须返回 boolean 类型\n     */\n    registerCondition(eventName, checker) {\n        this.conditionHandlers.set(eventName, checker);\n    }\n    /**\n     * 注册正则表达式条件检查器\n     * @template TContext 上下文类型\n     * @template TParams 参数类型\n     * @param eventPattern 事件名称正则表达式\n     * @param checker 检查器函数,必须返回 boolean 类型\n     */\n    registerConditionRegex(eventPattern, checker) {\n        this.regexConditionHandlers.set(eventPattern, checker);\n    }\n    /**\n     * 获取动作处理器\n     * @param eventName 事件名称\n     * @returns 处理器函数或undefined\n     */\n    getActionHandler(eventName) {\n        const exactMatch = this.actionHandlers.get(eventName);\n        if (exactMatch) {\n            return exactMatch;\n        }\n        for (const [pattern, handler] of this.regexActionHandlers) {\n            if (pattern.test(eventName)) {\n                return handler;\n            }\n        }\n        return undefined;\n    }\n    /**\n     * 获取条件检查器\n     * @param eventName 事件名称\n     * @returns 检查器函数或undefined\n     */\n    getConditionHandler(eventName) {\n        const exactMatch = this.conditionHandlers.get(eventName);\n        if (exactMatch) {\n            return exactMatch;\n        }\n        for (const [pattern, handler] of this.regexConditionHandlers) {\n            if (pattern.test(eventName)) {\n                return handler;\n            }\n        }\n        return undefined;\n    }\n    getAllEventNames() {\n        const actionNames = Array.from(this.actionHandlers.keys());\n        const conditionNames = Array.from(this.conditionHandlers.keys());\n        return [...new Set([...actionNames, ...conditionNames])];\n    }\n    /**\n     * 获取所有正则表达式模式\n     * @returns 包含所有注册的正则表达式模式的数组\n     */\n    getAllRegexPatterns() {\n        const actionPatterns = Array.from(this.regexActionHandlers.keys());\n        const conditionPatterns = Array.from(this.regexConditionHandlers.keys());\n        return [...new Set([...actionPatterns, ...conditionPatterns])];\n    }\n    /**\n     * 测试事件名是否匹配任何已注册的处理器(包括正则表达式)\n     * @param eventName 事件名称\n     * @returns 是否有匹配的处理器\n     */\n    hasHandler(eventName) {\n        return this.getActionHandler(eventName) !== undefined ||\n            this.getConditionHandler(eventName) !== undefined;\n    }\n    clear() {\n        this.actionHandlers.clear();\n        this.conditionHandlers.clear();\n        this.regexActionHandlers.clear();\n        this.regexConditionHandlers.clear();\n    }\n}\nexport class GlobalEventRegistry {\n    static getInstance() {\n        if (!GlobalEventRegistry.instance) {\n            GlobalEventRegistry.instance = new EventRegistry();\n        }\n        return GlobalEventRegistry.instance;\n    }\n}\nGlobalEventRegistry.instance = null;\n//# sourceMappingURL=EventRegistry.js.map","// BehaviourTree (行为树) 模块\n// 适用于NPC AI、Boss战、宠物系统、任务系统等\n// 核心类\nexport * from './Behavior';\nexport * from './BehaviorTree';\nexport * from './BehaviorTreeBuilder';\nexport * from './TaskStatus';\nexport * from './ObjectPool';\nexport * from './AdvancedObjectPool';\nexport * from './Blackboard';\n// Actions\nexport * from './actions/index';\n// Composites\nexport * from './composites/index';\n// Conditionals\nexport * from './conditionals/index';\n// Decorators\nexport * from './decorators/index';\n// Events (事件系统)\nexport * from './events/index';\n//# sourceMappingURL=index.js.map","export class State {\n    setMachineAndContext(machine, context) {\n        this._machine = machine;\n        this._context = context;\n        this.onInitialized();\n    }\n    /**\n     * 在设置machine和context之后直接调用,允许状态执行任何所需的设置\n     *\n     * @memberof State\n     */\n    onInitialized() { }\n    /**\n     * 当状态变为活动状态时调用\n     *\n     * @memberof State\n     */\n    begin() { }\n    /**\n     * 在更新之前调用,允许状态最后一次机会改变状态\n     *\n     * @memberof State\n     */\n    reason() { }\n    /**\n     * 此状态不再是活动状态时调用\n     *\n     * @memberof State\n     */\n    end() { }\n}\n//# sourceMappingURL=State.js.map","/**\n * 状态机实现\n *\n * @description\n * 基于\"状态作为对象\"模式的状态机实现。\n * 每个状态使用单独的类,适合复杂的状态管理系统。\n *\n * @template T 上下文类型\n *\n * @example\n * ```typescript\n * interface GameContext {\n *   player: Player;\n *   enemies: Enemy[];\n * }\n *\n * const context: GameContext = { ... };\n * const machine = new StateMachine(context, new IdleState());\n *\n * machine.addState(new AttackState());\n * machine.addState(new DefendState());\n *\n * // 在游戏循环中更新\n * machine.update(deltaTime);\n *\n * // 切换状态\n * machine.changeState(AttackState);\n * ```\n */\nexport class StateMachine {\n    /** 获取当前状态 */\n    get currentState() {\n        return this._currentState;\n    }\n    /**\n     * 创建状态机\n     * @param context 执行上下文\n     * @param initialState 初始状态实例\n     * @throws {Error} 当context或initialState为null时抛出错误\n     */\n    constructor(context, initialState) {\n        /** 在当前状态中的经过时间(秒) */\n        this.elapsedTimeInState = 0;\n        /** 状态实例缓存 */\n        this._states = new Map();\n        if (context == null) {\n            throw new Error('上下文不能为null或undefined');\n        }\n        if (initialState == null) {\n            throw new Error('初始状态不能为null或undefined');\n        }\n        this._context = context;\n        this.addState(initialState);\n        this._currentState = initialState;\n        this._currentState.begin();\n    }\n    /**\n     * 将状态添加到状态机\n     * @param state 要添加的状态实例\n     * @throws {Error} 当state为null或已存在时抛出错误\n     */\n    addState(state) {\n        if (state == null) {\n            throw new Error('状态不能为null或undefined');\n        }\n        const stateConstructor = state.constructor;\n        if (this._states.has(stateConstructor)) {\n            throw new Error(`状态 ${stateConstructor.name} 已经存在`);\n        }\n        state.setMachineAndContext(this, this._context);\n        this._states.set(stateConstructor, state);\n    }\n    /**\n     * 移除指定类型的状态\n     * @param stateType 状态构造函数\n     * @returns 是否成功移除\n     */\n    removeState(stateType) {\n        if (this._currentState instanceof stateType) {\n            console.warn('无法移除当前正在使用的状态');\n            return false;\n        }\n        return this._states.delete(stateType);\n    }\n    /**\n     * 使用提供的时间差更新状态机\n     * @param deltaTime 时间差(秒)\n     * @throws {Error} 当deltaTime为负数或无效时抛出错误\n     */\n    update(deltaTime) {\n        if (deltaTime < 0 || !isFinite(deltaTime)) {\n            throw new Error('deltaTime必须是非负的有限数');\n        }\n        this.elapsedTimeInState += deltaTime;\n        try {\n            this._currentState.reason();\n            this._currentState.update(deltaTime);\n        }\n        catch (error) {\n            console.error('更新状态时发生错误:', error);\n        }\n    }\n    /**\n     * 从状态机获取特定状态实例,而不改变当前状态\n     * @param stateType 状态构造函数\n     * @returns 状态实例,如果不存在则返回null\n     */\n    getState(stateType) {\n        const state = this._states.get(stateType);\n        if (!state) {\n            console.error(`状态 ${stateType.name} 不存在。请确保已调用 addState 添加该状态。`);\n            return null;\n        }\n        return state;\n    }\n    /**\n     * 更改当前状态\n     * @param newStateType 新状态的构造函数\n     * @returns 新状态实例,如果切换失败则返回null\n     */\n    changeState(newStateType) {\n        // 如果已经是目标状态,直接返回\n        if (this._currentState instanceof newStateType) {\n            return this._currentState;\n        }\n        const newState = this._states.get(newStateType);\n        if (!newState) {\n            console.error(`状态 ${newStateType.name} 不存在。请确保已调用 addState 添加该状态。`);\n            return null;\n        }\n        try {\n            // 结束当前状态\n            this._currentState.end();\n            // 切换到新状态\n            this.elapsedTimeInState = 0;\n            this.previousState = this._currentState;\n            this._currentState = newState;\n            this._currentState.begin();\n            // 触发状态改变回调\n            if (this.onStateChanged) {\n                this.onStateChanged();\n            }\n            return this._currentState;\n        }\n        catch (error) {\n            console.error('切换状态时发生错误:', error);\n            return null;\n        }\n    }\n    /**\n     * 强制切换到指定状态(即使是相同状态也会重新初始化)\n     * @param stateType 状态构造函数\n     * @returns 状态实例,如果切换失败则返回null\n     */\n    forceChangeState(stateType) {\n        const state = this._states.get(stateType);\n        if (!state) {\n            console.error(`状态 ${stateType.name} 不存在。请确保已调用 addState 添加该状态。`);\n            return null;\n        }\n        try {\n            // 结束当前状态\n            this._currentState.end();\n            // 切换到新状态\n            this.elapsedTimeInState = 0;\n            this.previousState = this._currentState;\n            this._currentState = state;\n            this._currentState.begin();\n            // 触发状态改变回调\n            if (this.onStateChanged) {\n                this.onStateChanged();\n            }\n            return this._currentState;\n        }\n        catch (error) {\n            console.error('强制切换状态时发生错误:', error);\n            return null;\n        }\n    }\n    /**\n     * 检查当前是否为指定状态\n     * @param stateType 状态构造函数\n     * @returns 是否为指定状态\n     */\n    isInState(stateType) {\n        return this._currentState instanceof stateType;\n    }\n    /**\n     * 获取所有已注册的状态类型\n     * @returns 状态构造函数数组\n     */\n    getRegisteredStateTypes() {\n        return Array.from(this._states.keys());\n    }\n    /**\n     * 获取状态机的统计信息\n     * @returns 包含状态数量和当前状态信息的对象\n     */\n    getStats() {\n        return {\n            stateCount: this._states.size,\n            currentStateName: this._currentState.constructor.name,\n            elapsedTimeInState: this.elapsedTimeInState,\n            previousStateName: this.previousState?.constructor.name\n        };\n    }\n}\n//# sourceMappingURL=StateMachine.js.map","/**\n * 状态方法缓存\n * 存储状态的进入、更新和退出方法\n */\nclass StateMethodCache {\n}\n/**\n * 简单状态机实现\n *\n * @description\n * 基于枚举的简单状态机,通过约定的方法名来处理状态逻辑。\n * 适合简单的状态管理场景,状态逻辑直接写在状态机类中。\n *\n * @template TEnum 状态枚举类型\n *\n * @example\n * ```typescript\n * enum PlayerState {\n *   Idle = \"Idle\",\n *   Running = \"Running\",\n *   Jumping = \"Jumping\"\n * }\n *\n * class PlayerStateMachine extends SimpleStateMachine<PlayerState> {\n *   constructor() {\n *     super(PlayerState);\n *     this.initialState = PlayerState.Idle;\n *   }\n *\n *   // 状态方法按照 \"状态名_enter/tick/exit\" 的约定命名\n *   Idle_enter() {\n *     console.log(\"进入空闲状态\");\n *   }\n *\n *   Idle_tick() {\n *     // 空闲状态逻辑\n *   }\n *\n *   Idle_exit() {\n *     console.log(\"退出空闲状态\");\n *   }\n *\n *   Running_enter() {\n *     console.log(\"开始跑步\");\n *   }\n *\n *   Running_tick() {\n *     // 跑步状态逻辑\n *   }\n *\n *   Running_exit() {\n *     console.log(\"停止跑步\");\n *   }\n * }\n * ```\n */\nexport class SimpleStateMachine {\n    /**\n     * 获取当前状态\n     */\n    get currentState() {\n        return this._currentState;\n    }\n    /**\n     * 设置当前状态\n     * @param value 新状态\n     */\n    set currentState(value) {\n        if (this._currentState === value) {\n            return;\n        }\n        this.previousState = this._currentState;\n        this._currentState = value;\n        // 退出前一个状态\n        if (this._stateMethods.exitState) {\n            try {\n                this._stateMethods.exitState.call(this);\n            }\n            catch (error) {\n                console.error('退出状态时发生错误:', error);\n            }\n        }\n        this.elapsedTimeInState = 0;\n        const newStateMethods = this._stateCache.get(this._currentState);\n        if (newStateMethods) {\n            this._stateMethods = newStateMethods;\n        }\n        else {\n            console.warn('状态的方法缓存不存在');\n            this._stateMethods = new StateMethodCache();\n        }\n        // 进入新状态\n        if (this._stateMethods.enterState) {\n            try {\n                this._stateMethods.enterState.call(this);\n            }\n            catch (error) {\n                console.error('进入状态时发生错误:', error);\n            }\n        }\n    }\n    /**\n     * 设置初始状态\n     * @param value 初始状态\n     */\n    set initialState(value) {\n        this._currentState = value;\n        const stateMethods = this._stateCache.get(this._currentState);\n        if (stateMethods) {\n            this._stateMethods = stateMethods;\n        }\n        else {\n            console.warn('初始状态的方法缓存不存在');\n            this._stateMethods = new StateMethodCache();\n        }\n        if (this._stateMethods.enterState) {\n            try {\n                this._stateMethods.enterState.call(this);\n            }\n            catch (error) {\n                console.error('进入初始状态时发生错误:', error);\n            }\n        }\n    }\n    /**\n     * 创建简单状态机\n     * @param stateEnum 状态枚举对象\n     */\n    constructor(stateEnum) {\n        /** 在当前状态中的经过时间 */\n        this.elapsedTimeInState = 0;\n        /** 状态方法缓存 */\n        this._stateCache = new Map();\n        /** 当前状态的方法缓存 */\n        this._stateMethods = new StateMethodCache();\n        this._stateCache = new Map();\n        // 遍历枚举值并配置状态方法\n        for (const enumKey in stateEnum) {\n            if (Object.prototype.hasOwnProperty.call(stateEnum, enumKey)) {\n                const enumValue = stateEnum[enumKey];\n                if (enumValue !== undefined) {\n                    this.configureAndCacheState(enumKey, enumValue);\n                }\n            }\n        }\n    }\n    /**\n     * 配置并缓存状态方法\n     * @param stateName 状态名称\n     * @param stateEnum 状态枚举值\n     */\n    configureAndCacheState(stateName, stateEnum) {\n        const state = new StateMethodCache();\n        // 使用类型安全的方法查找\n        const enterMethodName = stateName + '_enter';\n        const tickMethodName = stateName + '_tick';\n        const exitMethodName = stateName + '_exit';\n        // 检查方法是否存在并且是函数\n        if (this.hasMethod(enterMethodName)) {\n            state.enterState = this[enterMethodName].bind(this);\n        }\n        if (this.hasMethod(tickMethodName)) {\n            state.tick = this[tickMethodName].bind(this);\n        }\n        if (this.hasMethod(exitMethodName)) {\n            state.exitState = this[exitMethodName].bind(this);\n        }\n        this._stateCache.set(stateEnum, state);\n    }\n    /**\n     * 检查方法是否存在\n     * @param methodName 方法名\n     * @returns 方法是否存在且为函数\n     */\n    hasMethod(methodName) {\n        return methodName in this && typeof this[methodName] === 'function';\n    }\n    /**\n     * 更新状态机\n     * @param deltaTime 时间差\n     */\n    update(deltaTime) {\n        if (deltaTime < 0 || !isFinite(deltaTime)) {\n            console.warn('SimpleStateMachine: 无效的deltaTime值');\n            return;\n        }\n        this.elapsedTimeInState += deltaTime;\n        if (this._stateMethods.tick) {\n            try {\n                this._stateMethods.tick.call(this);\n            }\n            catch (error) {\n                console.error('更新状态时发生错误:', error);\n            }\n        }\n    }\n    /**\n     * 强制切换到指定状态\n     * @param newState 新状态\n     */\n    changeState(newState) {\n        this.currentState = newState;\n    }\n    /**\n     * 检查当前是否为指定状态\n     * @param state 要检查的状态\n     * @returns 是否为指定状态\n     */\n    isInState(state) {\n        return this._currentState === state;\n    }\n    /**\n     * 获取状态机统计信息\n     * @returns 统计信息对象\n     */\n    getStats() {\n        return {\n            currentState: this._currentState,\n            previousState: this.previousState,\n            elapsedTimeInState: this.elapsedTimeInState,\n            registeredStatesCount: this._stateCache.size\n        };\n    }\n}\n//# sourceMappingURL=SimpleStateMachine.js.map","// FSM (有限状态机) 模块\n// 适用于游戏状态管理、角色状态、UI状态等\nexport * from './State';\nexport * from './StateMachine';\nexport * from './SimpleStateMachine';\n//# sourceMappingURL=index.js.map","export class UtilityAI {\n    constructor(context, rootSelector, updatePeriod = 0.2) {\n        this._rootReasoner = rootSelector;\n        this._context = context;\n        this.updatePeriod = this._elapsedTime = updatePeriod;\n    }\n    tick(deltaTime) {\n        this._elapsedTime -= deltaTime;\n        while (this._elapsedTime <= 0) {\n            this._elapsedTime += this.updatePeriod;\n            let action = this._rootReasoner.select(this._context);\n            if (action != null)\n                action.execute(this._context);\n        }\n    }\n}\n//# sourceMappingURL=UtilityAI.js.map","/**\n * 总是返回一个固定的分数。 作为默认考虑,提供双重任务。\n */\nexport class FixedScoreConsideration {\n    constructor(score = 1) {\n        this.score = score;\n    }\n    getScore(_context) {\n        return this.score;\n    }\n}\n//# sourceMappingURL=FixedScoreConsideration.js.map","import { FixedScoreConsideration } from '../considerations/FixedScoreConsideration';\n/**\n * UtilityAI的根节点推理器\n *\n * @description\n * 推理器负责从多个考虑因素中选择最佳的行动方案。\n * 它是效用AI系统的核心组件,通过评估各种考虑因素来做出决策。\n *\n * @template T 上下文类型\n *\n * @example\n * ```typescript\n * class MyReasoner extends Reasoner<GameContext> {\n *   protected selectBestConsideration(context: GameContext): IConsideration<GameContext> {\n *     // 实现选择逻辑\n *     return this._considerations[0];\n *   }\n * }\n *\n * const reasoner = new MyReasoner();\n * reasoner.addConsideration(new AttackConsideration());\n * reasoner.addConsideration(new DefendConsideration());\n *\n * const action = reasoner.select(gameContext);\n * if (action) {\n *   action.execute(gameContext);\n * }\n * ```\n */\nexport class Reasoner {\n    constructor() {\n        /**\n         * 默认考虑因素,当没有其他考虑因素可用时使用\n         * 通常返回一个固定的低分数\n         */\n        this.defaultConsideration = new FixedScoreConsideration();\n        /**\n         * 考虑因素列表\n         * 推理器将从这些考虑因素中选择最佳的一个\n         */\n        this._considerations = new Array();\n    }\n    /**\n     * 选择并返回最佳行动\n     *\n     * @param context 决策上下文\n     * @returns 选中的行动,如果没有可用行动则返回null\n     */\n    select(context) {\n        try {\n            const consideration = this.selectBestConsideration(context);\n            if (consideration != null) {\n                return consideration.action;\n            }\n        }\n        catch (error) {\n            console.error('选择最佳考虑因素时发生错误:', error);\n        }\n        return null;\n    }\n    /**\n     * 添加考虑因素到推理器\n     *\n     * @param consideration 要添加的考虑因素\n     * @returns 返回自身以支持链式调用\n     * @throws {Error} 当consideration为null或undefined时抛出错误\n     */\n    addConsideration(consideration) {\n        if (consideration == null) {\n            throw new Error('考虑因素不能为null或undefined');\n        }\n        this._considerations.push(consideration);\n        return this;\n    }\n    /**\n     * 移除指定的考虑因素\n     *\n     * @param consideration 要移除的考虑因素\n     * @returns 是否成功移除\n     */\n    removeConsideration(consideration) {\n        const index = this._considerations.indexOf(consideration);\n        if (index !== -1) {\n            this._considerations.splice(index, 1);\n            return true;\n        }\n        return false;\n    }\n    /**\n     * 清空所有考虑因素\n     */\n    clearConsiderations() {\n        this._considerations.length = 0;\n    }\n    /**\n     * 获取考虑因素数量\n     *\n     * @returns 当前考虑因素的数量\n     */\n    getConsiderationCount() {\n        return this._considerations.length;\n    }\n    /**\n     * 获取所有考虑因素的只读副本\n     *\n     * @returns 考虑因素数组的副本\n     */\n    getConsiderations() {\n        return [...this._considerations];\n    }\n    /**\n     * 设置默认考虑因素\n     *\n     * @param defaultConsideration 新的默认考虑因素\n     * @returns 返回自身以支持链式调用\n     * @throws {Error} 当defaultConsideration为null或undefined时抛出错误\n     */\n    setDefaultConsideration(defaultConsideration) {\n        if (defaultConsideration == null) {\n            throw new Error('默认考虑因素不能为null或undefined');\n        }\n        this.defaultConsideration = defaultConsideration;\n        return this;\n    }\n    /**\n     * 检查是否有可用的考虑因素\n     *\n     * @returns 是否有考虑因素可用\n     */\n    hasConsiderations() {\n        return this._considerations.length > 0;\n    }\n}\n//# sourceMappingURL=Reasoner.js.map","import { Reasoner } from './Reasoner';\n/**\n * 选择高于默认考虑分数的第一个考虑因素\n *\n * @description\n * 遍历所有考虑因素,返回第一个分数高于或等于默认分数的考虑因素。\n * 如果没有找到合适的考虑因素,则返回默认考虑因素。\n *\n * @template T 上下文类型\n */\nexport class FirstScoreReasoner extends Reasoner {\n    /**\n     * 选择最佳考虑因素\n     * @param context 决策上下文\n     * @returns 选中的考虑因素\n     */\n    selectBestConsideration(context) {\n        const defaultScore = this.defaultConsideration.getScore(context);\n        for (let i = 0; i < this._considerations.length; i++) {\n            const consideration = this._considerations[i];\n            if (consideration && consideration.getScore(context) >= defaultScore) {\n                return consideration;\n            }\n        }\n        return this.defaultConsideration;\n    }\n}\n//# sourceMappingURL=FirstScoreReasoner.js.map","import { Reasoner } from './Reasoner';\n/**\n * 选择评分最高的考虑因素\n *\n * @description\n * 遍历所有考虑因素,找到评分最高的一个。\n * 如果没有考虑因素的分数高于默认分数,则返回默认考虑因素。\n *\n * @template T 上下文类型\n */\nexport class HighestScoreReasoner extends Reasoner {\n    /**\n     * 选择最佳考虑因素\n     * @param context 决策上下文\n     * @returns 选中的考虑因素\n     */\n    selectBestConsideration(context) {\n        let highestScore = this.defaultConsideration.getScore(context);\n        let bestConsideration = null;\n        for (let i = 0; i < this._considerations.length; i++) {\n            const currentConsideration = this._considerations[i];\n            if (currentConsideration) {\n                const score = currentConsideration.getScore(context);\n                if (score > highestScore) {\n                    highestScore = score;\n                    bestConsideration = currentConsideration;\n                }\n            }\n        }\n        if (bestConsideration == null) {\n            return this.defaultConsideration;\n        }\n        return bestConsideration;\n    }\n}\n//# sourceMappingURL=HighestScoreReasoner.js.map","// UtilityAI (效用AI) 模块\n// 适用于智能决策、资源分配、难度调节等\nexport * from './UtilityAI';\nexport * from './actions/index';\nexport * from './considerations/index';\nexport * from './reasoners/index';\n//# sourceMappingURL=index.js.map"],"names":[],"mappings":"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"}