UNPKG

@esengine/ai

Version:

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

1 lines 97.4 kB
class e{static setSeed(e){void 0===e&&(e=Date.now()),this._x=e>>>0,this._y=1812433253*e+1>>>0,this._z=1812433253*this._y+1>>>0,this._w=1812433253*this._z+1>>>0,0===this._x&&(this._x=1),0===this._y&&(this._y=1),0===this._z&&(this._z=1),0===this._w&&(this._w=1),this._initialized=!0;for(let e=0;e<10;e++)this.next()}static next(){this._initialized||this.setSeed();const e=this._x^this._x<<11;return this._x=this._y,this._y=this._z,this._z=this._w,this._w=this._w^this._w>>>19^e^e>>>8,this._w>>>0}static value(){return this.next()/4294967296}static range(e=0,t=1){if(e>=t)throw new Error(`最小值(${e})必须小于最大值(${t})`);return e+(t-e)*this.value()}static integer(e,t){if(!Number.isInteger(e)||!Number.isInteger(t))throw new Error("最小值和最大值必须是整数");if(e>t)throw new Error(`最小值(${e})必须小于等于最大值(${t})`);return Math.floor(this.range(e,t+1))}static boolean(){return this.value()<.5}static chance(e){if(e<0||e>1)throw new Error(`概率值必须在0-1之间,当前值: ${e}`);return this.value()<e}static choice(e){if(0===e.length)throw new Error("数组不能为空");return e[this.integer(0,e.length-1)]}static sample(e,t){if(t<0||t>e.length)throw new Error(`选择数量(${t})必须在0-${e.length}之间`);if(0===t)return[];if(t===e.length)return[...e];if(t<=e.length/2){const r=[],i=new Set;for(;r.length<t;){const t=this.integer(0,e.length-1);i.has(t)||(i.add(t),r.push(e[t]))}return r}{const r=[...e];for(let e=0;e<t;e++){const t=this.integer(e,r.length-1);[r[e],r[t]]=[r[t],r[e]]}return r.slice(0,t)}}static gaussian(e=0,t=1){const r=this.value(),i=this.value();return Math.sqrt(-2*Math.log(r))*Math.cos(2*Math.PI*i)*t+e}static getState(){return this._initialized||this.setSeed(),{x:this._x,y:this._y,z:this._z,w:this._w}}static setState(e){this._x=e.x,this._y=e.y,this._z=e.z,this._w=e.w,this._initialized=!0}}e._x=123456789,e._y=362436069,e._z=521288629,e._w=88675123,e._initialized=!1;class t{static shuffle(t){if(!t)throw new Error("数组不能为null或undefined");for(let r=t.length-1;r>0;r--){const i=e.integer(0,r);[t[r],t[i]]=[t[i],t[r]]}}static peek(e){if(0===e.length)throw new Error("无法从空数组中获取元素");return e[0]}static unshift(e,t){e.unshift(t)}static pop(e){return e.shift()}static append(e,t){e.push(t)}static removeLast(e){return e.pop()}static isEmpty(e){return 0===e.length}static size(e){return e.length}static clear(e){e.length=0}}class r{constructor(e=16){if(this._head=0,this._tail=0,this._size=0,e<=0)throw new Error("初始容量必须大于0");this._capacity=Math.max(e,4),this._buffer=new Array(this._capacity)}unshift(e){this._size===this._capacity&&this._resize(),this._head=(this._head-1+this._capacity)%this._capacity,this._buffer[this._head]=e,this._size++}push(e){this._size===this._capacity&&this._resize(),this._buffer[this._tail]=e,this._tail=(this._tail+1)%this._capacity,this._size++}shift(){if(0===this._size)return;const e=this._buffer[this._head];return this._buffer[this._head]=void 0,this._head=(this._head+1)%this._capacity,this._size--,e}pop(){if(0===this._size)return;this._tail=(this._tail-1+this._capacity)%this._capacity;const e=this._buffer[this._tail];return this._buffer[this._tail]=void 0,this._size--,e}peekFirst(){return this._size>0?this._buffer[this._head]:void 0}peekLast(){if(0===this._size)return;const e=(this._tail-1+this._capacity)%this._capacity;return this._buffer[e]}get size(){return this._size}get isEmpty(){return 0===this._size}clear(){for(let e=0;e<this._capacity;e++)this._buffer[e]=void 0;this._head=0,this._tail=0,this._size=0}_resize(){const e=2*this._capacity,t=new Array(e);for(let e=0;e<this._size;e++)t[e]=this._buffer[(this._head+e)%this._capacity];this._buffer=t,this._head=0,this._tail=this._size,this._capacity=e}toArray(){const e=[];for(let t=0;t<this._size;t++){const r=this._buffer[(this._head+t)%this._capacity];void 0!==r&&e.push(r)}return e}}class i{static setEnabled(e){this._enabled=e}static setThrowOnFailure(e){this._throwOnFailure=e}static fail(e,...t){const r=e||"断言失败";throw this._throwOnFailure||console.assert(!1,r,...t),new Error(r)}static isTrue(e,t,...r){this._enabled&&(e||this.fail(t||"条件必须为真",...r))}static isFalse(e,t,...r){this._enabled&&e&&this.fail(t||"条件必须为假",...r)}static isNotNull(e,t,...r){this._enabled&&null==e&&this.fail(t||"对象不能为null或undefined",...r)}static isNull(e,t,...r){this._enabled&&null!=e&&this.fail(t||"对象必须为null或undefined",...r)}static isNumber(e,t,...r){this._enabled&&("number"!=typeof e||isNaN(e))&&this.fail(t||"值必须是有效数字",...r)}static isString(e,t,...r){this._enabled&&"string"!=typeof e&&this.fail(t||"值必须是字符串",...r)}static isBoolean(e,t,...r){this._enabled&&"boolean"!=typeof e&&this.fail(t||"值必须是布尔值",...r)}static isFunction(e,t,...r){this._enabled&&"function"!=typeof e&&this.fail(t||"值必须是函数",...r)}static isObject(e,t,...r){this._enabled&&("object"==typeof e&&null!==e||this.fail(t||"值必须是对象",...r))}static isNotEmpty(e,t,...r){this._enabled&&(this.isNotNull(e,t,...r),0===e.length&&this.fail(t||"数组不能为空",...r))}static isNotEmptyString(e,t,...r){this._enabled&&(this.isNotNull(e,t,...r),0===e.trim().length&&this.fail(t||"字符串不能为空",...r))}static inRange(e,t,r,i,...s){this._enabled&&(this.isNumber(e,i,...s),(e<t||e>r)&&this.fail(i||`值必须在 ${t} 到 ${r} 之间`,...s))}static isInstanceOf(e,t,r,...i){this._enabled&&(e instanceof t||this.fail(r||`值必须是 ${t.name} 的实例`,...i))}static contains(e,t,r,...i){this._enabled&&(this.isNotNull(e,r,...i),e.includes(t)||this.fail(r||"数组必须包含指定元素",...i))}static getConfig(){return{enabled:this._enabled,throwOnFailure:this._throwOnFailure}}}var s,a,n,o,c,l,h,u;i._enabled=!0,i._throwOnFailure=!1,function(e){e[e.Debug=0]="Debug",e[e.Info=1]="Info",e[e.Warn=2]="Warn",e[e.Error=3]="Error",e[e.None=4]="None"}(s||(s={}));class d{static configure(e){this._config={...this._config,...e},void 0!==e.batchMode&&(this._batchConfig.enabled=e.batchMode),void 0!==e.batchSize&&(this._batchConfig.maxSize=Math.max(1,e.batchSize)),void 0!==e.batchFlushInterval&&(this._batchConfig.flushInterval=Math.max(100,e.batchFlushInterval)),this._initializePerformanceMode()}static _initializePerformanceMode(){this._config.performanceMode?this._fastLog=(e,t)=>{void 0!==t?console.log(e,t):console.log(e)}:this._fastLog=null}static setMinLevel(e){this._config.minLevel=e}static setPerformanceMode(e){this._config.performanceMode=e,this._initializePerformanceMode()}static setBatchMode(e,t=50,r=1e3){this._batchConfig.enabled=e,this._batchConfig.maxSize=Math.max(1,t),this._batchConfig.flushInterval=Math.max(100,r),e||this.flushLogs()}static debug(e,t){this._log(s.Debug,e,t)}static info(e,t){this._log(s.Info,e,t)}static warn(e,t){this._log(s.Warn,e,t)}static error(e,t){this._log(s.Error,e,t)}static _log(e,t,r){e<this._config.minLevel||this._config.minLevel===s.None||(this._config.performanceMode&&this._fastLog?this._fastLog(t,r):this._batchConfig.enabled?this._addToBatch(e,t,r):this._config.performanceMode?this._performanceLog(e,t,r):this._standardLog(e,t,r))}static _addToBatch(e,t,r){const i={level:e,message:t,data:r,timestamp:Date.now(),prefix:this._config.prefix};this._logBuffer.push(i);const s=Date.now(),a=this._logBuffer.length>=this._batchConfig.maxSize,n=s-this._batchConfig.lastFlushTime>=this._batchConfig.flushInterval;(a||n)&&this.flushLogs()}static flushLogs(){if(0!==this._logBuffer.length){for(const e of this._logBuffer)this._config.performanceMode?this._performanceLogEntry(e):this._standardLogEntry(e);this._logBuffer.length=0,this._batchConfig.lastFlushTime=Date.now()}}static _performanceLogEntry(e){const t=this._levelNames[e.level],r=e.prefix?`[${e.prefix}] `:"";void 0!==e.data?console.log(`${r}[${t}] ${e.message}`,e.data):console.log(`${r}[${t}] ${e.message}`)}static _standardLogEntry(e){const t=this._config.enableTimestamp?this._formatTimestamp(e.timestamp):"",r=this._levelNames[e.level],i=e.prefix?`[${e.prefix}] `:"",a=this._levelStyles[e.level];let n=`${i}${t}[${r}] ${e.message}`;const o=this._getConsoleMethod(e.level);void 0!==e.data?a&&"function"==typeof console.log?o(`%c${n}`,a,e.data):o(n,e.data):a&&"function"==typeof console.log?o(`%c${n}`,a):o(n),e.level===s.Error&&this._config.enableStackTrace&&e.data instanceof Error&&console.trace(e.data)}static _formatTimestamp(e){const t=new Date(e);return`[${t.getHours().toString().padStart(2,"0")}:${t.getMinutes().toString().padStart(2,"0")}:${t.getSeconds().toString().padStart(2,"0")}.${t.getMilliseconds().toString().padStart(3,"0")}] `}static _performanceLog(e,t,r){const i=this._levelNames[e],s=this._config.prefix?`[${this._config.prefix}] `:"";void 0!==r?console.log(`${s}[${i}] ${t}`,r):console.log(`${s}[${i}] ${t}`)}static _standardLog(e,t,r){const i=this._config.enableTimestamp?this._getTimestamp():"",a=this._levelNames[e],n=this._config.prefix?`[${this._config.prefix}] `:"",o=this._levelStyles[e];let c=`${n}${i}[${a}] ${t}`;const l=this._getConsoleMethod(e);void 0!==r?o&&"function"==typeof console.log?l(`%c${c}`,o,r):l(c,r):o&&"function"==typeof console.log?l(`%c${c}`,o):l(c),e===s.Error&&this._config.enableStackTrace&&r instanceof Error&&console.trace(r)}static _getTimestamp(){const e=new Date;return`[${e.getHours().toString().padStart(2,"0")}:${e.getMinutes().toString().padStart(2,"0")}:${e.getSeconds().toString().padStart(2,"0")}.${e.getMilliseconds().toString().padStart(3,"0")}] `}static _getConsoleMethod(e){switch(e){case s.Debug:return console.debug||console.log;case s.Info:return console.info||console.log;case s.Warn:return console.warn||console.log;case s.Error:return console.error||console.log;default:return console.log}}static getConfig(){return{...this._config}}static createPrefixed(e){return new p(e)}}d._config={minLevel:s.Debug,enableTimestamp:!0,enableStackTrace:!0,performanceMode:!1,prefix:""},d._logBuffer=[],d._batchConfig={enabled:!1,maxSize:50,flushInterval:1e3,lastFlushTime:0},d._fastLog=null,d._levelNames={[s.Debug]:"DEBUG",[s.Info]:"INFO",[s.Warn]:"WARN",[s.Error]:"ERROR",[s.None]:"NONE"},d._levelStyles={[s.Debug]:"color: #888",[s.Info]:"color: #007acc",[s.Warn]:"color: #ff8c00",[s.Error]:"color: #ff4444; font-weight: bold",[s.None]:""};class p{constructor(e){this._prefix=e}debug(e,t){d.debug(`[${this._prefix}] ${e}`,t)}info(e,t){d.info(`[${this._prefix}] ${e}`,t)}warn(e,t){d.warn(`[${this._prefix}] ${e}`,t)}error(e,t){d.error(`[${this._prefix}] ${e}`,t)}}class f{static configure(e){void 0!==e.maxDeltaTime&&(this._maxDeltaTime=Math.max(.001,e.maxDeltaTime)),void 0!==e.timeScale&&(this._timeScale=Math.max(0,e.timeScale)),void 0!==e.useHighPrecision&&(this._useHighPrecision=e.useHighPrecision)}static initialize(){if(this._initialized)return;const e=this._getSystemTime();this._startTime=e,this._currentTime=0,this._lastTime=0,this._deltaTime=0,this._unscaledDeltaTime=0,this._frameCount=0,this._initialized=!0}static updateFrame(e){if(this._initialized||this.initialize(),this._frameCount++,void 0!==e)this._unscaledDeltaTime=Math.max(0,e);else{const e=(this._getSystemTime()-this._startTime)/1e3;1===this._frameCount?(this._lastTime=e,this._unscaledDeltaTime=0):this._unscaledDeltaTime=e-this._lastTime}this._unscaledDeltaTime=Math.min(this._unscaledDeltaTime,this._maxDeltaTime),this._deltaTime=this._unscaledDeltaTime*this._timeScale,this._lastTime=this._currentTime,this._currentTime+=this._deltaTime,this._triggerUpdateCallbacks()}static _getSystemTime(){return this._useHighPrecision?performance.now():Date.now()}static _triggerUpdateCallbacks(){for(let e=0;e<this._updateCallbacks.length;e++)try{this._updateCallbacks[e](this._deltaTime)}catch(e){console.error("时间更新回调执行失败:",e)}}static getCurrentTime(){return this._currentTime}static getDeltaTime(){return this._deltaTime}static getUnscaledDeltaTime(){return this._unscaledDeltaTime}static getTimeScale(){return this._timeScale}static setTimeScale(e){this._timeScale=Math.max(0,e)}static getFrameCount(){return this._frameCount}static getAverageFPS(){return this._currentTime<=0?0:this._frameCount/this._currentTime}static getCurrentFPS(){return this._deltaTime<=0?0:1/this._unscaledDeltaTime}static addUpdateCallback(e){-1===this._updateCallbacks.indexOf(e)&&this._updateCallbacks.push(e)}static removeUpdateCallback(e){const t=this._updateCallbacks.indexOf(e);-1!==t&&this._updateCallbacks.splice(t,1)}static clearUpdateCallbacks(){this._updateCallbacks.length=0}static reset(){this._initialized=!1,this._frameCount=0,this._currentTime=0,this._lastTime=0,this._deltaTime=0,this._unscaledDeltaTime=0,this.clearUpdateCallbacks()}static getStats(){return{currentTime:this._currentTime,deltaTime:this._deltaTime,unscaledDeltaTime:this._unscaledDeltaTime,timeScale:this._timeScale,frameCount:this._frameCount,averageFPS:this.getAverageFPS(),currentFPS:this.getCurrentFPS(),maxDeltaTime:this._maxDeltaTime,useHighPrecision:this._useHighPrecision}}}f._currentTime=0,f._lastTime=0,f._deltaTime=0,f._unscaledDeltaTime=0,f._timeScale=1,f._maxDeltaTime=.1,f._useHighPrecision=!0,f._initialized=!1,f._frameCount=0,f._startTime=0,f._updateCallbacks=[],function(e){e[e.Development=0]="Development",e[e.Testing=1]="Testing",e[e.Production=2]="Production",e[e.Silent=3]="Silent"}(a||(a={}));class _{static configure(e){this._config={...this._config,...e}}static setLevel(e){switch(this._config.level=e,e){case a.Development:this._config.enableAssertions=!0,this._config.enableTypeChecking=!0;break;case a.Testing:this._config.enableAssertions=!0,this._config.enableTypeChecking=!1;break;case a.Production:this._config.enableAssertions=!1,this._config.enableTypeChecking=!1;break;case a.Silent:this._config.enableAssertions=!1,this._config.enableTypeChecking=!1,this._config.enablePerformanceMonitoring=!1}}static assert(e,t,r){if(this._config.enableAssertions&&this._config.level!==a.Silent&&(this._errorStats.totalAssertions++,!e)){const e=new Error(`断言失败: ${t}`);this._handleError(e,r)}}static checkType(e,t,r,i){if(!this._config.enableTypeChecking||this._config.level===a.Silent)return;this._errorStats.totalTypeChecks++;const s=typeof e;if(s!==t){const e=new Error(r||`类型检查失败: 期望 ${t}, 实际 ${s}`);this._handleError(e,i)}}static checkNotNull(e,t,r){if(this._config.enableTypeChecking&&this._config.level!==a.Silent&&(this._errorStats.totalTypeChecks++,null==e)){const e=new Error(t||"值不能为null或undefined");this._handleError(e,r)}}static checkRange(e,t,r,i,s){if(this._config.enableAssertions&&this._config.level!==a.Silent&&(this._errorStats.totalAssertions++,e<t||e>r)){const a=new Error(i||`值 ${e} 超出范围 [${t}, ${r}]`);this._handleError(a,s)}}static checkArrayBounds(e,t,r,i){if(this._config.enableAssertions&&this._config.level!==a.Silent&&(this._errorStats.totalAssertions++,t<0||t>=e.length)){const s=r||`数组索引 ${t} 超出边界 [0, ${e.length-1}]`,a=new Error(s);this._handleError(a,i)}}static monitor(e,t){if(!this._config.enablePerformanceMonitoring||this._config.level===a.Silent)return t();const r=performance.now();try{const i=t(),s=performance.now();return this._recordPerformance(e,s-r),i}catch(t){const i=performance.now();throw this._recordPerformance(e,i-r),t}}static async monitorAsync(e,t){if(!this._config.enablePerformanceMonitoring||this._config.level===a.Silent)return t();const r=performance.now();try{const i=await t(),s=performance.now();return this._recordPerformance(e,s-r),i}catch(t){const i=performance.now();throw this._recordPerformance(e,i-r),t}}static _recordPerformance(e,t){let r=this._performanceData.get(e);r||(r={functionName:e,executionTime:0,callCount:0,averageTime:0,maxTime:0,minTime:1/0},this._performanceData.set(e,r)),r.callCount++,r.executionTime+=t,r.averageTime=r.executionTime/r.callCount,r.maxTime=Math.max(r.maxTime,t),r.minTime=Math.min(r.minTime,t)}static _handleError(e,t){if(this._errorStats.totalErrors++,this._config.onError)try{this._config.onError(e,t)}catch(e){console.error("错误回调执行失败:",e)}switch(this._config.level){case a.Development:throw e;case a.Testing:throw console.error("错误:",e.message,t),e;case a.Production:throw console.warn("错误:",e.message),e}throw e}static warn(e,t){if(this._config.level!==a.Silent){if(this._errorStats.totalWarnings++,this._config.onWarning)try{this._config.onWarning(e,t)}catch(e){console.error("警告回调执行失败:",e)}switch(this._config.level){case a.Development:case a.Testing:console.warn("警告:",e,t);break;case a.Production:console.warn("警告:",e)}}}static getPerformanceStats(){return new Map(this._performanceData)}static getErrorStats(){return{...this._errorStats}}static resetStats(){this._performanceData.clear(),this._errorStats={totalErrors:0,totalWarnings:0,totalAssertions:0,totalTypeChecks:0}}static getConfig(){return{...this._config}}static wrap(e,t,r=!1){return(...i)=>{try{return r?this.monitor(t,(()=>e(...i))):e(...i)}catch(e){this._handleError(e instanceof Error?e:new Error(String(e)),{args:i,functionName:t})}}}}function m(e={}){return function(t,r,i){const s=i.value,a=e.name||`${t.constructor.name}.${r}`;return i.value=function(...t){if(e.enableTypeChecking)for(let e=0;e<t.length;e++)null==t[e]&&_.warn(`方法 ${a} 的第 ${e+1} 个参数为null或undefined`);if(e.enableMonitoring)return _.monitor(a,(()=>s.apply(this,t)));try{return s.apply(this,t)}catch(e){const r=e instanceof Error?e:new Error(String(e));throw _.warn(`方法 ${a} 执行失败`,{error:r,args:t,instance:this}),r}},i}}_._config={level:a.Development,enableAssertions:!0,enableTypeChecking:!0,enablePerformanceMonitoring:!1},_._performanceData=new Map,_._errorStats={totalErrors:0,totalWarnings:0,totalAssertions:0,totalTypeChecks:0};class g{constructor(e={}){this._listeners=new Map,this._cleanupTimer=null,this._nextListenerId=1,this._config={enableAutoCleanup:e.enableAutoCleanup??!0,cleanupInterval:e.cleanupInterval??3e4,maxListeners:e.maxListeners??1e3,listenerExpirationTime:e.listenerExpirationTime??3e5,enablePerformanceMonitoring:e.enablePerformanceMonitoring??!1},this._stats={totalListeners:0,activeListeners:0,totalEvents:0,averageEventTime:0,lastCleanupTime:Date.now()},this._config.enableAutoCleanup&&this._startAutoCleanup()}on(e,t,r={}){const i=this._generateListenerId(),s={callback:t,id:i,createdAt:Date.now(),lastCalledAt:0,callCount:0,once:r.once??!1,priority:r.priority??0,weak:r.weak??!1,owner:r.owner||void 0};if(this._stats.totalListeners>=this._config.maxListeners&&(console.warn(`事件监听器数量已达到上限 ${this._config.maxListeners}`),this._performCleanup(),this._stats.totalListeners>=this._config.maxListeners))throw new Error("无法添加更多事件监听器,已达到上限");this._listeners.has(e)||this._listeners.set(e,[]);const a=this._listeners.get(e);return a.push(s),a.sort(((e,t)=>t.priority-e.priority)),this._stats.totalListeners++,this._updateActiveListeners(),i}onWeak(e,t,r,i={}){return this.on(e,t,{...i,weak:!0,owner:r})}once(e,t,r={}){return this.on(e,t,{...r,once:!0})}off(e,t){const r=this._listeners.get(e);if(!r)return!1;const i=r.findIndex((e=>e.id===t));return-1!==i&&(r.splice(i,1),this._stats.totalListeners--,0===r.length&&this._listeners.delete(e),this._updateActiveListeners(),!0)}offAll(e){const t=this._listeners.get(e);if(!t)return 0;const r=t.length;return this._listeners.delete(e),this._stats.totalListeners-=r,this._updateActiveListeners(),r}offByOwner(e){let t=0;for(const[r,i]of this._listeners){for(let r=i.length-1;r>=0;r--){i[r].owner===e&&(i.splice(r,1),t++,this._stats.totalListeners--)}0===i.length&&this._listeners.delete(r)}return this._updateActiveListeners(),t}emit(e,t){const r=this._listeners.get(e);if(!r||0===r.length)return 0;const i=this._config.enablePerformanceMonitoring?performance.now():0;let s=0;const a=[];for(let i=0;i<r.length;i++){const n=r[i];try{n.callback(t),n.lastCalledAt=Date.now(),n.callCount++,s++,n.once&&a.push(i)}catch(t){console.error(`事件监听器执行失败 (${e}):`,t)}}for(let e=a.length-1;e>=0;e--){const t=a[e];r.splice(t,1),this._stats.totalListeners--}if(0===r.length&&this._listeners.delete(e),this._stats.totalEvents++,this._config.enablePerformanceMonitoring&&i>0){const e=performance.now()-i;this._updateAverageEventTime(e)}return this._updateActiveListeners(),s}hasListeners(e){const t=this._listeners.get(e);return!!t&&t.length>0}getListenerCount(e){const t=this._listeners.get(e);return t?t.length:0}getEventNames(){return Array.from(this._listeners.keys())}cleanup(e=!1){return this._performCleanup(e)}_startAutoCleanup(){this._cleanupTimer||(this._cleanupTimer=window.setInterval((()=>{this._performCleanup()}),this._config.cleanupInterval))}_stopAutoCleanup(){this._cleanupTimer&&(clearInterval(this._cleanupTimer),this._cleanupTimer=null)}_performCleanup(e=!1){const t=Date.now();let r=0;for(const[i,s]of this._listeners){for(let i=s.length-1;i>=0;i--){const a=s[i];let n=e;if(!n&&!n&&this._config.listenerExpirationTime>0){const e=t-a.createdAt,r=t-a.lastCalledAt;e>this._config.listenerExpirationTime&&r>this._config.listenerExpirationTime&&(n=!0)}n&&(s.splice(i,1),r++,this._stats.totalListeners--)}0===s.length&&this._listeners.delete(i)}return this._stats.lastCleanupTime=t,this._updateActiveListeners(),r}_generateListenerId(){return`listener_${this._nextListenerId++}_${Date.now()}`}_updateActiveListeners(){this._stats.activeListeners=this._stats.totalListeners}_updateAverageEventTime(e){1===this._stats.totalEvents?this._stats.averageEventTime=e:this._stats.averageEventTime=(this._stats.averageEventTime*(this._stats.totalEvents-1)+e)/this._stats.totalEvents}getStats(){return{...this._stats}}resetStats(){this._stats={totalListeners:this._stats.totalListeners,activeListeners:this._stats.activeListeners,totalEvents:0,averageEventTime:0,lastCleanupTime:Date.now()}}getConfig(){return{...this._config}}destroy(){this._stopAutoCleanup(),this._listeners.clear(),this._stats.totalListeners=0,this._stats.activeListeners=0}}class b{static isString(e){return"string"==typeof e}static isNumber(e){return"number"==typeof e&&!isNaN(e)}static isBoolean(e){return"boolean"==typeof e}static isFunction(e){return"function"==typeof e}static isObject(e){return"object"==typeof e&&null!==e}static isArray(e){return Array.isArray(e)}static isNullish(e){return null==e}static isNotNull(e){return null!=e}static isArrayOf(e,t){return Array.isArray(e)&&e.every(t)}static isStringArray(e){return this.isArrayOf(e,this.isString)}static isNumberArray(e){return this.isArrayOf(e,this.isNumber)}static isInstanceOf(e,t){return e instanceof t}static hasProperty(e,t){return this.isObject(e)&&t in e}static hasPropertyOfType(e,t,r){return this.hasProperty(e,t)&&r(e[t])}static createValidator(e,t,r){return{validate:e,typeName:t,errorMessage:r||`Expected ${t}`}}static checkObject(e,t){if(!this.isObject(e))return{success:!1,value:e,error:"Value is not an object",expectedType:"object",actualType:typeof e};const r=e,i={};for(const[s,a]of Object.entries(t)){const t=r[s];if(!a.validate(t))return{success:!1,value:e,error:`Property '${s}' ${a.errorMessage||`is not of type ${a.typeName}`}`,expectedType:a.typeName,actualType:typeof t};i[s]=t}return{success:!0,value:i}}static safeCast(e,t){return t.validate(e)?{success:!0,value:e}:{success:!1,value:e,error:t.errorMessage||`Value is not of type ${t.typeName}`,expectedType:t.typeName,actualType:typeof e}}static assertType(e,t,r){if(!t.validate(e)){const i=r||t.errorMessage||`Type assertion failed: expected ${t.typeName}, got ${typeof e}`;throw new TypeError(i)}}static tryConvert(e,t,r){try{const i=t(e);return r.validate(i)?{success:!0,value:i}:{success:!1,value:i,error:`Conversion result is not of type ${r.typeName}`,expectedType:r.typeName,actualType:typeof i}}catch(t){return{success:!1,value:e,error:`Conversion failed: ${t instanceof Error?t.message:String(t)}`,expectedType:r.typeName,actualType:typeof e}}}static stringToNumber(e){return this.tryConvert(e,(e=>{if("string"==typeof e){const t=Number(e);if(isNaN(t))throw new Error("Invalid number format");return t}throw new Error("Value is not a string")}),this.validators.number)}static toString(e){return this.tryConvert(e,(e=>String(e)),this.validators.string)}static toBoolean(e){return this.tryConvert(e,(e=>Boolean(e)),this.validators.boolean)}static isInRange(e,t,r,i=!0){return!!this.isNumber(e)&&(i?e>=t&&e<=r:e>t&&e<r)}static isStringLengthInRange(e,t,r){return this.isString(e)&&e.length>=t&&e.length<=r}static isArrayLengthInRange(e,t,r){return this.isArray(e)&&e.length>=t&&e.length<=r}static matchesPattern(e,t){return this.isString(e)&&t.test(e)}static isEmail(e){return this.matchesPattern(e,/^[^\s@]+@[^\s@]+\.[^\s@]+$/)}static isUrl(e){if(!this.isString(e))return!1;try{return new URL(e),!0}catch{return!1}}static isUuid(e){return this.matchesPattern(e,/^[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$/i)}}b.validators={string:b.createValidator((e=>"string"==typeof e),"string"),number:b.createValidator((e=>"number"==typeof e&&!isNaN(e)),"number"),boolean:b.createValidator((e=>"boolean"==typeof e),"boolean"),function:b.createValidator((e=>"function"==typeof e),"function"),object:b.createValidator((e=>"object"==typeof e&&null!==e),"object"),array:b.createValidator((e=>Array.isArray(e)),"array"),notNull:b.createValidator((e=>null!=e),"not null"),integer:b.createValidator((e=>"number"==typeof e&&Number.isInteger(e)),"integer"),positiveNumber:b.createValidator((e=>"number"==typeof e&&e>0),"positive number"),nonNegativeNumber:b.createValidator((e=>"number"==typeof e&&e>=0),"non-negative number"),nonEmptyString:b.createValidator((e=>"string"==typeof e&&e.trim().length>0),"non-empty string"),optional:e=>({validate:t=>void 0===t||e.validate(t),typeName:`${e.typeName} | undefined`,errorMessage:`Expected ${e.typeName} or undefined`}),nullable:e=>({validate:t=>null===t||e.validate(t),typeName:`${e.typeName} | null`,errorMessage:`Expected ${e.typeName} or null`}),union:(...e)=>({validate:t=>e.some((e=>e.validate(t))),typeName:e.map((e=>e.typeName)).join(" | "),errorMessage:`Expected one of: ${e.map((e=>e.typeName)).join(", ")}`})},function(e){e[e.Invalid=0]="Invalid",e[e.Success=1]="Success",e[e.Failure=2]="Failure",e[e.Running=3]="Running"}(n||(n={}));class y{constructor(){this.status=n.Invalid}invalidate(){this.status=n.Invalid}onStart(){}onEnd(){}tick(e){return this.status==n.Invalid&&this.onStart(),this.status=this.update(e),this.status!=n.Running&&this.onEnd(),this.status}}!function(e){e.String="string",e.Number="number",e.Boolean="boolean",e.Vector2="vector2",e.Vector3="vector3",e.Object="object",e.Array="array"}(o||(o={}));class w{constructor(){this._variables=new Map,this._listeners=new Map,this._listenerIdCounter=0,this._history=[],this.enableHistory=!1}defineVariable(e,t,r,i={}){if(!e||"string"!=typeof e)throw new Error("变量名必须是非空字符串");if(this._variables.has(e)&&console.warn(`黑板变量 "${e}" 已存在,将被重新定义`),!this._validateValueType(r,t))throw new Error(`默认值类型与变量类型 "${t}" 不匹配`);const s={name:e,type:t,value:this._cloneValue(r),defaultValue:this._cloneValue(r),description:i.description||"",readonly:i.readonly||!1,group:i.group||"Default",min:i.min,max:i.max,options:i.options?[...i.options]:void 0};this._variables.set(e,s)}setValue(e,t,r=!1){const i=this._variables.get(e);if(!i)return console.warn(`尝试设置不存在的黑板变量 "${e}"`),!1;if(i.readonly&&!r)return console.warn(`尝试修改只读黑板变量 "${e}"`),!1;if(!this._validateValueType(t,i.type))return console.error(`设置的值类型与变量 "${e}" 的类型 "${i.type}" 不匹配`),!1;if(i.type===o.Number&&"number"==typeof t){if(void 0!==i.min&&t<i.min)return console.warn(`变量 "${e}" 的值 ${t} 小于最小值 ${i.min}`),!1;if(void 0!==i.max&&t>i.max)return console.warn(`变量 "${e}" 的值 ${t} 大于最大值 ${i.max}`),!1}if(i.options&&!i.options.includes(t))return console.warn(`变量 "${e}" 的值不在允许的选项中`),!1;const s=this._cloneValue(i.value),a=this._cloneValue(t);return i.value=a,this.enableHistory&&this._history.push({variableName:e,oldValue:s,newValue:a,timestamp:Date.now()}),this._notifyListeners(e,a,s),!0}getValue(e,t){const r=this._variables.get(e);return r?this._cloneValue(r.value):void 0!==t?t:void console.warn(`尝试获取不存在的黑板变量 "${e}"`)}hasVariable(e){return this._variables.has(e)}getVariableDefinition(e){const t=this._variables.get(e);return t?{...t}:void 0}getVariableNames(){return Array.from(this._variables.keys())}getVariablesByGroup(e){return Array.from(this._variables.values()).filter((t=>t.group===e)).map((e=>({...e})))}getGroups(){const e=new Set;return this._variables.forEach((t=>{e.add(t.group||"Default")})),Array.from(e).sort()}resetVariable(e){const t=this._variables.get(e);return!!t&&this.setValue(e,t.defaultValue,!0)}resetAll(){this._variables.forEach(((e,t)=>{this.setValue(t,e.defaultValue,!0)}))}removeVariable(e){return!!this._variables.has(e)&&(this._variables.delete(e),this._listeners.delete(e),!0)}addListener(e,t){const r="listener_"+this._listenerIdCounter++,i={variableName:e,callback:t,id:r};return this._listeners.has(e)||this._listeners.set(e,[]),this._listeners.get(e).push(i),r}removeListener(e){for(const[t,r]of this._listeners.entries()){const i=r.findIndex((t=>t.id===e));if(-1!==i)return r.splice(i,1),0===r.length&&this._listeners.delete(t),!0}return!1}serialize(){const e={variables:Array.from(this._variables.entries()).map((([e,t])=>({name:e,type:t.type,value:t.value,defaultValue:t.defaultValue,description:t.description,readonly:t.readonly,group:t.group,min:t.min,max:t.max,options:t.options})))};return JSON.stringify(e,null,2)}deserialize(e){try{const t=JSON.parse(e);if(!t.variables||!Array.isArray(t.variables))throw new Error("无效的黑板数据格式");this._variables.clear(),this._listeners.clear();for(const e of t.variables)this.defineVariable(e.name,e.type,e.defaultValue,{description:e.description,readonly:e.readonly,group:e.group,min:e.min,max:e.max,options:e.options}),this.setValue(e.name,e.value,!0);return!0}catch(e){return console.error("反序列化黑板数据失败:",e),!1}}getHistory(){return[...this._history]}clearHistory(){this._history.length=0}_validateValueType(e,t){switch(t){case o.String:return"string"==typeof e;case o.Number:return"number"==typeof e&&!isNaN(e);case o.Boolean:return"boolean"==typeof e;case o.Vector2:return this._isVector2(e);case o.Vector3:return this._isVector3(e);case o.Object:return"object"==typeof e&&null!==e&&!Array.isArray(e);case o.Array:return Array.isArray(e);default:return!0}}_isVector2(e){return"object"==typeof e&&null!==e&&"number"==typeof e.x&&"number"==typeof e.y}_isVector3(e){return"object"==typeof e&&null!==e&&"number"==typeof e.x&&"number"==typeof e.y&&"number"==typeof e.z}_cloneValue(e){if(null===e||"object"!=typeof e)return e;if(Array.isArray(e))return e.map((e=>this._cloneValue(e)));const t={};for(const r in e)e.hasOwnProperty(r)&&(t[r]=this._cloneValue(e[r]));return t}_notifyListeners(e,t,r){const i=this._listeners.get(e);i&&i.forEach((e=>{try{e.callback(t,r)}catch(e){console.error("黑板监听器回调执行失败:",e)}}))}}class S{constructor(e,t,r=.2,i=!1,s){if(this._lastTime=0,this._performanceMode=!1,this._stats={totalTicks:0,totalExecutionTime:0,averageExecutionTime:0,lastExecutionTime:0},null==e)throw new Error("上下文不能为null或undefined");if(null==t)throw new Error("根节点不能为null或undefined");if(r<0)throw new Error("更新周期不能为负数");this._context=e,this._root=t,this.updatePeriod=this._elapsedTime=r,this._performanceMode=i,this._lastTime=this._getCurrentTime(),this._blackboard=s||new w,this._context.blackboard=this._blackboard}_getCurrentTime(){try{return f.getCurrentTime()}catch{return this._performanceMode?Date.now()/1e3:performance.now()/1e3}}tick(e){const t=this._performanceMode?0:this._getCurrentTime();try{if(this.updatePeriod>0){let t;if(void 0!==e)t=e;else try{if(t=f.getDeltaTime(),t<=0){const e=this._getCurrentTime();t=e-this._lastTime,this._lastTime=e}}catch{const e=this._getCurrentTime();t=e-this._lastTime,this._lastTime=e}if(t<0||!isFinite(t))return void _.warn("BehaviorTree: 无效的deltaTime值,跳过此次更新",{deltaTime:t});if(t=Math.min(t,1),this._elapsedTime-=t,this._elapsedTime<=0){for(;this._elapsedTime<=0;)this._elapsedTime+=this.updatePeriod;this._executeRoot()}}else this._executeRoot()}catch(e){_.warn("行为树更新时发生错误",{error:e,context:this._context})}finally{if(!this._performanceMode&&t>0){const e=this._getCurrentTime()-t;this._updateStats(e)}}}_executeRoot(){this._root.tick(this._context),this._stats.totalTicks++}_updateStats(e){this._stats.lastExecutionTime=e,this._stats.totalExecutionTime+=e,this._stats.averageExecutionTime=this._stats.totalExecutionTime/this._stats.totalTicks}getContext(){return this._context}getBlackboard(){return this._blackboard}setContext(e){if(null==e)throw new Error("上下文不能为null或undefined");this._context=e,this._context.blackboard=this._blackboard}getRoot(){return this._root}setRoot(e){if(null==e)throw new Error("根节点不能为null或undefined");this._root=e}reset(){try{this._root.invalidate(),this._elapsedTime=this.updatePeriod,this._lastTime=this._getCurrentTime()}catch(e){console.error("重置行为树时发生错误:",e)}}setPerformanceMode(e){this._performanceMode=e,e&&console.log("行为树性能模式已启用:使用较低精度的时间计算以提高性能")}getStats(){return{...this._stats}}resetStats(){this._stats={totalTicks:0,totalExecutionTime:0,averageExecutionTime:0,lastExecutionTime:0}}isActive(){return this.updatePeriod<=0||this._elapsedTime<=0}getTimeToNextUpdate(){return this.updatePeriod>0?Math.max(this._elapsedTime,0):0}}!function(e){e[e.None=0]="None",e[e.LowerPriority=1]="LowerPriority",e[e.Self=2]="Self",e[e.Both=3]="Both"}(c||(c={}));class v{static has(e,t){return(e&t)==t}}function C(e){return e&&"IConditional"===e.discriminator}function T(e){return C(e)&&"abortType"in e&&"executeConditional"in e&&"function"==typeof e.executeConditional}class x extends y{constructor(){super(...arguments),this.abortType=c.None,this._children=new Array,this._hasLowerPriorityConditionalAbort=!1,this._currentChildIndex=0}invalidate(){super.invalidate();const e=this._children.length;for(let t=0;t<e;t++)this._children[t].invalidate()}onStart(){this._hasLowerPriorityConditionalAbort=this.hasLowerPriorityConditionalAbortInChildren(),this._currentChildIndex=0}onEnd(){const e=this._children.length;for(let t=0;t<e;t++)this._children[t].invalidate()}hasLowerPriorityConditionalAbortInChildren(){for(let e=0;e<this._children.length;e++){const t=this._children[e];if(T(t)&&v.has(t.abortType,c.LowerPriority))return!0;const r=t;if(null!=r&&v.has(r.abortType,c.LowerPriority)&&r.isFirstChildConditional())return!0}return!1}addChild(e){this._children.push(e)}isFirstChildConditional(){return C(this._children[0])}updateSelfAbortConditional(e,t){for(let r=0;r<this._currentChildIndex;r++){const i=this._children[r];if(!C(i))continue;if(this.updateConditionalNode(e,i)!==t){this._currentChildIndex=r;const e=this._children.length;for(let t=r;t<e;t++)this._children[t].invalidate();break}}}updateLowerPriorityAbortConditional(e,t){for(let r=0;r<this._currentChildIndex;r++){const i=this._children[r];if(T(i)&&v.has(i.abortType,c.LowerPriority)){const s=i.executeConditional(e,!0);if(t===n.Failure?s===n.Success:s===n.Failure){this._currentChildIndex=r;const e=this._children.length;for(let t=r+1;t<e;t++)this._children[t].invalidate();break}}else{const s=i;if(s&&v.has(s.abortType,c.LowerPriority)){const i=s._children[0];if(i&&C(i)){const s=this.updateConditionalNode(e,i);if(t===n.Failure?s===n.Success:s===n.Failure){this._currentChildIndex=r;const e=this._children.length;for(let t=r+1;t<e;t++)this._children[t].invalidate();break}}}}}}updateConditionalNode(e,t){return t.update(e)}}class k extends y{invalidate(){super.invalidate(),this.child?.invalidate()}}class N extends y{constructor(e,t={}){if(super(),null==e)throw new Error("动作函数不能为null或undefined");if("function"!=typeof e)throw new Error("动作必须是一个函数");this._action=e,this._enableErrorHandling=t.enableErrorHandling??!0,this._name=t.name}update(e){if(!this._enableErrorHandling)return this._action(e);try{const t=this._action(e);return this.isValidTaskStatus(t)?t:(console.error(`ExecuteAction ${this._name||""}: 动作函数返回了无效的TaskStatus: ${t}`),n.Failure)}catch(e){const t=this._name?`"${this._name}"`:"";return console.error(`ExecuteAction ${t} 执行时发生错误:`,e),n.Failure}}isValidTaskStatus(e){return e===n.Success||e===n.Failure||e===n.Running}getName(){return this._name||this._action.name||"Anonymous Action"}static createAlwaysSuccess(e,t){return new N((t=>(e(t),n.Success)),{name:t||"Always Success Action"})}static createConditional(e,t){return new N((t=>e(t)?n.Success:n.Failure),{name:t||"Conditional Action"})}}class E extends N{constructor(e,t={}){super(e,t),this.discriminator="IConditional"}static createPredicate(e,t){return new E((t=>e(t)?n.Success:n.Failure),{name:t||"Predicate Condition"})}static createNumericComparison(e,t,r,i){const s={greater:(e,t)=>e>t,less:(e,t)=>e<t,equal:(e,t)=>Math.abs(e-t)<Number.EPSILON,greaterEqual:(e,t)=>e>=t,lessEqual:(e,t)=>e<=t},a=s[r],o=i||`Numeric ${r} ${t}`;return new E((r=>{try{const i=e(r);return"number"!=typeof i||isNaN(i)?(console.warn(`${o}: getValue返回了无效的数值: ${i}`),n.Failure):a(i,t)?n.Success:n.Failure}catch(e){return console.error(`${o}: 获取数值时发生错误:`,e),n.Failure}}),{name:o})}static createPropertyExists(e,t){return new E((r=>{try{return null!=e(r)?n.Success:n.Failure}catch(e){return console.error(`${t||"Property Check"}: 检查属性时发生错误:`,e),n.Failure}}),{name:t||"Property Exists Check"})}static createAnd(e,t){return new E((t=>{for(const r of e)if(!r(t))return n.Failure;return n.Success}),{name:t||"AND Condition"})}static createOr(e,t){return new E((t=>{for(const r of e)if(r(t))return n.Success;return n.Failure}),{name:t||"OR Condition"})}}!function(e){e.Equal="equal",e.NotEqual="notEqual",e.Greater="greater",e.GreaterOrEqual="greaterOrEqual",e.Less="less",e.LessOrEqual="lessOrEqual",e.Contains="contains",e.NotContains="notContains"}(l||(l={}));class F{constructor(e,t,r=null,i){this.discriminator="IConditional",this.variableName=e,this.operator=t,this.compareValue=r,this.compareVariable=i}update(e){const t=e.blackboard;if(!(t&&t instanceof w))return console.warn("BlackboardValueComparison: 上下文中未找到Blackboard实例"),n.Failure;if(!t.hasVariable(this.variableName))return console.warn(`BlackboardValueComparison: 变量 "${this.variableName}" 不存在`),n.Failure;const r=t.getValue(this.variableName);let i;if(this.compareVariable){if(!t.hasVariable(this.compareVariable))return console.warn(`BlackboardValueComparison: 比较变量 "${this.compareVariable}" 不存在`),n.Failure;i=t.getValue(this.compareVariable)}else i=this.compareValue;return this._performComparison(r,i,this.operator)?n.Success:n.Failure}_performComparison(e,t,r){switch(r){case l.Equal:return e===t;case l.NotEqual:return e!==t;case l.Greater:return"number"==typeof e&&"number"==typeof t&&e>t;case l.GreaterOrEqual:return"number"==typeof e&&"number"==typeof t&&e>=t;case l.Less:return"number"==typeof e&&"number"==typeof t&&e<t;case l.LessOrEqual:return"number"==typeof e&&"number"==typeof t&&e<=t;case l.Contains:return("string"==typeof e&&"string"==typeof t||!!Array.isArray(e))&&e.includes(t);case l.NotContains:return"string"==typeof e&&"string"==typeof t?!e.includes(t):!Array.isArray(e)||!e.includes(t);default:return!1}}}class V{constructor(e,t=!1){this.discriminator="IConditional",this.variableName=e,this.invert=t}update(e){const t=e.blackboard;if(!(t&&t instanceof w))return console.warn("BlackboardVariableExists: 上下文中未找到Blackboard实例"),this.invert?n.Success:n.Failure;const r=t.hasVariable(this.variableName),i=r?t.getValue(this.variableName):void 0,s=r&&null!=i;return(this.invert?!s:s)?n.Success:n.Failure}}class ${constructor(e,t){this.discriminator="IConditional",this.variableName=e,this.expectedType=t}update(e){const t=e.blackboard;if(!(t&&t instanceof w))return console.warn("BlackboardVariableTypeCheck: 上下文中未找到Blackboard实例"),n.Failure;const r=t.getVariableDefinition(this.variableName);if(!r)return n.Failure;return r.type===this.expectedType?n.Success:n.Failure}}class A{constructor(e,t,r){this.discriminator="IConditional",this.variableName=e,this.minValue=t,this.maxValue=r}update(e){const t=e.blackboard;if(!(t&&t instanceof w))return console.warn("BlackboardVariableRangeCheck: 上下文中未找到Blackboard实例"),n.Failure;if(!t.hasVariable(this.variableName))return n.Failure;const r=t.getValue(this.variableName);if("number"!=typeof r)return n.Failure;return r>=this.minValue&&r<=this.maxValue?n.Success:n.Failure}}class P{static createCondition(e,t={},r){if(!e)return new E((()=>n.Success));switch(e.type){case"blackboard-value-comparison":return P.createBlackboardComparison(t);case"condition-custom":return P.createCustomCondition(e.properties||t);case"event-condition":return P.createEventCondition(e.properties||t,r);default:return console.warn(`未知的条件类型: ${e.type},使用默认成功条件`),new E((()=>n.Success))}}static createBlackboardComparison(e){const t=P.extractNestedValue(e.variableName)||"variable",r=P.extractNestedValue(e.operator)||"equal",i=P.extractNestedValue(e.compareValue),s=P.extractNestedValue(e.compareVariable),a=P.mapOperatorToEnum(r),n=P.cleanVariableName(t),o=s?P.cleanVariableName(s):void 0;let c=i;return"string"==typeof i&&("true"===i.toLowerCase()?c=!0:"false"===i.toLowerCase()?c=!1:isNaN(Number(i))||""===i.trim()||(c=Number(i))),new F(n,a,c,o)}static createCustomCondition(e={}){const t=e.conditionCode,r="string"==typeof t?t:"object"==typeof t&&t&&"value"in t?String(t.value):void 0;if(r&&"string"==typeof r)try{const e=new Function("context",`\n try {\n return (${r})(context);\n } catch (error) {\n console.error('自定义条件函数执行错误:', error);\n return false;\n }\n `);return new E((t=>{try{return e(t)?n.Success:n.Failure}catch(e){return console.error("自定义条件函数执行失败:",e),n.Failure}}))}catch(e){console.warn("解析自定义条件函数失败:",e)}return new E((()=>n.Failure))}static createEventCondition(e={},t){const r=P.extractNestedValue(e.eventName);return r&&"string"==typeof r?new E((t=>{try{const i=t.eventRegistry;if(!i)return console.warn("[event-condition] 未找到事件注册表,请在执行上下文中提供 eventRegistry"),n.Failure;const s=i.getConditionHandler?i.getConditionHandler(r):i.handlers?.get(r);if(!s)return console.warn(`[event-condition] 未找到条件处理器: ${r}`),n.Failure;let a={};const o=P.extractNestedValue(e.parameters);if(o){if("string"==typeof o)try{a=JSON.parse(o)}catch(e){console.warn(`[event-condition] 参数解析失败: ${o}`)}else a=o;const e=t.blackboard;e&&(a=P.replaceBlackboardVariables(a,e))}const c=s(t,a);return c instanceof Promise?(console.warn(`[event-condition] 条件 ${r} 返回Promise,条件节点不支持异步操作`),n.Failure):c?n.Success:n.Failure}catch(e){return console.error(`[event-condition] 条件 ${r} 检查失败:`,e),n.Failure}})):(console.warn("[event-condition] 缺少有效的 eventName 属性"),new E((()=>n.Failure)))}static mapOperatorToEnum(e){switch(e.toLowerCase()){case"equal":default:return l.Equal;case"notequal":case"not_equal":return l.NotEqual;case"greater":return l.Greater;case"greaterorequal":case"greater_or_equal":return l.GreaterOrEqual;case"less":return l.Less;case"lessorequal":case"less_or_equal":return l.LessOrEqual;case"contains":return l.Contains;case"notcontains":case"not_contains":return l.NotContains}}static cleanVariableName(e){return"string"!=typeof e?String(e):e.replace(/^\{\{|\}\}$/g,"")}static extractNestedValue(e){return null==e||"object"!=typeof e?e:"value"in e?P.extractNestedValue(e.value):e}static replaceBlackboardVariables(e,t){if("string"==typeof e)return e.replace(/\{\{([^}]+)\}\}/g,((e,r)=>{const i=t.get?t.get(r):t[r];return void 0!==i?i:e}));if(Array.isArray(e))return e.map((e=>P.replaceBlackboardVariables(e,t)));if(e&&"object"==typeof e){const r={};for(const i in e)e.hasOwnProperty(i)&&(r[i]=P.replaceBlackboardVariables(e[i],t));return r}return e}}class M extends y{constructor(e){super(),this.isError=!1,this.text=e}update(e){return this.isError?console.error(this.text):console.log(this.text),n.Success}}class O extends y{constructor(e,t=!1){if(super(),this._elapsedTime=0,this._useExternalTime=!1,this._lastUpdateTime=0,e<=0)throw new Error("等待时间必须大于0");this.waitTime=e,this._useExternalTime=t}onStart(){this._elapsedTime=0,this._lastUpdateTime=performance.now()/1e3}update(e){let t;var r;return this._useExternalTime&&(null!=(r=e)&&"object"==typeof r&&"deltaTime"in r&&"number"==typeof r.deltaTime)?(t=e.deltaTime,(t<0||!isFinite(t))&&(console.warn("WaitAction: 无效的deltaTime值,回退到内部时间计算"),t=this._calculateInternalDeltaTime())):t=this._calculateInternalDeltaTime(),this._elapsedTime+=t,this._elapsedTime>=this.waitTime?n.Success:n.Running}_calculateInternalDeltaTime(){const e=performance.now()/1e3,t=e-this._lastUpdateTime;return this._lastUpdateTime=e,Math.min(t,.1)}getProgress(){return Math.min(this._elapsedTime/this.waitTime,1)}getRemainingTime(){return Math.max(this.waitTime-this._elapsedTime,0)}setWaitTime(e,t=!1){if(e<=0)throw new Error("等待时间必须大于0");this.waitTime=e,t&&(this._elapsedTime=0,this._lastUpdateTime=performance.now()/1e3)}isCompleted(){return this._elapsedTime>=this.waitTime}}class B extends y{constructor(e){super(),this._childTree=e}update(e){return this._childTree.tick(),n.Success}}class I extends k{constructor(e,t=!0,r=c.None){if(super(),this.discriminator="IConditional",this.abortType=c.None,this._conditionalStatus=n.Invalid,!C(e))throw new Error("conditional 必须继承 IConditional");this._conditional=e,this._shouldReevaluate=t,this.abortType=r}invalidate(){super.invalidate(),this._conditionalStatus=n.Invalid}onStart(){this._conditionalStatus=n.Invalid}update(e){if(!this.child)throw new Error("child不能为空");if(!this._shouldReevaluate&&this.child.status===n.Running)return this.child.tick(e);if(this._conditionalStatus=this.executeConditional(e),this._conditionalStatus==n.Success){return this.child.tick(e)}return n.Failure}executeConditional(e,t=!1){return(t||this._shouldReevaluate||this._conditionalStatus==n.Invalid)&&(this._conditionalStatus=this._conditional.update(e)),this._conditionalStatus}}class z extends k{update(e){if(!this.child)throw new Error("child必须不能为空");return this.child.update(e)==n.Running?n.Running:n.Failure}}class R extends k{update(e){if(!this.child)throw new Error("child必须不能为空");return this.child.update(e)==n.Running?n.Running:n.Success}}class L extends k{update(e){if(!this.child)throw new Error("child必须不能为空");let t=this.child.tick(e);return t==n.Success?n.Failure:t==n.Failure?n.Success:n.Running}}class D extends k{constructor(e,t=!1,r=!1){if(super(),this._iterationCount=0,this._lastChildStatus=n.Invalid,!Number.isInteger(e)||e<-1||0===e)throw new Error("重复次数必须是正整数或-1(无限重复)");this.count=e,this.endOnFailure=t,this.endOnSuccess=r}get repeatForever(){return-1===this.count}set repeatForever(e){this.count=e?-1:Math.max(1,this.count)}onStart(){this._iterationCount=0,this._lastChildStatus=n.Invalid}update(e){if(!this.child)throw new Error("子节点不能为空");if(!this.repeatForever&&this._iterationCount>=this.count)return n.Success;const t=this.child.tick(e);return this._lastChildStatus=t,t===n.Running?n.Running:(this._iterationCount++,this.endOnFailure&&t===n.Failure||this.endOnSuccess&&t===n.Success||!this.repeatForever&&this._iterationCount>=this.count?n.Success:(this.child.invalidate(),n.Running))}getIterationCount(){return this._iterationCount}getRemainingCount(){return this.repeatForever?-1:Math.max(0,this.count-this._iterationCount)}getProgress(){return this.repeatForever?-1:Math.min(this._iterationCount/this.count,1)}getLastChildStatus(){return this._lastChildStatus}reset(){this._iterationCount=0,this._lastChildStatus=n.Invalid,this.child&&this.child.invalidate()}static createUntilSuccess(e=-1){return new D(e,!1,!0)}static createUntilFailure(e=-1){return new D(e,!0,!1)}static createInfinite(){return new D(-1,!1,!1)}}class q extends k{update(e){if(!this.child)throw new Error("child必须不为空");return this.child.update(e)!=n.Failure?n.Running:n.Success}}class j extends k{update(e){if(!this.child)throw new Error("child必须不为空");return this.child.update(e)!=n.Success?n.Running:n.Success}}class H extends x{constructor(){super(...arguments),this._childCount=0}onStart(){super.onStart(),this._childCount=this._children.length}update(e){if(0===this._childCount)return n.Success;let t=0;for(let r=0;r<this._childCount;r++){const i=this._children[r];i.tick(e);const s=i.status;if(s===n.Failure)return n.Failure;s===n.Success&&t++}return t===this._childCount?n.Success:n.Running}addChild(e){super.addChild(e),this._childCount=this._children.length}}class U extends x{constructor(){super(...arguments),this._childCount=0}onStart(){super.onStart(),this._childCount=this._children.length}update(e){if(0===this._childCount)return n.Failure;let t=0;for(let r=0;r<this._childCount;r++){const i=this._children[r];i.tick(e);const s=i.status;if(s===n.Success)return n.Success;s===n.Failure&&t++}return t===this._childCount?n.Failure:n.Running}addChild(e){super.addChild(e),this._childCount=this._children.length}}class G extends x{constructor(e=c.None){super(),this._childCount=0,this.abortType=e}onStart(){super.onStart(),this._childCount=this._children.length,this._currentChildIndex=0}update(e){if(0===this._childCount)return n.Failure;if(0!==this._currentChildIndex&&this.handleConditionalAborts(e),this._currentChildIndex>=this._childCount)return this._currentChildIndex=0,n.Failure;const t=this._children[this._currentChildIndex].tick(e);return t!==n.Failure?t:(this._currentChildIndex++,this._currentChildIndex>=this._childCount?(this._currentChildIndex=0,n.Failure):n.Running)}invalidate(){super.invalidate(),this._currentChildIndex=0}addChild(e){super.addChild(e),this._childCount=this._children.length}handleConditionalAborts(e){this._hasLowerPriorityConditionalAbort&&this.updateLowerPriorityAbortConditional(e,n.Failure),v.has(this.abortType,c.Self)&&this.updateSelfAbortConditional(e,n.Failure)}}class W extends G{constructor(e=c.None,t=!0){super(e),this._originalOrder=null,this._reshuffleOnRestart=t}onStart(){if(super.onStart(),null===this._originalOrder&&this._children.length>0&&(this._originalOrder=[...this._children]),this._children.length>1)try{t.shuffle(this._children)}catch(e){console.error("RandomSelector: 洗牌子节点时发生错误:",e),this._originalOrder&&(this._children=[...this._originalOrder])}}invalidate(){super.invalidate(),!this._reshuffleOnRestart&&this._originalOrder&&(this._children=[...this._originalOrder])}setReshuffleOnRestart(e){this._reshuffleOnRestart=e}getReshuffleOnRestart(){return this._reshuffleOnRestart}restoreOriginalOrder(){this._originalOrder&&(this._children=[...this._originalOrder])}reshuffleNow(){if(this._children.length>1)try{t.shuffle(this._children)}catch(e){console.error("RandomSelector: 手动洗牌时发生错误",e)}}}class J extends x{