@esengine/ecs-framework 2.3.1 → 2.4.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -0
- package/index.cjs +2 -0
- package/index.cjs.map +1 -0
- package/{dist/index.d.ts → index.d.ts} +7055 -4486
- package/index.es5.js +4 -0
- package/index.es5.js.map +1 -0
- package/index.mjs +2 -0
- package/index.mjs.map +1 -0
- package/index.umd.js +4 -0
- package/index.umd.js.map +1 -0
- package/package.json +25 -65
- package/dist/index.cjs +0 -2
- package/dist/index.cjs.map +0 -1
- package/dist/index.es5.js +0 -4
- package/dist/index.es5.js.map +0 -1
- package/dist/index.mjs +0 -2
- package/dist/index.mjs.map +0 -1
- package/dist/index.umd.js +0 -4
- package/dist/index.umd.js.map +0 -1
- package/dist/package.json +0 -47
package/index.mjs
ADDED
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
function e(e,t,n,s){var i,r=arguments.length,o=r<3?t:null===s?s=Object.getOwnPropertyDescriptor(t,n):s;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)o=Reflect.decorate(e,t,n,s);else for(var a=e.length-1;a>=0;a--)(i=e[a])&&(o=(r<3?i(o):r>3?i(t,n,o):i(t,n))||o);return r>3&&o&&Object.defineProperty(t,n,o),o}function t(e,t){if("object"==typeof Reflect&&"function"==typeof Reflect.metadata)return Reflect.metadata(e,t)}class n{static update(e){this.unscaledDeltaTime=e,this.deltaTime=e*this.timeScale,this.unscaledTotalTime+=this.unscaledDeltaTime,this.totalTime+=this.deltaTime,this.frameCount++}static sceneChanged(){this.frameCount=0,this.totalTime=0,this.unscaledTotalTime=0,this.deltaTime=0,this.unscaledDeltaTime=0}static checkEvery(e,t){return this.totalTime-t>=e}}n.deltaTime=0,n.unscaledDeltaTime=0,n.totalTime=0,n.unscaledTotalTime=0,n.timeScale=1,n.frameCount=0;class s{constructor(){this._timeInSeconds=0,this._repeats=!1,this._isDone=!1,this._elapsedTime=0}getContext(){return this.context}get isDone(){return this._isDone}get elapsedTime(){return this._elapsedTime}reset(){this._elapsedTime=0}stop(){this._isDone=!0}tick(){return!this._isDone&&this._elapsedTime>this._timeInSeconds&&(this._elapsedTime-=this._timeInSeconds,this._onTime(this),this._isDone||this._repeats||(this._isDone=!0)),this._elapsedTime+=n.deltaTime,this._isDone}initialize(e,t,n,s){this._timeInSeconds=e,this._repeats=t,this.context=n,this._onTime=s.bind(n)}unload(){this.context=null,this._onTime=null}}const i=new WeakMap,r=new WeakMap;function o(){return function(e){const t=i.get(e);i.set(e,{injectable:!0,dependencies:[],...t?.properties&&{properties:t.properties}})}}function a(e=0){return function(t){const n=t.prototype;if(!n||"function"!=typeof n.update)throw new Error(`@Updatable() decorator requires class ${t.name} to implement IUpdatable interface with update() method. Please add 'implements IUpdatable' and define update(deltaTime?: number): void method.`);r.set(t,{updatable:!0,priority:e})}}function c(e){return function(t,n){let s=i.get(t.constructor);s||(s={injectable:!0,dependencies:[]},i.set(t.constructor,s)),s.properties||(s.properties=new Map),s.properties.set(n,e)}}function h(e){const t=i.get(e);return t?.injectable??!1}function l(e){const t=i.get(e);return t?.properties||new Map}function u(e,t){const n=new e;return d(n,t),n}function d(e,t){const n=e.constructor,s=(r=n,i.get(r));var r;if(s?.properties&&0!==s.properties.size)for(const[n,i]of s.properties){const s=t.resolve(i);null!==s&&(e[n]=s)}}function m(e){const t=r.get(e);return t?.updatable??!1}function p(e){return r.get(e)}function f(e,t,n=!0){if(!h(t))throw new Error(`${t.name} is not marked as @Injectable(). Please add @Injectable() decorator to the class.`);const s=e=>u(t,e);n?e.registerSingleton(t,s):e.registerTransient(t,s)}let g=class{constructor(){this._timers=[]}update(){for(let e=this._timers.length-1;e>=0;e--)this._timers[e].tick()&&(this._timers[e].unload(),this._timers.splice(e,1))}schedule(e,t,n,i){const r=new s;return r.initialize(e,t,n,i),this._timers.push(r),r}dispose(){for(const e of this._timers)e.unload();this._timers=[]}};var y;g=e([a()],g),function(e){e.HIGH_EXECUTION_TIME="high_execution_time",e.HIGH_MEMORY_USAGE="high_memory_usage",e.HIGH_CPU_USAGE="high_cpu_usage",e.FREQUENT_GC="frequent_gc",e.LOW_FPS="low_fps",e.HIGH_ENTITY_COUNT="high_entity_count"}(y||(y={}));class _{constructor(){this._systemData=new Map,this._systemStats=new Map,this._isEnabled=!1,this._maxRecentSamples=60}enable(){this._isEnabled=!0}disable(){this._isEnabled=!1}get isEnabled(){return this._isEnabled}startMonitoring(e){return this._isEnabled?performance.now():0}endMonitoring(e,t,n=0){if(!this._isEnabled||0===t)return;const s=performance.now(),i=s-t,r={name:e,executionTime:i,entityCount:n,averageTimePerEntity:n>0?i/n:0,lastUpdateTime:s};this._systemData.set(e,r),this.updateStats(e,i)}updateStats(e,t){let n=this._systemStats.get(e);n||(n={totalTime:0,averageTime:0,minTime:Number.MAX_VALUE,maxTime:0,executionCount:0,recentTimes:[],standardDeviation:0,percentile95:0,percentile99:0},this._systemStats.set(e,n)),n.totalTime+=t,n.executionCount++,n.averageTime=n.totalTime/n.executionCount,n.minTime=Math.min(n.minTime,t),n.maxTime=Math.max(n.maxTime,t),n.recentTimes.push(t),n.recentTimes.length>this._maxRecentSamples&&n.recentTimes.shift(),this.calculateAdvancedStats(n)}calculateAdvancedStats(e){if(0===e.recentTimes.length)return;const t=e.recentTimes.reduce((e,t)=>e+t,0)/e.recentTimes.length,n=e.recentTimes.reduce((e,n)=>e+Math.pow(n-t,2),0)/e.recentTimes.length;e.standardDeviation=Math.sqrt(n);const s=[...e.recentTimes].sort((e,t)=>e-t),i=s.length;e.percentile95=s[Math.floor(.95*i)]||0,e.percentile99=s[Math.floor(.99*i)]||0}getSystemData(e){return this._systemData.get(e)}getSystemStats(e){return this._systemStats.get(e)}getAllSystemData(){return new Map(this._systemData)}getAllSystemStats(){return new Map(this._systemStats)}getPerformanceReport(){if(!this._isEnabled)return"Performance monitoring is disabled.";const e=[];e.push("=== ECS Performance Report ==="),e.push("");const t=Array.from(this._systemStats.entries()).sort((e,t)=>t[1].averageTime-e[1].averageTime);for(const[n,s]of t){const t=this._systemData.get(n);e.push(`System: ${n}`),e.push(` Current: ${t?.executionTime.toFixed(2)}ms (${t?.entityCount} entities)`),e.push(` Average: ${s.averageTime.toFixed(2)}ms`),e.push(` Min/Max: ${s.minTime.toFixed(2)}ms / ${s.maxTime.toFixed(2)}ms`),e.push(` Total: ${s.totalTime.toFixed(2)}ms (${s.executionCount} calls)`),t?.averageTimePerEntity&&t.averageTimePerEntity>0&&e.push(` Per Entity: ${t.averageTimePerEntity.toFixed(4)}ms`),e.push("")}const n=Array.from(this._systemData.values()).reduce((e,t)=>e+t.executionTime,0);return e.push(`Total Frame Time: ${n.toFixed(2)}ms`),e.push(`Systems Count: ${this._systemData.size}`),e.join("\n")}reset(){this._systemData.clear(),this._systemStats.clear()}resetSystem(e){this._systemData.delete(e),this._systemStats.delete(e)}getPerformanceWarnings(e=16.67){const t=[];for(const[n,s]of this._systemData.entries())s.executionTime>e&&t.push(`${n}: ${s.executionTime.toFixed(2)}ms (>${e}ms)`);return t}setMaxRecentSamples(e){this._maxRecentSamples=e;for(const t of this._systemStats.values())for(;t.recentTimes.length>e;)t.recentTimes.shift()}dispose(){this._systemData.clear(),this._systemStats.clear(),this._isEnabled=!1}}class S{constructor(e,t=100,n=1024){this._objects=[],this._createFn=e,this._maxSize=t,this._objectSize=n,this._stats={size:0,maxSize:t,totalCreated:0,totalObtained:0,totalReleased:0,hitRate:0,estimatedMemoryUsage:0}}static getPool(e,t=100,n=1024){let s=this._pools.get(e);return s||(s=new S(()=>new e,t,n),this._pools.set(e,s)),s}obtain(){if(this._stats.totalObtained++,this._objects.length>0){const e=this._objects.pop();return this._stats.size--,this._updateHitRate(),this._updateMemoryUsage(),e}return this._stats.totalCreated++,this._updateHitRate(),this._createFn()}release(e){e&&(this._stats.totalReleased++,this._stats.size<this._maxSize&&(e.reset(),this._objects.push(e),this._stats.size++,this._updateMemoryUsage()))}getStats(){return{...this._stats}}clear(){for(const e of this._objects)e.reset();this._objects.length=0,this._stats.size=0,this._updateMemoryUsage()}compact(e){const t=e??Math.floor(this._objects.length/2);for(;this._objects.length>t;){const e=this._objects.pop();e&&(e.reset(),this._stats.size--)}this._updateMemoryUsage()}prewarm(e){const t=Math.min(e,this._maxSize-this._objects.length);for(let e=0;e<t;e++){const e=this._createFn();e.reset(),this._objects.push(e),this._stats.totalCreated++,this._stats.size++}this._updateMemoryUsage()}setMaxSize(e){this._maxSize=e,this._stats.maxSize=e,this._objects.length>e&&this.compact(e)}getAvailableCount(){return this._objects.length}isEmpty(){return 0===this._objects.length}isFull(){return this._objects.length>=this._maxSize}static getAllPoolTypes(){return Array.from(this._pools.keys())}static getAllPoolStats(){const e={};for(const[t,n]of this._pools){e[t.name||t.toString()]=n.getStats()}return e}static compactAllPools(){for(const e of this._pools.values())e.compact()}static clearAllPools(){for(const e of this._pools.values())e.clear();this._pools.clear()}static getGlobalStatsString(){const e=this.getAllPoolStats(),t=["=== Object Pool Global Statistics ===",""];if(0===Object.keys(e).length)return t.push("No pools registered"),t.join("\n");for(const[n,s]of Object.entries(e))t.push(`${n}:`),t.push(` Size: ${s.size}/${s.maxSize}`),t.push(` Hit Rate: ${(100*s.hitRate).toFixed(1)}%`),t.push(` Total Created: ${s.totalCreated}`),t.push(` Total Obtained: ${s.totalObtained}`),t.push(` Memory: ${(s.estimatedMemoryUsage/1024).toFixed(1)} KB`),t.push("");return t.join("\n")}_updateHitRate(){if(0===this._stats.totalObtained)this._stats.hitRate=0;else{const e=this._stats.totalObtained-this._stats.totalCreated;this._stats.hitRate=e/this._stats.totalObtained}}_updateMemoryUsage(){this._stats.estimatedMemoryUsage=this._stats.size*this._objectSize}}S._pools=new Map;class v{constructor(){this.pools=new Map,this.autoCompactInterval=6e4,this.lastCompactTime=0}registerPool(e,t){this.pools.set(e,t)}getPool(e){return this.pools.get(e)||null}update(){const e=Date.now();e-this.lastCompactTime>this.autoCompactInterval&&(this.compactAllPools(),this.lastCompactTime=e)}createPool(e,t,n=100,s=1024){let i=this.pools.get(e);return i||(i=new S(t,n,s),this.pools.set(e,i)),i}removePool(e){const t=this.pools.get(e);return!!t&&(t.clear(),this.pools.delete(e),!0)}getPoolNames(){return Array.from(this.pools.keys())}getPoolCount(){return this.pools.size}compactAllPools(){for(const e of this.pools.values())e.compact()}clearAllPools(){for(const e of this.pools.values())e.clear()}getAllStats(){const e=new Map;for(const[t,n]of this.pools)e.set(t,n.getStats());return e}getGlobalStats(){let e=0,t=0,n=0,s=0,i=0,r=0;for(const o of this.pools.values()){const a=o.getStats();e+=a.size,t+=a.maxSize,n+=a.totalCreated,s+=a.totalObtained,i+=a.totalReleased,r+=a.estimatedMemoryUsage}return{size:e,maxSize:t,totalCreated:n,totalObtained:s,totalReleased:i,hitRate:0===s?0:(s-n)/s,estimatedMemoryUsage:r}}getStatsString(){const e=["=== Pool Manager Statistics ===",""];if(0===this.pools.size)return e.push("No pools registered"),e.join("\n");const t=this.getGlobalStats();e.push(`Total Pools: ${this.pools.size}`),e.push(`Global Hit Rate: ${(100*t.hitRate).toFixed(1)}%`),e.push(`Global Memory Usage: ${(t.estimatedMemoryUsage/1024).toFixed(1)} KB`),e.push("");for(const[t,n]of this.pools){const s=n.getStats();e.push(`${t}:`),e.push(` Size: ${s.size}/${s.maxSize}`),e.push(` Hit Rate: ${(100*s.hitRate).toFixed(1)}%`),e.push(` Memory: ${(s.estimatedMemoryUsage/1024).toFixed(1)} KB`),e.push("")}return e.join("\n")}setAutoCompactInterval(e){this.autoCompactInterval=e}prewarmAllPools(){for(const e of this.pools.values()){const t=e.getStats(),n=Math.floor(.2*t.maxSize);e.prewarm(n)}}reset(){this.clearAllPools(),this.pools.clear(),this.lastCompactTime=0}dispose(){this.reset()}}const C=Symbol("ComponentTypeName"),b=Symbol("ComponentDependencies"),E=Symbol("ComponentEditorOptions");function T(e){return!!e[C]}function w(e){const t=e[C];return t||(e.name||"UnknownComponent")}function M(e){return w(e.constructor)}function I(e){return e[b]}function A(e){return e[E]}function k(e){return A(e.constructor)}function D(e){const t=A(e);return t?.hideInInspector??!1}function x(e){return D(e.constructor)}var O,P;!function(e){e[e.LOW=0]="LOW",e[e.HIGH=1]="HIGH"}(O||(O={}));class R{static create(e){if(e<0)throw new Error(`Bit index ${e} out of range [0, ∞)`);const t={base:[0,0]};return R.setBit(t,e),t}static fromNumber(e){return{base:[e>>>0,0]}}static hasAny(e,t){const n=t.base,s=e.base,i=t.segments,r=e.segments,o=0!==(s[O.LOW]&n[O.LOW])||0!==(s[O.HIGH]&n[O.HIGH]);return!o&&i&&r?r.some((e,t)=>{const n=i[t];return n&&(0!==(e[O.LOW]&n[O.LOW])||0!==(e[O.HIGH]&n[O.HIGH]))}):o}static hasAll(e,t){const n=e.base,s=t.base,i=e.segments,r=t.segments,o=(n[O.LOW]&s[O.LOW])===s[O.LOW]&&(n[O.HIGH]&s[O.HIGH])===s[O.HIGH];if(!o||!r)return o;const a=i?.length??0;if(i)for(let e=0;e<Math.min(a,r.length);e++){const t=i[e],n=r[e];if((t[O.LOW]&n[O.LOW])!==n[O.LOW]||(t[O.HIGH]&n[O.HIGH])!==n[O.HIGH])return!1}for(let e=a;e<r.length;e++){const t=r[e];if(0!==t[O.LOW]||0!==t[O.HIGH])return!1}return!0}static hasNone(e,t){const n=e.base,s=t.base,i=e.segments,r=t.segments,o=0===(n[O.LOW]&s[O.LOW])&&0===(n[O.HIGH]&s[O.HIGH]);return i&&o&&r?i.every((e,t)=>{const n=r[t];return!n||0===(e[O.LOW]&n[O.LOW])&&0===(e[O.HIGH]&n[O.HIGH])}):o}static isZero(e){const t=0===e.base[O.LOW]&&0===e.base[O.HIGH];return e.segments&&t?e.segments.every(e=>0===e[O.LOW]&&0===e[O.HIGH]):t}static equals(e,t){const n=e.base[O.LOW]===t.base[O.LOW]&&e.base[O.HIGH]===t.base[O.HIGH];if(!n||!e.segments&&!t.segments)return n;const s=e.segments??[],i=t.segments??[];for(let e=0;e<Math.max(s.length,i.length);e++){const t=s[e],n=i[e];if(t&&!n){if(0!==t[O.LOW]||0!==t[O.HIGH])return!1}else if(!t&&n){if(0!==n[O.LOW]||0!==n[O.HIGH])return!1}else if(t&&n&&(t[O.LOW]!==n[O.LOW]||t[O.HIGH]!==n[O.HIGH]))return!1}return!0}static setBit(e,t){if(t<0)throw new Error(`Bit index ${t} out of range [0, 63]`);const n=R.getSegmentByBitIndex(e,t),s=63&t;s<32?n[O.LOW]|=1<<s:n[O.HIGH]|=1<<s-32}static getBit(e,t){if(t<0)return!1;const n=R.getSegmentByBitIndex(e,t,!1);if(!n)return!1;const s=63&t;return s<32?!!(n[O.LOW]&1<<s):!!(n[O.HIGH]&1<<s-32)}static clearBit(e,t){if(t<0)throw new Error(`Bit index ${t} out of range [0, 63]`);const n=R.getSegmentByBitIndex(e,t,!1);if(!n)return;const s=63&t;s<32?n[O.LOW]&=~(1<<s):n[O.HIGH]&=~(1<<s-32)}static orInPlace(e,t){e.base[O.LOW]|=t.base[O.LOW],e.base[O.HIGH]|=t.base[O.HIGH];const n=t.segments;if(n&&n.length>0){e.segments||(e.segments=[]);const t=e.segments;for(;t.length<n.length;)t.push([0,0]);for(let e=0;e<n.length;e++){const s=t[e],i=n[e];s[O.LOW]|=i[O.LOW],s[O.HIGH]|=i[O.HIGH]}}}static andInPlace(e,t){e.base[O.LOW]&=t.base[O.LOW],e.base[O.HIGH]&=t.base[O.HIGH];const n=t.segments;if(n&&n.length>0){e.segments||(e.segments=[]);const t=e.segments;for(;t.length<n.length;)t.push([0,0]);for(let e=0;e<n.length;e++){const s=t[e],i=n[e];s[O.LOW]&=i[O.LOW],s[O.HIGH]&=i[O.HIGH]}}}static xorInPlace(e,t){e.base[O.LOW]^=t.base[O.LOW],e.base[O.HIGH]^=t.base[O.HIGH];const n=t.segments;if(!n||0==n.length)return;e.segments||(e.segments=[]);const s=e.segments;for(;s.length<n.length;)s.push([0,0]);for(let e=0;e<n.length;e++){const t=s[e],i=n[e];t[O.LOW]^=i[O.LOW],t[O.HIGH]^=i[O.HIGH]}}static clear(e){if(e.base[O.LOW]=0,e.base[O.HIGH]=0,e.segments)for(let t=0;t<e.segments.length;t++){const n=e.segments[t];n[O.LOW]=0,n[O.HIGH]=0}}static copy(e,t){if(R.clear(t),t.base[O.LOW]=e.base[O.LOW],t.base[O.HIGH]=e.base[O.HIGH],!e.segments||0==e.segments.length)return;if(!t.segments)return void(t.segments=e.segments.map(e=>[...e]));const n=e.segments.length-t.segments.length;for(let e=0;e<n;e++)t.segments.push([0,0]);const s=t.segments,i=e.segments;for(let e=0;e<i.length;e++){const t=s[e],n=i[e];t[O.LOW]=n[O.LOW],t[O.HIGH]=n[O.HIGH]}}static clone(e){return{base:e.base.slice(),...e.segments&&{segments:e.segments.map(e=>[...e])}}}static toString(e,t=2,n=!1){2!=t&&16!=t&&(t=2);const s=e.segments?.length??0;let i="";if(n){let e=0;e=2===t?66:19;for(let t=0;t<=s;t++){i+=(0===t?"0 (Base):":`${t} (${64*t}):`).toString().padEnd(e)}i+="\n"}for(let r=-1;r<s;r++){let s="";const o=-1==r?e.base:e.segments[r],a=o[O.HIGH],c=o[O.LOW];if(2==t){s=a.toString(2).padStart(32,"0")+"_"+c.toString(2).padStart(32,"0")}else{let e=a?a.toString(16).toUpperCase():"";n&&(e=e.padStart(8,"0"));let t=c.toString(16).toUpperCase();e&&(t=t.padStart(8,"0")),s="0x"+e+t}i+=-1===r?s:" "+s}return i}static popCount(e){let t=0;for(let n=-1;n<(e.segments?.length??0);n++){const s=-1==n?e.base:e.segments[n];let i=s[O.LOW],r=s[O.HIGH];for(;i;)i&=i-1,t++;for(;r;)r&=r-1,t++}return t}static getSegmentByBitIndex(e,t,n=!0){if(t<=63)return e.base;{let s=e.segments;if(!s){if(!n)return null;s=e.segments=[]}const i=(t>>6)-1;if(s.length<=i){if(!n)return null;const e=i-s.length+1;for(let t=0;t<e;t++)s.push([0,0])}return s[i]??null}}}R.ZERO={base:[0,0]},function(e){e[e.Debug=0]="Debug",e[e.Info=1]="Info",e[e.Warn=2]="Warn",e[e.Error=3]="Error",e[e.Fatal=4]="Fatal",e[e.None=5]="None"}(P||(P={}));const z={BLACK:"[30m",RED:"[31m",GREEN:"[32m",YELLOW:"[33m",BLUE:"[34m",MAGENTA:"[35m",CYAN:"[36m",WHITE:"[37m",BRIGHT_BLACK:"[90m",BRIGHT_RED:"[91m",BRIGHT_GREEN:"[92m",BRIGHT_YELLOW:"[93m",BRIGHT_BLUE:"[94m",BRIGHT_MAGENTA:"[95m",BRIGHT_CYAN:"[96m",BRIGHT_WHITE:"[97m",RESET:"[0m",BOLD:"[1m",UNDERLINE:"[4m"};class F{constructor(e={}){this._config={level:P.Info,enableTimestamp:!0,enableColors:"undefined"==typeof window,...e}}debug(e,...t){this.log(P.Debug,e,...t)}info(e,...t){this.log(P.Info,e,...t)}warn(e,...t){this.log(P.Warn,e,...t)}error(e,...t){this.log(P.Error,e,...t)}fatal(e,...t){this.log(P.Fatal,e,...t)}setLevel(e){this._config.level=e}setColors(e){0===Object.keys(e).length?delete this._config.colors:this._config.colors={...this._config.colors,...e}}setPrefix(e){this._config.prefix=e}log(e,t,...n){if(e<this._config.level)return;let s=t;if(this._config.enableTimestamp){s=`[${(new Date).toISOString()}] ${s}`}this._config.prefix&&(s=`[${this._config.prefix}] ${s}`);s=`[${P[e].toUpperCase()}] ${s}`,this._config.output?this._config.output(e,s):this.outputToConsole(e,s,...n)}outputToConsole(e,t,...n){const s=this._config.enableColors?this.getColors():null;switch(e){case P.Debug:s?console.debug(`${s.debug}${t}${s.reset}`,...n):console.debug(t,...n);break;case P.Info:s?console.info(`${s.info}${t}${s.reset}`,...n):console.info(t,...n);break;case P.Warn:s?console.warn(`${s.warn}${t}${s.reset}`,...n):console.warn(t,...n);break;case P.Error:s?console.error(`${s.error}${t}${s.reset}`,...n):console.error(t,...n);break;case P.Fatal:s?console.error(`${s.fatal}${t}${s.reset}`,...n):console.error(t,...n)}}getColors(){return{...{debug:z.BRIGHT_BLACK,info:z.GREEN,warn:z.YELLOW,error:z.RED,fatal:z.BRIGHT_RED,reset:z.RESET},...this._config.colors}}}class N{constructor(){this._loggers=new Map,this._defaultLevel=P.Info}get defaultLogger(){return this._defaultLogger||(this._defaultLogger=this.createDefaultLogger()),this._defaultLogger}createDefaultLogger(){return this._loggerFactory?this._loggerFactory():new F({level:this._defaultLevel})}static getInstance(){return N._instance||(N._instance=new N),N._instance}getLogger(e){return e?this._loggerFactory?this._loggerFactory(e):(this._loggers.has(e)||this._loggers.set(e,new F({prefix:e,level:this._defaultLevel})),this._loggers.get(e)):this.defaultLogger}setLogger(e,t){this._loggers.set(e,t)}setGlobalLevel(e){this._defaultLevel=e,this._defaultLogger instanceof F&&this._defaultLogger.setLevel(e);for(const t of this._loggers.values())t instanceof F&&t.setLevel(e)}createChildLogger(e,t){const n=`${e}.${t}`;return this.getLogger(n)}setGlobalColors(e){this._defaultLogger instanceof F&&this._defaultLogger.setColors(e);for(const t of this._loggers.values())t instanceof F&&t.setColors(e)}resetColors(){this._defaultLogger instanceof F&&this._defaultLogger.setColors({});for(const e of this._loggers.values())e instanceof F&&e.setColors({})}setLoggerFactory(e){this._loggerFactory=e,delete this._defaultLogger,this._loggers.clear()}}const B=N.getInstance().getLogger();function $(e){return N.getInstance().getLogger(e)}function L(e){N.getInstance().setGlobalColors(e)}function W(){N.getInstance().resetColors()}function H(e){N.getInstance().setGlobalLevel(e)}function j(e){N.getInstance().setLoggerFactory(e)}class G{static register(e){const t=w(e);if(T(e)||this.warnedComponents.has(e)||(this.warnedComponents.add(e),console.warn(`[ComponentRegistry] Component "${t}" is missing @ECSComponent decorator. This may cause issues with serialization and code minification. Please add: @ECSComponent('${t}')`)),this.componentTypes.has(e)){return this.componentTypes.get(e)}if(this.hotReloadEnabled&&this.componentNameToType.has(t)){const n=this.componentNameToType.get(t);if(n!==e){const s=this.componentTypes.get(n);return this.componentTypes.delete(n),this.componentTypes.set(e,s),this.bitIndexToType.set(s,e),this.componentNameToType.set(t,e),console.log(`[ComponentRegistry] Hot reload: replaced component "${t}"`),s}}const n=this.nextBitIndex++;return this.componentTypes.set(e,n),this.bitIndexToType.set(n,e),this.componentNameToType.set(t,e),this.componentNameToId.set(t,n),n}static getBitMask(e){const t=this.componentTypes.get(e);if(void 0===t){const t=w(e);throw new Error(`Component type ${t} is not registered`)}return R.create(t)}static getBitIndex(e){const t=this.componentTypes.get(e);if(void 0===t){const t=w(e);throw new Error(`Component type ${t} is not registered`)}return t}static isRegistered(e){return this.componentTypes.has(e)}static getTypeByBitIndex(e){return this.bitIndexToType.get(e)||null}static getRegisteredCount(){return this.nextBitIndex}static getComponentType(e){return this.componentNameToType.get(e)||null}static getAllRegisteredTypes(){return new Map(this.componentTypes)}static getAllComponentNames(){return new Map(this.componentNameToType)}static getComponentId(e){return this.componentNameToId.get(e)}static registerComponentByName(e){if(this.componentNameToId.has(e))return this.componentNameToId.get(e);const t=this.nextBitIndex++;return this.componentNameToId.set(e,t),t}static createSingleComponentMask(e){const t=`single:${e}`;if(this.maskCache.has(t))return this.maskCache.get(t);const n=this.getComponentId(e);if(void 0===n)throw new Error(`Component type ${e} is not registered`);const s=R.create(n);return this.maskCache.set(t,s),s}static createComponentMask(e){const t=`multi:${[...e].sort().join(",")}`;if(this.maskCache.has(t))return this.maskCache.get(t);const n=R.clone(R.ZERO);for(const t of e){const e=this.getComponentId(t);if(void 0!==e){const t=R.create(e);R.orInPlace(n,t)}}return this.maskCache.set(t,n),n}static clearMaskCache(){this.maskCache.clear()}static enableHotReload(){this.hotReloadEnabled=!0}static disableHotReload(){this.hotReloadEnabled=!1}static isHotReloadEnabled(){return this.hotReloadEnabled}static unregister(e){const t=this.componentNameToType.get(e);if(!t)return;const n=this.componentTypes.get(t);this.componentTypes.delete(t),void 0!==n&&this.bitIndexToType.delete(n),this.componentNameToType.delete(e),this.componentNameToId.delete(e),this.clearMaskCache(),this._logger.debug(`Component unregistered: ${e}`)}static getRegisteredComponents(){const e=[];for(const[t,n]of this.componentNameToType){const s=this.componentTypes.get(n);void 0!==s&&e.push({name:t,type:n,bitIndex:s})}return e}static reset(){this.componentTypes.clear(),this.bitIndexToType.clear(),this.componentNameToType.clear(),this.componentNameToId.clear(),this.maskCache.clear(),this.warnedComponents.clear(),this.nextBitIndex=0,this.hotReloadEnabled=!1}}G._logger=$("ComponentStorage"),G.componentTypes=new Map,G.bitIndexToType=new Map,G.componentNameToType=new Map,G.componentNameToId=new Map,G.maskCache=new Map,G.nextBitIndex=0,G.hotReloadEnabled=!1,G.warnedComponents=new Set;const q=Symbol("SystemTypeName");function U(e,t){return function(n){if(!e||"string"!=typeof e)throw new Error("ECSComponent装饰器必须提供有效的类型名称");return n[C]=e,t?.requires&&(n[b]=t.requires),t?.editor&&(n[E]=t.editor),G.register(n),n}}function Q(e,t){return function(n){if(!e||"string"!=typeof e)throw new Error("ECSSystem装饰器必须提供有效的类型名称");return n[q]=e,t&&(n.__systemMetadata__=t),n}}function V(e){return e.__systemMetadata__}function Y(e){const t=e[q];return t||(e.name||"UnknownSystem")}function J(e){return Y(e.constructor)}const K="undefined"!=typeof globalThis&&globalThis.WeakRef||"undefined"!=typeof global&&global.WeakRef||"undefined"!=typeof window&&window.WeakRef||class{constructor(e){this._target=e}deref(){return this._target}},Z=new Map;function X(e){const t=Z.get(e);return t?.deref()||null}class ee{constructor(){this._references=new Map}registerReference(e,t,n){const s=e.id;let i=this._references.get(s);i||(i=new Set,this._references.set(s,i));this._findRecord(i,t,n)||i.add({component:new K(t),propertyKey:n})}unregisterReference(e,t,n){const s=e.id,i=this._references.get(s);if(!i)return;const r=this._findRecord(i,t,n);r&&(i.delete(r),0===i.size&&this._references.delete(s))}clearReferencesTo(e){const t=this._references.get(e);if(!t)return;const n=[];for(const e of t){e.component.deref()&&n.push(e)}for(const e of n){const t=e.component.deref();t&&(t[e.propertyKey]=null)}this._references.delete(e)}clearComponentReferences(e){for(const[t,n]of this._references.entries()){const s=[];for(const t of n){const n=t.component.deref();n&&n!==e||s.push(t)}for(const e of s)n.delete(e);0===n.size&&this._references.delete(t)}}getReferencesTo(e){const t=this._references.get(e);if(!t)return[];const n=[];for(const e of t){e.component.deref()&&n.push(e)}return n}cleanup(){const e=[];for(const[t,n]of this._references.entries()){const s=[];for(const e of n)e.component.deref()||s.push(e);for(const e of s)n.delete(e);0===n.size&&e.push(t)}for(const t of e)this._references.delete(t)}registerEntityScene(e,t){Z.set(e,new K(t))}unregisterEntityScene(e){Z.delete(e)}getDebugInfo(){const e={};for(const[t,n]of this._references.entries()){const s=[];for(const e of n){const t=e.component.deref();t&&s.push({componentId:t.id,propertyKey:e.propertyKey})}s.length>0&&(e[`entity_${t}`]=s)}return e}_findRecord(e,t,n){for(const s of e){if(s.component.deref()===t&&s.propertyKey===n)return s}}}const te=$("EntityRefDecorator"),ne=Symbol("EntityRefMetadata"),se=Symbol("EntityRefValues");function ie(e){let t=e[se];return t||(t=new Map,e[se]=t),t}function re(){return function(e,t){const n=e.constructor;let s=n[ne];s||(s={properties:new Set},n[ne]=s);const i="symbol"==typeof t?t.toString():t;s.properties.add(i),Object.defineProperty(e,t,{get:function(){return ie(this).get(i)||null},set:function(e){const t=ie(this),n=t.get(i)||null;if(n===e)return;const s=null!==this.entityId?X(this.entityId):null;if(!s||!s.referenceTracker)return void t.set(i,e);const r=s.referenceTracker;if(n&&r.unregisterReference(n,this,i),e){if(e.scene!==s)return void te.error(`Cannot reference Entity from different Scene. Entity: ${e.name}, Scene: ${e.scene?.name||"null"}`);if(e.isDestroyed)return te.warn(`Cannot reference destroyed Entity: ${e.name}`),void t.set(i,null);r.registerReference(e,this,i)}t.set(i,e)},enumerable:!0,configurable:!0})}}function oe(e){if(!e)return null;return("function"==typeof e?e:e.constructor)[ne]||null}function ae(e){return null!==oe(e)}function ce(e,t){const n=oe(e);return!!n&&n.properties.has(t)}function he(e){const t=oe(e);return t?Array.from(t.properties):[]}var le,ue="undefined"!=typeof globalThis?globalThis:"undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:{},de={};!function(){return le||(le=1,function(e){!function(){var t="object"==typeof globalThis?globalThis:"object"==typeof ue?ue:"object"==typeof self?self:"object"==typeof this?this:function(){try{return Function("return this;")()}catch(e){}}()||function(){try{return(0,eval)("(function() { return this; })()")}catch(e){}}(),n=s(e);function s(e,t){return function(n,s){Object.defineProperty(e,n,{configurable:!0,writable:!0,value:s}),t&&t(n,s)}}void 0!==t.Reflect&&(n=s(t.Reflect,n)),function(e,t){var n=Object.prototype.hasOwnProperty,s="function"==typeof Symbol,i=s&&void 0!==Symbol.toPrimitive?Symbol.toPrimitive:"@@toPrimitive",r=s&&void 0!==Symbol.iterator?Symbol.iterator:"@@iterator",o="function"==typeof Object.create,a={__proto__:[]}instanceof Array,c=!o&&!a,h={create:o?function(){return ue(Object.create(null))}:a?function(){return ue({__proto__:null})}:function(){return ue({})},has:c?function(e,t){return n.call(e,t)}:function(e,t){return t in e},get:c?function(e,t){return n.call(e,t)?e[t]:void 0}:function(e,t){return e[t]}},l=Object.getPrototypeOf(Function),u="function"==typeof Map&&"function"==typeof Map.prototype.entries?Map:ce(),d="function"==typeof Set&&"function"==typeof Set.prototype.entries?Set:he(),m="function"==typeof WeakMap?WeakMap:le(),p=s?Symbol.for("@reflect-metadata:registry"):void 0,f=ie(),g=re(f);function y(e,t,n,s){if(N(n)){if(!U(e))throw new TypeError;if(!V(t))throw new TypeError;return I(e,t)}if(!U(e))throw new TypeError;if(!L(t))throw new TypeError;if(!L(s)&&!N(s)&&!B(s))throw new TypeError;return B(s)&&(s=void 0),A(e,t,n=q(n),s)}function _(e,t){function n(n,s){if(!L(n))throw new TypeError;if(!N(s)&&!Y(s))throw new TypeError;P(e,t,n,s)}return n}function S(e,t,n,s){if(!L(n))throw new TypeError;return N(s)||(s=q(s)),P(e,t,n,s)}function v(e,t,n){if(!L(t))throw new TypeError;return N(n)||(n=q(n)),k(e,t,n)}function C(e,t,n){if(!L(t))throw new TypeError;return N(n)||(n=q(n)),D(e,t,n)}function b(e,t,n){if(!L(t))throw new TypeError;return N(n)||(n=q(n)),x(e,t,n)}function E(e,t,n){if(!L(t))throw new TypeError;return N(n)||(n=q(n)),O(e,t,n)}function T(e,t){if(!L(e))throw new TypeError;return N(t)||(t=q(t)),R(e,t)}function w(e,t){if(!L(e))throw new TypeError;return N(t)||(t=q(t)),z(e,t)}function M(e,t,n){if(!L(t))throw new TypeError;if(N(n)||(n=q(n)),!L(t))throw new TypeError;N(n)||(n=q(n));var s=ae(t,n,!1);return!N(s)&&s.OrdinaryDeleteMetadata(e,t,n)}function I(e,t){for(var n=e.length-1;n>=0;--n){var s=(0,e[n])(t);if(!N(s)&&!B(s)){if(!V(s))throw new TypeError;t=s}}return t}function A(e,t,n,s){for(var i=e.length-1;i>=0;--i){var r=(0,e[i])(t,n,s);if(!N(r)&&!B(r)){if(!L(r))throw new TypeError;s=r}}return s}function k(e,t,n){if(D(e,t,n))return!0;var s=ne(t);return!B(s)&&k(e,s,n)}function D(e,t,n){var s=ae(t,n,!1);return!N(s)&&j(s.OrdinaryHasOwnMetadata(e,t,n))}function x(e,t,n){if(D(e,t,n))return O(e,t,n);var s=ne(t);return B(s)?void 0:x(e,s,n)}function O(e,t,n){var s=ae(t,n,!1);if(!N(s))return s.OrdinaryGetOwnMetadata(e,t,n)}function P(e,t,n,s){ae(n,s,!0).OrdinaryDefineOwnMetadata(e,t,n,s)}function R(e,t){var n=z(e,t),s=ne(e);if(null===s)return n;var i=R(s,t);if(i.length<=0)return n;if(n.length<=0)return i;for(var r=new d,o=[],a=0,c=n;a<c.length;a++){var h=c[a];r.has(h)||(r.add(h),o.push(h))}for(var l=0,u=i;l<u.length;l++){h=u[l];r.has(h)||(r.add(h),o.push(h))}return o}function z(e,t){var n=ae(e,t,!1);return n?n.OrdinaryOwnMetadataKeys(e,t):[]}function F(e){if(null===e)return 1;switch(typeof e){case"undefined":return 0;case"boolean":return 2;case"string":return 3;case"symbol":return 4;case"number":return 5;case"object":return null===e?1:6;default:return 6}}function N(e){return void 0===e}function B(e){return null===e}function $(e){return"symbol"==typeof e}function L(e){return"object"==typeof e?null!==e:"function"==typeof e}function W(e,t){switch(F(e)){case 0:case 1:case 2:case 3:case 4:case 5:return e}var n="string",s=K(e,i);if(void 0!==s){var r=s.call(e,n);if(L(r))throw new TypeError;return r}return H(e)}function H(e,t){var n,s,i=e.toString;if(Q(i)&&!L(s=i.call(e)))return s;if(Q(n=e.valueOf)&&!L(s=n.call(e)))return s;throw new TypeError}function j(e){return!!e}function G(e){return""+e}function q(e){var t=W(e);return $(t)?t:G(t)}function U(e){return Array.isArray?Array.isArray(e):e instanceof Object?e instanceof Array:"[object Array]"===Object.prototype.toString.call(e)}function Q(e){return"function"==typeof e}function V(e){return"function"==typeof e}function Y(e){switch(F(e)){case 3:case 4:return!0;default:return!1}}function J(e,t){return e===t||e!=e&&t!=t}function K(e,t){var n=e[t];if(null!=n){if(!Q(n))throw new TypeError;return n}}function Z(e){var t=K(e,r);if(!Q(t))throw new TypeError;var n=t.call(e);if(!L(n))throw new TypeError;return n}function X(e){return e.value}function ee(e){var t=e.next();return!t.done&&t}function te(e){var t=e.return;t&&t.call(e)}function ne(e){var t=Object.getPrototypeOf(e);if("function"!=typeof e||e===l)return t;if(t!==l)return t;var n=e.prototype,s=n&&Object.getPrototypeOf(n);if(null==s||s===Object.prototype)return t;var i=s.constructor;return"function"!=typeof i||i===e?t:i}function se(){var e,n,s,i;N(p)||void 0===t.Reflect||p in t.Reflect||"function"!=typeof t.Reflect.defineMetadata||(e=oe(t.Reflect));var r=new m,o={registerProvider:a,getProvider:h,setProvider:f};return o;function a(t){if(!Object.isExtensible(o))throw new Error("Cannot add provider to a frozen registry.");switch(!0){case e===t:break;case N(n):n=t;break;case n===t:break;case N(s):s=t;break;case s===t:break;default:void 0===i&&(i=new d),i.add(t)}}function c(t,r){if(!N(n)){if(n.isProviderFor(t,r))return n;if(!N(s)){if(s.isProviderFor(t,r))return n;if(!N(i))for(var o=Z(i);;){var a=ee(o);if(!a)return;var c=X(a);if(c.isProviderFor(t,r))return te(o),c}}}if(!N(e)&&e.isProviderFor(t,r))return e}function h(e,t){var n,s=r.get(e);return N(s)||(n=s.get(t)),N(n)?(N(n=c(e,t))||(N(s)&&(s=new u,r.set(e,s)),s.set(t,n)),n):n}function l(e){if(N(e))throw new TypeError;return n===e||s===e||!N(i)&&i.has(e)}function f(e,t,n){if(!l(n))throw new Error("Metadata provider not registered.");var s=h(e,t);if(s!==n){if(!N(s))return!1;var i=r.get(e);N(i)&&(i=new u,r.set(e,i)),i.set(t,n)}return!0}}function ie(){var e;return!N(p)&&L(t.Reflect)&&Object.isExtensible(t.Reflect)&&(e=t.Reflect[p]),N(e)&&(e=se()),!N(p)&&L(t.Reflect)&&Object.isExtensible(t.Reflect)&&Object.defineProperty(t.Reflect,p,{enumerable:!1,configurable:!1,writable:!1,value:e}),e}function re(e){var t=new m,n={isProviderFor:function(e,n){var s=t.get(e);return!N(s)&&s.has(n)},OrdinaryDefineOwnMetadata:o,OrdinaryHasOwnMetadata:i,OrdinaryGetOwnMetadata:r,OrdinaryOwnMetadataKeys:a,OrdinaryDeleteMetadata:c};return f.registerProvider(n),n;function s(s,i,r){var o=t.get(s),a=!1;if(N(o)){if(!r)return;o=new u,t.set(s,o),a=!0}var c=o.get(i);if(N(c)){if(!r)return;if(c=new u,o.set(i,c),!e.setProvider(s,i,n))throw o.delete(i),a&&t.delete(s),new Error("Wrong provider for target.")}return c}function i(e,t,n){var i=s(t,n,!1);return!N(i)&&j(i.has(e))}function r(e,t,n){var i=s(t,n,!1);if(!N(i))return i.get(e)}function o(e,t,n,i){s(n,i,!0).set(e,t)}function a(e,t){var n=[],i=s(e,t,!1);if(N(i))return n;for(var r=Z(i.keys()),o=0;;){var a=ee(r);if(!a)return n.length=o,n;var c=X(a);try{n[o]=c}catch(e){try{te(r)}finally{throw e}}o++}}function c(e,n,i){var r=s(n,i,!1);if(N(r))return!1;if(!r.delete(e))return!1;if(0===r.size){var o=t.get(n);N(o)||(o.delete(i),0===o.size&&t.delete(o))}return!0}}function oe(e){var t=e.defineMetadata,n=e.hasOwnMetadata,s=e.getOwnMetadata,i=e.getOwnMetadataKeys,r=e.deleteMetadata,o=new m;return{isProviderFor:function(e,t){var n=o.get(e);return!(N(n)||!n.has(t))||!!i(e,t).length&&(N(n)&&(n=new d,o.set(e,n)),n.add(t),!0)},OrdinaryDefineOwnMetadata:t,OrdinaryHasOwnMetadata:n,OrdinaryGetOwnMetadata:s,OrdinaryOwnMetadataKeys:i,OrdinaryDeleteMetadata:r}}function ae(e,t,n){var s=f.getProvider(e,t);if(!N(s))return s;if(n){if(f.setProvider(e,t,g))return g;throw new Error("Illegal state.")}}function ce(){var e={},t=[],n=function(){function e(e,t,n){this._index=0,this._keys=e,this._values=t,this._selector=n}return e.prototype["@@iterator"]=function(){return this},e.prototype[r]=function(){return this},e.prototype.next=function(){var e=this._index;if(e>=0&&e<this._keys.length){var n=this._selector(this._keys[e],this._values[e]);return e+1>=this._keys.length?(this._index=-1,this._keys=t,this._values=t):this._index++,{value:n,done:!1}}return{value:void 0,done:!0}},e.prototype.throw=function(e){throw this._index>=0&&(this._index=-1,this._keys=t,this._values=t),e},e.prototype.return=function(e){return this._index>=0&&(this._index=-1,this._keys=t,this._values=t),{value:e,done:!0}},e}();return function(){function t(){this._keys=[],this._values=[],this._cacheKey=e,this._cacheIndex=-2}return Object.defineProperty(t.prototype,"size",{get:function(){return this._keys.length},enumerable:!0,configurable:!0}),t.prototype.has=function(e){return this._find(e,!1)>=0},t.prototype.get=function(e){var t=this._find(e,!1);return t>=0?this._values[t]:void 0},t.prototype.set=function(e,t){var n=this._find(e,!0);return this._values[n]=t,this},t.prototype.delete=function(t){var n=this._find(t,!1);if(n>=0){for(var s=this._keys.length,i=n+1;i<s;i++)this._keys[i-1]=this._keys[i],this._values[i-1]=this._values[i];return this._keys.length--,this._values.length--,J(t,this._cacheKey)&&(this._cacheKey=e,this._cacheIndex=-2),!0}return!1},t.prototype.clear=function(){this._keys.length=0,this._values.length=0,this._cacheKey=e,this._cacheIndex=-2},t.prototype.keys=function(){return new n(this._keys,this._values,s)},t.prototype.values=function(){return new n(this._keys,this._values,i)},t.prototype.entries=function(){return new n(this._keys,this._values,o)},t.prototype["@@iterator"]=function(){return this.entries()},t.prototype[r]=function(){return this.entries()},t.prototype._find=function(e,t){if(!J(this._cacheKey,e)){this._cacheIndex=-1;for(var n=0;n<this._keys.length;n++)if(J(this._keys[n],e)){this._cacheIndex=n;break}}return this._cacheIndex<0&&t&&(this._cacheIndex=this._keys.length,this._keys.push(e),this._values.push(void 0)),this._cacheIndex},t}();function s(e,t){return e}function i(e,t){return t}function o(e,t){return[e,t]}}function he(){return function(){function e(){this._map=new u}return Object.defineProperty(e.prototype,"size",{get:function(){return this._map.size},enumerable:!0,configurable:!0}),e.prototype.has=function(e){return this._map.has(e)},e.prototype.add=function(e){return this._map.set(e,e),this},e.prototype.delete=function(e){return this._map.delete(e)},e.prototype.clear=function(){this._map.clear()},e.prototype.keys=function(){return this._map.keys()},e.prototype.values=function(){return this._map.keys()},e.prototype.entries=function(){return this._map.entries()},e.prototype["@@iterator"]=function(){return this.keys()},e.prototype[r]=function(){return this.keys()},e}()}function le(){var e=16,t=h.create(),s=i();return function(){function e(){this._key=i()}return e.prototype.has=function(e){var t=r(e,!1);return void 0!==t&&h.has(t,this._key)},e.prototype.get=function(e){var t=r(e,!1);return void 0!==t?h.get(t,this._key):void 0},e.prototype.set=function(e,t){return r(e,!0)[this._key]=t,this},e.prototype.delete=function(e){var t=r(e,!1);return void 0!==t&&delete t[this._key]},e.prototype.clear=function(){this._key=i()},e}();function i(){var e;do{e="@@WeakMap@@"+c()}while(h.has(t,e));return t[e]=!0,e}function r(e,t){if(!n.call(e,s)){if(!t)return;Object.defineProperty(e,s,{value:h.create()})}return e[s]}function o(e,t){for(var n=0;n<t;++n)e[n]=255*Math.random()|0;return e}function a(e){if("function"==typeof Uint8Array){var t=new Uint8Array(e);return"undefined"!=typeof crypto?crypto.getRandomValues(t):"undefined"!=typeof msCrypto?msCrypto.getRandomValues(t):o(t,e),t}return o(new Array(e),e)}function c(){var t=a(e);t[6]=79&t[6]|64,t[8]=191&t[8]|128;for(var n="",s=0;s<e;++s){var i=t[s];4!==s&&6!==s&&8!==s||(n+="-"),i<16&&(n+="0"),n+=i.toString(16).toLowerCase()}return n}}function ue(e){return e.__=void 0,delete e.__,e}e("decorate",y),e("metadata",_),e("defineMetadata",S),e("hasMetadata",v),e("hasOwnMetadata",C),e("getMetadata",b),e("getOwnMetadata",E),e("getMetadataKeys",T),e("getOwnMetadataKeys",w),e("deleteMetadata",M)}(n,t),void 0===t.Reflect&&(t.Reflect=e)}()}(e||(e={}))),de;var e}();const me=Symbol.for("@esengine/property:metadata");function pe(e){return(t,n)=>{const s=t.constructor,i=Reflect.getMetadata(me,s)||{};i[n]=e,Reflect.defineMetadata(me,i,s)}}function fe(e){return Reflect.getMetadata(me,e)}function ge(e){return Reflect.hasMetadata(me,e)}const ye=Symbol("schedulingMetadata");function _e(e){const t=e;return t[ye]||(t[ye]={stage:"update",before:[],after:[],sets:[]}),t[ye]}function Se(e){return function(t){return _e(t.prototype).stage=e,t}}function ve(...e){return function(t){return _e(t.prototype).before.push(...e),t}}function Ce(...e){return function(t){return _e(t.prototype).after.push(...e),t}}function be(...e){return function(t){return _e(t.prototype).sets.push(...e),t}}function Ee(e){let t=Object.getPrototypeOf(e);for(;t;){const e=t[ye];if(e)return e;t=Object.getPrototypeOf(t)}}function Te(e){return void 0!==Ee(e)}class we{static getConstructor(e){return this.TYPE_CONSTRUCTORS[e]||Float32Array}static getBytesPerElement(e){return this.TYPE_BYTES[e]||4}static getTypeName(e){return e instanceof Float32Array?"float32":e instanceof Float64Array?"float64":e instanceof Int32Array?"int32":e instanceof Uint32Array?"uint32":e instanceof Int16Array?"int16":e instanceof Uint16Array?"uint16":e instanceof Int8Array?"int8":e instanceof Uint8Array?"uint8":e instanceof Uint8ClampedArray?"uint8clamped":"float32"}static createSameType(e,t){const n=this.getTypeName(e);return new(this.getConstructor(n))(t)}static extractFieldMetadata(e){const t=new e,n=new Map,s=e,i=new Map,r=(e,t)=>{if(e)for(const n of e)i.set(n,t)};r(s.__float64Fields,"float64"),r(s.__float32Fields,"float32"),r(s.__int32Fields,"int32"),r(s.__uint32Fields,"uint32"),r(s.__int16Fields,"int16"),r(s.__uint16Fields,"uint16"),r(s.__int8Fields,"int8"),r(s.__uint8Fields,"uint8"),r(s.__uint8ClampedFields,"uint8clamped");const o=Object.keys(t).filter(e=>"id"!==e);for(const e of o){const r=typeof t[e];if("function"===r)continue;const o={name:e,type:r},a=i.get(e);a?o.arrayType=a:"number"===r?o.arrayType="float32":"boolean"===r&&(o.arrayType="uint8"),s.__serializeMapFields?.has(e)&&(o.isSerializedMap=!0),s.__serializeSetFields?.has(e)&&(o.isSerializedSet=!0),s.__serializeArrayFields?.has(e)&&(o.isSerializedArray=!0),s.__deepCopyFields?.has(e)&&(o.isDeepCopy=!0),n.set(e,o)}return n}}we.TYPE_CONSTRUCTORS={float32:Float32Array,float64:Float64Array,int32:Int32Array,uint32:Uint32Array,int16:Int16Array,uint16:Uint16Array,int8:Int8Array,uint8:Uint8Array,uint8clamped:Uint8ClampedArray},we.TYPE_BYTES={float32:4,float64:8,int32:4,uint32:4,int16:2,uint16:2,int8:1,uint8:1,uint8clamped:1};class Me{static serialize(e,t,n={}){try{return n.isMap&&e instanceof Map?JSON.stringify(Array.from(e.entries())):n.isSet&&e instanceof Set?JSON.stringify(Array.from(e)):(n.isArray&&Array.isArray(e),JSON.stringify(e))}catch(e){return this._logger.warn(`SoA序列化字段 ${t} 失败:`,e),"{}"}}static deserialize(e,t,n={}){try{const t=JSON.parse(e);return n.isMap?new Map(t):n.isSet?new Set(t):t}catch(e){return this._logger.warn(`SoA反序列化字段 ${t} 失败:`,e),null}}static deepClone(e){if(null===e||"object"!=typeof e)return e;if(e instanceof Date)return new Date(e.getTime());if(Array.isArray(e))return e.map(e=>this.deepClone(e));if(e instanceof Map){const t=new Map;for(const[n,s]of e.entries())t.set(n,this.deepClone(s));return t}if(e instanceof Set){const t=new Set;for(const n of e.values())t.add(this.deepClone(n));return t}const t={};for(const n in e)Object.prototype.hasOwnProperty.call(e,n)&&(t[n]=this.deepClone(e[n]));return t}}function Ie(e){return e.__enableSoA=!0,e}function Ae(e,t){const n=String(t);e.constructor.__float64Fields||(e.constructor.__float64Fields=new Set),e.constructor.__float64Fields.add(n)}function ke(e,t){const n=String(t);e.constructor.__float32Fields||(e.constructor.__float32Fields=new Set),e.constructor.__float32Fields.add(n)}function De(e,t){const n=String(t);e.constructor.__int32Fields||(e.constructor.__int32Fields=new Set),e.constructor.__int32Fields.add(n)}function xe(e,t){const n=String(t);e.constructor.__uint32Fields||(e.constructor.__uint32Fields=new Set),e.constructor.__uint32Fields.add(n)}function Oe(e,t){const n=String(t);e.constructor.__int16Fields||(e.constructor.__int16Fields=new Set),e.constructor.__int16Fields.add(n)}function Pe(e,t){const n=String(t);e.constructor.__uint16Fields||(e.constructor.__uint16Fields=new Set),e.constructor.__uint16Fields.add(n)}function Re(e,t){const n=String(t);e.constructor.__int8Fields||(e.constructor.__int8Fields=new Set),e.constructor.__int8Fields.add(n)}function ze(e,t){const n=String(t);e.constructor.__uint8Fields||(e.constructor.__uint8Fields=new Set),e.constructor.__uint8Fields.add(n)}function Fe(e,t){const n=String(t);e.constructor.__uint8ClampedFields||(e.constructor.__uint8ClampedFields=new Set),e.constructor.__uint8ClampedFields.add(n)}function Ne(e,t){const n=String(t);e.constructor.__serializeMapFields||(e.constructor.__serializeMapFields=new Set),e.constructor.__serializeMapFields.add(n)}function Be(e,t){const n=String(t);e.constructor.__serializeSetFields||(e.constructor.__serializeSetFields=new Set),e.constructor.__serializeSetFields.add(n)}function $e(e,t){const n=String(t);e.constructor.__serializeArrayFields||(e.constructor.__serializeArrayFields=new Set),e.constructor.__serializeArrayFields.add(n)}function Le(e,t){const n=String(t);e.constructor.__deepCopyFields||(e.constructor.__deepCopyFields=new Set),e.constructor.__deepCopyFields.add(n)}Me._logger=$("SoASerializer");class We{constructor(e){this.fields=new Map,this.stringFields=new Map,this.serializedFields=new Map,this.complexFields=new Map,this.entityToIndex=new Map,this.indexToEntity=[],this.freeIndices=[],this._size=0,this._capacity=1e3,this.fieldTypes=new Map,this.serializeMapFields=new Set,this.serializeSetFields=new Set,this.serializeArrayFields=new Set,this.type=e,this.initializeFields(e)}initializeFields(e){const t=new e,n=e,s=n.__float64Fields||new Set,i=n.__float32Fields||new Set,r=n.__int32Fields||new Set,o=n.__uint32Fields||new Set,a=n.__int16Fields||new Set,c=n.__uint16Fields||new Set,h=n.__int8Fields||new Set,l=n.__uint8Fields||new Set,u=n.__uint8ClampedFields||new Set;this.serializeMapFields=n.__serializeMapFields||new Set,this.serializeSetFields=n.__serializeSetFields||new Set,this.serializeArrayFields=n.__serializeArrayFields||new Set;const d=new Map;for(const e of s)d.set(e,"float64");for(const e of i)d.set(e,"float32");for(const e of r)d.set(e,"int32");for(const e of o)d.set(e,"uint32");for(const e of a)d.set(e,"int16");for(const e of c)d.set(e,"uint16");for(const e of h)d.set(e,"int8");for(const e of l)d.set(e,"uint8");for(const e of u)d.set(e,"uint8clamped");const m=Object.keys(t).filter(e=>"id"!==e);for(const e of m){const n=t[e],s=typeof n;if("function"===s)continue;const i=d.get(e),r=i?"number":s;if(this.fieldTypes.set(e,r),i){const t=we.getConstructor(i);this.fields.set(e,new t(this._capacity))}else"number"===s?this.fields.set(e,new Float32Array(this._capacity)):"boolean"===s?this.fields.set(e,new Uint8Array(this._capacity)):"string"===s?this.stringFields.set(e,new Array(this._capacity)):"object"===s&&null!==n&&(this.serializeMapFields.has(e)||this.serializeSetFields.has(e)||this.serializeArrayFields.has(e))&&this.serializedFields.set(e,new Array(this._capacity))}}addComponent(e,t){if(this.entityToIndex.has(e)){const n=this.entityToIndex.get(e);return void this.updateComponentAtIndex(n,t)}let n;this.freeIndices.length>0?n=this.freeIndices.pop():(n=this._size,n>=this._capacity&&this.resize(2*this._capacity)),this.entityToIndex.set(e,n),this.indexToEntity[n]=e,this.updateComponentAtIndex(n,t),this._size++}updateComponentAtIndex(e,t){const n=this.indexToEntity[e],s=new Map,i=this.type.__highPrecisionFields||new Set,r=this.type.__serializeMapFields||new Set,o=this.type.__serializeSetFields||new Set,a=this.type.__serializeArrayFields||new Set,c=this.type.__deepCopyFields||new Set;for(const n in t)if(t.hasOwnProperty(n)&&"id"!==n){const h=t[n],l=typeof h;if("number"===l)if(i.has(n)||!this.fields.has(n))s.set(n,h);else{this.fields.get(n)[e]=h}else if("boolean"===l&&this.fields.has(n)){this.fields.get(n)[e]=h?1:0}else if(this.stringFields.has(n)){this.stringFields.get(n)[e]=String(h)}else if(this.serializedFields.has(n)){this.serializedFields.get(n)[e]=Me.serialize(h,n,{isMap:r.has(n),isSet:o.has(n),isArray:a.has(n)})}else c.has(n)?s.set(n,Me.deepClone(h)):s.set(n,h)}s.size>0&&this.complexFields.set(n,s)}getComponent(e){const t=this.entityToIndex.get(e);return void 0===t?null:this.createProxyView(e,t)}createProxyView(e,t){const n=this;return new Proxy({},{get(s,i){const r=String(i),o=n.fields.get(r);if(o){return"boolean"===n.getFieldType(r)?1===o[t]:o[t]}const a=n.stringFields.get(r);if(a)return a[t];const c=n.serializedFields.get(r);if(c){const e=c[t];return e?Me.deserialize(e,r,{isMap:n.serializeMapFields.has(r),isSet:n.serializeSetFields.has(r),isArray:n.serializeArrayFields.has(r)}):void 0}const h=n.complexFields.get(e);return h?.has(r)?h.get(r):void 0},set(s,i,r){const o=String(i);if("entityId"===o)return!1;const a=n.fields.get(o);if(a){const e=n.getFieldType(o);return a[t]="boolean"===e?r?1:0:r,!0}const c=n.stringFields.get(o);if(c)return c[t]=String(r),!0;if(n.serializedFields.has(o)){return n.serializedFields.get(o)[t]=Me.serialize(r,o,{isMap:n.serializeMapFields.has(o),isSet:n.serializeSetFields.has(o),isArray:n.serializeArrayFields.has(o)}),!0}let h=n.complexFields.get(e);return h||(h=new Map,n.complexFields.set(e,h)),h.set(o,r),!0},has(t,s){const i=String(s);return n.fields.has(i)||n.stringFields.has(i)||n.serializedFields.has(i)||n.complexFields.get(e)?.has(i)||!1},ownKeys(){const t=[];for(const e of n.fields.keys())t.push(e);for(const e of n.stringFields.keys())t.push(e);for(const e of n.serializedFields.keys())t.push(e);const s=n.complexFields.get(e);if(s)for(const e of s.keys())t.push(e);return t},getOwnPropertyDescriptor(t,s){const i=String(s);if(n.fields.has(i)||n.stringFields.has(i)||n.serializedFields.has(i)||n.complexFields.get(e)?.has(i))return{enumerable:!0,configurable:!0,writable:"entityId"!==i}}})}getComponentSnapshot(e){const t=this.entityToIndex.get(e);if(void 0===t)return null;const n=new this.type;for(const[e,s]of this.fields.entries()){const i=s[t],r=this.getFieldType(e);n[e]="boolean"===r?1===i:i}for(const[e,s]of this.stringFields.entries())n[e]=s[t];for(const[e,s]of this.serializedFields.entries()){const i=s[t];i&&(n[e]=Me.deserialize(i,e,{isMap:this.serializeMapFields.has(e),isSet:this.serializeSetFields.has(e),isArray:this.serializeArrayFields.has(e)}))}const s=this.complexFields.get(e);if(s)for(const[e,t]of s.entries())n[e]=t;return n}getFieldType(e){return this.fieldTypes.get(e)||"unknown"}hasComponent(e){return this.entityToIndex.has(e)}removeComponent(e){const t=this.entityToIndex.get(e);if(void 0===t)return null;const n=this.getComponent(e);return this.complexFields.delete(e),this.entityToIndex.delete(e),this.freeIndices.push(t),this._size--,n}resize(e){for(const[t,n]of this.fields.entries()){const s=we.createSameType(n,e);s.set(n),this.fields.set(t,s)}for(const[t,n]of this.stringFields.entries()){const s=new Array(e);for(let e=0;e<n.length;e++)s[e]=n[e];this.stringFields.set(t,s)}for(const[t,n]of this.serializedFields.entries()){const s=new Array(e);for(let e=0;e<n.length;e++)s[e]=n[e];this.serializedFields.set(t,s)}this._capacity=e}getActiveIndices(){return Array.from(this.entityToIndex.values())}getFieldArray(e){return this.fields.get(e)||null}getTypedFieldArray(e){return this.fields.get(String(e))||null}getEntityIndex(e){return this.entityToIndex.get(e)}getEntityIdByIndex(e){return this.indexToEntity[e]}size(){return this._size}clear(){this.entityToIndex.clear(),this.indexToEntity=[],this.freeIndices=[],this.complexFields.clear(),this._size=0;for(const e of this.fields.values())e.fill(0);for(const e of this.stringFields.values())for(let t=0;t<e.length;t++)e[t]=void 0;for(const e of this.serializedFields.values())for(let t=0;t<e.length;t++)e[t]=void 0}compact(){if(0===this.freeIndices.length)return;const e=Array.from(this.entityToIndex.entries()).sort((e,t)=>e[1]-t[1]),t=new Map,n=[];for(let s=0;s<e.length;s++){const i=e[s];if(!i)continue;const[r,o]=i;if(t.set(r,s),n[s]=r,s!==o){for(const[,e]of this.fields.entries()){const t=e[o];void 0!==t&&(e[s]=t)}for(const[,e]of this.stringFields.entries()){const t=e[o];void 0!==t&&(e[s]=t)}for(const[,e]of this.serializedFields.entries()){const t=e[o];void 0!==t&&(e[s]=t)}}}this.entityToIndex=t,this.indexToEntity=n,this.freeIndices=[],this._size=e.length}getStats(){let e=0;const t=new Map;for(const[n,s]of this.fields.entries()){const i=we.getTypeName(s),r=we.getBytesPerElement(i),o=s.length*r;e+=o,t.set(n,{size:this._size,capacity:s.length,type:i,memory:o})}return{size:this._size,capacity:this._capacity,usedSlots:this._size,fragmentation:this.freeIndices.length/this._capacity,memoryUsage:e,fieldStats:t}}performVectorizedOperation(e){const t=this.getActiveIndices();e(this.fields,t)}}class He{get lastWriteEpoch(){return this._lastWriteEpoch}constructor(){this.entityId=null,this._lastWriteEpoch=0,this.id=He.idGenerator++}markDirty(e){this._lastWriteEpoch=e}onAddedToEntity(){}onRemovedFromEntity(){}onDeserialized(){}}He.idGenerator=0,e([De,t("design:type",Object)],He.prototype,"entityId",void 0);const je=Symbol("SerializableMetadata"),Ge=Symbol("SerializeField"),qe=Symbol("SerializeOptions");function Ue(e){return function(t){if(!e||"number"!=typeof e.version)throw new Error("Serializable装饰器必须提供有效的版本号");let n;if(Object.prototype.hasOwnProperty.call(t,je))n=t[je],n.options=e;else{const s=t[je];n={options:e,fields:s?new Map(s.fields):new Map,ignoredFields:s?new Set(s.ignoredFields):new Set},t[je]=n}return t}}function Qe(e){return function(t,n){const s=t.constructor;let i;if(Object.prototype.hasOwnProperty.call(s,je))i=s[je];else{const e=s[je];i={options:e?{...e.options}:{version:1},fields:e?new Map(e.fields):new Map,ignoredFields:e?new Set(e.ignoredFields):new Set},s[je]=i}i.fields.set(n,e||{})}}function Ve(){return function(e,t){Qe({serializer:e=>e instanceof Map?Array.from(e.entries()):null,deserializer:e=>Array.isArray(e)?new Map(e):new Map})(e,t)}}function Ye(){return function(e,t){Qe({serializer:e=>e instanceof Set?Array.from(e):null,deserializer:e=>Array.isArray(e)?new Set(e):new Set})(e,t)}}function Je(){return function(e,t){const n=e.constructor;let s;if(Object.prototype.hasOwnProperty.call(n,je))s=n[je];else{const e=n[je];s={options:e?{...e.options}:{version:1},fields:e?new Map(e.fields):new Map,ignoredFields:e?new Set(e.ignoredFields):new Set},n[je]=s}s.ignoredFields.add(t)}}function Ke(e){if(!e)return null;return("function"==typeof e?e:e.constructor)[je]||null}function Ze(e){return null!==Ke(e)}let Xe=class extends He{constructor(){super(...arguments),this.parentId=null,this.childIds=[],this.depth=0,this.bActiveInHierarchy=!0,this.bCacheDirty=!0}};e([Qe(),t("design:type",Object)],Xe.prototype,"parentId",void 0),e([Qe(),t("design:type",Array)],Xe.prototype,"childIds",void 0),Xe=e([U("Hierarchy",{editor:{hideInInspector:!0}}),Ue({version:1,typeId:"Hierarchy"})],Xe);class et{constructor(){this.condition={all:[],any:[],none:[]}}static all(...e){return(new et).all(...e)}static any(...e){return(new et).any(...e)}static none(...e){return(new et).none(...e)}static byTag(e){return(new et).withTag(e)}static byName(e){return(new et).withName(e)}static byComponent(e){return(new et).withComponent(e)}static complex(){return new et}static empty(){return new et}static nothing(){const e=new et;return e.condition.matchNothing=!0,e}all(...e){return this.condition.all.push(...e),this}any(...e){return this.condition.any.push(...e),this}none(...e){return this.condition.none.push(...e),this}exclude(...e){return this.none(...e)}one(...e){return this.any(...e)}withTag(e){return this.condition.tag=e,this}withName(e){return this.condition.name=e,this}withComponent(e){return this.condition.component=e,this}withoutTag(){return delete this.condition.tag,this}withoutName(){return delete this.condition.name,this}withoutComponent(){return delete this.condition.component,this}getCondition(){return{all:[...this.condition.all],any:[...this.condition.any],none:[...this.condition.none],...void 0!==this.condition.tag&&{tag:this.condition.tag},...void 0!==this.condition.name&&{name:this.condition.name},...void 0!==this.condition.component&&{component:this.condition.component},...this.condition.matchNothing&&{matchNothing:!0}}}isEmpty(){return 0===this.condition.all.length&&0===this.condition.any.length&&0===this.condition.none.length&&void 0===this.condition.tag&&void 0===this.condition.name&&void 0===this.condition.component&&!this.condition.matchNothing}isNothing(){return!0===this.condition.matchNothing}reset(){return this.condition.all.length=0,this.condition.any.length=0,this.condition.none.length=0,delete this.condition.tag,delete this.condition.name,delete this.condition.component,delete this.condition.matchNothing,this}clone(){const e=new et;return e.condition.all.push(...this.condition.all),e.condition.any.push(...this.condition.any),e.condition.none.push(...this.condition.none),void 0!==this.condition.tag&&(e.condition.tag=this.condition.tag),void 0!==this.condition.name&&(e.condition.name=this.condition.name),void 0!==this.condition.component&&(e.condition.component=this.condition.component),this.condition.matchNothing&&(e.condition.matchNothing=!0),e}toString(){if(this.condition.matchNothing)return"Matcher[nothing]";const e=[];return this.condition.all.length>0&&e.push(`all(${this.condition.all.map(e=>w(e)).join(", ")})`),this.condition.any.length>0&&e.push(`any(${this.condition.any.map(e=>w(e)).join(", ")})`),this.condition.none.length>0&&e.push(`none(${this.condition.none.map(e=>w(e)).join(", ")})`),void 0!==this.condition.tag&&e.push(`tag(${this.condition.tag})`),void 0!==this.condition.name&&e.push(`name(${this.condition.name})`),void 0!==this.condition.component&&e.push(`component(${w(this.condition.component)})`),`Matcher[${e.join(" & ")}]`}}class tt{constructor(){this._frameCache=null,this._persistentCache=null,this._trackedEntities=new Set}getFrame(){return this._frameCache}setFrame(e){this._frameCache=e}getPersistent(){return this._persistentCache}setPersistent(e){this._persistentCache=e}getTracked(){return this._trackedEntities}addTracked(e){this._trackedEntities.add(e)}removeTracked(e){this._trackedEntities.delete(e)}isTracked(e){return this._trackedEntities.has(e)}invalidate(){this._persistentCache=null}clearFrame(){this._frameCache=null}clearAll(){this._frameCache=null,this._persistentCache=null,this._trackedEntities.clear()}hasPersistent(){return null!==this._persistentCache}hasFrame(){return null!==this._frameCache}getStats(){return{hasFrame:null!==this._frameCache,hasPersistent:null!==this._persistentCache,trackedCount:this._trackedEntities.size,frameEntityCount:this._frameCache?.length??0,persistentEntityCount:this._persistentCache?.length??0}}}class nt{constructor(e){this.dense=[],this.entityIds=[],this.entityToIndex=new Map,this.componentType=e}addComponent(e,t){if(this.entityToIndex.has(e))throw new Error(`Entity ${e} already has component ${w(this.componentType)}`);const n=this.dense.length;this.dense.push(t),this.entityIds.push(e),this.entityToIndex.set(e,n)}getComponent(e){const t=this.entityToIndex.get(e);return void 0!==t?this.dense[t]:null}hasComponent(e){return this.entityToIndex.has(e)}removeComponent(e){const t=this.entityToIndex.get(e);if(void 0===t)return null;const n=this.dense[t],s=this.dense.length-1;if(t!==s){const e=this.dense[s],n=this.entityIds[s];this.dense[t]=e,this.entityIds[t]=n,this.entityToIndex.set(n,t)}return this.dense.pop(),this.entityIds.pop(),this.entityToIndex.delete(e),n}forEach(e){for(let t=0;t<this.dense.length;t++)e(this.dense[t],this.entityIds[t],t)}getDenseArray(){return{components:[...this.dense],entityIds:[...this.entityIds]}}clear(){this.dense.length=0,this.entityIds.length=0,this.entityToIndex.clear()}get size(){return this.dense.length}get type(){return this.componentType}getStats(){return{totalSlots:this.dense.length,usedSlots:this.dense.length,freeSlots:0,fragmentation:0}}}class st{constructor(){this.storages=new Map}isSoAStorage(e){return this.storages.get(e)instanceof We}getSoAStorage(e){const t=this.getStorage(e);return t instanceof We?t:null}getFieldArray(e,t){const n=this.getSoAStorage(e);return n?n.getFieldArray(t):null}getTypedFieldArray(e,t){const n=this.getSoAStorage(e);return n?n.getTypedFieldArray(t):null}getActiveIndices(e){const t=this.getSoAStorage(e);return t?t.getActiveIndices():[]}getEntityIndex(e,t){const n=this.getSoAStorage(e);return n?n.getEntityIndex(t):void 0}getEntityIdByIndex(e,t){const n=this.getSoAStorage(e);return n?n.getEntityIdByIndex(t):void 0}getStorage(e){let t=this.storages.get(e);if(!t){e.__enableSoA?(t=new We(e),st._logger.info(`为 ${w(e)} 启用SoA优化(适用于大规模批量操作)`)):t=new nt(e),this.storages.set(e,t)}return t}addComponent(e,t){const n=t.constructor;this.getStorage(n).addComponent(e,t)}getComponent(e,t){const n=this.storages.get(t);return n?n.getComponent(e):null}hasComponent(e,t){const n=this.storages.get(t);return!!n&&n.hasComponent(e)}removeComponent(e,t){const n=this.storages.get(t);return n?n.removeComponent(e):null}removeAllComponents(e){for(const t of this.storages.values())t.removeComponent(e)}getComponentMask(e){const t=R.clone(R.ZERO);for(const[n,s]of this.storages.entries())if(s.hasComponent(e)){const e=G.getBitMask(n);R.orInPlace(t,e)}return t}getAllStats(){const e=new Map;for(const[t,n]of this.storages.entries()){const s=w(t);e.set(s,n.getStats())}return e}clear(){for(const e of this.storages.values())e.clear();this.storages.clear()}}st._logger=$("ComponentStorage");const it=$("CommandBuffer");var rt,ot;!function(e){e.ADD_COMPONENT="add_component",e.REMOVE_COMPONENT="remove_component",e.DESTROY_ENTITY="destroy_entity",e.SET_ENTITY_ACTIVE="set_entity_active"}(rt||(rt={}));class at{constructor(e,t=!1){this._pending=new Map,this._commands=[],this._scene=null,this._debug=!1,this._useDeduplication=!0,this._scene=e??null,this._debug=t}setScene(e){this._scene=e}get scene(){return this._scene}setDeduplication(e){this._useDeduplication=e}get pendingCount(){if(this._useDeduplication){let e=0;for(const t of this._pending.values())t.bDestroy&&e++,void 0!==t.active&&e++,t.adds&&(e+=t.adds.size),t.removes&&(e+=t.removes.size);return e}return this._commands.length}get hasPending(){return this._useDeduplication?this._pending.size>0:this._commands.length>0}getPending(e){let t=this._pending.get(e);return t||(t={},this._pending.set(e,t)),t}getTypeId(e){return"function"==typeof e?G.getBitIndex(e):G.getBitIndex(e.constructor)}addComponent(e,t){if(this._useDeduplication){const n=this.getPending(e);if(n.bDestroy)return void(this._debug&&it.debug(`CommandBuffer: 忽略添加组件,实体 ${e.name} 已标记销毁`));const s=this.getTypeId(t);n.removes?.delete(s),n.adds||(n.adds=new Map),n.adds.set(s,t),this._debug&&it.debug(`CommandBuffer: 延迟添加组件 ${t.constructor.name} 到实体 ${e.name}`)}else this._commands.push({type:rt.ADD_COMPONENT,entity:e,component:t})}removeComponent(e,t){if(this._useDeduplication){const n=this.getPending(e);if(n.bDestroy)return void(this._debug&&it.debug(`CommandBuffer: 忽略移除组件,实体 ${e.name} 已标记销毁`));const s=this.getTypeId(t);n.adds?.delete(s),n.removes||(n.removes=new Set),n.removes.add(s),this._debug&&it.debug(`CommandBuffer: 延迟移除组件 ${t.name} 从实体 ${e.name}`)}else this._commands.push({type:rt.REMOVE_COMPONENT,entity:e,componentType:t})}destroyEntity(e){if(this._useDeduplication){const t=this.getPending(e);t.adds?.clear(),t.removes?.clear(),delete t.active,t.bDestroy=!0,this._debug&&it.debug(`CommandBuffer: 延迟销毁实体 ${e.name}`)}else this._commands.push({type:rt.DESTROY_ENTITY,entity:e})}setEntityActive(e,t){if(this._useDeduplication){const n=this.getPending(e);if(n.bDestroy)return void(this._debug&&it.debug(`CommandBuffer: 忽略设置激活状态,实体 ${e.name} 已标记销毁`));n.active=t,this._debug&&it.debug(`CommandBuffer: 延迟设置实体 ${e.name} 激活状态为 ${t}`)}else this._commands.push({type:rt.SET_ENTITY_ACTIVE,entity:e,value:t})}flush(){return this._useDeduplication?this.flushDeduplication():this.flushLegacy()}flushDeduplication(){if(0===this._pending.size)return 0;const e=this._pending.size;let t=0;this._debug&&it.debug(`CommandBuffer: 开始执行 ${e} 个实体的延迟命令`);const n=this._pending;this._pending=new Map;for(const[e,s]of n)if(!s.bDestroy&&e.scene&&s.removes&&s.removes.size>0)for(const n of s.removes)try{const s=G.getTypeByBitIndex(n);s&&(e.removeComponentByType(s),t++)}catch(t){it.error("CommandBuffer: 移除组件失败",{entity:e.name,typeId:n,error:t})}for(const[e,s]of n)if(!s.bDestroy&&e.scene&&s.adds&&s.adds.size>0)for(const n of s.adds.values())try{e.addComponent(n),t++}catch(t){it.error("CommandBuffer: 添加组件失败",{entity:e.name,component:n.constructor.name,error:t})}for(const[e,s]of n)if(!s.bDestroy&&e.scene&&void 0!==s.active)try{e.active=s.active,t++}catch(t){it.error("CommandBuffer: 设置激活状态失败",{entity:e.name,error:t})}for(const[e,s]of n)if(s.bDestroy&&e.scene)try{e.destroy(),t++}catch(t){it.error("CommandBuffer: 销毁实体失败",{entity:e.name,error:t})}return this._debug&&it.debug(`CommandBuffer: 完成执行 ${t} 个延迟命令`),t}flushLegacy(){if(0===this._commands.length)return 0;const e=this._commands.length;this._debug&&it.debug(`CommandBuffer: 开始执行 ${e} 个延迟命令`);const t=this._commands;this._commands=[];for(const e of t)this.executeCommand(e);return this._debug&&it.debug(`CommandBuffer: 完成执行 ${e} 个延迟命令`),e}executeCommand(e){if(e.entity.scene)try{switch(e.type){case rt.ADD_COMPONENT:e.component&&e.entity.addComponent(e.component);break;case rt.REMOVE_COMPONENT:e.componentType&&e.entity.removeComponentByType(e.componentType);break;case rt.DESTROY_ENTITY:e.entity.destroy();break;case rt.SET_ENTITY_ACTIVE:void 0!==e.value&&(e.entity.active=e.value)}}catch(t){it.error("CommandBuffer: 执行命令失败",{command:e,error:t})}else this._debug&&it.debug(`CommandBuffer: 跳过命令,实体 ${e.entity.name} 已无效`)}clear(){if(this._debug){const e=this._useDeduplication?this._pending.size:this._commands.length;e>0&&it.debug(`CommandBuffer: 清空 ${e} 个未执行的命令`)}this._pending.clear(),this._commands.length=0}dispose(){this.clear(),this._scene=null}}class ct{get entities(){const e=this._entityCache.getFrame();return null!==e?e:(this._entityCache.hasPersistent()||this._entityCache.setPersistent(this.queryEntities()),this._entityCache.getPersistent())}get updateOrder(){return this._updateOrder}set updateOrder(e){this.setUpdateOrder(e)}get addOrder(){return this._addOrder}set addOrder(e){this._addOrder=e}get enabled(){return this._enabled}set enabled(e){this._enabled=e}get systemName(){return this._systemName}constructor(e){this.commands=new at,this._lastProcessEpoch=0,this._updateOrder=0,this._addOrder=0,this._enabled=!0,this._performanceMonitor=null,this._systemName=J(this),this._initialized=!1,this._matcher=e||et.empty(),this._eventListeners=[],this._scene=null,this._destroyed=!1,this._entityIdMap=null,this._entityIdMapVersion=-1,this.logger=$(this.getLoggerName()),this._entityCache=new tt;const t=Ee(this);this._schedulingMetadata=t?{...t}:{stage:"update",before:[],after:[],sets:[]}}get scene(){return this._scene}set scene(e){this._scene=e,this.commands.setScene(e)}setPerformanceMonitor(e){this._performanceMonitor=e}getPerformanceMonitor(){if(!this._performanceMonitor)throw new Error(`${this._systemName}: PerformanceMonitor未注入,请确保在Core.create()之后再添加System到Scene`);return this._performanceMonitor}get matcher(){return this._matcher}setUpdateOrder(e){this._updateOrder!==e&&(this._updateOrder=e,this._scene?.markSystemsOrderDirty())}stage(e){return this._schedulingMetadata.stage=e,this._scene?.markSystemsOrderDirty(),this}before(...e){return this._schedulingMetadata.before.push(...e),this._scene?.markSystemsOrderDirty(),this}after(...e){return this._schedulingMetadata.after.push(...e),this._scene?.markSystemsOrderDirty(),this}inSet(...e){return this._schedulingMetadata.sets.push(...e),this._scene?.markSystemsOrderDirty(),this}getStage(){return this._schedulingMetadata.stage}getBefore(){return this._schedulingMetadata.before}getAfter(){return this._schedulingMetadata.after}getSets(){return this._schedulingMetadata.sets}initialize(){if(!this._initialized){if(this._initialized=!0,this.scene){this._entityCache.invalidate();const e=this.queryEntities();for(const t of e)this.onAdded(t)}this.onInitialize()}}onInitialize(){}clearEntityCache(){this._entityCache.invalidate()}resetEntityTracking(){this._entityCache.clearAll(),this._entityIdMap=null,this._entityIdMapVersion=-1}reset(){this._destroyed||(this.scene=null,this._initialized=!1,this._entityCache.clearAll(),this._entityIdMap=null,this._entityIdMapVersion=-1,this.destroy())}queryEntities(){if(!this.scene?.querySystem||!this._matcher)return[];const e=this._matcher.getCondition(),t=this.scene.querySystem;let n=[];return this._matcher.isNothing()?[]:(n=this._matcher.isEmpty()?t.getAllEntities():this.isSingleCondition(e)?this.executeSingleConditionQuery(e,t):this.executeComplexQuery(e,t),this.updateEntityTracking(n),n)}isSingleCondition(e){const t=(e.all.length>0?1:0)|(e.any.length>0?2:0)|(e.none.length>0?4:0)|(void 0!==e.tag?8:0)|(void 0!==e.name?16:0)|(void 0!==e.component?32:0);return 0!==t&&!(t&t-1)}executeSingleConditionQuery(e,t){return void 0!==e.tag?t.queryByTag(e.tag).entities:void 0!==e.name?t.queryByName(e.name).entities:void 0!==e.component?t.queryByComponent(e.component).entities:e.all.length>0&&0===e.any.length&&0===e.none.length?t.queryAll(...e.all).entities:0===e.all.length&&e.any.length>0&&0===e.none.length?t.queryAny(...e.any).entities:0===e.all.length&&0===e.any.length&&e.none.length>0?t.queryNone(...e.none).entities:[]}executeComplexQueryWithIdSets(e,t){let n=null;if(void 0!==e.tag){const s=t.queryByTag(e.tag);n=this.extractEntityIds(s.entities)}if(void 0!==e.name){const s=this.extractEntityIds(t.queryByName(e.name).entities);n=n?this.intersectIdSets(n,s):s}if(void 0!==e.component){const s=this.extractEntityIds(t.queryByComponent(e.component).entities);n=n?this.intersectIdSets(n,s):s}if(e.all.length>0){const s=this.extractEntityIds(t.queryAll(...e.all).entities);n=n?this.intersectIdSets(n,s):s}if(e.any.length>0){const s=this.extractEntityIds(t.queryAny(...e.any).entities);n=n?this.intersectIdSets(n,s):s}if(e.none.length>0){n||(n=this.extractEntityIds(t.getAllEntities()));const s=t.queryAny(...e.none),i=this.extractEntityIds(s.entities);n=this.differenceIdSets(n,i)}return n?this.idSetToEntityArray(n,t.getAllEntities()):[]}extractEntityIds(e){const t=e.length,n=new Set;for(let s=0;s<t;s=s+1|0)n.add(0|e[s].id);return n}intersectIdSets(e,t){let n,s;e.size<=t.size?(n=e,s=t):(n=t,s=e);const i=new Set;for(const e of n)s.has(e)&&i.add(e);return i}differenceIdSets(e,t){const n=new Set;for(const s of e)t.has(s)||n.add(s);return n}getEntityIdMap(e){const t=this.scene?.querySystem?.version??0;return null!==this._entityIdMap&&this._entityIdMapVersion===t?this._entityIdMap:this.rebuildEntityIdMap(e,t)}rebuildEntityIdMap(e,t){let n=this._entityIdMap;n?n.clear():n=new Map;const s=e.length;for(let t=0;t<s;t=t+1|0){const s=e[t];n.set(0|s.id,s)}return this._entityIdMap=n,this._entityIdMapVersion=t,n}idSetToEntityArray(e,t){const n=this.getEntityIdMap(t),s=e.size,i=new Array(s);let r=0;for(const t of e){const e=n.get(t);void 0!==e&&(i[r]=e,r=r+1|0)}return r<s&&(i.length=r),i}executeComplexQuery(e,t){return this.executeComplexQueryWithIdSets(e,t)}update(){if(!this._enabled||!this.onCheckProcessing())return;const e=this.getPerformanceMonitor(),t=e.startMonitoring(this._systemName);let n=0;try{this.onBegin();const e=this.queryEntities();this._entityCache.setFrame(e),n=e.length,this.process(e)}finally{e.endMonitoring(this._systemName,t,n)}}lateUpdate(){if(!this._enabled||!this.onCheckProcessing())return;const e=this.getPerformanceMonitor(),t=e.startMonitoring(`${this._systemName}_Late`);let n=0;try{const e=this.queryEntities();this._entityCache.setFrame(e),n=e.length,this.lateProcess(e),this.onEnd()}finally{e.endMonitoring(`${this._systemName}_Late`,t,n),this._entityCache.clearFrame()}}flushCommands(){return this.commands.flush()}onBegin(){}process(e){}lateProcess(e){}onEnd(){}onCheckProcessing(){return!0}getPerformanceData(){return this.getPerformanceMonitor().getSystemData(this._systemName)}getPerformanceStats(){return this.getPerformanceMonitor().getSystemStats(this._systemName)}resetPerformanceData(){this.getPerformanceMonitor().resetSystem(this._systemName)}toString(){const e=this.entities.length,t=this.getPerformanceData(),n=t?` (${t.executionTime.toFixed(2)}ms)`:"";return`${this._systemName}[${e} entities]${n}`}matchesEntity(e){if(!this._matcher)return!1;if(this._matcher.isNothing())return!1;if(this._matcher.isEmpty())return!0;const t=this._matcher.getCondition();for(const n of t.all)if(!e.hasComponent(n))return!1;if(t.any.length>0){let n=!1;for(const s of t.any)if(e.hasComponent(s)){n=!0;break}if(!n)return!1}for(const n of t.none)if(e.hasComponent(n))return!1;return(void 0===t.tag||e.tag===t.tag)&&((void 0===t.name||e.name===t.name)&&!(void 0!==t.component&&!e.hasComponent(t.component)))}isTracking(e){return this._entityCache.isTracked(e)}handleEntityComponentChanged(e){if(!this._matcher||!this._enabled)return;const t=this._entityCache.isTracked(e),n=this.matchesEntity(e);!t&&n?(this._entityCache.addTracked(e),this._entityCache.invalidate(),this.onAdded(e)):t&&!n&&(this._entityCache.removeTracked(e),this._entityCache.invalidate(),this.onRemoved(e))}updateEntityTracking(e){const t=new Set(e);let n=!1;for(const t of e)this._entityCache.isTracked(t)||(this._entityCache.addTracked(t),n=!0);for(const e of this._entityCache.getTracked())t.has(e)||(this._entityCache.removeTracked(e),n=!0);n&&this._entityCache.invalidate()}onAdded(e){}onRemoved(e){}dispose(){this._destroyed||(this.cleanupManualEventListeners(),this.onDestroy(),this._entityCache.clearAll(),this._entityIdMap=null,this.commands.dispose(),this._initialized=!1,this._scene=null,this._destroyed=!0,this.logger.debug(`System ${this._systemName} disposed`))}addEventListener(e,t,n){if(!this.scene?.eventSystem)return this.logger.warn(`${this.systemName}: 无法添加事件监听器,scene.eventSystem 不可用`),null;const s=this.scene.eventSystem.on(e,t,n);return s&&this._eventListeners.push({eventSystem:this.scene.eventSystem,eventType:e,listenerRef:s}),s}removeEventListener(e,t){const n=this._eventListeners.findIndex(n=>n.eventType===e&&n.listenerRef===t);if(n>=0){const t=this._eventListeners[n];if(!t)return;t.eventSystem.off(e,t.listenerRef),this._eventListeners.splice(n,1)}}cleanupManualEventListeners(){for(const e of this._eventListeners)try{e.eventSystem.off(e.eventType,e.listenerRef)}catch(t){this.logger.warn(`${this.systemName}: 移除事件监听器失败 "${e.eventType}"`,t)}this._eventListeners.length=0}destroy(){this._destroyed||(this.cleanupManualEventListeners(),this._destroyed=!0,this.onDestroy())}getLoggerName(){return J(this)}onDestroy(){}requireComponent(e,t){const n=e.getComponent(t);if(!n)throw new Error(`Component ${t.name} not found on entity ${e.name} in ${this.systemName}`);return n}getComponents(e,...t){return t.map(t=>this.requireComponent(e,t))}forEach(e,t){for(let n=0;n<e.length;n++)t(e[n],n)}filterEntities(e,t){return Array.from(e).filter(t)}mapEntities(e,t){return Array.from(e).map(t)}findEntity(e,t){for(let n=0;n<e.length;n++)if(t(e[n],n))return e[n]}someEntity(e,t){for(let n=0;n<e.length;n++)if(t(e[n],n))return!0;return!1}everyEntity(e,t){for(let n=0;n<e.length;n++)if(!t(e[n],n))return!1;return!0}get lastProcessEpoch(){return this._lastProcessEpoch}get currentEpoch(){return this._scene?.epochManager?.current??0}saveEpoch(){this._lastProcessEpoch=this.currentEpoch}forEachChanged(e,t,n,s){const i=s??this._lastProcessEpoch;for(let s=0;s<e.length;s++){const r=e[s];let o=!1;for(const e of t){const t=r.getComponent(e);if(t&&t.lastWriteEpoch>i){o=!0;break}}o&&n(r,s)}this._lastProcessEpoch=this.currentEpoch}filterChanged(e,t,n){const s=n??this._lastProcessEpoch,i=[];for(let n=0;n<e.length;n++){const r=e[n];for(const e of t){const t=r.getComponent(e);if(t&&t.lastWriteEpoch>s){i.push(r);break}}}return i}hasChanged(e,t,n){const s=n??this._lastProcessEpoch;for(const n of t){const t=e.getComponent(n);if(t&&t.lastWriteEpoch>s)return!0}return!1}}class ht extends ct{constructor(){super(et.empty().all(Xe)),this.dirtyEntities=new Set}get updateOrder(){return-1e3}process(e){if(0!==this.dirtyEntities.size){for(const e of this.dirtyEntities)e.scene&&this.updateHierarchyCache(e);this.dirtyEntities.clear()}}setParent(e,t){let n=e.getComponent(Xe);n||(n=new Xe,e.addComponent(n));const s=n.parentId;if(s!==(t?.id??null)){if(t&&this.isAncestorOf(e,t))throw new Error("Cannot set parent: would create circular reference");if(null!==s){const t=this.scene?.findEntityById(s);if(t){const n=t.getComponent(Xe);if(n){const t=n.childIds.indexOf(e.id);-1!==t&&n.childIds.splice(t,1)}}}if(t){let s=t.getComponent(Xe);s||(s=new Xe,t.addComponent(s)),n.parentId=t.id,s.childIds.push(e.id)}else n.parentId=null;this.markCacheDirty(e)}}insertChildAt(e,t,n){let s=t.getComponent(Xe),i=e.getComponent(Xe);if(s||(s=new Xe,t.addComponent(s)),i||(i=new Xe,e.addComponent(i)),this.isAncestorOf(t,e))throw new Error("Cannot set parent: would create circular reference");if(null!==s.parentId&&s.parentId!==e.id){const e=this.scene?.findEntityById(s.parentId);if(e){const n=e.getComponent(Xe);if(n){const e=n.childIds.indexOf(t.id);-1!==e&&n.childIds.splice(e,1)}}}s.parentId=e.id;const r=i.childIds.indexOf(t.id);-1!==r&&i.childIds.splice(r,1),n<0||n>=i.childIds.length?i.childIds.push(t.id):i.childIds.splice(n,0,t.id),this.markCacheDirty(t)}removeChild(e,t){const n=e.getComponent(Xe),s=t.getComponent(Xe);if(!n||!s)return!1;if(s.parentId!==e.id)return!1;const i=n.childIds.indexOf(t.id);return-1!==i&&n.childIds.splice(i,1),s.parentId=null,this.markCacheDirty(t),!0}removeAllChildren(e){const t=e.getComponent(Xe);if(!t)return;const n=[...t.childIds];for(const t of n){const n=this.scene?.findEntityById(t);n&&this.removeChild(e,n)}}getParent(e){const t=e.getComponent(Xe);return t&&null!==t.parentId?this.scene?.findEntityById(t.parentId)??null:null}getChildren(e){const t=e.getComponent(Xe);if(!t)return[];const n=[];for(const e of t.childIds){const t=this.scene?.findEntityById(e);t&&n.push(t)}return n}getChildCount(e){const t=e.getComponent(Xe);return t?.childIds.length??0}hasChildren(e){return this.getChildCount(e)>0}isAncestorOf(e,t){let n=this.getParent(t),s=0;for(;n&&s<ht.MAX_DEPTH;){if(n.id===e.id)return!0;n=this.getParent(n),s++}return!1}isDescendantOf(e,t){return this.isAncestorOf(t,e)}getRoot(e){let t=e,n=this.getParent(t),s=0;for(;n&&s<ht.MAX_DEPTH;)t=n,n=this.getParent(t),s++;return t}getDepth(e){const t=e.getComponent(Xe);if(!t)return 0;if(!t.bCacheDirty)return t.depth;let n=0,s=this.getParent(e);for(;s&&n<ht.MAX_DEPTH;)n++,s=this.getParent(s);return t.depth=n,n}isActiveInHierarchy(e){if(!e.active)return!1;const t=e.getComponent(Xe);if(!t)return e.active;if(!t.bCacheDirty)return t.bActiveInHierarchy;const n=this.getParent(e);return t.bActiveInHierarchy=n?e.active&&this.isActiveInHierarchy(n):e.active,t.bActiveInHierarchy}getRootEntities(){const e=[];for(const t of this.entities){const n=t.getComponent(Xe);n&&null===n.parentId&&e.push(t)}return e}findChild(e,t,n=!1){const s=this.getChildren(e);for(const e of s)if(e.name===t)return e;if(n)for(const e of s){const n=this.findChild(e,t,!0);if(n)return n}return null}findChildrenByTag(e,t,n=!1){const s=[],i=this.getChildren(e);for(const e of i)0!==(e.tag&t)&&s.push(e),n&&s.push(...this.findChildrenByTag(e,t,!0));return s}forEachChild(e,t,n=!1){const s=this.getChildren(e);for(const e of s)t(e),n&&this.forEachChild(e,t,!0)}flattenHierarchy(e){const t=[],n=(s,i)=>{const r=this.hasChildren(s),o=e.has(s.id);if(t.push({entity:s,depth:i,bHasChildren:r,bIsExpanded:o}),r&&o)for(const e of this.getChildren(s))n(e,i+1)};for(const e of this.getRootEntities())n(e,0);return t}markCacheDirty(e){const t=e.getComponent(Xe);if(t&&!t.bCacheDirty){t.bCacheDirty=!0,this.dirtyEntities.add(e);for(const e of t.childIds){const t=this.scene?.findEntityById(e);t&&this.markCacheDirty(t)}}}updateHierarchyCache(e){const t=e.getComponent(Xe);t&&(t.depth=this.getDepth(e),t.bActiveInHierarchy=this.isActiveInHierarchy(e),t.bCacheDirty=!1)}onAdded(e){const t=e.getComponent(Xe);t&&t.bCacheDirty&&this.dirtyEntities.add(e)}onRemoved(e){this.dirtyEntities.delete(e);const t=e.getComponent(Xe);if(t){if(null!==t.parentId){const n=this.scene?.findEntityById(t.parentId);if(n){const t=n.getComponent(Xe);if(t){const n=t.childIds.indexOf(e.id);-1!==n&&t.childIds.splice(n,1)}}}for(const e of t.childIds){const t=this.scene?.findEntityById(e);if(t){const e=t.getComponent(Xe);e&&(e.parentId=null,this.markCacheDirty(t))}}}}dispose(){this.dirtyEntities.clear()}}ht.MAX_DEPTH=32;class lt{collectEntityData(e){if(!e)return this.getEmptyEntityDebugData();const t=e.entities;if(!t)return this.getEmptyEntityDebugData();let n;try{n=t.getStats?t.getStats():this.calculateFallbackEntityStats(t)}catch(e){return{totalEntities:0,activeEntities:0,pendingAdd:0,pendingRemove:0,entitiesPerArchetype:[],topEntitiesByComponents:[],entityHierarchy:[],entityDetailsMap:{}}}const s=this.collectArchetypeData(e);return{totalEntities:n.totalEntities,activeEntities:n.activeEntities,pendingAdd:n.pendingAdd||0,pendingRemove:n.pendingRemove||0,entitiesPerArchetype:s.distribution,topEntitiesByComponents:s.topEntities,entityHierarchy:[],entityDetailsMap:{}}}getRawEntityList(e){if(!e)return[];const t=e.entities;if(!t?.buffer)return[];const n=e.getSystem(ht);return t.buffer.map(e=>{const t=e.getComponent(Xe),s=n?.isActiveInHierarchy(e)??e.active,i=n?.getDepth(e)??0;return{id:e.id,name:e.name||`Entity_${e.id}`,active:!1!==e.active,enabled:!1!==e.enabled,activeInHierarchy:s,componentCount:e.components.length,componentTypes:e.components.map(e=>M(e)),parentId:t?.parentId??null,childIds:t?.childIds??[],depth:i,tag:e.tag||0,updateOrder:e.updateOrder||0}})}getEntityDetails(e,t){try{if(!t)return null;const n=t.entities;if(!n?.buffer)return null;const s=n.buffer.find(t=>t.id===e);if(!s)return null;const i=t.getSystem(ht),r=i?.getParent(s),o=r?.name??null,a=s.getDebugInfo?s.getDebugInfo():this.buildFallbackEntityInfo(s,t,i),c=this.extractComponentDetails(s.components),h=this.getSceneInfo(t);return{...a,scene:h.name,sceneName:h.name,sceneType:h.type,parentName:o,components:c||[],componentCount:s.components?.length||0,componentTypes:s.components?.map(e=>M(e))||[]}}catch(e){return{error:`获取实体详情失败: ${e instanceof Error?e.message:String(e)}`,scene:"获取失败",components:[],componentCount:0,componentTypes:[]}}}getSceneInfo(e){let t="当前场景",n="Scene";try{if(e.name&&"string"==typeof e.name&&e.name.trim())t=e.name.trim();else if(e.constructor&&e.constructor.name)t=e.constructor.name,n=e.constructor.name;else if(e._name&&"string"==typeof e._name&&e._name.trim())t=e._name.trim();else{const s=Object.getPrototypeOf(e)?.constructor?.name;s&&"Object"!==s&&(t=s,n=s)}}catch(e){t="场景名获取失败"}return{name:t,type:n}}collectEntityDataWithMemory(e){if(!e)return this.getEmptyEntityDebugData();const t=e.entities;if(!t)return this.getEmptyEntityDebugData();let n;try{n=t.getStats?t.getStats():this.calculateFallbackEntityStats(t)}catch(e){return{totalEntities:0,activeEntities:0,pendingAdd:0,pendingRemove:0,entitiesPerArchetype:[],topEntitiesByComponents:[],entityHierarchy:[],entityDetailsMap:{}}}const s=this.collectArchetypeDataWithMemory(e);return{totalEntities:n.totalEntities,activeEntities:n.activeEntities,pendingAdd:n.pendingAdd||0,pendingRemove:n.pendingRemove||0,entitiesPerArchetype:s.distribution,topEntitiesByComponents:s.topEntities,entityHierarchy:this.buildEntityHierarchyTree(t,e),entityDetailsMap:this.buildEntityDetailsMap(t,e)}}collectArchetypeData(e){if(e&&e.archetypeSystem&&"function"==typeof e.archetypeSystem.getAllArchetypes)return this.extractArchetypeStatistics(e.archetypeSystem);const t={entities:e.entities?.buffer||[]};return{distribution:this.getArchetypeDistributionFast(t),topEntities:this.getTopEntitiesByComponentsFast(t)}}getArchetypeDistributionFast(e){const t=new Map;return e&&e.entities&&e.entities.forEach(e=>{const n=e.components?.map(e=>M(e))||[],s=n.length>0?n.sort().join(", "):"无组件",i=t.get(s);i?i.count++:t.set(s,{count:1,componentTypes:n})}),Array.from(t.entries()).map(([e,t])=>({signature:e,count:t.count,memory:0})).sort((e,t)=>t.count-e.count).slice(0,20)}getTopEntitiesByComponentsFast(e){return e&&e.entities?e.entities.map(e=>({id:e.id.toString(),name:e.name||`Entity_${e.id}`,componentCount:e.components?.length||0,memory:0})).sort((e,t)=>t.componentCount-e.componentCount):[]}collectArchetypeDataWithMemory(e){if(e&&e.archetypeSystem&&"function"==typeof e.archetypeSystem.getAllArchetypes)return this.extractArchetypeStatisticsWithMemory(e.archetypeSystem);const t={entities:e.entities?.buffer||[]};return{distribution:this.getArchetypeDistributionWithMemory(t),topEntities:this.getTopEntitiesByComponentsWithMemory(t)}}extractArchetypeStatistics(e){const t=e.getAllArchetypes(),n=[],s=[];return t.forEach(e=>{const t=e.componentTypes?.map(e=>e.name).join(",")||"Unknown",i=e.entities?.length||0;n.push({signature:t,count:i,memory:0}),e.entities&&e.entities.forEach(e=>{s.push({id:e.id.toString(),name:e.name||`Entity_${e.id}`,componentCount:e.components?.length||0,memory:0})})}),n.sort((e,t)=>t.count-e.count),s.sort((e,t)=>t.componentCount-e.componentCount),{distribution:n,topEntities:s}}extractArchetypeStatisticsWithMemory(e){const t=e.getAllArchetypes(),n=[],s=[];return t.forEach(e=>{const t=e.componentTypes?.map(e=>e.name).join(",")||"Unknown",i=e.entities?.length||0;let r=0;if(e.entities&&e.entities.length>0){const t=Math.min(5,e.entities.length);let n=0;for(let s=0;s<t;s++)n+=this.estimateEntityMemoryUsage(e.entities[s]);r=n/t*i}n.push({signature:t,count:i,memory:r}),e.entities&&e.entities.forEach(e=>{s.push({id:e.id.toString(),name:e.name||`Entity_${e.id}`,componentCount:e.components?.length||0,memory:this.estimateEntityMemoryUsage(e)})})}),n.sort((e,t)=>t.count-e.count),s.sort((e,t)=>t.componentCount-e.componentCount),{distribution:n,topEntities:s}}getArchetypeDistributionWithMemory(e){const t=new Map;return e&&e.entities&&e.entities.forEach(e=>{const n=e.components?.map(e=>M(e))||[],s=n.length>0?n.sort().join(", "):"无组件",i=t.get(s);let r=this.estimateEntityMemoryUsage(e);(isNaN(r)||r<0)&&(r=0),i?(i.count++,i.memory+=r):t.set(s,{count:1,memory:r,componentTypes:n})}),Array.from(t.entries()).map(([e,t])=>({signature:e,count:t.count,memory:isNaN(t.memory)?0:t.memory})).sort((e,t)=>t.count-e.count)}getTopEntitiesByComponentsWithMemory(e){return e&&e.entities?e.entities.map(e=>({id:e.id.toString(),name:e.name||`Entity_${e.id}`,componentCount:e.components?.length||0,memory:this.estimateEntityMemoryUsage(e)})).sort((e,t)=>t.componentCount-e.componentCount):[]}getEmptyEntityDebugData(){return{totalEntities:0,activeEntities:0,pendingAdd:0,pendingRemove:0,entitiesPerArchetype:[],topEntitiesByComponents:[],entityHierarchy:[],entityDetailsMap:{}}}calculateFallbackEntityStats(e){const t=e.buffer||[],n=t.filter(e=>e.enabled&&!e.isDestroyed);return{totalEntities:t.length,activeEntities:n.length,pendingAdd:0,pendingRemove:0,averageComponentsPerEntity:n.length>0?t.reduce((e,t)=>e+(t.components?.length||0),0)/n.length:0}}estimateEntityMemoryUsage(e){try{let t=0;const n=this.calculateObjectSize(e,["components","children","parent"]);return!isNaN(n)&&n>0&&(t+=n),e.components&&Array.isArray(e.components)&&e.components.forEach(e=>{const n=this.calculateObjectSize(e,["entity"]);!isNaN(n)&&n>0&&(t+=n)}),isNaN(t)||t<0?0:t}catch(e){return 0}}calculateObjectSize(e,t=[]){if(!e||"object"!=typeof e)return 0;const n=new WeakSet,s=(e,i=0)=>{if(!e||"object"!=typeof e||i>=2)return 0;if(n.has(e))return 0;n.add(e);let r=32;try{const n=Object.keys(e),o=Math.min(n.length,20);for(let a=0;a<o;a++){const o=n[a];if(!o||t.includes(o)||"constructor"===o||"__proto__"===o||o.startsWith("_cc_")||o.startsWith("__"))continue;const c=e[o];r+=2*o.length,"string"==typeof c?r+=Math.min(2*c.length,200):"number"==typeof c?r+=8:"boolean"==typeof c?r+=4:Array.isArray(c)?r+=40+Math.min(8*c.length,160):"object"==typeof c&&null!==c&&(r+=s(c,i+1))}}catch(e){return 64}return r};try{const t=s(e);return Math.max(t,32)}catch(e){return 64}}buildEntityHierarchyTree(e,t){if(!e?.buffer)return[];const n=t?.getSystem(ht),s=[];return e.buffer.forEach(e=>{const t=e.getComponent(Xe);if(null==t?.parentId){const t=this.buildEntityHierarchyNode(e,n);s.push(t)}}),s.sort((e,t)=>e.name<t.name?-1:e.name>t.name?1:e.id-t.id),s}buildEntityHierarchyNode(e,t){const n=e.getComponent(Xe),s=t?.isActiveInHierarchy(e)??e.active,i=t?.getDepth(e)??0;let r={id:e.id,name:e.name||`Entity_${e.id}`,active:!1!==e.active,enabled:!1!==e.enabled,activeInHierarchy:s,componentCount:e.components.length,componentTypes:e.components.map(e=>M(e)),parentId:n?.parentId??null,children:[],depth:i,tag:e.tag||0,updateOrder:e.updateOrder||0};if(t){const n=t.getChildren(e);n.length>0&&(r.children=n.map(e=>this.buildEntityHierarchyNode(e,t)))}if("function"==typeof e.getDebugInfo){const t=e.getDebugInfo();r={...r,...t}}return e.components&&e.components.length>0&&(r.componentDetails=this.extractComponentDetails(e.components)),r}buildEntityDetailsMap(e,t){if(!e?.buffer)return{};const n=t?.getSystem(ht),s={},i=e.buffer;for(let e=0;e<i.length;e+=100){i.slice(e,e+100).forEach(e=>{const i=e.getDebugInfo?e.getDebugInfo():this.buildFallbackEntityInfo(e,t,n),r=e.getComponentCacheStats?e.getComponentCacheStats():null,o=this.extractComponentDetails(e.components),a=n?.getParent(e),c=a?.name??null;s[e.id]={...i,parentName:c,components:o,componentTypes:i.componentTypes||o.map(e=>e.typeName),cachePerformance:r?{hitRate:r.cacheStats.hitRate,size:r.cacheStats.size,maxSize:r.cacheStats.maxSize}:null}})}return s}buildFallbackEntityInfo(e,t,n){const s=this.getSceneInfo(t),i=e.getComponent(Xe),r=n?.isActiveInHierarchy(e)??e.active,o=n?.getDepth(e)??0;return{name:e.name||`Entity_${e.id}`,id:e.id,enabled:!1!==e.enabled,active:!1!==e.active,activeInHierarchy:r,destroyed:e.isDestroyed||!1,scene:s.name,sceneName:s.name,sceneType:s.type,componentCount:e.components.length,componentTypes:e.components.map(e=>M(e)),componentMask:e.componentMask?.toString()||"0",parentId:i?.parentId??null,childCount:i?.childIds?.length??0,childIds:i?.childIds??[],depth:o,tag:e.tag||0,updateOrder:e.updateOrder||0}}extractComponentDetails(e){return e.map(e=>{const t=M(e),n={};try{Object.keys(e).forEach(t=>{if(!t.startsWith("_")&&"entity"!==t&&"constructor"!==t){const s=e[t];null!=s&&(n[t]=this.formatPropertyValue(s))}}),0===Object.keys(n).length&&(n._info="该组件没有公开属性",n._componentId=M(e))}catch(t){n._error="属性提取失败",n._componentId=M(e)}return{typeName:t,properties:n}})}getComponentProperties(e,t,n){try{if(!n)return{};const s=n.entities;if(!s?.buffer)return{};const i=s.buffer.find(t=>t.id===e);if(!i||t>=i.components.length)return{};const r=i.components[t];if(!r)return{};const o={};return Object.keys(r).forEach(e=>{if(!e.startsWith("_")&&"entity"!==e){const t=r[e];null!=t&&(o[e]=this.formatPropertyValue(t))}}),o}catch(e){return{_error:"属性提取失败"}}}formatPropertyValue(e,t=0){return null==e?e:"object"!=typeof e?"string"==typeof e&&e.length>200?`[长字符串: ${e.length}字符] ${e.substring(0,100)}...`:e:0===t?this.formatObjectFirstLevel(e):this.createLazyLoadPlaceholder(e)}formatObjectFirstLevel(e){try{if(Array.isArray(e)){if(0===e.length)return[];if(e.length>10){const t=e.slice(0,3).map(e=>this.formatPropertyValue(e,1));return{_isLazyArray:!0,_arrayLength:e.length,_sample:t,_summary:`数组[${e.length}个元素]`}}return e.map(e=>this.formatPropertyValue(e,1))}const t=Object.keys(e);if(0===t.length)return{};const n={};let s=0;const i=15;for(const r of t){if(s>=i){n._hasMoreProperties=!0,n._totalProperties=t.length,n._hiddenCount=t.length-s;break}if(!r.startsWith("_")&&!r.startsWith("$")&&"function"!=typeof e[r])try{const t=e[r];null!=t&&(n[r]=this.formatPropertyValue(t,1),s++)}catch(e){n[r]=`[访问失败: ${e instanceof Error?e.message:String(e)}]`,s++}}return n}catch(e){return`[对象解析失败: ${e instanceof Error?e.message:String(e)}]`}}createLazyLoadPlaceholder(e){try{const t=e.constructor?.name||"Object";return{_isLazyObject:!0,_typeName:t,_summary:this.getObjectSummary(e,t),_objectId:this.generateObjectId(e)}}catch(e){return{_isLazyObject:!0,_typeName:"Unknown",_summary:`无法分析的对象: ${e instanceof Error?e.message:String(e)}`,_objectId:Math.random().toString(36).substr(2,9)}}}getObjectSummary(e,t){try{if((t.toLowerCase().includes("vec")||t.toLowerCase().includes("vector"))&&void 0!==e.x&&void 0!==e.y){const n=void 0!==e.z?e.z:"";return`${t}(${e.x}, ${e.y}${n?", "+n:""})`}if(t.toLowerCase().includes("color")&&void 0!==e.r&&void 0!==e.g&&void 0!==e.b){const n=void 0!==e.a?e.a:1;return`${t}(${e.r}, ${e.g}, ${e.b}, ${n})`}if(t.toLowerCase().includes("node")){return`${t}: ${e.name||e._name||"未命名"}`}if(t.toLowerCase().includes("component")){const n=e.node?.name||e.node?._name||"";return`${t}${n?` on ${n}`:""}`}const n=Object.keys(e);return 0===n.length?`${t} (空对象)`:`${t} (${n.length}个属性)`}catch(e){return`${t} (无法分析)`}}generateObjectId(e){try{return void 0!==e.id?`obj_${e.id}`:void 0!==e._id?`obj_${e._id}`:void 0!==e.uuid?`obj_${e.uuid}`:void 0!==e._uuid?`obj_${e._uuid}`:`obj_${Math.random().toString(36).substr(2,9)}`}catch{return`obj_${Math.random().toString(36).substr(2,9)}`}}expandLazyObject(e,t,n,s){try{if(!s)return null;const i=s.entities;if(!i?.buffer)return null;const r=i.buffer.find(t=>t.id===e);if(!r)return null;if(t>=r.components.length)return null;const o=r.components[t],a=this.getObjectByPath(o,n);return a?this.formatObjectFirstLevel(a):null}catch(e){return{error:`展开失败: ${e instanceof Error?e.message:String(e)}`}}}getObjectByPath(e,t){if(!t)return e;const n=t.split(".");let s=e;for(const e of n){if(null==s)return null;if(e.includes("[")&&e.includes("]")){const t=e.substring(0,e.indexOf("[")),n=parseInt(e.substring(e.indexOf("[")+1,e.indexOf("]")));if(t&&(s=s[t]),!(Array.isArray(s)&&n>=0&&n<s.length))return null;s=s[n]}else s=s[e]}return s}}class ut{collectSystemData(e,t){if(!t)return{totalSystems:0,systemsInfo:[]};const n=t.systems||[];let s=new Map,i=new Map;if(e)try{s=e.getAllSystemStats(),i=e.getAllSystemData()}catch(e){}return{totalSystems:n.length,systemsInfo:n.map(e=>{const t=e.systemName||J(e),n=s.get(t),r=i.get(t);return{name:t,type:J(e),entityCount:e.entities?.length||0,executionTime:n?.averageTime||r?.executionTime||0,minExecutionTime:n?.minTime===Number.MAX_VALUE?0:n?.minTime||0,maxExecutionTime:n?.maxTime||0,executionTimeHistory:n?.recentTimes||[],updateOrder:e.updateOrder||0,enabled:!1!==e.enabled,lastUpdateTime:r?.lastUpdateTime||0}})}}}class dt{constructor(){this.frameTimeHistory=[],this.maxHistoryLength=60,this.gcCollections=0,this.lastMemoryCheck=0}collectPerformanceData(e){const t=n.deltaTime,s=1e3*t,i=t>0?Math.round(1/t):0,r=this.getECSPerformanceData(e),o=r.totalExecutionTime,a=s>0?o/s*100:0;let c=0;performance.memory&&(c=performance.memory.usedJSHeapSize/1024/1024),this.frameTimeHistory.push(o),this.frameTimeHistory.length>this.maxHistoryLength&&this.frameTimeHistory.shift();const h=this.frameTimeHistory.filter(e=>e>=0);return{frameTime:o,engineFrameTime:s,ecsPercentage:a,memoryUsage:c,fps:i,averageFrameTime:h.length>0?h.reduce((e,t)=>e+t,0)/h.length:o,minFrameTime:h.length>0?Math.min(...h):o,maxFrameTime:h.length>0?Math.max(...h):o,frameTimeHistory:[...this.frameTimeHistory],systemPerformance:this.getSystemPerformance(e),systemBreakdown:r.systemBreakdown,memoryDetails:this.getMemoryDetails()}}getECSPerformanceData(e){if(!e)return{totalExecutionTime:0,systemBreakdown:[]};if(!e.enabled){try{e.enabled=!0}catch(e){}return{totalExecutionTime:0,systemBreakdown:[]}}try{let t=0;const n=[],s=e.getAllSystemStats();if(0===s.size)return{totalExecutionTime:0,systemBreakdown:[]};for(const[e,i]of s.entries()){const s=i.recentTimes&&i.recentTimes.length>0?i.recentTimes[i.recentTimes.length-1]:i.averageTime||0;t+=s,n.push({systemName:e,executionTime:s,percentage:0})}return n.forEach(e=>{e.percentage=t>0?e.executionTime/t*100:0}),n.sort((e,t)=>t.executionTime-e.executionTime),{totalExecutionTime:t,systemBreakdown:n}}catch(e){return{totalExecutionTime:0,systemBreakdown:[]}}}getSystemPerformance(e){if(!e)return[];try{const t=e.getAllSystemStats(),n=e.getAllSystemData();return Array.from(t.entries()).map(([e,t])=>{const s=n.get(e);return{systemName:e,averageTime:t.averageTime||0,maxTime:t.maxTime||0,minTime:t.minTime===Number.MAX_VALUE?0:t.minTime||0,samples:t.executionCount||0,percentage:0,entityCount:s?.entityCount||0,lastExecutionTime:s?.executionTime||0}})}catch(e){return[]}}getMemoryDetails(){const e={entities:0,components:0,systems:0,pooled:0,totalMemory:0,usedMemory:0,freeMemory:0,gcCollections:this.updateGCCount()};try{if(performance.memory){const t=performance.memory;if(e.totalMemory=t.jsHeapSizeLimit||536870912,e.usedMemory=t.usedJSHeapSize||0,e.freeMemory=e.totalMemory-e.usedMemory,this.lastMemoryCheck>0){this.lastMemoryCheck-e.usedMemory>1048576&&this.gcCollections++}this.lastMemoryCheck=e.usedMemory}else e.totalMemory=536870912,e.freeMemory=536870912}catch(e){return{totalMemory:0,usedMemory:0,freeMemory:0,entityMemory:0,componentMemory:0,systemMemory:0,pooledMemory:0,gcCollections:this.gcCollections}}return e}updateGCCount(){try{return"undefined"!=typeof PerformanceObserver||performance.measureUserAgentSpecificMemory,this.gcCollections}catch(e){return this.gcCollections}}}class mt{constructor(e,t,n=1e3,s=10){this.pool=[],this.stats={totalCreated:0,totalAcquired:0,totalReleased:0},this.createFn=e,t&&(this.resetFn=t),this.maxSize=n,this.minSize=Math.max(1,s)}acquire(){return this.stats.totalAcquired++,this.pool.length>0?this.pool.pop():(this.stats.totalCreated++,this.createFn())}release(e){this.stats.totalReleased++,this.pool.length>=this.maxSize||(this.resetFn&&this.resetFn(e),this.pool.push(e))}prewarm(e){const t=Math.min(e,this.maxSize);for(let e=this.pool.length;e<t;e++){const e=this.createFn();this.resetFn&&this.resetFn(e),this.pool.push(e),this.stats.totalCreated++}}shrink(){for(;this.pool.length>this.minSize;)this.pool.pop()}clear(){this.pool.length=0}getAvailableCount(){return this.pool.length}getMaxSize(){return this.maxSize}getStats(){const e=0===this.stats.totalAcquired?0:(this.stats.totalAcquired-this.stats.totalCreated)/this.stats.totalAcquired;return{totalCreated:this.stats.totalCreated,totalAcquired:this.stats.totalAcquired,totalReleased:this.stats.totalReleased,hitRate:e,currentSize:this.pool.length,maxSize:this.maxSize,minSize:this.minSize,utilizationRate:this.pool.length/this.maxSize}}}class pt{constructor(){this.pools=new Map,this.usageTracker=new Map,this.autoCleanupInterval=6e4,this.lastCleanupTime=0}static getInstance(){return pt.instance||(pt.instance=new pt),pt.instance}registerPool(e,t,n,s,i){this.pools.set(e,new mt(t,n,s,i)),this.usageTracker.set(e,{createCount:0,releaseCount:0,lastAccessTime:Date.now()})}acquireComponent(e){const t=this.pools.get(e);return this.trackUsage(e,"create"),t?t.acquire():null}releaseComponent(e,t){const n=this.pools.get(e);this.trackUsage(e,"release"),n&&n.release(t)}trackUsage(e,t){let n=this.usageTracker.get(e);n||(n={createCount:0,releaseCount:0,lastAccessTime:Date.now()},this.usageTracker.set(e,n)),"create"===t?n.createCount++:n.releaseCount++,n.lastAccessTime=Date.now()}update(){const e=Date.now();if(!(e-this.lastCleanupTime<this.autoCleanupInterval)){for(const[t,n]of this.usageTracker.entries()){if(e-n.lastAccessTime>12e4){const e=this.pools.get(t);e&&e.shrink()}}this.lastCleanupTime=e}}getHotComponents(e=100){return Array.from(this.usageTracker.entries()).filter(([t,n])=>n.createCount>e).map(([e])=>e)}prewarmAll(e=100){for(const t of this.pools.values())t.prewarm(e)}clearAll(){for(const e of this.pools.values())e.clear()}reset(){this.pools.clear(),this.usageTracker.clear()}getGlobalStats(){const e=[];for(const[t,n]of this.pools.entries())e.push({componentName:t,poolStats:n.getStats(),usage:this.usageTracker.get(t)});return e}getPoolStats(){const e=new Map;for(const[t,n]of this.pools)e.set(t,{available:n.getAvailableCount(),maxSize:n.getMaxSize()});return e}getPoolUtilization(){const e=new Map;for(const[t,n]of this.pools){const s=n.getAvailableCount(),i=n.getMaxSize(),r=i-s,o=i>0?r/i*100:0;e.set(t,{used:r,total:i,utilization:o})}return e}getComponentUtilization(e){const t=this.pools.get(e);if(!t)return 0;const n=t.getAvailableCount(),s=t.getMaxSize();return s>0?(s-n)/s*100:0}}class ft{collectComponentData(e){if(!e)return{componentTypes:0,componentInstances:0,componentStats:[]};const t=e.entities;if(!t?.buffer)return{componentTypes:0,componentInstances:0,componentStats:[]};const n=new Map;let s=0;t.buffer.forEach(e=>{e.components&&e.components.forEach(e=>{const t=M(e),i=n.get(t)||{count:0,entities:0};i.count++,s++,n.set(t,i)})});const i=new Map,r=new Map;try{const e=pt.getInstance(),t=e.getPoolStats(),n=e.getPoolUtilization();for(const[e,n]of t.entries())r.set(e,n.maxSize);for(const[e,t]of n.entries())i.set(e,t.utilization)}catch(e){}return{componentTypes:n.size,componentInstances:s,componentStats:Array.from(n.entries()).map(([n,s])=>{const o=r.get(n)||0,a=i.get(n)||0,c=this.getEstimatedComponentSize(n,e);return{typeName:n,instanceCount:s.count,memoryPerInstance:c,totalMemory:s.count*c,poolSize:o,poolUtilization:a,averagePerEntity:s.count/t.buffer.length}})}}getEstimatedComponentSize(e,t){if(ft.componentSizeCache.has(e))return ft.componentSizeCache.get(e);if(!t)return 64;const n=t.entities;if(!n?.buffer)return 64;let s=64;try{for(const t of n.buffer)if(t.components){const n=t.components.find(t=>M(t)===e);if(n){s=this.calculateQuickObjectSize(n);break}}}catch(e){s=64}return ft.componentSizeCache.set(e,s),s}calculateQuickObjectSize(e){if(!e||"object"!=typeof e)return 8;let t=32;const n=new WeakSet,s=(e,t=0)=>{if(!e||"object"!=typeof e||n.has(e)||t>3)return 0;n.add(e);let i=0;try{const n=Object.keys(e);for(let r=0;r<Math.min(n.length,20);r++){const o=n[r];if(!o||"entity"===o||"_entity"===o||"constructor"===o)continue;const a=e[o];i+=2*o.length,"string"==typeof a?i+=Math.min(2*a.length,200):"number"==typeof a?i+=8:"boolean"==typeof a?i+=4:"object"==typeof a&&null!==a&&(i+=s(a,t+1))}}catch(e){return 32}return i};return t+=s(e),Math.max(t,32)}calculateDetailedComponentMemory(e,t){if(!t)return this.getEstimatedComponentSize(e,t);const n=t.entities;if(!n?.buffer)return this.getEstimatedComponentSize(e,t);try{for(const t of n.buffer)if(t.components){const n=t.components.find(t=>M(t)===e);if(n)return this.estimateObjectSize(n)}}catch(e){}return this.getEstimatedComponentSize(e,t)}estimateObjectSize(e,t=new WeakSet,n=0){if(null==e||n>10)return 0;if(t.has(e))return 0;let s=0;switch(typeof e){case"boolean":s=4;break;case"number":default:s=8;break;case"string":s=24+Math.min(2*e.length,1e3);break;case"object":if(t.add(e),Array.isArray(e)){s=40+8*e.length;const i=Math.min(e.length,50);for(let r=0;r<i;r++)s+=this.estimateObjectSize(e[r],t,n+1)}else{s=32;try{const i=Object.getOwnPropertyNames(e),r=Math.min(i.length,30);for(let o=0;o<r;o++){const r=i[o];if(r&&("constructor"!==r&&"__proto__"!==r&&"entity"!==r&&"_entity"!==r&&!r.startsWith("_cc_")&&!r.startsWith("__")))try{s+=16+2*r.length;const i=e[r];null!=i&&(s+=this.estimateObjectSize(i,t,n+1))}catch(e){continue}}}catch(e){s=128}}}return 8*Math.ceil(s/8)}static clearCache(){ft.componentSizeCache.clear()}}ft.componentSizeCache=new Map;class gt{constructor(){this.sceneStartTime=Date.now()}collectSceneData(e){if(!e)return{currentSceneName:"No Scene",isInitialized:!1,sceneRunTime:0,sceneEntityCount:0,sceneSystemCount:0,sceneUptime:0};const t=(Date.now()-this.sceneStartTime)/1e3,n=e.getStats();return{currentSceneName:e.name||"Unnamed Scene",isInitialized:!0,sceneRunTime:t,sceneEntityCount:n.entityCount,sceneSystemCount:n.processorCount,sceneUptime:t}}setSceneStartTime(e){this.sceneStartTime=e}}class yt{constructor(e,t=!0){this.isConnected=!1,this.reconnectAttempts=0,this.maxReconnectAttempts=5,this.url=e,this.autoReconnect=t}setMessageHandler(e){this.messageHandler=e}connect(){return new Promise((e,t)=>{try{this.ws=new WebSocket(this.url),this.ws.onopen=t=>{this.handleOpen(t),e()},this.ws.onclose=e=>{this.handleClose(e)},this.ws.onerror=e=>{this.handleError(e),t(e)},this.ws.onmessage=e=>{this.handleMessage(e)}}catch(e){this.handleConnectionFailure(e),t(e)}})}disconnect(){this.ws&&(this.autoReconnect=!1,this.ws.close(),delete this.ws),this.isConnected=!1}send(e){if(this.isConnected&&this.ws)try{const t="string"==typeof e?e:JSON.stringify(e);this.ws.send(t)}catch(e){}}getConnectionStatus(){return this.isConnected}setMaxReconnectAttempts(e){this.maxReconnectAttempts=e}scheduleReconnect(){this.reconnectTimer&&clearTimeout(this.reconnectTimer);const e=Math.min(1e3*Math.pow(2,this.reconnectAttempts),3e4);this.reconnectAttempts++,this.reconnectTimer=setTimeout(()=>{this.connect().catch(e=>{this.reconnectAttempts<this.maxReconnectAttempts&&this.scheduleReconnect()})},e)}handleMessage(e){try{const t=JSON.parse(e.data);this.messageHandler&&this.messageHandler(t)}catch(e){}}handleOpen(e){this.isConnected=!0,this.reconnectAttempts=0,this.onOpen&&this.onOpen(e)}handleClose(e){this.isConnected=!1,this.onClose&&this.onClose(e),this.autoReconnect&&this.reconnectAttempts<this.maxReconnectAttempts&&this.scheduleReconnect()}handleError(e){this.onError&&this.onError(e)}handleConnectionFailure(e){this.onError&&this.onError(e)}}!function(e){e.ECS="ECS",e.Rendering="Rendering",e.Physics="Physics",e.Audio="Audio",e.Network="Network",e.Script="Script",e.Memory="Memory",e.Animation="Animation",e.AI="AI",e.Input="Input",e.Loading="Loading",e.Custom="Custom"}(ot||(ot={}));const _t={enabled:!1,maxFrameHistory:300,maxSampleDepth:32,collectMemory:!0,memorySampleInterval:100,detectLongTasks:!0,longTaskThreshold:50,enabledCategories:new Set(Object.values(ot))};let St=0;class vt{constructor(e){this.currentFrame=null,this.frameHistory=[],this.frameNumber=0,this.activeSamples=new Map,this.sampleStack=[],this.counters=new Map,this.callGraph=new Map,this.gcCount=0,this.previousHeapSize=0,this.longTasks=[],this.performanceObserver=null,this.config={..._t,...e},this.config.detectLongTasks&&this.setupLongTaskObserver()}static getInstance(e){return vt.instance||(vt.instance=new vt(e)),vt.instance}static resetInstance(){vt.instance&&(vt.instance.dispose(),vt.instance=null)}static beginSample(e,t=ot.Custom){return vt.getInstance().beginSample(e,t)}static endSample(e){e&&vt.getInstance().endSample(e)}static measure(e,t,n=ot.Custom){return vt.getInstance().measure(e,t,n)}static async measureAsync(e,t,n=ot.Custom){return vt.getInstance().measureAsync(e,t,n)}static beginFrame(){vt.getInstance().beginFrame()}static endFrame(){vt.getInstance().endFrame()}static incrementCounter(e,t=1,n=ot.Custom){vt.getInstance().incrementCounter(e,t,n)}static setGauge(e,t,n=ot.Custom){vt.getInstance().setGauge(e,t,n)}static setEnabled(e){vt.getInstance().setEnabled(e)}static isEnabled(){return vt.getInstance().config.enabled}static getCurrentFrame(){return vt.getInstance().currentFrame}static getFrameHistory(){return vt.getInstance().frameHistory}static getReport(e){return vt.getInstance().generateReport(e)}static reset(){vt.getInstance().reset()}beginSample(e,t=ot.Custom){if(!this.config.enabled||!this.config.enabledCategories.has(t))return null;const n=this.sampleStack.length>0?this.sampleStack[this.sampleStack.length-1]:void 0;if(n&&this.sampleStack.length>=this.config.maxSampleDepth)return null;const s={id:`sample_${++St}_${Date.now()}`,name:e,category:t,startTime:performance.now(),depth:this.sampleStack.length,parentId:n?.id};return this.activeSamples.set(s.id,s),this.sampleStack.push(s),s}endSample(e){if(!this.config.enabled||!this.activeSamples.has(e.id))return;const t=performance.now(),n=t-e.startTime,s=e.parentId?this.activeSamples.get(e.parentId):void 0,i={id:e.id,name:e.name,category:e.category,startTime:e.startTime,endTime:t,duration:n,selfTime:n,parentId:e.parentId,parentName:s?.name,depth:e.depth,callCount:1};this.currentFrame&&this.currentFrame.samples.push(i),this.updateCallGraph(e.name,e.category,n,s),this.activeSamples.delete(e.id);const r=this.sampleStack.indexOf(e);-1!==r&&this.sampleStack.splice(r,1)}measure(e,t,n=ot.Custom){const s=this.beginSample(e,n);try{return t()}finally{s&&this.endSample(s)}}async measureAsync(e,t,n=ot.Custom){const s=this.beginSample(e,n);try{return await t()}finally{s&&this.endSample(s)}}beginFrame(){this.config.enabled&&(this.frameNumber++,this.currentFrame={frameNumber:this.frameNumber,startTime:performance.now(),endTime:0,duration:0,samples:[],sampleStats:[],counters:new Map(this.counters),memory:this.captureMemory(),categoryStats:new Map},this.resetFrameCounters())}endFrame(){if(this.config.enabled&&this.currentFrame){for(this.currentFrame.endTime=performance.now(),this.currentFrame.duration=this.currentFrame.endTime-this.currentFrame.startTime,this.calculateSampleStats(),this.calculateCategoryStats(),this.frameHistory.push(this.currentFrame);this.frameHistory.length>this.config.maxFrameHistory;)this.frameHistory.shift();this.sampleStack=[],this.activeSamples.clear()}}incrementCounter(e,t=1,n=ot.Custom){if(!this.config.enabled)return;let s=this.counters.get(e);s||(s={name:e,category:n,value:0,type:"counter",history:[]},this.counters.set(e,s)),s.value+=t,s.history.push({time:performance.now(),value:s.value}),s.history.length>100&&s.history.shift()}setGauge(e,t,n=ot.Custom){if(!this.config.enabled)return;let s=this.counters.get(e);s||(s={name:e,category:n,value:0,type:"gauge",history:[]},this.counters.set(e,s)),s.value=t,s.history.push({time:performance.now(),value:t}),s.history.length>100&&s.history.shift()}setEnabled(e){this.config.enabled=e,e&&this.config.detectLongTasks&&!this.performanceObserver&&this.setupLongTaskObserver()}reset(){this.frameHistory=[],this.currentFrame=null,this.frameNumber=0,this.activeSamples.clear(),this.sampleStack=[],this.counters.clear(),this.callGraph.clear(),this.gcCount=0,this.longTasks=[]}generateReport(e){const t=e?this.frameHistory.slice(-e):this.frameHistory;if(0===t.length)return this.createEmptyReport();const n=t.map(e=>e.duration),s=[...n].sort((e,t)=>e-t),i=this.aggregateSampleStats(t).sort((e,t)=>t.inclusiveTime-e.inclusiveTime).slice(0,20),r=this.aggregateCategoryStats(t),o=this.buildCallGraphFromFrames(t),a=t[0],c=t[t.length-1];return{startTime:a?.startTime??0,endTime:c?.endTime??0,totalFrames:t.length,averageFrameTime:n.reduce((e,t)=>e+t,0)/n.length,minFrameTime:Math.min(...n),maxFrameTime:Math.max(...n),p95FrameTime:s[Math.floor(.95*s.length)]||0,p99FrameTime:s[Math.floor(.99*s.length)]||0,hotspots:i,callGraph:o,categoryBreakdown:r,memoryTrend:t.map(e=>e.memory),longTasks:[...this.longTasks]}}buildCallGraphFromFrames(e){const t=new Map;for(const n of e)for(const e of n.samples){let n=t.get(e.name);if(n||(n={category:e.category,callCount:0,totalTime:0,callers:new Map,callees:new Map},t.set(e.name,n)),n.callCount++,n.totalTime+=e.duration,e.parentName){const s=n.callers.get(e.parentName)||{count:0,totalTime:0};s.count++,s.totalTime+=e.duration,n.callers.set(e.parentName,s);let i=t.get(e.parentName);i||(i={category:e.category,callCount:0,totalTime:0,callers:new Map,callees:new Map},t.set(e.parentName,i));const r=i.callees.get(e.name)||{count:0,totalTime:0};r.count++,r.totalTime+=e.duration,i.callees.set(e.name,r)}}const n=new Map;for(const[e,s]of t){const t=new Map;for(const[e,n]of s.callers)t.set(e,{count:n.count,totalTime:n.count>0?n.totalTime/n.count:0});const i=new Map;for(const[e,t]of s.callees)i.set(e,{count:t.count,totalTime:t.count>0?t.totalTime/t.count:0});n.set(e,{name:e,category:s.category,callCount:s.callCount,totalTime:s.callCount>0?s.totalTime/s.callCount:0,callers:t,callees:i})}return n}getCallGraph(){return new Map(this.callGraph)}getFunctionCallInfo(e){const t=this.callGraph.get(e);return t?{callers:Array.from(t.callers.entries()).map(([e,t])=>({name:e,...t})),callees:Array.from(t.callees.entries()).map(([e,t])=>({name:e,...t}))}:null}dispose(){this.performanceObserver&&(this.performanceObserver.disconnect(),this.performanceObserver=null),this.reset()}captureMemory(){const e=performance.now();let t=0,n=0,s=0;const i=performance;return i.memory&&(t=i.memory.usedJSHeapSize||0,n=i.memory.totalJSHeapSize||0,s=i.memory.jsHeapSizeLimit||0,this.previousHeapSize>0&&t<this.previousHeapSize-1048576&&this.gcCount++,this.previousHeapSize=t),{timestamp:e,usedHeapSize:t,totalHeapSize:n,heapSizeLimit:s,utilizationPercent:s>0?t/s*100:0,gcCount:this.gcCount}}resetFrameCounters(){for(const e of this.counters.values())"counter"===e.type&&(e.value=0)}calculateSampleStats(){if(!this.currentFrame)return;const e=new Map;for(const t of this.currentFrame.samples){let n=e.get(t.name);n||(n={name:t.name,category:t.category,inclusiveTime:0,exclusiveTime:0,callCount:0,averageTime:0,minTime:Number.MAX_VALUE,maxTime:0,percentOfFrame:0,percentOfParent:0,children:[],depth:t.depth},e.set(t.name,n)),n.inclusiveTime+=t.duration,n.callCount+=1,n.minTime=Math.min(n.minTime,t.duration),n.maxTime=Math.max(n.maxTime,t.duration)}for(const t of this.currentFrame.samples)if(t.parentId){const n=this.currentFrame.samples.find(e=>e.id===t.parentId);if(n){const t=e.get(n.name);if(t){t.exclusiveTime=t.inclusiveTime;for(const e of this.currentFrame.samples)e.parentId===n.id&&(t.exclusiveTime-=e.duration)}}}const t=this.currentFrame.duration||1;for(const n of e.values())n.averageTime=n.inclusiveTime/n.callCount,n.percentOfFrame=n.inclusiveTime/t*100,0===n.exclusiveTime&&(n.exclusiveTime=n.inclusiveTime);this.currentFrame.sampleStats=Array.from(e.values()).sort((e,t)=>t.inclusiveTime-e.inclusiveTime)}calculateCategoryStats(){if(!this.currentFrame)return;const e=new Map;for(const t of this.currentFrame.samples)if(0===t.depth){let n=e.get(t.category);n||(n={totalTime:0,sampleCount:0},e.set(t.category,n)),n.totalTime+=t.duration,n.sampleCount+=1}const t=this.currentFrame.duration||1;for(const[n,s]of e)this.currentFrame.categoryStats.set(n,{...s,percentOfFrame:s.totalTime/t*100})}updateCallGraph(e,t,n,s){let i=this.callGraph.get(e);if(i||(i={name:e,category:t,callCount:0,totalTime:0,callers:new Map,callees:new Map},this.callGraph.set(e,i)),i.callCount++,i.totalTime+=n,s){const t=i.callers.get(s.name)||{count:0,totalTime:0};t.count++,t.totalTime+=n,i.callers.set(s.name,t);let r=this.callGraph.get(s.name);r||(r={name:s.name,category:s.category,callCount:0,totalTime:0,callers:new Map,callees:new Map},this.callGraph.set(s.name,r));const o=r.callees.get(e)||{count:0,totalTime:0};o.count++,o.totalTime+=n,r.callees.set(e,o)}}aggregateSampleStats(e){const t=new Map;for(const n of e)for(const e of n.sampleStats){let n=t.get(e.name);n?(n.inclusiveTime+=e.inclusiveTime,n.exclusiveTime+=e.exclusiveTime,n.callCount+=e.callCount,n.minTime=Math.min(n.minTime,e.minTime),n.maxTime=Math.max(n.maxTime,e.maxTime)):(n={...e,minTime:Number.MAX_VALUE},t.set(e.name,n))}const n=e.reduce((e,t)=>e+t.duration,0);for(const e of t.values())e.averageTime=e.inclusiveTime/e.callCount,e.percentOfFrame=e.inclusiveTime/n*100;return Array.from(t.values())}aggregateCategoryStats(e){const t=new Map;for(const n of e)for(const[e,s]of n.categoryStats){let n=t.get(e);n||(n={totalTime:0,frameCount:0},t.set(e,n)),n.totalTime+=s.totalTime,n.frameCount++}const n=e.reduce((e,t)=>e+t.duration,0),s=new Map;for(const[e,i]of t)s.set(e,{totalTime:i.totalTime,averageTime:i.frameCount>0?i.totalTime/i.frameCount:0,percentOfTotal:n>0?i.totalTime/n*100:0});return s}setupLongTaskObserver(){if("undefined"!=typeof PerformanceObserver)try{this.performanceObserver=new PerformanceObserver(e=>{for(const t of e.getEntries())t.duration>this.config.longTaskThreshold&&(this.longTasks.push({startTime:t.startTime,duration:t.duration,attribution:t.attribution?.map(e=>e.name)||[]}),this.longTasks.length>100&&this.longTasks.shift())}),this.performanceObserver.observe({entryTypes:["longtask"]})}catch{}}createEmptyReport(){return{startTime:0,endTime:0,totalFrames:0,averageFrameTime:0,minFrameTime:0,maxFrameTime:0,p95FrameTime:0,p99FrameTime:0,hotspots:[],callGraph:new Map,categoryBreakdown:new Map,memoryTrend:[],longTasks:[]}}}vt.instance=null;class Ct{constructor(){this.selectedFunction=null,this.peakMemory=0}setSelectedFunction(e){this.selectedFunction=e}collectAdvancedData(e){const t=vt.getFrameHistory(),n=vt.getCurrentFrame(),s=vt.getReport(300),i=n?.memory||this.getDefaultMemory();return i.usedHeapSize>this.peakMemory&&(this.peakMemory=i.usedHeapSize),{currentFrame:this.buildCurrentFrameData(n),frameTimeHistory:this.buildFrameTimeHistory(t),categoryStats:this.buildCategoryStats(n,e),hotspots:this.buildHotspots(s),callGraph:this.buildCallGraph(s),longTasks:s.longTasks,memoryTrend:this.buildMemoryTrend(s.memoryTrend),summary:this.buildSummary(s,i)}}collectFromLegacyMonitor(e){if(!e)return this.createEmptyData();const t=e.getAllSystemStats?.()||new Map,s=e.getAllSystemData?.()||new Map,i=1e3*n.deltaTime,r=i>0?Math.round(1e3/i):0,o=this.buildCategoryStatsFromLegacy(t,s,i),a=this.buildHotspotsFromLegacy(t,s,i);return{currentFrame:{frameNumber:0,frameTime:i,fps:r,memory:this.getCurrentMemory()},frameTimeHistory:[],categoryStats:o,hotspots:a,callGraph:{currentFunction:this.selectedFunction,callers:[],callees:[]},longTasks:[],memoryTrend:[],summary:{totalFrames:0,averageFrameTime:i,minFrameTime:i,maxFrameTime:i,p95FrameTime:i,p99FrameTime:i,currentMemoryMB:this.getCurrentMemory().usedHeapSize/1048576,peakMemoryMB:this.peakMemory/1048576,gcCount:0,longTaskCount:0}}}buildCurrentFrameData(e){if(!e){const e=1e3*n.deltaTime;return{frameNumber:0,frameTime:e,fps:e>0?Math.round(1e3/e):0,memory:this.getCurrentMemory()}}return{frameNumber:e.frameNumber,frameTime:e.duration,fps:e.duration>0?Math.round(1e3/e.duration):0,memory:e.memory}}buildFrameTimeHistory(e){return e.map(e=>({frameNumber:e.frameNumber,time:e.startTime,duration:e.duration}))}buildCategoryStats(e,t){const s=[];if(e&&e.categoryStats.size>0){const t=e.duration||1;for(const[n,i]of e.categoryStats){const r=e.sampleStats.filter(e=>e.category===n).map(e=>({name:e.name,inclusiveTime:e.inclusiveTime,exclusiveTime:e.exclusiveTime,callCount:e.callCount,percentOfCategory:i.totalTime>0?e.inclusiveTime/i.totalTime*100:0,percentOfFrame:e.inclusiveTime/t*100})).sort((e,t)=>t.inclusiveTime-e.inclusiveTime);s.push({category:n,totalTime:i.totalTime,percentOfFrame:i.percentOfFrame,sampleCount:i.sampleCount,items:r})}}if(t&&0===s.length){const e=t.getAllSystemStats?.()||new Map,s=t.getAllSystemData?.()||new Map,i=1e3*n.deltaTime||1;return this.buildCategoryStatsFromLegacy(e,s,i)}return s.sort((e,t)=>t.totalTime-e.totalTime)}buildCategoryStatsFromLegacy(e,t,n){const s=[];let i=0;for(const[r,o]of e.entries()){const e=t.get(r),a=e?.executionTime||o?.averageTime||0;i+=a,s.push({name:r,inclusiveTime:a,exclusiveTime:a,callCount:1,percentOfCategory:0,percentOfFrame:n>0?a/n*100:0})}for(const e of s)e.percentOfCategory=i>0?e.inclusiveTime/i*100:0;return s.sort((e,t)=>t.inclusiveTime-e.inclusiveTime),0===s.length?[]:[{category:ot.ECS,totalTime:i,percentOfFrame:n>0?i/n*100:0,sampleCount:s.length,items:s}]}buildHotspots(e){const t=e.hotspots.reduce((e,t)=>e+t.inclusiveTime,0)||1,n=new Set,s=new Set;for(const[t,i]of e.callGraph)if(0===i.callers.size)n.add(t);else{let r=!1;for(const n of i.callers.keys())if(e.callGraph.has(n)){r=!0,s.add(t);break}r||n.add(t)}const i=(n,s,r)=>{if(r.has(n))return null;r.add(n);const o=e.hotspots.find(e=>e.name===n),a=e.callGraph.get(n);if(!o&&!a)return null;const c=o?.inclusiveTime||a?.totalTime||0,h=o?.exclusiveTime||c,l=o?.callCount||a?.callCount||1,u=[];if(a&&s<5){for(const[e]of a.callees){const t=i(e,s+1,r);t&&u.push(t)}u.sort((e,t)=>t.inclusiveTime-e.inclusiveTime)}return{name:n,category:o?.category||a?.category||ot.Custom,inclusiveTime:c,inclusiveTimePercent:c/t*100,exclusiveTime:h,exclusiveTimePercent:h/t*100,callCount:l,avgCallTime:l>0?c/l:0,depth:s,children:u.length>0?u:void 0}},r=[],o=new Set;for(const e of n){const t=i(e,0,o);t&&r.push(t)}return r.sort((e,t)=>t.inclusiveTime-e.inclusiveTime),r.slice(0,50)}buildHotspotsFromLegacy(e,t,n){const s=[];for(const[i,r]of e.entries()){const e=t.get(i),o=e?.executionTime||r?.averageTime||0;s.push({name:i,category:ot.ECS,inclusiveTime:o,inclusiveTimePercent:n>0?o/n*100:0,exclusiveTime:o,exclusiveTimePercent:n>0?o/n*100:0,callCount:r?.executionCount||1,avgCallTime:r?.averageTime||o,depth:0})}return s.sort((e,t)=>t.inclusiveTime-e.inclusiveTime).slice(0,50)}buildCallGraph(e){if(!this.selectedFunction)return{currentFunction:null,callers:[],callees:[]};const t=e.callGraph.get(this.selectedFunction);if(!t)return{currentFunction:this.selectedFunction,callers:[],callees:[]};let n=0;for(const e of t.callers.values())n+=e.count;const s=Array.from(t.callers.entries()).map(([e,t])=>({name:e,callCount:t.count,totalTime:t.totalTime,percentOfCurrent:n>0?t.count/n*100:0})).sort((e,t)=>t.callCount-e.callCount),i=Array.from(t.callees.entries()).map(([e,n])=>({name:e,callCount:n.count,totalTime:n.totalTime,percentOfCurrent:t.totalTime>0?n.totalTime/t.totalTime*100:0})).sort((e,t)=>t.totalTime-e.totalTime);return{currentFunction:this.selectedFunction,callers:s,callees:i}}buildMemoryTrend(e){return e.map(e=>({time:e.timestamp,usedMB:e.usedHeapSize/1048576,totalMB:e.totalHeapSize/1048576,gcCount:e.gcCount}))}buildSummary(e,t){return{totalFrames:e.totalFrames,averageFrameTime:e.averageFrameTime,minFrameTime:e.minFrameTime,maxFrameTime:e.maxFrameTime,p95FrameTime:e.p95FrameTime,p99FrameTime:e.p99FrameTime,currentMemoryMB:t.usedHeapSize/1048576,peakMemoryMB:this.peakMemory/1048576,gcCount:t.gcCount,longTaskCount:e.longTasks.length}}getCurrentMemory(){const e=performance,t=e.memory?.usedJSHeapSize||0,n=e.memory?.totalJSHeapSize||0,s=e.memory?.jsHeapSizeLimit||0;return{timestamp:performance.now(),usedHeapSize:t,totalHeapSize:n,heapSizeLimit:s,utilizationPercent:s>0?t/s*100:0,gcCount:0}}getDefaultMemory(){return{timestamp:performance.now(),usedHeapSize:0,totalHeapSize:0,heapSizeLimit:0,utilizationPercent:0,gcCount:0}}createEmptyData(){return{currentFrame:{frameNumber:0,frameTime:0,fps:0,memory:this.getDefaultMemory()},frameTimeHistory:[],categoryStats:[],hotspots:[],callGraph:{currentFunction:null,callers:[],callees:[]},longTasks:[],memoryTrend:[],summary:{totalFrames:0,averageFrameTime:0,minFrameTime:0,maxFrameTime:0,p95FrameTime:0,p99FrameTime:0,currentMemoryMB:0,peakMemoryMB:0,gcCount:0,longTaskCount:0}}}}function bt(){return"undefined"!=typeof crypto&&"function"==typeof crypto.randomUUID?crypto.randomUUID():function(){if("undefined"!=typeof crypto&&"function"==typeof crypto.getRandomValues){const e=new Uint8Array(16);return crypto.getRandomValues(e),e[6]=15&e[6]|64,e[8]=63&e[8]|128,function(e){const t=Array.from(e,e=>e.toString(16).padStart(2,"0")).join("");return`${t.slice(0,8)}-${t.slice(8,12)}-${t.slice(12,16)}-${t.slice(16,20)}-${t.slice(20)}`}(e)}return"xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx".replace(/[xy]/g,e=>{const t=16*Math.random()|0;return("x"===e?t:3&t|8).toString(16)})}()}function Et(e){return/^[0-9a-f]{8}-[0-9a-f]{4}-4[0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$/i.test(e)}const Tt="00000000-0000-0000-0000-000000000000",wt=28,Mt=20,It=268435455,At=1048575,kt=1<<28,Dt=1<<20,xt=0;function Ot(e,t){return(t&At)*kt+(e&It)}function Pt(e){return e&It}function Rt(e){return Math.floor(e/kt)&At}function zt(e){return 0!==e}function Ft(e,t){return e===t}function Nt(e){return 0===e?"Entity(NULL)":`Entity(idx=${Pt(e)}, gen=${Rt(e)})`}class Bt{compare(e,t){let n=e.updateOrder-t.updateOrder;return 0==n&&(n=e.id-t.id),n}}class $t{constructor(e,t,n){this._handle=0,this.scene=null,this._isDestroyed=!1,this._active=!0,this._tag=0,this._enabled=!0,this._updateOrder=0,this._componentMask=R.clone(R.ZERO),this._componentCache=null,this._lifecyclePolicy=0,this.name=e,this.id=t,this.persistentId=n??bt()}get lifecyclePolicy(){return this._lifecyclePolicy}get isPersistent(){return 1===this._lifecyclePolicy}get handle(){return this._handle}setHandle(e){this._handle=e}setPersistent(){return this._lifecyclePolicy=1,this}setSceneLocal(){return this._lifecyclePolicy=0,this}get isDestroyed(){return this._isDestroyed}setDestroyedState(e){this._isDestroyed=e}get components(){return null===this._componentCache&&this._rebuildComponentCache(),this._componentCache}_rebuildComponentCache(){const e=[];if(!this.scene?.componentStorageManager)return void(this._componentCache=e);const t=this._componentMask,n=G.getRegisteredCount();for(let s=0;s<n;s++)if(R.getBit(t,s)){const t=G.getTypeByBitIndex(s);if(t){const n=this.scene.componentStorageManager.getComponent(this.id,t);n&&e.push(n)}}this._componentCache=e}get active(){return this._active}set active(e){this._active!==e&&(this._active=e,this.onActiveChanged())}get tag(){return this._tag}set tag(e){this._tag=e}get enabled(){return this._enabled}set enabled(e){this._enabled=e}get updateOrder(){return this._updateOrder}set updateOrder(e){this._updateOrder=e}get componentMask(){return this._componentMask}createComponent(e,...t){const n=new e(...t);return this.addComponent(n)}addComponentInternal(e){const t=e.constructor,n=G.getBitMask(t);return R.orInPlace(this._componentMask,n),this._componentCache=null,e}notifyQuerySystems(e){this.scene&&this.scene.querySystem&&(this.scene.querySystem.updateEntity(this),this.scene.clearSystemEntityCaches(),this.scene.notifyEntityComponentChanged&&this.scene.notifyEntityComponentChanged(this,e))}addComponent(e){const t=e.constructor;if(!this.scene)throw new Error("Entity must be added to Scene before adding components. Use scene.createEntity() instead of new Entity()");if(!this.scene.componentStorageManager)throw new Error("Scene does not have componentStorageManager");if(this.hasComponent(t))throw new Error(`Entity ${this.name} already has component ${w(t)}`);return this.addComponentInternal(e),this.scene.componentStorageManager.addComponent(this.id,e),e.entityId=this.id,this.scene.referenceTracker&&this.scene.referenceTracker.registerEntityScene(this.id,this.scene),this.scene.isEditorMode?this.scene.queueDeferredComponentCallback(()=>{e.onAddedToEntity()}):e.onAddedToEntity(),this.scene&&this.scene.eventSystem&&this.scene.eventSystem.emitSync("component:added",{timestamp:Date.now(),source:"Entity",entityId:this.id,entityName:this.name,entityTag:this.tag?.toString(),componentType:w(t),component:e}),this.notifyQuerySystems(t),e}getComponent(e){if(!this.hasComponent(e))return null;if(!this.scene?.componentStorageManager)return null;return this.scene.componentStorageManager.getComponent(this.id,e)}hasComponent(e){if(!G.isRegistered(e))return!1;const t=G.getBitMask(e);return R.hasAny(this._componentMask,t)}getOrCreateComponent(e,...t){let n=this.getComponent(e);return n||(n=this.createComponent(e,...t)),n}markDirty(...e){if(!this.scene)return;const t=this.scene.epochManager.current;for(const n of e)n.markDirty(t)}removeComponent(e){const t=e.constructor;if(!G.isRegistered(t))return;const n=G.getBitIndex(t);R.clearBit(this._componentMask,n),this._componentCache=null,this.scene?.componentStorageManager&&this.scene.componentStorageManager.removeComponent(this.id,t),this.scene?.referenceTracker&&this.scene.referenceTracker.clearComponentReferences(e),e.onRemovedFromEntity&&e.onRemovedFromEntity(),e.entityId=null,this.scene&&this.scene.eventSystem&&this.scene.eventSystem.emitSync("component:removed",{timestamp:Date.now(),source:"Entity",entityId:this.id,entityName:this.name,entityTag:this.tag?.toString(),componentType:w(t),component:e}),this.notifyQuerySystems(t)}removeComponentByType(e){const t=this.getComponent(e);return t?(this.removeComponent(t),t):null}removeAllComponents(){const e=[...this.components];R.clear(this._componentMask),this._componentCache=null;for(const t of e){const e=t.constructor;this.scene?.componentStorageManager&&this.scene.componentStorageManager.removeComponent(this.id,e),t.onRemovedFromEntity()}this.notifyQuerySystems()}addComponents(e){const t=[];for(const n of e)try{t.push(this.addComponent(n))}catch(e){$t._logger.warn(`添加组件失败 ${M(n)}:`,e)}return t}removeComponentsByTypes(e){const t=[];for(const n of e)t.push(this.removeComponentByType(n));return t}getComponents(e){const t=[];for(const n of this.components)n instanceof e&&t.push(n);return t}getComponentByType(e){for(const t of this.components)if(t instanceof e)return t;return null}onActiveChanged(){for(const e of this.components)"onActiveChanged"in e&&"function"==typeof e.onActiveChanged&&e.onActiveChanged();this.scene&&this.scene.eventSystem&&this.scene.eventSystem.emitSync("entity:activeChanged",{entity:this,active:this._active})}destroy(){this._isDestroyed||(this._isDestroyed=!0,this.scene&&this.scene.referenceTracker&&(this.scene.referenceTracker.clearReferencesTo(this.id),this.scene.referenceTracker.unregisterEntityScene(this.id)),this.removeAllComponents(),this.scene&&(this.scene.querySystem&&this.scene.querySystem.removeEntity(this),this.scene.entities&&this.scene.entities.remove(this)))}compareTo(e){return Bt.prototype.compare(this,e)}toString(){return`Entity[${this.name}:${this.id}:${this.persistentId.slice(0,8)}]`}getDebugInfo(){return{name:this.name,id:this.id,persistentId:this.persistentId,enabled:this._enabled,active:this._active,destroyed:this._isDestroyed,componentCount:this.components.length,componentTypes:this.components.map(e=>M(e)),componentMask:R.toString(this._componentMask,2),cacheBuilt:null!==this._componentCache}}}$t._logger=$("Entity"),$t.entityComparer=new Bt;class Lt{get count(){return this.buffer.length}constructor(e){this.buffer=[],this._idToEntity=new Map,this._nameToEntities=new Map,this._entitiesToAdd=[],this._entitiesToRemove=[],this._scene=e}add(e){this.addImmediate(e)}addImmediate(e){this._idToEntity.has(e.id)||(this.buffer.push(e),this._idToEntity.set(e.id,e),this.updateNameIndex(e,!0))}remove(e){this.removeImmediate(e)}removeImmediate(e){const t=this.buffer.indexOf(e);-1!==t&&(this.buffer.splice(t,1),this._idToEntity.delete(e.id),this.updateNameIndex(e,!1),this._scene&&this._scene.identifierPool&&this._scene.identifierPool.checkIn(e.id))}removeAllEntities(){const e=[];for(let t=this.buffer.length-1;t>=0;t--)e.push(this.buffer[t].id),this.buffer[t].destroy();if(this._scene&&this._scene.identifierPool)for(const t of e)this._scene.identifierPool.checkIn(t);this.buffer.length=0,this._idToEntity.clear(),this._nameToEntities.clear(),this._entitiesToAdd.length=0,this._entitiesToRemove.length=0}updateLists(){if(this._entitiesToAdd.length>0){for(const e of this._entitiesToAdd)this.addImmediate(e);this._entitiesToAdd.length=0}if(this._entitiesToRemove.length>0){for(const e of this._entitiesToRemove)this.removeImmediate(e);this._entitiesToRemove.length=0}}update(){this.updateLists()}findEntity(e){const t=this._nameToEntities.get(e);return t&&t.length>0?t[0]:null}findEntitiesByName(e){return this._nameToEntities.get(e)||[]}findEntityById(e){return this._idToEntity.get(e)||null}findEntitiesByTag(e){const t=[];for(const n of this.buffer)n.tag===e&&t.push(n);return t}findEntitiesWithComponent(e){const t=[];for(const n of this.buffer)n.hasComponent(e)&&t.push(n);return t}forEach(e){for(const t of this.buffer)e(t)}forEachWhere(e,t){for(const n of this.buffer)e(n)&&t(n)}updateNameIndex(e,t){if(e.name)if(t){let t=this._nameToEntities.get(e.name);t||(t=[],this._nameToEntities.set(e.name,t)),t.push(e)}else{const t=this._nameToEntities.get(e.name);if(t){const n=t.indexOf(e);-1!==n&&(t.splice(n,1),0===t.length&&this._nameToEntities.delete(e.name))}}}reorderEntity(e,t){const n=this._idToEntity.get(e);if(!n)return;const s=this.buffer.indexOf(n);if(-1===s||s===t)return;const i=Math.max(0,Math.min(t,this.buffer.length-1));this.buffer.splice(s,1),this.buffer.splice(i,0,n)}getStats(){let e=0;for(const t of this.buffer)t.enabled&&!t.isDestroyed&&e++;return{totalEntities:this.buffer.length,activeEntities:e,pendingAdd:this._entitiesToAdd.length,pendingRemove:this._entitiesToRemove.length,nameIndexSize:this._nameToEntities.size}}}class Wt{constructor(e=100,t=1024){this._nextAvailableIndex=0,this._freeIndices=[],this._generations=new Map,this._pendingRecycle=[],this._recycleDelay=100,this._stats={totalAllocated:0,totalRecycled:0,currentActive:0,memoryExpansions:0},this._recycleDelay=e,this._expansionBlockSize=t,this._preAllocateGenerations(0,this._expansionBlockSize)}checkOut(){let e;if(this._processDelayedRecycle(),this._freeIndices.length>0)e=this._freeIndices.pop();else{if(this._nextAvailableIndex>Wt.MAX_INDEX)throw new Error(`实体索引已达到框架设计限制 (${Wt.MAX_INDEX})。这意味着您已经分配了超过65535个不同的实体索引。这是16位索引设计的限制,考虑优化实体回收策略或升级到64位ID设计。`);e=this._nextAvailableIndex++,this._ensureGenerationCapacity(e)}const t=this._generations.get(e)||1;return this._stats.totalAllocated++,this._stats.currentActive++,this._packId(e,t)}checkIn(e){const t=this._unpackIndex(e),n=this._unpackGeneration(e);if(!this._isValidId(t,n))return!1;return!this._pendingRecycle.some(e=>e.index===t&&e.generation===n)&&(this._pendingRecycle.push({index:t,generation:n,timestamp:Date.now()}),this._stats.currentActive--,this._stats.totalRecycled++,!0)}isValid(e){const t=this._unpackIndex(e),n=this._unpackGeneration(e);return this._isValidId(t,n)}getStats(){let e=0,t=0;for(const[n,s]of this._generations)n<this._nextAvailableIndex&&(e+=s,t++);const n=t>0?e/t:1;return{totalAllocated:this._stats.totalAllocated,totalRecycled:this._stats.totalRecycled,currentActive:this._stats.currentActive,currentlyFree:this._freeIndices.length,pendingRecycle:this._pendingRecycle.length,maxPossibleEntities:Wt.MAX_INDEX+1,maxUsedIndex:this._nextAvailableIndex-1,memoryUsage:this._calculateMemoryUsage(),memoryExpansions:this._stats.memoryExpansions,averageGeneration:Math.round(100*n)/100,generationStorageSize:this._generations.size}}forceProcessDelayedRecycle(){this._processDelayedRecycle(!0)}_processDelayedRecycle(e=!1){if(0===this._pendingRecycle.length)return;const t=Date.now(),n=[],s=[];for(const i of this._pendingRecycle)e||t-i.timestamp>=this._recycleDelay?n.push(i):s.push(i);for(const e of n)if(this._isValidId(e.index,e.generation)){let t=e.generation+1;t>Wt.MAX_GENERATION&&(t=1),this._generations.set(e.index,t),this._freeIndices.push(e.index)}this._pendingRecycle=s}_preAllocateGenerations(e,t){for(let n=0;n<t;n++){const t=e+n;t<=Wt.MAX_INDEX&&this._generations.set(t,1)}this._stats.memoryExpansions++}_ensureGenerationCapacity(e){if(!this._generations.has(e)){const t=Math.floor(e/this._expansionBlockSize)*this._expansionBlockSize;this._preAllocateGenerations(t,this._expansionBlockSize)}}_calculateMemoryUsage(){return 16*this._generations.size+8*this._freeIndices.length+32*this._pendingRecycle.length}_packId(e,t){return t<<16|e}_unpackIndex(e){return 65535&e}_unpackGeneration(e){return e>>>16&65535}_isValidId(e,t){if(e<0||e>=this._nextAvailableIndex)return!1;const n=this._generations.get(e);return void 0!==n&&n===t}}Wt.MAX_INDEX=65535,Wt.MAX_GENERATION=65535;class Ht{constructor(){this._processors=[],this._isDirty=!1}setDirty(){this._isDirty=!0}add(e){this._processors.push(e),this.setDirty()}remove(e){const t=this._processors.indexOf(e);-1!==t&&this._processors.splice(t,1)}getProcessor(e){for(const t of this._processors)if(t instanceof e)return t;return null}begin(){this.sortProcessors()}end(){for(const e of this._processors)try{e.reset()}catch(t){Ht._logger.error(`Error in processor ${J(e)}:`,t)}this._isDirty=!1,this._processors.length=0}update(){this.sortProcessors();for(const e of this._processors)try{e.update()}catch(t){Ht._logger.error(`Error in processor ${J(e)}:`,t)}}lateUpdate(){for(const e of this._processors)e.lateUpdate()}sortProcessors(){this._isDirty&&(this._processors.sort((e,t)=>e.updateOrder-t.updateOrder),this._isDirty=!1)}get processors(){return this._processors}get count(){return this._processors.length}}Ht._logger=$("EntityProcessorList");class jt{constructor(e){if(e&&"object"==typeof e)this._value=R.clone(e);else if("number"==typeof e)this._value=R.fromNumber(e);else if("string"==typeof e){const t=parseInt(e,10);this._value=R.fromNumber(t)}else this._value=R.clone(R.ZERO)}set(e){if(e<0)throw new Error("Bit index cannot be negative");R.setBit(this._value,e)}clear(e){if(e<0)throw new Error("Bit index cannot be negative");R.clearBit(this._value,e)}get(e){return R.getBit(this._value,e)}containsAll(e){return R.hasAll(this._value,e._value)}intersects(e){return R.hasAny(this._value,e._value)}excludes(e){return R.hasNone(this._value,e._value)}clearAll(){R.clear(this._value)}isEmpty(){return R.isZero(this._value)}cardinality(){return R.popCount(this._value)}and(e){const t=new jt;return R.copy(this._value,t._value),R.andInPlace(t._value,e._value),t}or(e){const t=new jt;return R.copy(this._value,t._value),R.orInPlace(t._value,e._value),t}xor(e){const t=new jt;return R.copy(this._value,t._value),R.xorInPlace(t._value,e._value),t}not(e=64){e>64&&(e=64);const t=new jt;if(R.copy(this._value,t._value),e<=32){const n=(1<<e)-1;t._value.base[O.LOW]=~t._value.base[O.LOW]&n,t._value.base[O.HIGH]=0}else if(t._value.base[O.LOW]=~t._value.base[O.LOW],e<64){const n=(1<<e-32)-1;t._value.base[O.HIGH]=~t._value.base[O.HIGH]&n}else t._value.base[O.HIGH]=~t._value.base[O.HIGH];return t}copyFrom(e){R.copy(e._value,this._value)}clone(){return new jt(this._value)}getValue(){return this._value}setValue(e){if("object"==typeof e)R.copy(e,this._value);else if("number"==typeof e)this._value=R.fromNumber(e);else{const t=parseInt(e,10);this._value=R.fromNumber(t)}}toString(){const e=[];for(let t=0;t<64;t++)this.get(t)&&e.push(t.toString());return`Bits[${e.join(", ")}]`}toBinaryString(e=0){0==e&&(e=64+(this._value.segments?64*this._value.segments.length:0));let t="";for(let n=e-1;n>=0;n--)t+=this.get(n)?"1":"0",n%8==0&&n>0&&(t+=" ");return t}toHexString(){return R.toString(this._value,16)}static fromBinaryString(e){const t=e.replace(/\s/g,"");let n;if(t.length<=32){n={base:[parseInt(t,2)>>>0,0]}}else{const e=t.substring(t.length-32),s=t.substring(0,t.length-32);n={base:[parseInt(e,2)>>>0,parseInt(s,2)>>>0]}}return new jt(n)}static fromHexString(e){const t=e.replace(/^0x/i,"");let n;if(t.length<=8){n={base:[parseInt(t,16)>>>0,0]}}else{const e=t.substring(t.length-8),s=t.substring(0,t.length-8);n={base:[parseInt(e,16)>>>0,parseInt(s,16)>>>0]}}return new jt(n)}equals(e){return R.equals(this._value,e._value)}getHighestBitIndex(){if(R.isZero(this._value))return-1;if(0!==this._value.base[O.HIGH])for(let e=31;e>=0;e--)if(this._value.base[O.HIGH]&1<<e)return e+32;for(let e=31;e>=0;e--)if(this._value.base[O.LOW]&1<<e)return e;return-1}getLowestBitIndex(){if(R.isZero(this._value))return-1;for(let e=0;e<32;e++)if(this._value.base[O.LOW]&1<<e)return e;for(let e=0;e<32;e++)if(this._value.base[O.HIGH]&1<<e)return e+32;return-1}}class Gt{constructor(){this._dense=[],this._sparse=new Map}add(e){if(this._sparse.has(e))return!1;const t=this._dense.length;return this._dense.push(e),this._sparse.set(e,t),!0}remove(e){const t=this._sparse.get(e);if(void 0===t)return!1;const n=this._dense.length-1;if(t!==n){const e=this._dense[n];this._dense[t]=e,this._sparse.set(e,t)}return this._dense.pop(),this._sparse.delete(e),!0}has(e){return this._sparse.has(e)}getIndex(e){return this._sparse.get(e)}getByIndex(e){return this._dense[e]}get size(){return this._dense.length}get isEmpty(){return 0===this._dense.length}forEach(e){for(let t=0;t<this._dense.length;t++)e(this._dense[t],t)}map(e){const t=[];for(let n=0;n<this._dense.length;n++)t.push(e(this._dense[n],n));return t}filter(e){const t=[];for(let n=0;n<this._dense.length;n++)e(this._dense[n],n)&&t.push(this._dense[n]);return t}find(e){for(let t=0;t<this._dense.length;t++)if(e(this._dense[t],t))return this._dense[t]}some(e){for(let t=0;t<this._dense.length;t++)if(e(this._dense[t],t))return!0;return!1}every(e){for(let t=0;t<this._dense.length;t++)if(!e(this._dense[t],t))return!1;return!0}getDenseArray(){return[...this._dense]}getDenseArrayUnsafe(){return this._dense}clear(){this._dense.length=0,this._sparse.clear()}toArray(){return[...this._dense]}toSet(){return new Set(this._dense)}getMemoryStats(){const e=8*this._dense.length,t=16*this._sparse.size;return{denseArraySize:e,sparseMapSize:t,totalMemory:e+t}}validate(){if(this._dense.length!==this._sparse.size)return!1;for(let e=0;e<this._dense.length;e++){const t=this._dense[e];if(this._sparse.get(t)!==e)return!1}for(const[e,t]of this._sparse)if(t>=this._dense.length||this._dense[t]!==e)return!1;return!0}}class qt extends Set{constructor(...e){super()}reset(){this.clear()}}class Ut{constructor(){this._componentMasks=[],this._componentToEntities=new Map,this._entities=new Gt}addEntity(e){this._entities.has(e)&&this.removeEntity(e);const t=R.clone(R.ZERO),n=new Set;for(const s of e.components){const e=s.constructor;n.add(e);const i=G.getBitMask(e);R.orInPlace(t,i)}this._entities.add(e);const s=this._entities.getIndex(e);for(;this._componentMasks.length<=s;)this._componentMasks.push(R.clone(R.ZERO));this._componentMasks[s]=t,this.updateComponentMappings(e,n,!0)}removeEntity(e){const t=this._entities.getIndex(e);if(void 0===t)return;const n=this.getEntityComponentTypes(e);this.updateComponentMappings(e,n,!1),this._entities.remove(e);const s=this._componentMasks.length-1;t!==s&&(this._componentMasks[t]=this._componentMasks[s]),this._componentMasks.pop()}queryByComponent(e){const t=this._componentToEntities.get(e);return t?new Set(t):new Set}queryMultipleAnd(e){if(0===e.length)return new Set;if(1===e.length)return this.queryByComponent(e[0]);const t=R.clone(R.ZERO);for(const n of e){if(!G.isRegistered(n))return new Set;const e=G.getBitMask(n);R.orInPlace(t,e)}const n=Ut._entitySetPool.obtain();return this._entities.forEach((e,s)=>{const i=this._componentMasks[s];R.hasAll(i,t)&&n.add(e)}),n}queryMultipleOr(e){if(0===e.length)return new Set;if(1===e.length)return this.queryByComponent(e[0]);const t=R.clone(R.ZERO);for(const n of e)if(G.isRegistered(n)){const e=G.getBitMask(n);R.orInPlace(t,e)}if(R.equals(t,R.ZERO))return new Set;const n=Ut._entitySetPool.obtain();return this._entities.forEach((e,s)=>{const i=this._componentMasks[s];R.hasAny(i,t)&&n.add(e)}),n}hasComponent(e,t){const n=this._entities.getIndex(e);if(void 0===n)return!1;if(!G.isRegistered(t))return!1;const s=this._componentMasks[n],i=G.getBitMask(t);return R.hasAny(s,i)}getEntityMask(e){const t=this._entities.getIndex(e);if(void 0!==t)return this._componentMasks[t]}getAllEntities(){return this._entities.toArray()}get size(){return this._entities.size}get isEmpty(){return this._entities.isEmpty}forEach(e){this._entities.forEach((t,n)=>{e(t,this._componentMasks[n],n)})}clear(){this._entities.clear(),this._componentMasks.length=0;for(const e of this._componentToEntities.values())Ut._entitySetPool.release(e);this._componentToEntities.clear()}getMemoryStats(){const e=this._entities.getMemoryStats(),t=16*this._componentMasks.length;let n=16*this._componentToEntities.size;for(const e of this._componentToEntities.values())n+=8*e.size;return{entitiesMemory:e.totalMemory,masksMemory:t,mappingsMemory:n,totalMemory:e.totalMemory+t+n}}validate(){if(!this._entities.validate())return!1;if(this._componentMasks.length!==this._entities.size)return!1;const e=new Set;for(const t of this._componentToEntities.values())for(const n of t)e.add(n);for(const t of e)if(!this._entities.has(t))return!1;return!0}getEntityComponentTypes(e){const t=new Set;for(const n of e.components)t.add(n.constructor);return t}updateComponentMappings(e,t,n){for(const s of t){let t=this._componentToEntities.get(s);n?(t||(t=Ut._entitySetPool.obtain(),this._componentToEntities.set(s,t)),t.add(e)):t&&(t.delete(e),0===t.size&&(this._componentToEntities.delete(s),Ut._entitySetPool.release(t)))}}}Ut._entitySetPool=S.getPool(qt,50,512);class Qt{constructor(){this.buckets=new Map,this._size=0}get size(){return this._size}get innerBuckets(){return this.buckets}murmur32(e,t){let n=t>>>0;const s=e=>{e=(e=Math.imul(e,3432918353)>>>0)<<15|e>>>17,e=Math.imul(e,461845907)>>>0,n^=e,n=n<<13|n>>>19,n=Math.imul(n,5)+3864292196>>>0};if(s(e.base[0]>>>0),s(e.base[1]>>>0),e.segments)for(const t of e.segments)s(t[0]>>>0),s(t[1]>>>0);return n^=e.segments?8*e.segments.length:8,n^=n>>>16,n=Math.imul(n,2246822507)>>>0,n^=n>>>13,n=Math.imul(n,3266489909)>>>0,n^=n>>>16,n>>>0}getHashes(e){return[this.murmur32(e,2538058380),this.murmur32(e,305419896)]}set(e,t){const[n,s]=this.getHashes(e);let i=this.buckets.get(n);i||(i=[],this.buckets.set(n,i));for(let e=0;e<i.length;e++)if(i[e][0]===s)return i[e][1]=t,this;return i.push([s,t]),this._size++,this}get(e){const[t,n]=this.getHashes(e),s=this.buckets.get(t);if(s)for(let e=0;e<s.length;e++)if(s[e][0]===n)return s[e][1]}has(e){return void 0!==this.get(e)}delete(e){const[t,n]=this.getHashes(e),s=this.buckets.get(t);if(!s)return!1;for(let e=0;e<s.length;e++)if(s[e][0]===n)return s.splice(e,1),this._size--,0===s.length&&this.buckets.delete(t),!0;return!1}clear(){this.buckets.clear(),this._size=0}*entries(){for(const[e,t]of this.buckets)for(const[e,n]of t)yield[void 0,n]}*values(){for(const e of this.buckets.values())for(const[t,n]of e)yield n}}class Vt{constructor(){this._archetypes=new Qt,this._entityToArchetype=new Map,this._componentToArchetypes=new Map,this._entityComponentTypesCache=new Map,this._allArchetypes=[]}addEntity(e){const t=this.getEntityComponentTypes(e),n=this.generateArchetypeId(t);let s=this._archetypes.get(n);s||(s=this.createArchetype(t)),s.entities.add(e),this._entityToArchetype.set(e,s)}removeEntity(e){const t=this._entityToArchetype.get(e);t&&(t.entities.delete(e),this._entityComponentTypesCache.delete(e),this._entityToArchetype.delete(e))}updateEntity(e){const t=this._entityToArchetype.get(e);this._entityComponentTypesCache.delete(e);const n=this.getEntityComponentTypes(e),s=this.generateArchetypeId(n);if(t&&t.id===s)return;t&&t.entities.delete(e);let i=this._archetypes.get(s);i||(i=this.createArchetype(n)),i.entities.add(e),this._entityToArchetype.set(e,i)}queryArchetypes(e,t="AND"){const n=[];let s=0;if("AND"===t){if(0===e.length){for(const e of this._allArchetypes)n.push(e),s+=e.entities.size;return{archetypes:n,totalEntities:s}}if(1===e.length){const t=this._componentToArchetypes.get(e[0]);if(t)for(const e of t)n.push(e),s+=e.entities.size;return{archetypes:n,totalEntities:s}}let t,i=1/0;for(const n of e){const e=this._componentToArchetypes.get(n);if(!e||0===e.size)return{archetypes:[],totalEntities:0};e.size<i&&(i=e.size,t=e)}const r=this.generateArchetypeId(e);if(t)for(const e of t)R.hasAll(e.id,r)&&(n.push(e),s+=e.entities.size)}else{const t=new Set;for(const n of e){const e=this._componentToArchetypes.get(n);if(e)for(const n of e)t.add(n)}for(const e of t)n.push(e),s+=e.entities.size}return{archetypes:n,totalEntities:s}}getEntityArchetype(e){return this._entityToArchetype.get(e)}getAllArchetypes(){return this._allArchetypes.slice()}getEntitiesByComponent(e){const t=this._componentToArchetypes.get(e);if(!t||0===t.size)return[];const n=[];for(const e of t)for(const t of e.entities)n.push(t);return n}clear(){this._archetypes.clear(),this._entityToArchetype.clear(),this._componentToArchetypes.clear(),this._entityComponentTypesCache.clear(),this._allArchetypes=[]}updateAllArchetypeArrays(){this._allArchetypes=[];for(const e of this._archetypes.values())this._allArchetypes.push(e)}getEntityComponentTypes(e){let t=this._entityComponentTypesCache.get(e);return t||(t=e.components.map(e=>e.constructor),this._entityComponentTypesCache.set(e,t)),t}generateArchetypeId(e){const t=R.clone(R.ZERO);for(const n of e){const e=G.getBitMask(n);R.orInPlace(t,e)}return t}createArchetype(e){const t=this.generateArchetypeId(e),n={id:t,componentTypes:[...e],entities:new Set};this._archetypes.set(t,n),this.updateAllArchetypeArrays();for(const t of e){let e=this._componentToArchetypes.get(t);e||(e=new Set,this._componentToArchetypes.set(t,e)),e.add(n)}return n}}var Yt;!function(e){e.ALL="all",e.ANY="any",e.NONE="none"}(Yt||(Yt={}));const Jt=$("ReactiveQuery");var Kt,Zt;!function(e){e.ADDED="added",e.REMOVED="removed",e.BATCH_UPDATE="batch_update"}(Kt||(Kt={}));class Xt{constructor(e,t={}){this._entities=[],this._entityIdSet=new Set,this._snapshot=null,this._listeners=[],this._active=!0,this._condition=e,this._config={enableBatchMode:t.enableBatchMode??!0,batchDelay:t.batchDelay??16,debug:t.debug??!1},this._id=this.generateQueryId(),this._batchChanges={added:[],removed:[],timer:null},this._config.debug&&Jt.debug(`创建ReactiveQuery: ${this._id}`)}generateQueryId(){return`${this._condition.type}:${this._condition.componentTypes.map(e=>e.name).sort().join(",")}`}subscribe(e){if(!this._active)throw new Error(`Cannot subscribe to disposed ReactiveQuery ${this._id}`);if("function"!=typeof e)throw new TypeError("Listener must be a function");return this._listeners.push(e),this._config.debug&&Jt.debug(`订阅ReactiveQuery: ${this._id}, 监听器数量: ${this._listeners.length}`),()=>{const t=this._listeners.indexOf(e);-1!==t&&this._listeners.splice(t,1)}}unsubscribeAll(){this._listeners.length=0}getEntities(){return null!==this._snapshot||(this._snapshot=[...this._entities]),this._snapshot}get count(){return this._entities.length}matches(e){const t=e.componentMask;switch(this._condition.type){case Yt.ALL:return R.hasAll(t,this._condition.mask);case Yt.ANY:return R.hasAny(t,this._condition.mask);case Yt.NONE:return R.hasNone(t,this._condition.mask);default:return!1}}notifyEntityAdded(e){this._active&&this.matches(e)&&(this._entityIdSet.has(e.id)||(this._entities.push(e),this._entityIdSet.add(e.id),this._snapshot=null,this._config.enableBatchMode?this.addToBatch("added",e):this.notifyListeners({type:Kt.ADDED,entity:e}),this._config.debug&&Jt.debug(`ReactiveQuery ${this._id}: 实体添加 ${e.name}(${e.id})`)))}notifyEntityRemoved(e){if(!this._active)return;if(!this._entityIdSet.has(e.id))return;const t=this._entities.indexOf(e);-1!==t&&this._entities.splice(t,1),this._entityIdSet.delete(e.id),this._snapshot=null,this._config.enableBatchMode?this.addToBatch("removed",e):this.notifyListeners({type:Kt.REMOVED,entity:e}),this._config.debug&&Jt.debug(`ReactiveQuery ${this._id}: 实体移除 ${e.name}(${e.id})`)}notifyEntityChanged(e){if(!this._active)return;const t=this._entityIdSet.has(e.id),n=this.matches(e);t&&!n?this.notifyEntityRemoved(e):!t&&n&&this.notifyEntityAdded(e)}initializeWith(e){this._entities.length=0,this._entityIdSet.clear(),this._snapshot=null;for(const t of e)this.matches(t)&&(this._entities.push(t),this._entityIdSet.add(t.id));this._config.debug&&Jt.debug(`ReactiveQuery ${this._id}: 初始化 ${this._entities.length} 个实体`)}addToBatch(e,t){"added"===e?this._batchChanges.added.push(t):this._batchChanges.removed.push(t),null===this._batchChanges.timer&&(this._batchChanges.timer=setTimeout(()=>{this.flushBatchChanges()},this._config.batchDelay))}flushBatchChanges(){if(0===this._batchChanges.added.length&&0===this._batchChanges.removed.length)return void(this._batchChanges.timer=null);const e=[...this._batchChanges.added],t=[...this._batchChanges.removed];this._batchChanges.added.length=0,this._batchChanges.removed.length=0,this._batchChanges.timer=null,this.notifyListeners({type:Kt.BATCH_UPDATE,added:e,removed:t,entities:this._entities}),this._config.debug&&Jt.debug(`ReactiveQuery ${this._id}: 批量更新 +${e.length} -${t.length}`)}notifyListeners(e){const t=[...this._listeners];for(const n of t)try{n(e)}catch(e){Jt.error(`ReactiveQuery ${this._id}: 监听器执行出错`,e)}}pause(){this._active=!1,null!==this._batchChanges.timer&&(clearTimeout(this._batchChanges.timer),this._batchChanges.timer=null),this._batchChanges.added.length=0,this._batchChanges.removed.length=0}resume(){this._active=!0}dispose(){null!==this._batchChanges.timer&&(clearTimeout(this._batchChanges.timer),this._batchChanges.timer=null),this._batchChanges.added.length=0,this._batchChanges.removed.length=0,this._active=!1,this.unsubscribeAll(),this._entities.length=0,this._entityIdSet.clear(),this._snapshot=null,this._config.debug&&Jt.debug(`ReactiveQuery ${this._id}: 已销毁`)}get condition(){return this._condition}get id(){return this._id}get active(){return this._active}get listenerCount(){return this._listeners.length}}class en{constructor(e,...t){this._lastVersion=-1,this._cachedEntities=[],this._querySystem=e,this._componentTypes=t}get componentTypes(){return this._componentTypes}get entities(){return this._refreshCache(),this._cachedEntities}get count(){return this.entities.length}_refreshCache(){const e=this._querySystem.version;if(this._lastVersion!==e){const t=this._querySystem.queryAll(...this._componentTypes);this._cachedEntities=t.entities,this._lastVersion=e}}forEach(e){const t=this.entities,n=this._componentTypes,s=n.length;for(let i=0,r=t.length;i<r;i++){const r=t[i],o=new Array(s);for(let e=0;e<s;e++){const t=r.getComponent(n[e]);t&&(o[e]=t)}e(r,...o)}}forEachChanged(e,t){const n=this.entities,s=this._componentTypes,i=s.length;for(let r=0,o=n.length;r<o;r++){const o=n[r],a=new Array(i);let c=!1;for(let t=0;t<i;t++){const n=o.getComponent(s[t]);n&&(a[t]=n,n.lastWriteEpoch>e&&(c=!0))}c&&t(o,...a)}}first(){const e=this.entities;if(0===e.length)return null;const t=e[0],n=[];for(const e of this._componentTypes){const s=t.getComponent(e);if(!s)return null;n.push(s)}return[t,...n]}toArray(){const e=[];return this.forEach((t,...n)=>{e.push([t,...n])}),e}map(e){const t=[];return this.forEach((n,...s)=>{t.push(e(n,...s))}),t}filter(e){const t=[];return this.forEach((n,...s)=>{e(n,...s)&&t.push(n)}),t}find(e){const t=this.entities,n=this._componentTypes,s=n.length;for(let i=0,r=t.length;i<r;i++){const r=t[i],o=new Array(s);for(let e=0;e<s;e++){const t=r.getComponent(n[e]);t&&(o[e]=t)}if(e(r,...o))return r}}any(){return this.count>0}empty(){return 0===this.count}}class tn{constructor(){this._logger=$("QuerySystem"),this._entities=[],this._version=0,this._queryCache=new Map,this._cacheMaxSize=1e3,this._cacheTimeout=5e3,this._componentMaskCache=new Map,this._queryStats={totalQueries:0,cacheHits:0,indexHits:0,linearScans:0,archetypeHits:0,dirtyChecks:0},this._reactiveQueries=new Map,this._reactiveQueriesByComponent=new Map,this._entityIndex={byTag:new Map,byName:new Map},this._archetypeSystem=new Vt}setEntities(e){this._entities=e,this.clearQueryCache(),this.clearReactiveQueries(),this.rebuildIndexes()}addEntity(e,t=!1){this._entities.includes(e)||(this._entities.push(e),this.addEntityToIndexes(e),this._archetypeSystem.addEntity(e),this.notifyReactiveQueriesEntityAdded(e),t||this.clearQueryCache(),this._version++)}addEntities(e){if(0===e.length)return;const t=new Set(this._entities.map(e=>e.id));let n=0;for(const s of e)t.has(s.id)||(this._entities.push(s),this.addEntityToIndexes(s),this._archetypeSystem.addEntity(s),t.add(s.id),n++);n>0&&this.clearQueryCache()}addEntitiesUnchecked(e){if(0!==e.length){for(const t of e)this._entities.push(t);for(const t of e)this.addEntityToIndexes(t),this._archetypeSystem.addEntity(t);this.clearQueryCache()}}removeEntity(e){const t=this._entities.indexOf(e);if(-1!==t){const n=[];for(const t of e.components)n.push(t.constructor);this._entities.splice(t,1),this.removeEntityFromIndexes(e),this._archetypeSystem.removeEntity(e),n.length>0?this.notifyReactiveQueriesEntityRemoved(e,n):this.notifyReactiveQueriesEntityRemovedFallback(e),this.clearQueryCache(),this._version++}}updateEntity(e){this._entities.includes(e)?(this.removeEntityFromIndexes(e),this._archetypeSystem.updateEntity(e),this.addEntityToIndexes(e),this.notifyReactiveQueriesEntityChanged(e),this.clearQueryCache(),this._version++):this.addEntity(e)}addEntityToIndexes(e){const t=e.tag;if(void 0!==t){(this._entityIndex.byTag.get(t)||this.createAndSetTagIndex(t)).add(e)}const n=e.name;if(n){(this._entityIndex.byName.get(n)||this.createAndSetNameIndex(n)).add(e)}}createAndSetTagIndex(e){const t=new Set;return this._entityIndex.byTag.set(e,t),t}createAndSetNameIndex(e){const t=new Set;return this._entityIndex.byName.set(e,t),t}removeEntityFromIndexes(e){if(void 0!==e.tag){const t=this._entityIndex.byTag.get(e.tag);t&&(t.delete(e),0===t.size&&this._entityIndex.byTag.delete(e.tag))}if(e.name){const t=this._entityIndex.byName.get(e.name);t&&(t.delete(e),0===t.size&&this._entityIndex.byName.delete(e.name))}}rebuildIndexes(){this._entityIndex.byTag.clear(),this._entityIndex.byName.clear(),this._archetypeSystem.clear();for(const e of this._entities)this.addEntityToIndexes(e),this._archetypeSystem.addEntity(e)}queryAll(...e){const t=performance.now();this._queryStats.totalQueries++;const n=this.getOrCreateReactiveQuery(Yt.ALL,e).getEntities();return this._queryStats.cacheHits++,{entities:n,count:n.length,executionTime:performance.now()-t,fromCache:!0}}queryAny(...e){const t=performance.now();this._queryStats.totalQueries++;const n=this.getOrCreateReactiveQuery(Yt.ANY,e).getEntities();return this._queryStats.cacheHits++,{entities:n,count:n.length,executionTime:performance.now()-t,fromCache:!0}}queryNone(...e){const t=performance.now();this._queryStats.totalQueries++;const n=this.getOrCreateReactiveQuery(Yt.NONE,e).getEntities();return this._queryStats.cacheHits++,{entities:n,count:n.length,executionTime:performance.now()-t,fromCache:!0}}queryByTag(e){const t=performance.now();this._queryStats.totalQueries++;const n=`tag:${e}`,s=this.getFromCache(n);if(s)return this._queryStats.cacheHits++,{entities:s,count:s.length,executionTime:performance.now()-t,fromCache:!0};this._queryStats.indexHits++;const i=Array.from(this._entityIndex.byTag.get(e)||[]);return this.addToCache(n,i),{entities:i,count:i.length,executionTime:performance.now()-t,fromCache:!1}}queryByName(e){const t=performance.now();this._queryStats.totalQueries++;const n=`name:${e}`,s=this.getFromCache(n);if(s)return this._queryStats.cacheHits++,{entities:s,count:s.length,executionTime:performance.now()-t,fromCache:!0};this._queryStats.indexHits++;const i=Array.from(this._entityIndex.byName.get(e)||[]);return this.addToCache(n,i),{entities:i,count:i.length,executionTime:performance.now()-t,fromCache:!1}}queryChangedSince(e,...t){const n=performance.now();this._queryStats.totalQueries++,this._queryStats.dirtyChecks++;const s=this.queryAll(...t),i=[];for(const n of s.entities){let s=!1;for(const i of t){const t=n.getComponent(i);if(t&&t.lastWriteEpoch>e){s=!0;break}}s&&i.push(n)}return{entities:i,count:i.length,executionTime:performance.now()-n,fromCache:!1}}queryByComponent(e){const t=performance.now();this._queryStats.totalQueries++;const n=this.generateCacheKey("component",[e]),s=this.getFromCache(n);if(s)return this._queryStats.cacheHits++,{entities:s,count:s.length,executionTime:performance.now()-t,fromCache:!0};this._queryStats.indexHits++;const i=this._archetypeSystem.getEntitiesByComponent(e);return this.addToCache(n,i),{entities:i,count:i.length,executionTime:performance.now()-t,fromCache:!1}}getFromCache(e){const t=this._queryCache.get(e);return t?Date.now()-t.timestamp>this._cacheTimeout||t.version!==this._version?(this._queryCache.delete(e),null):(t.hitCount++,t.entities):null}addToCache(e,t){this._queryCache.size>=this._cacheMaxSize&&this.cleanupCache(),this._queryCache.set(e,{entities:t,timestamp:Date.now(),hitCount:0,version:this._version})}cleanupCache(){const e=Date.now();for(const[t,n]of this._queryCache.entries())e-n.timestamp>this._cacheTimeout&&this._queryCache.delete(t);if(this._queryCache.size>=this._cacheMaxSize){let e=1/0,t="",n=1/0;for(const[s,i]of this._queryCache.entries())(i.hitCount<e||i.hitCount===e&&i.timestamp<n)&&(e=i.hitCount,t=s,n=i.timestamp);t&&this._queryCache.delete(t)}}clearQueryCache(){this._queryCache.clear(),this._componentMaskCache.clear()}clearReactiveQueries(){for(const e of this._reactiveQueries.values())e.dispose();this._reactiveQueries.clear(),this._reactiveQueriesByComponent.clear()}generateCacheKey(e,t){if(1===t.length){return`${e}:${w(t[0])}`}return`${e}:${t.map(e=>w(e)).sort().join(",")}`}clearCache(){this.clearQueryCache(),this.clearReactiveQueries()}compile(...e){return new en(this,...e)}createReactiveQuery(e,t){if(!e||0===e.length)throw new Error("组件类型列表不能为空");const n=this.createComponentMask(e),s={type:Yt.ALL,componentTypes:e,mask:n},i=new Xt(s,t),r=this.executeTraditionalQuery(Yt.ALL,e);i.initializeWith(r);const o=this.generateCacheKey("all",e);this._reactiveQueries.set(o,i);for(const t of e){let e=this._reactiveQueriesByComponent.get(t);e||(e=new Set,this._reactiveQueriesByComponent.set(t,e)),e.add(i)}return i}destroyReactiveQuery(e){if(!e)return;const t=e.id;this._reactiveQueries.delete(t);for(const t of e.condition.componentTypes){const n=this._reactiveQueriesByComponent.get(t);n&&(n.delete(e),0===n.size&&this._reactiveQueriesByComponent.delete(t))}e.dispose()}createComponentMask(e){const t=e.map(e=>w(e)).sort().join(","),n=this._componentMaskCache.get(t);if(n)return n;const s=R.clone(R.ZERO);for(const t of e){const e=G.getBitMask(t);R.orInPlace(s,e)}return this._componentMaskCache.set(t,s),s}get version(){return this._version}getAllEntities(){return this._entities}getStats(){return{entityCount:this._entities.length,indexStats:{componentIndexSize:this._archetypeSystem.getAllArchetypes().length,tagIndexSize:this._entityIndex.byTag.size,nameIndexSize:this._entityIndex.byName.size},queryStats:{...this._queryStats,cacheHitRate:this._queryStats.totalQueries>0?(this._queryStats.cacheHits/this._queryStats.totalQueries*100).toFixed(2)+"%":"0%"},optimizationStats:{archetypeSystem:this._archetypeSystem.getAllArchetypes().map(e=>({id:e.id,componentTypes:e.componentTypes.map(e=>w(e)),entityCount:e.entities.size}))},cacheStats:{size:this._reactiveQueries.size,hitRate:this._queryStats.totalQueries>0?(this._queryStats.cacheHits/this._queryStats.totalQueries*100).toFixed(2)+"%":"0%"}}}getEntityArchetype(e){return this._archetypeSystem.getEntityArchetype(e)}getOrCreateReactiveQuery(e,t){const n=this.generateCacheKey(e,t);let s=this._reactiveQueries.get(n);if(!s){const i=this.createComponentMask(t);s=new Xt({type:e,componentTypes:t,mask:i},{enableBatchMode:!1,debug:!1});const r=this.executeTraditionalQuery(e,t);s.initializeWith(r),this._reactiveQueries.set(n,s);for(const e of t){let t=this._reactiveQueriesByComponent.get(e);t||(t=new Set,this._reactiveQueriesByComponent.set(e,t)),t.add(s)}this._logger.debug(`创建内部响应式查询缓存: ${n}`)}return s}executeTraditionalQuery(e,t){switch(e){case Yt.ALL:{const e=this._archetypeSystem.queryArchetypes(t,"AND"),n=[];for(const t of e.archetypes)for(const e of t.entities)n.push(e);return n}case Yt.ANY:{const e=this._archetypeSystem.queryArchetypes(t,"OR"),n=[];for(const t of e.archetypes)for(const e of t.entities)n.push(e);return n}case Yt.NONE:{const e=this.createComponentMask(t);return this._entities.filter(t=>R.hasNone(t.componentMask,e))}default:return[]}}notifyReactiveQueriesEntityAdded(e){if(0===this._reactiveQueries.size)return;const t=new Set;for(const n of e.components){const s=n.constructor,i=this._reactiveQueriesByComponent.get(s);if(i)for(const n of i)t.has(n)||(n.notifyEntityAdded(e),t.add(n))}}notifyReactiveQueriesEntityRemoved(e,t){if(0===this._reactiveQueries.size)return;const n=new Set;for(const s of t){const t=this._reactiveQueriesByComponent.get(s);if(t)for(const s of t)n.has(s)||(s.notifyEntityRemoved(e),n.add(s))}}notifyReactiveQueriesEntityRemovedFallback(e){if(0!==this._reactiveQueries.size)for(const t of this._reactiveQueries.values())t.notifyEntityRemoved(e)}notifyReactiveQueriesEntityChanged(e){if(0===this._reactiveQueries.size)return;const t=new Set;for(const n of e.components){const s=n.constructor,i=this._reactiveQueriesByComponent.get(s);if(i)for(const n of i)t.has(n)||(n.notifyEntityChanged(e),t.add(n))}for(const n of this._reactiveQueries.values())t.has(n)||n.notifyEntityChanged(e)}}class nn{constructor(e){this._logger=$("QueryBuilder"),this.conditions=[],this.querySystem=e}withAll(...e){return this.conditions.push({type:Yt.ALL,componentTypes:e,mask:this.createComponentMask(e)}),this}withAny(...e){return this.conditions.push({type:Yt.ANY,componentTypes:e,mask:this.createComponentMask(e)}),this}without(...e){return this.conditions.push({type:Yt.NONE,componentTypes:e,mask:this.createComponentMask(e)}),this}execute(){const e=performance.now();if(1===this.conditions.length){const e=this.conditions[0];switch(e.type){case Yt.ALL:return this.querySystem.queryAll(...e.componentTypes);case Yt.ANY:return this.querySystem.queryAny(...e.componentTypes);case Yt.NONE:return this.querySystem.queryNone(...e.componentTypes)}}return{entities:[],count:0,executionTime:performance.now()-e,fromCache:!1}}createComponentMask(e){const t=R.clone(R.ZERO);for(const n of e)try{const e=G.getBitMask(n);R.orInPlace(t,e)}catch(e){this._logger.warn(`组件类型 ${w(n)} 未注册,跳过`)}return t}reset(){return this.conditions=[],this}}class sn{constructor(){this.listeners=new Map,this.stats=new Map,this.batchQueue=new Map,this.batchTimers=new Map,this.batchConfigs=new Map,this.nextListenerId=0,this.isEnabled=!0,this.maxListeners=100}on(e,t,n={}){return this.addListener(e,t,n)}once(e,t,n={}){return this.addListener(e,t,{...n,once:!0})}onAsync(e,t,n={}){return this.addListener(e,t,{...n,async:!0})}off(e,t){const n=this.listeners.get(e);if(!n)return!1;const s=n.findIndex(e=>e.id===t);return-1!==s&&(n.splice(s,1),0===n.length&&(this.listeners.delete(e),this.stats.delete(e)),!0)}offAll(e){this.listeners.delete(e),this.stats.delete(e),this.clearBatch(e)}async emit(e,t){if(!this.isEnabled)return;const n=this.batchConfigs.get(e);n?.enabled?this.addToBatch(e,t):await this.executeEvent(e,t)}emitSync(e,t){if(!this.isEnabled)return;const n=this.listeners.get(e);if(!n||0===n.length)return;const s=performance.now(),i=[],r=this.sortListenersByPriority(n);for(const n of r)if(!n.config.async)try{n.config.thisArg?n.handler.call(n.config.thisArg,t):n.handler(t),n.config.once&&i.push(n.id)}catch(t){sn._logger.error(`事件处理器执行错误 ${e}:`,t)}this.removeListeners(e,i),this.updateStats(e,performance.now()-s)}setBatchConfig(e,t){this.batchConfigs.set(e,t)}flushBatch(e){const t=this.batchQueue.get(e);if(!t||0===t.length)return;const n=this.batchTimers.get(e);n&&(clearTimeout(n),this.batchTimers.delete(e)),this.processBatch(e,t),this.batchQueue.delete(e)}getStats(e){return e?this.stats.get(e)||this.createEmptyStats(e):new Map(this.stats)}resetStats(e){e?this.stats.delete(e):this.stats.clear()}setEnabled(e){this.isEnabled=e}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}clear(){this.listeners.clear(),this.stats.clear(),this.clearAllBatches()}setMaxListeners(e){this.maxListeners=e}addListener(e,t,n){let s=this.listeners.get(e);if(s||(s=[],this.listeners.set(e,s)),s.length>=this.maxListeners)return sn._logger.warn(`事件类型 ${e} 的监听器数量超过最大限制 (${this.maxListeners})`),"";const i="listener_"+this.nextListenerId++,r={handler:t,config:{priority:0,...n},id:i};return s.push(r),this.stats.has(e)||this.stats.set(e,this.createEmptyStats(e)),i}async executeEvent(e,t){const n=this.listeners.get(e);if(!n||0===n.length)return;const s=performance.now(),i=[],r=this.sortListenersByPriority(n),o=r.filter(e=>!e.config.async),a=r.filter(e=>e.config.async);for(const n of o)try{n.config.thisArg?n.handler.call(n.config.thisArg,t):n.handler(t),n.config.once&&i.push(n.id)}catch(t){sn._logger.error(`同步事件处理器执行错误 ${e}:`,t)}const c=a.map(async n=>{try{n.config.thisArg?await n.handler.call(n.config.thisArg,t):await n.handler(t),n.config.once&&i.push(n.id)}catch(t){sn._logger.error(`异步事件处理器执行错误 ${e}:`,t)}});await Promise.all(c),this.removeListeners(e,i),this.updateStats(e,performance.now()-s)}sortListenersByPriority(e){return e.slice().sort((e,t)=>(t.config.priority||0)-(e.config.priority||0))}removeListeners(e,t){if(0===t.length)return;const n=this.listeners.get(e);if(n){for(const e of t){const t=n.findIndex(t=>t.id===e);-1!==t&&n.splice(t,1)}0===n.length&&(this.listeners.delete(e),this.stats.delete(e))}}addToBatch(e,t){let n=this.batchQueue.get(e);n||(n=[],this.batchQueue.set(e,n)),n.push(t);const s=this.batchConfigs.get(e);if(n.length>=s.batchSize)this.flushBatch(e);else if(!this.batchTimers.has(e)){const t=setTimeout(()=>{this.flushBatch(e)},s.delay);this.batchTimers.set(e,t)}}async processBatch(e,t){const n={type:e,events:t,count:t.length,timestamp:Date.now()};await this.executeEvent(`${e}:batch`,n)}clearBatch(e){this.batchQueue.delete(e);const t=this.batchTimers.get(e);t&&(clearTimeout(t),this.batchTimers.delete(e))}clearAllBatches(){this.batchQueue.clear();for(const e of this.batchTimers.values())clearTimeout(e);this.batchTimers.clear(),this.batchConfigs.clear()}updateStats(e,t){let n=this.stats.get(e);n||(n=this.createEmptyStats(e),this.stats.set(e,n)),n.triggerCount++,n.totalExecutionTime+=t,n.averageExecutionTime=n.totalExecutionTime/n.triggerCount,n.lastTriggerTime=Date.now(),n.listenerCount=this.getListenerCount(e)}createEmptyStats(e){return{eventType:e,listenerCount:0,triggerCount:0,totalExecutionTime:0,averageExecutionTime:0,lastTriggerTime:0}}}sn._logger=$("EventSystem");class rn{constructor(e,t){this._entities=e,this._componentTypes=t}get entities(){return this._entities}get length(){return this._entities.length}forEach(e){this._entities.forEach(e)}map(e){return this._entities.map(e)}filter(e){return new rn(this._entities.filter(e),this._componentTypes)}find(e){return this._entities.find(e)}some(e){return this._entities.some(e)}every(e){return this._entities.every(e)}get(e){return this._entities[e]}get first(){return this._entities[0]}get last(){return this._entities[this._entities.length-1]}get isEmpty(){return 0===this._entities.length}toArray(){return[...this._entities]}getComponentTypes(){return this._componentTypes}[Symbol.iterator](){return this._entities[Symbol.iterator]()}}class on{constructor(e,t,n,s,i){this._all=e||[],this._any=t||[],this._none=n||[],void 0!==s&&(this._tag=s),void 0!==i&&(this._name=i)}withAll(...e){return new on([...this._all,...e],this._any,this._none,this._tag,this._name)}withAny(...e){return new on(this._all,[...this._any,...e],this._none,this._tag,this._name)}withNone(...e){return new on(this._all,this._any,[...this._none,...e],this._tag,this._name)}withTag(e){return new on(this._all,this._any,this._none,e,this._name)}withName(e){return new on(this._all,this._any,this._none,this._tag,e)}buildMatcher(){let e=et.complex();return this._all.length>0&&(e=e.all(...this._all)),this._any.length>0&&(e=e.any(...this._any)),this._none.length>0&&(e=e.none(...this._none)),void 0!==this._tag&&(e=e.withTag(this._tag)),void 0!==this._name&&(e=e.withName(this._name)),e}getCondition(){return{all:[...this._all],any:[...this._any],none:[...this._none],...void 0!==this._tag&&{tag:this._tag},...void 0!==this._name&&{name:this._name}}}getRequiredTypes(){return this._all}clone(){return new on([...this._all],[...this._any],[...this._none],this._tag,this._name)}}function an(){return new on}function cn(e){return new on([e])}function hn(...e){return new on(e)}class ln{static serialize(e){const t=Ke(e);if(!t)return null;const n=e.constructor,s=t.options.typeId||w(n),i={};for(const[n,s]of t.fields){const r="symbol"==typeof n?n.toString():n,o=e[n];if(t.ignoredFields.has(n))continue;let a;a=ce(e,r)?this.serializeEntityRef(o):s.serializer?s.serializer(o):this.serializeValue(o);i[s.alias||r]=a}return{type:s,version:t.options.version,data:i}}static deserialize(e,t,n){const s=t.get(e.type);if(!s)return console.warn(`未找到组件类型: ${e.type}`),null;const i=Ke(s);if(!i)return console.warn(`组件 ${e.type} 不可序列化`),null;const r=new s;for(const[t,s]of i.fields){const i="symbol"==typeof t?t.toString():t,o=s.alias||i,a=e.data[o];if(void 0===a)continue;if(this.isSerializedEntityRef(a)){if(n){const e=a.__entityRef;n.registerPendingRef(r,i,e.id,e.guid)}r[t]=null;continue}const c=s.deserializer?s.deserializer(a):this.deserializeValue(a);r[t]=c}return r}static serializeComponents(e){const t=[];for(const n of e){const e=this.serialize(n);e&&t.push(e)}return t}static deserializeComponents(e,t,n){const s=[];for(const i of e){const e=this.deserialize(i,t,n);e&&s.push(e)}return s}static serializeValue(e){if(null==e)return e;const t=typeof e;if("string"===t||"number"===t||"boolean"===t)return e;if(e instanceof Date)return{__type:"Date",value:e.toISOString()};if(Array.isArray(e))return e.map(e=>this.serializeValue(e));if(e instanceof Map)return{__type:"Map",value:Array.from(e.entries())};if(e instanceof Set)return{__type:"Set",value:Array.from(e)};if("object"===t&&"object"==typeof e&&!Array.isArray(e)){const t={},n=e;for(const e in n)Object.prototype.hasOwnProperty.call(n,e)&&(t[e]=this.serializeValue(n[e]));return t}}static deserializeValue(e){if(null==e)return e;const t=typeof e;if("string"===t||"number"===t||"boolean"===t)return e;if("object"===t&&"object"==typeof e&&"__type"in e){const t=e;switch(t.__type){case"Date":return{__type:"Date",value:"string"==typeof t.value?t.value:String(t.value)};case"Map":return{__type:"Map",value:t.value};case"Set":return{__type:"Set",value:t.value}}}if(Array.isArray(e))return e.map(e=>this.deserializeValue(e));if("object"===t&&"object"==typeof e&&!Array.isArray(e)){const t={},n=e;for(const e in n)Object.prototype.hasOwnProperty.call(n,e)&&(t[e]=this.deserializeValue(n[e]));return t}return e}static validateVersion(e,t){return e.version===t}static getSerializationInfo(e){const t=Ke(e);if(!t)return{type:"unknown",version:0,fields:[],ignoredFields:[],isSerializable:!1};const n="function"==typeof e?e:e.constructor;return{type:t.options.typeId||w(n),version:t.options.version,fields:Array.from(t.fields.keys()).map(e=>"symbol"==typeof e?e.toString():e),ignoredFields:Array.from(t.ignoredFields).map(e=>"symbol"==typeof e?e.toString():e),isSerializable:!0}}static serializeEntityRef(e){return e?{__entityRef:{id:e.id,guid:e.persistentId}}:null}static isSerializedEntityRef(e){return"object"==typeof e&&null!==e&&"__entityRef"in e}}class un{static serialize(e,t=!0,n){const s=ln.serializeComponents(Array.from(e.components)),i={id:e.id,guid:e.persistentId,name:e.name,tag:e.tag,active:e.active,enabled:e.enabled,updateOrder:e.updateOrder,components:s,children:[]},r=e.getComponent(Xe);if(null!=r?.parentId&&(i.parentId=r.parentId),t&&r&&r.childIds.length>0){const t=n?.scene??e.scene;if(t)for(const e of r.childIds){const s=t.findEntityById(e);s&&i.children.push(this.serialize(s,!0,n))}}return i}static deserialize(e,t,n,s=!1,i,r,o,a){const c=s?e.id:n(),h=new $t(e.name,c,e.guid);o?.set(h.id,h),a&&a.registerEntity(h,e.id,e.guid),i&&(h.scene=i),h.tag=e.tag,h.active=e.active,h.enabled=e.enabled,h.updateOrder=e.updateOrder;const l=ln.deserializeComponents(e.components,t,a);for(const e of l)h.addComponent(e);const u=h.getComponent(Xe);u&&(u.parentId=null,u.childIds=[]);for(const c of e.children){const e=this.deserialize(c,t,n,s,i,r,o,a);r?.setParent(e,h)}return h}static serializeEntities(e,t=!0,n){const s=[];for(const i of e){const e=i.getComponent(Xe);null!=e?.parentId&&t||s.push(this.serialize(i,t,n))}return s}static deserializeEntities(e,t,n,s=!1,i,r,o){const a=[],c=new Map;for(const h of e){const e=this.deserialize(h,t,n,s,i,r,c,o);a.push(e)}return{rootEntities:a,allEntities:c}}static clone(e,t,n){const s=this.serialize(e,!0);return this.deserialize(s,t,n,!1)}}class dn{static stringToUtf8(e){const t=e.length;let n=0;const s=[];for(let i=0;i<t;i++){let r=e.charCodeAt(i);if(r>=55296&&r<=56319&&i+1<t){const t=r,n=e.charCodeAt(i+1);n>=56320&&n<=57343&&(r=65536+(t-55296<<10)+(n-56320),i++)}r<128?s[n++]=r:r<2048?(s[n++]=192|r>>6,s[n++]=128|63&r):r<65536?(s[n++]=224|r>>12,s[n++]=128|r>>6&63,s[n++]=128|63&r):(s[n++]=240|r>>18,s[n++]=128|r>>12&63,s[n++]=128|r>>6&63,s[n++]=128|63&r)}return new Uint8Array(s)}static utf8ToString(e){const t=e.length;let n="",s=0;for(;s<t;){const t=e[s++];if(void 0===t)break;if(t<128)n+=String.fromCharCode(t);else if(192==(224&t)){const i=e[s++];if(void 0===i)break;n+=String.fromCharCode((31&t)<<6|63&i)}else if(224==(240&t)){const i=e[s++],r=e[s++];if(void 0===i||void 0===r)break;n+=String.fromCharCode((15&t)<<12|(63&i)<<6|63&r)}else if(240==(248&t)){const i=e[s++],r=e[s++],o=e[s++];if(void 0===i||void 0===r||void 0===o)break;let a=(7&t)<<18|(63&i)<<12|(63&r)<<6|63&o;a-=65536,n+=String.fromCharCode(55296+(a>>10),56320+(1023&a))}}return n}static encode(e){const t=JSON.stringify(e);return this.stringToUtf8(t)}static decode(e){const t=this.utf8ToString(e);return JSON.parse(t)}}class mn{constructor(){this._idRemapping=new Map,this._guidLookup=new Map,this._pendingRefs=[],this._preserveIds=!1}setPreserveIds(e){this._preserveIds=e}get preserveIds(){return this._preserveIds}registerEntity(e,t,n){const s=n??e.persistentId;this._guidLookup.set(s,e),void 0!==t&&this._idRemapping.set(t,e)}getEntityById(e){return this._idRemapping.get(e)??null}getEntityByGuid(e){return this._guidLookup.get(e)??null}resolveEntityRef(e){if(!e)return null;if(e.guid){const t=this._guidLookup.get(e.guid);if(t)return t}if(void 0!==e.id){const t=this._idRemapping.get(e.id);if(t)return t}return null}registerPendingRef(e,t,n,s){this._pendingRefs.push({component:e,propertyKey:t,originalId:n,originalGuid:s})}resolveAllReferences(){let e=0;for(const t of this._pendingRefs){const n=this.resolveEntityRef({id:t.originalId,guid:t.originalGuid});n&&(t.component[t.propertyKey]=n,e++)}return e}getUnresolvedCount(){let e=0;for(const t of this._pendingRefs){this.resolveEntityRef({id:t.originalId,guid:t.originalGuid})||e++}return e}getPendingCount(){return this._pendingRefs.length}getRegisteredEntityCount(){return this._guidLookup.size}clear(){this._idRemapping.clear(),this._guidLookup.clear(),this._pendingRefs=[]}getDebugInfo(){return{registeredEntities:this._guidLookup.size,pendingRefs:this._pendingRefs.length,unresolvedRefs:this.getUnresolvedCount(),preserveIds:this._preserveIds}}}class pn{static serialize(e,t){const n={systems:!1,format:"json",pretty:!0,includeMetadata:!0,...t},s=this.filterEntities(e,n),i=e.getSystem(ht),r=un.serializeEntities(s,!0,i??void 0),o=this.buildComponentTypeRegistry(s),a=this.serializeSceneData(e.sceneData),c={name:e.name,version:this.SERIALIZATION_VERSION,entities:r,componentTypeRegistry:o};return a&&Object.keys(a).length>0&&(c.sceneData=a),n.includeMetadata&&(c.timestamp=Date.now(),c.metadata={entityCount:r.length,componentTypeCount:o.length,serializationOptions:n}),"json"===n.format?n.pretty?JSON.stringify(c,null,2):JSON.stringify(c):dn.encode(c)}static deserialize(e,t,n){const s={strategy:"replace",preserveIds:!1,...n};let i;try{i="string"==typeof t?JSON.parse(t):dn.decode(t)}catch(e){throw new Error(`Failed to parse save data: ${e}`)}s.migration&&i.version!==this.SERIALIZATION_VERSION&&(i=s.migration(i.version,this.SERIALIZATION_VERSION,i));const r=s.componentRegistry||this.getGlobalComponentRegistry();"replace"===s.strategy&&e.destroyAllEntities();const o=e.getSystem(ht),a=new mn;a.setPreserveIds(s.preserveIds||!1);const{rootEntities:c,allEntities:h}=un.deserializeEntities(i.entities,r,()=>e.identifierPool.checkOut(),s.preserveIds||!1,e,o,a);for(const t of c)e.addEntity(t,!0),this.addChildrenRecursively(t,e,o,h);e.querySystem.clearCache(),e.clearSystemEntityCaches();const l=a.resolveAllReferences(),u=a.getUnresolvedCount();u>0&&console.warn(`[SceneSerializer] ${u} EntityRef(s) could not be resolved. Resolved: ${l}, Total pending: ${a.getPendingCount()}`),i.sceneData&&this.deserializeSceneData(i.sceneData,e.sceneData);const d=[];for(const e of h.values())this.callOnDeserializedForEntity(e,d);d.length>0&&Promise.all(d).catch(e=>{console.error("Error in onDeserialized:",e)})}static callOnDeserializedForEntity(e,t){for(const n of e.components)try{const e=n.onDeserialized();e instanceof Promise&&t.push(e)}catch(e){console.error(`Error calling onDeserialized on component ${n.constructor.name}:`,e)}}static addChildrenRecursively(e,t,n,s){const i=e.getComponent(Xe);if(i&&0!==i.childIds.length)for(const e of i.childIds){const i=s?.get(e)??t.findEntityById(e);i&&(t.addEntity(i,!0),this.addChildrenRecursively(i,t,n,s))}}static serializeSceneData(e){const t={};for(const[n,s]of e)t[n]=this.serializeValue(s);return t}static deserializeSceneData(e,t){t.clear();for(const[n,s]of Object.entries(e))t.set(n,this.deserializeValue(s))}static serializeValue(e){if(null==e)return e;const t=typeof e;if("string"===t||"number"===t||"boolean"===t)return e;if(e instanceof Date)return{__type:"Date",value:e.toISOString()};if(e instanceof Map)return{__type:"Map",value:Array.from(e.entries())};if(e instanceof Set)return{__type:"Set",value:Array.from(e)};if(Array.isArray(e))return e.map(e=>this.serializeValue(e));if("object"===t){const t={};for(const n in e)e.hasOwnProperty(n)&&(t[n]=this.serializeValue(e[n]));return t}}static deserializeValue(e){if(null==e)return e;const t=typeof e;if("string"===t||"number"===t||"boolean"===t)return e;if("object"===t&&e.__type)switch(e.__type){case"Date":return new Date(e.value);case"Map":return new Map(e.value);case"Set":return new Set(e.value)}if(Array.isArray(e))return e.map(e=>this.deserializeValue(e));if("object"===t){const t={};for(const n in e)e.hasOwnProperty(n)&&(t[n]=this.deserializeValue(e[n]));return t}return e}static filterEntities(e,t){const n=Array.from(e.entities.buffer);if(t.components&&t.components.length>0){const e=new Set(t.components);return n.filter(t=>Array.from(t.components).some(t=>e.has(t.constructor)))}return n}static buildComponentTypeRegistry(e){const t=new Map;for(const n of e)for(const e of n.components){const n=w(e.constructor),s=Ke(e);s&&!t.has(n)&&t.set(n,s.options.version)}return Array.from(t.entries()).map(([e,t])=>({typeName:e,version:t}))}static getGlobalComponentRegistry(){return G.getAllComponentNames()}static validate(e){const t=[];try{const n=JSON.parse(e);return n.version||t.push("Missing version field"),n.entities&&Array.isArray(n.entities)||t.push("Missing or invalid entities field"),n.componentTypeRegistry&&Array.isArray(n.componentTypeRegistry)||t.push("Missing or invalid componentTypeRegistry field"),{valid:0===t.length,version:n.version,...t.length>0&&{errors:t}}}catch(e){return{valid:!1,errors:[`JSON parse error: ${e}`]}}}static getInfo(e){try{const t=JSON.parse(e);return{name:t.name,version:t.version,...void 0!==t.timestamp&&{timestamp:t.timestamp},entityCount:t.metadata?.entityCount||t.entities.length,componentTypeCount:t.componentTypeRegistry.length}}catch(e){return null}}}pn.SERIALIZATION_VERSION=1,function(e){e.EntityAdded="entity_added",e.EntityRemoved="entity_removed",e.EntityUpdated="entity_updated",e.ComponentAdded="component_added",e.ComponentRemoved="component_removed",e.ComponentUpdated="component_updated",e.SceneDataUpdated="scene_data_updated"}(Zt||(Zt={}));class fn{static createSnapshot(e,t){const n={deepComponentComparison:!0,trackSceneData:!0,...t},s={version:++this.snapshotVersion,entityIds:new Set,entities:new Map,components:new Map,sceneData:new Map};for(const t of e.entities.buffer){s.entityIds.add(t.id);const e=t.getComponent(Xe),i=e?.parentId;if(s.entities.set(t.id,{name:t.name,tag:t.tag,active:t.active,enabled:t.enabled,updateOrder:t.updateOrder,...null!=i&&{parentId:i}}),n.deepComponentComparison){const e=new Map;for(const n of t.components){const t=ln.serialize(n);t&&e.set(t.type,JSON.stringify(t.data))}e.size>0&&s.components.set(t.id,e)}}if(n.trackSceneData)for(const[t,n]of e.sceneData)s.sceneData.set(t,JSON.stringify(n));return s}static computeIncremental(e,t,n){const s={deepComponentComparison:!0,trackSceneData:!0,...n},i={version:++this.snapshotVersion,timestamp:Date.now(),sceneName:e.name,baseVersion:t.version,entityChanges:[],componentChanges:[],sceneDataChanges:[]},r=new Set;for(const n of e.entities.buffer){r.add(n.id);const e=n.getComponent(Xe),o=e?.parentId;if(t.entityIds.has(n.id)){const e=t.entities.get(n.id);(e.name!==n.name||e.tag!==n.tag||e.active!==n.active||e.enabled!==n.enabled||e.updateOrder!==n.updateOrder||e.parentId!==o)&&i.entityChanges.push({operation:Zt.EntityUpdated,entityId:n.id,entityData:{name:n.name,tag:n.tag,active:n.active,enabled:n.enabled,updateOrder:n.updateOrder,...null!=o&&{parentId:o}}}),s.deepComponentComparison&&this.detectComponentChanges(n,t,i.componentChanges)}else{i.entityChanges.push({operation:Zt.EntityAdded,entityId:n.id,entityName:n.name,entityData:{id:n.id,name:n.name,tag:n.tag,active:n.active,enabled:n.enabled,updateOrder:n.updateOrder,...null!=o&&{parentId:o},components:[],children:[]}});for(const e of n.components){const t=ln.serialize(e);t&&i.componentChanges.push({operation:Zt.ComponentAdded,entityId:n.id,componentType:t.type,componentData:t})}}}for(const e of t.entityIds)r.has(e)||i.entityChanges.push({operation:Zt.EntityRemoved,entityId:e});return s.trackSceneData&&this.detectSceneDataChanges(e,t,i.sceneDataChanges),i}static detectComponentChanges(e,t,n){const s=t.components.get(e.id),i=new Map;for(const t of e.components){const e=ln.serialize(t);e&&i.set(e.type,e)}for(const[t,r]of i){const i=JSON.stringify(r.data);s&&s.has(t)?s.get(t)!==i&&n.push({operation:Zt.ComponentUpdated,entityId:e.id,componentType:t,componentData:r}):n.push({operation:Zt.ComponentAdded,entityId:e.id,componentType:t,componentData:r})}if(s)for(const t of s.keys())i.has(t)||n.push({operation:Zt.ComponentRemoved,entityId:e.id,componentType:t})}static detectSceneDataChanges(e,t,n){const s=new Set;for(const[i,r]of e.sceneData){s.add(i);const e=JSON.stringify(r),o=t.sceneData.get(i);o&&o===e||n.push({operation:Zt.SceneDataUpdated,key:i,value:r})}for(const e of t.sceneData.keys())s.has(e)||n.push({operation:Zt.SceneDataUpdated,key:e,value:void 0,deleted:!0})}static applyIncremental(e,t,n){for(const n of t.entityChanges)switch(n.operation){case Zt.EntityAdded:this.applyEntityAdded(e,n);break;case Zt.EntityRemoved:this.applyEntityRemoved(e,n);break;case Zt.EntityUpdated:this.applyEntityUpdated(e,n)}for(const s of t.componentChanges)switch(s.operation){case Zt.ComponentAdded:this.applyComponentAdded(e,s,n);break;case Zt.ComponentRemoved:this.applyComponentRemoved(e,s,n);break;case Zt.ComponentUpdated:this.applyComponentUpdated(e,s,n)}for(const n of t.sceneDataChanges)n.deleted?e.sceneData.delete(n.key):e.sceneData.set(n.key,n.value)}static applyEntityAdded(e,t){if(!t.entityData)return;const n=new $t(t.entityName||"Entity",t.entityId);n.tag=t.entityData.tag||0,n.active=t.entityData.active??!0,n.enabled=t.entityData.enabled??!0,n.updateOrder=t.entityData.updateOrder||0,e.addEntity(n)}static applyEntityRemoved(e,t){const n=e.entities.findEntityById(t.entityId);n&&n.destroy()}static applyEntityUpdated(e,t){if(!t.entityData)return;const n=e.entities.findEntityById(t.entityId);if(!n)return;void 0!==t.entityData.name&&(n.name=t.entityData.name),void 0!==t.entityData.tag&&(n.tag=t.entityData.tag),void 0!==t.entityData.active&&(n.active=t.entityData.active),void 0!==t.entityData.enabled&&(n.enabled=t.entityData.enabled),void 0!==t.entityData.updateOrder&&(n.updateOrder=t.entityData.updateOrder);const s=e.getSystem(ht);if(s){const i=n.getComponent(Xe),r=i?.parentId;if(void 0!==t.entityData.parentId){const i=e.entities.findEntityById(t.entityData.parentId);i&&r!==t.entityData.parentId&&s.setParent(n,i)}else null!=r&&s.setParent(n,null)}}static applyComponentAdded(e,t,n){if(!t.componentData)return;const s=e.entities.findEntityById(t.entityId);if(!s)return;const i=ln.deserialize(t.componentData,n);i&&s.addComponent(i)}static applyComponentRemoved(e,t,n){const s=e.entities.findEntityById(t.entityId);if(!s)return;const i=n.get(t.componentType);i&&s.removeComponentByType(i)}static applyComponentUpdated(e,t,n){if(!t.componentData)return;const s=e.entities.findEntityById(t.entityId);if(!s)return;const i=n.get(t.componentType);if(!i)return;s.removeComponentByType(i);const r=ln.deserialize(t.componentData,n);r&&s.addComponent(r)}static serializeIncremental(e,t){const n={format:"json",pretty:!1,...t};return"binary"===n.format?dn.encode(e):n.pretty?JSON.stringify(e,null,2):JSON.stringify(e)}static deserializeIncremental(e){return"string"==typeof e?JSON.parse(e):dn.decode(e)}static getIncrementalStats(e){return{totalChanges:e.entityChanges.length+e.componentChanges.length+e.sceneDataChanges.length,entityChanges:e.entityChanges.length,componentChanges:e.componentChanges.length,sceneDataChanges:e.sceneDataChanges.length,addedEntities:e.entityChanges.filter(e=>e.operation===Zt.EntityAdded).length,removedEntities:e.entityChanges.filter(e=>e.operation===Zt.EntityRemoved).length,updatedEntities:e.entityChanges.filter(e=>e.operation===Zt.EntityUpdated).length,addedComponents:e.componentChanges.filter(e=>e.operation===Zt.ComponentAdded).length,removedComponents:e.componentChanges.filter(e=>e.operation===Zt.ComponentRemoved).length,updatedComponents:e.componentChanges.filter(e=>e.operation===Zt.ComponentUpdated).length}}static resetVersion(){this.snapshotVersion=0}}fn.snapshotVersion=0;const gn={enabled:!0,sampleInterval:10,minDuration:.1,trackAsync:!0,excludePatterns:[/^_/,/^get[A-Z]/,/^set[A-Z]/,/^is[A-Z]/,/^has[A-Z]/],maxBufferSize:1e4};class yn{constructor(e){this.wrappedObjects=new WeakMap,this.samplingProfiler=null,this.registeredClasses=new Map,this.config={...gn,...e}}static getInstance(e){return yn.instance||(yn.instance=new yn(e)),yn.instance}static resetInstance(){yn.instance&&(yn.instance.dispose(),yn.instance=null)}static setEnabled(e){yn.getInstance().setEnabled(e)}static registerClass(e,t=ot.Custom,n){return yn.getInstance().registerClass(e,t,n)}static wrapInstance(e,t,n=ot.Custom){return yn.getInstance().wrapInstance(e,t,n)}static wrapFunction(e,t,n=ot.Custom){return yn.getInstance().wrapFunction(e,t,n)}static startSampling(){yn.getInstance().startSampling()}static stopSampling(){return yn.getInstance().stopSampling()}setEnabled(e){this.config.enabled=e,!e&&this.samplingProfiler&&this.samplingProfiler.stop()}registerClass(e,t=ot.Custom,n){const s=n||e.name;this.registeredClasses.set(s,{constructor:e,category:t});const i=this;return new Proxy(e,{construct(e,n,r){const o=Reflect.construct(e,n,r);return i.config.enabled&&i.wrapInstance(o,s,t),o}})}wrapInstance(e,t,n=ot.Custom){if(!this.config.enabled)return e;if(this.wrappedObjects.has(e))return e;const s=new Map;this.wrappedObjects.set(e,s);const i=this.getAllMethodNames(e);for(const r of i){if(this.shouldExcludeMethod(r))continue;const i=this.getPropertyDescriptor(e,r);if(!i||"function"!=typeof i.value)continue;const o=i.value,a=this.createWrappedMethod(o,t,r,n);s.set(r,{className:t,methodName:r,category:n,original:o});try{e[r]=a}catch{}}return e}wrapFunction(e,t,n=ot.Custom){if(!this.config.enabled)return e;const s=this,i=function(...i){const r=vt.beginSample(t,n);try{const t=e.apply(this,i);return s.config.trackAsync&&t instanceof Promise?t.finally(()=>{vt.endSample(r)}):(vt.endSample(r),t)}catch(e){throw vt.endSample(r),e}};return Object.defineProperty(i,"name",{value:e.name||t}),Object.defineProperty(i,"length",{value:e.length}),i}startSampling(){this.samplingProfiler||(this.samplingProfiler=new _n(this.config)),this.samplingProfiler.start()}stopSampling(){return this.samplingProfiler?this.samplingProfiler.stop():[]}dispose(){this.samplingProfiler&&(this.samplingProfiler.stop(),this.samplingProfiler=null),this.registeredClasses.clear()}createWrappedMethod(e,t,n,s){const i=this,r=`${t}.${n}`,o=this.config.minDuration;return function(...t){if(!i.config.enabled||!vt.isEnabled())return e.apply(this,t);const n=performance.now(),a=vt.beginSample(r,s);try{const s=e.apply(this,t);if(i.config.trackAsync&&s instanceof Promise)return s.then(e=>(performance.now()-n>=o&&vt.endSample(a),e),e=>{throw vt.endSample(a),e});return performance.now()-n>=o&&vt.endSample(a),s}catch(e){throw vt.endSample(a),e}}}getAllMethodNames(e){const t=new Set;let n=e;for(;n&&n!==Object.prototype;){for(const e of Object.getOwnPropertyNames(n))"constructor"!==e&&t.add(e);n=Object.getPrototypeOf(n)}return Array.from(t)}getPropertyDescriptor(e,t){let n=e;for(;n&&n!==Object.prototype;){const e=Object.getOwnPropertyDescriptor(n,t);if(e)return e;n=Object.getPrototypeOf(n)}}shouldExcludeMethod(e){if("constructor"===e||e.startsWith("__"))return!0;for(const t of this.config.excludePatterns)if(t.test(e))return!0;return!1}}yn.instance=null;class _n{constructor(e){this.samples=[],this.intervalId=null,this.isRunning=!1,this.config=e}start(){if(this.isRunning)return;this.isRunning=!0,this.samples=[];const e=()=>{if(!this.isRunning)return;const t=this.captureStack();t.length>0&&(this.samples.push({timestamp:performance.now(),stack:t}),this.samples.length>this.config.maxBufferSize&&this.samples.shift()),this.config.sampleInterval,this.intervalId=setTimeout(e,this.config.sampleInterval)};e()}stop(){return this.isRunning=!1,null!==this.intervalId&&(clearTimeout(this.intervalId),this.intervalId=null),[...this.samples]}captureStack(){try{const e=new Error,t=(e.stack||"").split("\n").slice(3),n=[];for(const e of t){const t=this.parseStackFrame(e);t&&!this.isInternalFrame(t)&&n.push(t)}return n}catch{return[]}}parseStackFrame(e){let t=(e=e.trim()).match(/at\s+(.+?)\s+\(/);if(t&&t[1])return t[1];if(t=e.match(/at\s+(.+)/),t&&t[1]){const e=t[1];if(!e.includes("("))return e}return t=e.match(/^(.+?)@/),t&&t[1]?t[1]:null}isInternalFrame(e){return["SamplingProfiler","AutoProfiler","ProfilerSDK","setTimeout","setInterval","requestAnimationFrame","<anonymous>","eval"].some(t=>e.includes(t))}}function Sn(e,t=ot.Custom){return function(n,s,i){const r=i.value,o=e||`${n.constructor.name}.${String(s)}`;return i.value=function(...e){if(!vt.isEnabled())return r.apply(this,e);const n=vt.beginSample(o,t);try{const t=r.apply(this,e);return t instanceof Promise?t.finally(()=>{vt.endSample(n)}):(vt.endSample(n),t)}catch(e){throw vt.endSample(n),e}},i}}function vn(e=ot.Custom){return function(t){return yn.registerClass(t,e)}}const Cn=$("ServiceContainer");var bn;!function(e){e.Singleton="singleton",e.Transient="transient"}(bn||(bn={}));class En{constructor(){this._services=new Map,this._resolving=new Set,this._updatableServices=[]}registerSingleton(e,t){this._services.has(e)?Cn.warn(`Service ${e.name} is already registered`):(this._services.set(e,{identifier:e,type:e,...t&&{factory:t},lifetime:bn.Singleton}),Cn.debug(`Registered singleton service: ${e.name}`))}registerTransient(e,t){this._services.has(e)?Cn.warn(`Service ${e.name} is already registered`):(this._services.set(e,{identifier:e,type:e,...t&&{factory:t},lifetime:bn.Transient}),Cn.debug(`Registered transient service: ${e.name}`))}registerInstance(e,t){if(this._services.has(e)){const t="symbol"==typeof e?e.description:e.name;return void Cn.warn(`Service ${t} is already registered`)}if(this._services.set(e,{identifier:e,instance:t,lifetime:bn.Singleton}),"symbol"!=typeof e&&m(e)){const n=p(e),s=n?.priority??0;this._updatableServices.push({instance:t,priority:s}),this._updatableServices.sort((e,t)=>e.priority-t.priority),Cn.debug(`Service ${e.name} is updatable (priority: ${s}), added to update list`)}const n="symbol"==typeof e?e.description:e.name;Cn.debug(`Registered service instance: ${n}`)}resolve(e){const t=this._services.get(e),n="symbol"==typeof e?e.description:e.name;if(!t)throw new Error(`Service ${n} is not registered`);if(this._resolving.has(e)){const e=Array.from(this._resolving).map(e=>"symbol"==typeof e?e.description:e.name).join(" -> ");throw new Error(`Circular dependency detected: ${e} -> ${n}`)}if(t.lifetime===bn.Singleton&&t.instance)return t.instance;this._resolving.add(e);try{let e;if(t.factory)e=t.factory(this);else{if(!t.type)throw new Error(`Service ${n} has no factory or type to construct`);e=new t.type}if(t.lifetime===bn.Singleton&&(t.instance=e,t.type&&m(t.type))){const s=p(t.type),i=s?.priority??0;this._updatableServices.push({instance:e,priority:i}),this._updatableServices.sort((e,t)=>e.priority-t.priority),Cn.debug(`Service ${n} is updatable (priority: ${i}), added to update list`)}return e}finally{this._resolving.delete(e)}}tryResolve(e){try{return this.resolve(e)}catch{return null}}isRegistered(e){return this._services.has(e)}unregister(e){const t=this._services.get(e);if(!t)return!1;if(t.instance){const e=this._updatableServices.findIndex(e=>e.instance===t.instance);-1!==e&&this._updatableServices.splice(e,1),t.instance.dispose()}this._services.delete(e);const n="symbol"==typeof e?e.description:e.name;return Cn.debug(`Unregistered service: ${n}`),!0}clear(){for(const[,e]of this._services)e.instance&&e.instance.dispose();this._services.clear(),this._updatableServices=[],Cn.debug("Cleared all services")}getRegisteredServices(){return Array.from(this._services.keys())}updateAll(e){for(const{instance:t}of this._updatableServices)t.update(e)}getUpdatableCount(){return this._updatableServices.length}getAll(){const e=[];for(const t of this._services.values())t.instance&&e.push(t.instance);return e}}class Tn extends Error{constructor(e){super(`[SystemDependencyGraph] 检测到循环依赖 | Cycle dependency detected: ${e.join(" -> ")}`),this.name="CycleDependencyError",this.involvedNodes=e,Object.setPrototypeOf(this,new.target.prototype)}}const wn="set:";class Mn{constructor(){this._nodes=new Map}addSystemNode(e){this.getOrCreateNode(e,!1)}addSetNode(e){const t=wn+e;this.getOrCreateNode(t,!0)}addEdge(e,t){if(e===t)return;const n=this.getOrCreateNode(e,e.startsWith(wn)),s=this.getOrCreateNode(t,t.startsWith(wn));n.outEdges.add(t),s.inEdges.add(e)}buildFromSystems(e){this.clear();for(const t of e){this.addSystemNode(t.name);for(const e of t.sets)this.addSetNode(e)}for(const t of e){for(const e of t.sets){const n=wn+e;this.addEdge(n,t.name)}for(const e of t.before){const n=this.resolveTargetId(e);this.addEdge(t.name,n)}for(const e of t.after){const n=this.resolveTargetId(e);this.addEdge(n,t.name)}}}topologicalSort(){const e=new Map;for(const[t,n]of this._nodes)e.set(t,n.inEdges.size);const t=[];for(const[n,s]of e)0===s&&t.push(n);const n=[];let s=0;for(;t.length>0;){const i=t.shift();s++;const r=this._nodes.get(i);if(r){r.bIsVirtual||n.push(i);for(const n of r.outEdges){const s=(e.get(n)??0)-1;e.set(n,s),0===s&&t.push(n)}}}if(s<this._nodes.size){const t=[];for(const[n,s]of e)s>0&&t.push(n);throw new Tn(t)}return n}clear(){this._nodes.clear()}get size(){return this._nodes.size}getOrCreateNode(e,t){let n=this._nodes.get(e);return n||(n={id:e,bIsVirtual:t,inEdges:new Set,outEdges:new Set},this._nodes.set(e,n)),n}resolveTargetId(e){return e.startsWith(wn),e}}const In=["startup","preUpdate","update","postUpdate","cleanup"];class An{constructor(){this._sortedByStage=new Map,this._dirty=!0,this._graph=new Mn,this._useDependencySort=!0}setUseDependencySort(e){this._useDependencySort!==e&&(this._useDependencySort=e,this._dirty=!0)}markDirty(){this._dirty=!0}getSortedSystems(e,t){if(this.ensureBuilt(e),t)return this._sortedByStage.get(t)??[];const n=[];for(const e of In){const t=this._sortedByStage.get(e);t&&n.push(...t)}return n}getAllSortedSystems(e){return this.getSortedSystems(e)}ensureBuilt(e){this._dirty&&(this._sortedByStage.clear(),this._useDependencySort&&this.hasDependencies(e)?this.buildWithDependencyGraph(e):this.buildWithUpdateOrder(e),this._dirty=!1)}hasDependencies(e){for(const t of e){const e=this.getSchedulingMetadata(t);if(e.before.length>0||e.after.length>0||e.sets.length>0)return!0;if("update"!==e.stage)return!0}return!1}buildWithUpdateOrder(e){const t=[...e].sort((e,t)=>{const n=e.updateOrder-t.updateOrder;return 0!==n?n:e.addOrder-t.addOrder});this._sortedByStage.set("update",t)}buildWithDependencyGraph(e){const t=new Map;for(const e of In)t.set(e,[]);for(const n of e){const e=this.getSchedulingMetadata(n).stage,s=t.get(e);s?s.push(n):t.get("update").push(n)}for(const[e,n]of t){if(0===n.length){this._sortedByStage.set(e,[]);continue}const t=this.sortSystemsInStage(n);this._sortedByStage.set(e,t)}}sortSystemsInStage(e){const t=new Map,n=[];for(const s of e){const e=s.systemName;t.set(e,s);const i=this.getSchedulingMetadata(s);n.push({name:e,before:i.before,after:i.after,sets:i.sets})}this._graph.buildFromSystems(n);try{const e=this._graph.topologicalSort(),n=[];for(const s of e){const e=t.get(s);e&&n.push(e)}return this.stableSortByUpdateOrder(n)}catch(t){if(t instanceof Tn)throw t;return console.warn("[SystemScheduler] 拓扑排序失败,回退到 updateOrder 排序",t),this.fallbackSort(e)}}stableSortByUpdateOrder(e){return e}fallbackSort(e){return[...e].sort((e,t)=>{const n=e.updateOrder-t.updateOrder;return 0!==n?n:e.addOrder-t.addOrder})}getSchedulingMetadata(e){return{stage:e.getStage(),before:[...e.getBefore()],after:[...e.getAfter()],sets:[...e.getSets()]}}}class kn{constructor(e=1024){this._freeList=[],this._nextIndex=1,this._aliveCount=0,this._capacity=e,this._generations=new Uint32Array(e),this._alive=new Uint8Array(e),this._enabled=new Uint8Array(e),this._alive[0]=0,this._enabled[0]=0}get aliveCount(){return this._aliveCount}get capacity(){return this._capacity}create(){let e;this._freeList.length>0?e=this._freeList.pop():(e=this._nextIndex++,e>=this._capacity&&this.grow(e));const t=this._generations[e];return this._alive[e]=1,this._enabled[e]=1,this._aliveCount++,Ot(e,t)}destroy(e){const t=Pt(e),n=Rt(e);if(t>=this._capacity||0===t)return!1;if(this._generations[t]!==n)return!1;if(1!==this._alive[t])return!1;this._alive[t]=0,this._enabled[t]=0,this._aliveCount--;const s=(n+1)%Dt;return this._generations[t]=s,this._freeList.push(t),!0}isAlive(e){const t=Pt(e),n=Rt(e);return!(t>=this._capacity||0===t)&&(1===this._alive[t]&&this._generations[t]===n)}isEnabled(e){if(!this.isAlive(e))return!1;const t=Pt(e);return 1===this._enabled[t]}setEnabled(e,t){if(!this.isAlive(e))return!1;const n=Pt(e);return this._enabled[n]=t?1:0,!0}validate(e){return this.isAlive(e)}grow(e){let t=this._capacity;for(;t<=e;)t<<=1;if(t>kt&&(t=kt,e>=t))throw new Error("EntityHandleManager: 超过最大实体数量 268435456");const n=new Uint32Array(t),s=new Uint8Array(t),i=new Uint8Array(t);n.set(this._generations),s.set(this._alive),i.set(this._enabled),this._generations=n,this._alive=s,this._enabled=i,this._capacity=t}reset(){this._generations.fill(0),this._alive.fill(0),this._enabled.fill(0),this._freeList.length=0,this._nextIndex=1,this._aliveCount=0}forEach(e){for(let t=1;t<this._nextIndex;t++)if(1===this._alive[t]){e(Ot(t,this._generations[t]))}}getAllAlive(){const e=[];return this.forEach(t=>e.push(t)),e}}class Dn{constructor(){this._current=1}get current(){return this._current}increment(){this._current++,this._current>=Number.MAX_SAFE_INTEGER&&(this._current=1)}reset(){this._current=1}isChangedSince(e,t){return e>t}}class xn{get systems(){return!this._systemsOrderDirty&&this._cachedSystems||(this._cachedSystems=this._rebuildSystemsCache(),this._systemsOrderDirty=!1),this._cachedSystems}_rebuildSystemsCache(){const e=this._services.getAll(),t=this._filterEntitySystems(e);try{return this._systemScheduler.markDirty(),this._systemScheduler.getAllSortedSystems(t)}catch(e){return e instanceof Tn?this.logger.error("[Scene] 系统存在循环依赖,回退到 updateOrder 排序 | Cycle dependency detected, falling back to updateOrder sort",e.involvedNodes):this.logger.error("[Scene] 系统排序失败 | System sorting failed",e),this._sortSystemsByUpdateOrder(t)}}_filterEntitySystems(e){return e.filter(e=>e instanceof ct)}_sortSystemsByUpdateOrder(e){return e.sort((e,t)=>{const n=e.updateOrder-t.updateOrder;return 0!==n?n:e.addOrder-t.addOrder})}getSystem(e){return this._services.tryResolve(e)}markSystemsOrderDirty(){this._systemsOrderDirty=!0}get services(){return this._services}constructor(e){this.name="",this.sceneData=new Map,this._handleToEntity=new Map,this.epochManager=new Dn,this._performanceMonitor=null,this._didSceneBegin=!1,this.isEditorMode=!1,this._deferredComponentCallbacks=[],this._cachedSystems=null,this._systemsOrderDirty=!0,this._systemErrorCount=new Map,this._maxErrorCount=10,this._systemAddCounter=0,this._systemScheduler=new An,this._componentIdToSystems=new Map,this._globalNotifySystems=new Set,this.entities=new Lt(this),this.identifierPool=new Wt,this.componentStorageManager=new st,this.querySystem=new tn,this.eventSystem=new sn,this.referenceTracker=new ee,this.handleManager=new kn,this._services=new En,this.logger=$("Scene"),e?.name&&(this.name=e.name)}get performanceMonitor(){return this._performanceMonitor||(this._performanceMonitor=this._services.tryResolve(_)??new _),this._performanceMonitor}initialize(){}onStart(){}unload(){}queueDeferredComponentCallback(e){this._deferredComponentCallbacks.push(e)}begin(){if(this._didSceneBegin=!0,this._deferredComponentCallbacks.length>0){for(const e of this._deferredComponentCallbacks)try{e()}catch(e){this.logger.error("Error executing deferred component callback:",e)}this._deferredComponentCallbacks=[]}this.onStart()}end(){this._didSceneBegin=!1,this.unload(),this.entities.removeAllEntities(),this.querySystem.setEntities([]),this.componentStorageManager.clear(),this._services.clear(),this._cachedSystems=null,this._systemsOrderDirty=!0,this._componentIdToSystems.clear(),this._globalNotifySystems.clear(),this._handleToEntity.clear(),this.handleManager.reset(),this.epochManager.reset()}update(){this.epochManager.increment(),vt.beginFrame();const e=vt.beginSample("Scene.update",ot.ECS);try{pt.getInstance().update(),this.entities.updateLists();const e=this.systems,t=vt.beginSample("Systems.update",ot.ECS);try{for(const t of e)if(t.enabled){const e=vt.beginSample(t.systemName,ot.ECS);try{t.update()}catch(e){this._handleSystemError(t,"update",e)}finally{vt.endSample(e)}}}finally{vt.endSample(t)}const n=vt.beginSample("Systems.lateUpdate",ot.ECS);try{for(const t of e)if(t.enabled){const e=vt.beginSample(`${t.systemName}.late`,ot.ECS);try{t.lateUpdate()}catch(e){this._handleSystemError(t,"lateUpdate",e)}finally{vt.endSample(e)}}}finally{vt.endSample(n)}this.flushCommandBuffers(e)}finally{vt.endSample(e),vt.endFrame()}}flushCommandBuffers(e){const t=vt.beginSample("Scene.flushCommandBuffers",ot.ECS);try{for(const t of e)try{t.flushCommands()}catch(e){this.logger.error(`Error flushing commands for system ${t.systemName}:`,e)}}finally{vt.endSample(t)}}_handleSystemError(e,t,n){const s=(this._systemErrorCount.get(e)||0)+1;this._systemErrorCount.set(e,s),this.logger.error(`Error in system ${e.constructor.name}.${t}() [${s}/${this._maxErrorCount}]:`,n),s>=this._maxErrorCount&&(e.enabled=!1,this.logger.error(`System ${e.constructor.name} has been disabled due to excessive errors (${s} errors)`))}createEntity(e){const t=new $t(e,this.identifierPool.checkOut()),n=this.handleManager.create();return t.setHandle(n),this._handleToEntity.set(n,t),this.eventSystem.emitSync("entity:created",{entityName:e,entity:t,scene:this}),this.addEntity(t)}clearSystemEntityCaches(){for(const e of this.systems)e.clearEntityCache()}notifyEntityComponentChanged(e,t){const n=new Set;if(t&&G.isRegistered(t)){const s=G.getBitIndex(t),i=this._componentIdToSystems.get(s);if(i)for(const t of i)t.handleEntityComponentChanged(e),n.add(t)}for(const t of this._globalNotifySystems)n.has(t)||(t.handleEntityComponentChanged(e),n.add(t));if(!t)for(const t of this.systems)n.has(t)||t.handleEntityComponentChanged(e)}indexSystemByComponents(e){const t=e.matcher;if(!t)return;if(t.isNothing())return;const n=t.getCondition();if((n.none.length>0||void 0!==n.tag||void 0!==n.name)&&this._globalNotifySystems.add(e),t.isEmpty())this._globalNotifySystems.add(e);else{for(const t of n.all)this.addSystemToComponentIndex(t,e);for(const t of n.any)this.addSystemToComponentIndex(t,e);n.component&&this.addSystemToComponentIndex(n.component,e)}}addSystemToComponentIndex(e,t){const n=G.getBitIndex(e);let s=this._componentIdToSystems.get(n);s||(s=new Set,this._componentIdToSystems.set(n,s)),s.add(t)}removeSystemFromIndex(e){this._globalNotifySystems.delete(e);for(const t of this._componentIdToSystems.values())t.delete(e)}addEntity(e,t=!1){return this.entities.add(e),e.scene=this,this.querySystem.addEntity(e,t),t||this.clearSystemEntityCaches(),this.eventSystem.emitSync("entity:added",{entity:e,scene:this}),e}createEntities(e,t="Entity"){const n=[];for(let s=0;s<e;s++){const e=new $t(`${t}_${s}`,this.identifierPool.checkOut());e.scene=this;const i=this.handleManager.create();e.setHandle(i),this._handleToEntity.set(i,e),n.push(e)}for(const e of n)this.entities.add(e);return this.querySystem.addEntitiesUnchecked(n),this.eventSystem.emitSync("entities:batch_added",{entities:n,scene:this,count:e}),n}destroyEntities(e){if(0!==e.length){for(const t of e)t.setDestroyedState(!0);for(const t of e)t.removeAllComponents();for(const t of e)this.entities.remove(t),this.querySystem.removeEntity(t),zt(t.handle)&&(this._handleToEntity.delete(t.handle),this.handleManager.destroy(t.handle));this.querySystem.clearCache(),this.clearSystemEntityCaches()}}destroyAllEntities(){this.entities.removeAllEntities(),this.querySystem.setEntities([])}findEntity(e){return this.entities.findEntity(e)}findEntityById(e){return this.entities.findEntityById(e)}findEntityByHandle(e){return zt(e)&&this.handleManager.isAlive(e)?this._handleToEntity.get(e)??null:null}findEntitiesByTag(e){const t=[];for(const n of this.entities.buffer)n.tag===e&&t.push(n);return t}findPersistentEntities(){return this.entities.buffer.filter(e=>e.isPersistent)}extractPersistentEntities(){const e=this.findPersistentEntities();for(const t of e)this.entities.remove(t),this.querySystem.removeEntity(t),t.scene=null;return e}receiveMigratedEntities(e){for(const t of e){t.scene=this,this.entities.add(t),this.querySystem.addEntity(t);for(const e of t.components)this.componentStorageManager.addComponent(t.id,e),this.referenceTracker?.registerEntityScene(t.id,this)}e.length>0&&this.clearSystemEntityCaches()}getEntityByName(e){return this.findEntity(e)}getEntitiesByTag(e){return this.findEntitiesByTag(e)}queryAll(...e){return this.querySystem.queryAll(...e)}queryAny(...e){return this.querySystem.queryAny(...e)}queryNone(...e){return this.querySystem.queryNone(...e)}query(){return new on}addEntityProcessor(e){let t,n;if("function"==typeof e){if(n=e,this._services.isRegistered(n)){const e=this._services.resolve(n);return this.logger.debug(`System ${n.name} already registered, returning existing instance`),e}t=h(n)?u(n,this._services):new n}else if(t=e,n=t.constructor,this._services.isRegistered(n)){const e=this._services.resolve(n);return e===t?(this.logger.debug(`System ${n.name} instance already registered, returning it`),t):(this.logger.warn(`Attempting to register a different instance of ${n.name}, but type is already registered. Returning existing instance.`),e)}t.scene=this,t.addOrder=this._systemAddCounter++,t.setPerformanceMonitor(this.performanceMonitor);const s=V(n);return void 0!==s?.updateOrder&&t.setUpdateOrder(s.updateOrder),void 0!==s?.enabled&&(t.enabled=s.enabled),this._services.registerInstance(n,t),this.markSystemsOrderDirty(),this.indexSystemByComponents(t),d(t,this._services),vt.isEnabled()&&yn.wrapInstance(t,t.systemName,ot.ECS),t.initialize(),this.logger.debug(`System ${n.name} registered and initialized`),t}registerSystems(e){const t=[];for(const n of e){const e=this.addEntityProcessor(n);t.push(e)}return t}addSystem(e){return this.addEntityProcessor(e)}removeEntityProcessor(e){const t=e.constructor;this._services.unregister(t),this.markSystemsOrderDirty(),this.removeSystemFromIndex(e),e.reset()}removeSystem(e){this.removeEntityProcessor(e)}getEntityProcessor(e){return this._services.tryResolve(e)}getStats(){return{entityCount:this.entities.count,processorCount:this.systems.length,componentStorageStats:this.componentStorageManager.getAllStats()}}getDebugInfo(){const e=this.systems;return{name:this.name||this.constructor.name,entityCount:this.entities.count,processorCount:e.length,isRunning:this._didSceneBegin,entities:this.entities.buffer.map(e=>({name:e.name,id:e.id,componentCount:e.components.length,componentTypes:e.components.map(e=>M(e))})),processors:e.map(e=>({name:J(e),updateOrder:e.updateOrder,entityCount:e.entities.length})),componentStats:this.componentStorageManager.getAllStats()}}serialize(e){return pn.serialize(this,e)}deserialize(e,t){pn.deserialize(this,e,t)}createIncrementalSnapshot(e){this._incrementalBaseSnapshot=fn.createSnapshot(this,e)}serializeIncremental(e){if(!this._incrementalBaseSnapshot)throw new Error("必须先调用 createIncrementalSnapshot() 创建基础快照");return fn.computeIncremental(this,this._incrementalBaseSnapshot,e)}applyIncremental(e,t){const n="string"==typeof e||e instanceof Uint8Array?fn.deserializeIncremental(e):e,s=t||G.getAllComponentNames();fn.applyIncremental(this,n,s)}updateIncrementalSnapshot(e){this.createIncrementalSnapshot(e)}clearIncrementalSnapshot(){this._incrementalBaseSnapshot=void 0}hasIncrementalSnapshot(){return void 0!==this._incrementalBaseSnapshot}}class On{constructor(e,t){this.scene=e,this.storageManager=t;const n=e.identifierPool.checkOut();this.entity=new $t("",n),this.entity.scene=this.scene}named(e){return this.entity.name=e,this}tagged(e){return this.entity.tag=e,this}with(e){return this.entity.addComponent(e),this}withComponents(...e){for(const t of e)this.entity.addComponent(t);return this}withIf(e,t){return e&&this.entity.addComponent(t),this}withFactory(e){const t=e();return this.entity.addComponent(t),this}configure(e,t){const n=this.entity.getComponent(e);return n&&t(n),this}enabled(e=!0){return this.entity.enabled=e,this}active(e=!0){return this.entity.active=e,this}withChild(e){const t=e.build(),n=this.scene.getSystem(ht);return n?.setParent(t,this.entity),this}withChildren(...e){const t=this.scene.getSystem(ht);for(const n of e){const e=n.build();t?.setParent(e,this.entity)}return this}withChildFactory(e){const t=e(this.entity).build(),n=this.scene.getSystem(ht);return n?.setParent(t,this.entity),this}withChildIf(e,t){if(e){const e=t.build(),n=this.scene.getSystem(ht);n?.setParent(e,this.entity)}return this}build(){return this.entity}spawn(){return this.scene.addEntity(this.entity),this.entity}clone(){const e=new On(this.scene,this.storageManager);return e.entity=this.entity,e}}class Pn{constructor(){this.scene=new xn}named(e){return this.scene.name=e,this}withEntity(e){return this.scene.addEntity(e),this}withEntityBuilder(e){const t=e(new On(this.scene,this.scene.componentStorageManager)).build();return this.scene.addEntity(t),this}withEntities(...e){for(const t of e)this.scene.addEntity(t);return this}withSystem(e){return this.scene.addSystem(e),this}withSystems(...e){for(const t of e)this.scene.addSystem(t);return this}build(){return this.scene}}class Rn{constructor(e,...t){this.component=new e(...t)}set(e,t){return this.component[e]=t,this}configure(e){return e(this.component),this}setIf(e,t,n){return e&&(this.component[t]=n),this}build(){return this.component}}class zn{constructor(e){this.entities=e}addComponent(e){for(const t of this.entities)t.addComponent(e);return this}removeComponent(e){for(const t of this.entities)t.removeComponentByType(e);return this}setActive(e){for(const t of this.entities)t.active=e;return this}setTag(e){for(const t of this.entities)t.tag=e;return this}forEach(e){return this.entities.forEach(e),this}filter(e){return new zn(this.entities.filter(e))}toArray(){return this.entities.slice()}count(){return this.entities.length}}class Fn{constructor(e,t,n){this.scene=e,this.querySystem=t,this.eventSystem=n}createEntity(){return new On(this.scene,this.scene.componentStorageManager)}createScene(){return new Pn}createComponent(e,...t){return new Rn(e,...t)}query(){return new nn(this.querySystem)}find(...e){return this.querySystem.queryAll(...e).entities}findFirst(...e){const t=this.querySystem.queryAll(...e);return t.entities.length>0?t.entities[0]:null}findByName(e){return this.scene.findEntity(e)}findByTag(e){return this.scene.findEntitiesByTag(e)}emit(e,t){this.eventSystem.emitSync(e,t)}async emitAsync(e,t){await this.eventSystem.emit(e,t)}on(e,t){return this.eventSystem.on(e,t)}once(e,t){return this.eventSystem.once(e,t)}off(e,t){this.eventSystem.off(e,t)}batch(e){return new zn(e)}getStats(){return{entityCount:this.scene.entities.count,systemCount:this.scene.systems.length,componentStats:this.scene.componentStorageManager.getAllStats(),queryStats:this.querySystem.getStats(),eventStats:this.eventSystem.getStats()}}}function Nn(e,t,n){return new Fn(e,t,n)}const Bn=$("World");class $n{constructor(e={}){this._scenes=new Map,this._activeScenes=new Set,this._globalSystems=[],this._isActive=!1,this._config={name:"World",debug:!1,maxScenes:10,autoCleanup:!0,...e},this.name=this._config.name,this._createdAt=Date.now(),this._services=new En}get services(){return this._services}createScene(e,t){if(!e||"string"!=typeof e||""===e.trim())throw new Error("Scene name不能为空");if(this._scenes.has(e))throw new Error(`Scene name '${e}' 已存在于World '${this.name}' 中`);if(this._scenes.size>=this._config.maxScenes)throw new Error(`World '${this.name}' 已达到最大Scene数量限制: ${this._config.maxScenes}`);const n=t||new xn;if(this._config.debug){const e=new _;e.enable(),n.services.registerInstance(_,e)}return"id"in n&&(n.id=e),"name"in n&&!n.name&&(n.name=e),this._scenes.set(e,n),n.initialize(),n}removeScene(e){const t=this._scenes.get(e);return!!t&&(this._activeScenes.has(e)&&this.setSceneActive(e,!1),t.end(),this._scenes.delete(e),Bn.info(`从World '${this.name}' 中移除Scene: ${e}`),!0)}getScene(e){return this._scenes.get(e)||null}getSceneIds(){return Array.from(this._scenes.keys())}getAllScenes(){return Array.from(this._scenes.values())}removeAllScenes(){const e=Array.from(this._scenes.keys());for(const t of e)this.removeScene(t);Bn.info(`从World '${this.name}' 中移除所有Scene`)}setSceneActive(e,t){const n=this._scenes.get(e);n?t?(this._activeScenes.add(e),n.begin&&n.begin(),Bn.debug(`在World '${this.name}' 中激活Scene: ${e}`)):(this._activeScenes.delete(e),Bn.debug(`在World '${this.name}' 中停用Scene: ${e}`)):Bn.warn(`Scene '${e}' 不存在于World '${this.name}' 中`)}isSceneActive(e){return this._activeScenes.has(e)}getActiveSceneCount(){return this._activeScenes.size}addGlobalSystem(e){return this._globalSystems.includes(e)||(this._globalSystems.push(e),e.initialize&&e.initialize(),Bn.debug(`在World '${this.name}' 中添加全局System: ${e.name}`)),e}removeGlobalSystem(e){const t=this._globalSystems.indexOf(e);return-1!==t&&(this._globalSystems.splice(t,1),e.reset&&e.reset(),Bn.debug(`从World '${this.name}' 中移除全局System: ${e.name}`),!0)}getGlobalSystem(e){for(const t of this._globalSystems)if(t instanceof e)return t;return null}start(){if(!this._isActive){this._isActive=!0;for(const e of this._globalSystems)e.initialize&&e.initialize();Bn.info(`启动World: ${this.name}`)}}stop(){if(this._isActive){for(const e of this._activeScenes)this.setSceneActive(e,!1);for(const e of this._globalSystems)e.reset&&e.reset();this._isActive=!1,Bn.info(`停止World: ${this.name}`)}}updateGlobalSystems(){if(this._isActive)for(const e of this._globalSystems)e.update&&e.update()}updateScenes(){if(this._isActive){for(const e of this._activeScenes){const t=this._scenes.get(e);t&&t.update&&t.update()}this._config.autoCleanup&&this.shouldAutoCleanup()&&this.cleanup()}}destroy(){Bn.info(`销毁World: ${this.name}`),this.stop();const e=Array.from(this._scenes.keys());for(const t of e)this.removeScene(t);for(const e of this._globalSystems)e.destroy?e.destroy():e.reset&&e.reset();this._globalSystems.length=0,this._services.clear(),this._scenes.clear(),this._activeScenes.clear()}getStatus(){return{name:this.name,isActive:this._isActive,sceneCount:this._scenes.size,activeSceneCount:this._activeScenes.size,globalSystemCount:this._globalSystems.length,createdAt:this._createdAt,config:{...this._config},scenes:Array.from(this._scenes.keys()).map(e=>({id:e,isActive:this._activeScenes.has(e),name:this._scenes.get(e)?.name||e}))}}getStats(){const e={totalEntities:0,totalSystems:this._globalSystems.length,memoryUsage:0,performance:{averageUpdateTime:0,maxUpdateTime:0}};for(const t of this._scenes.values())t.entities&&(e.totalEntities+=t.entities.count),t.systems&&(e.totalSystems+=t.systems.length);return e}shouldAutoCleanup(){const e=Date.now();for(const[t,n]of this._scenes)if(!this._activeScenes.has(t)&&n.entities&&0===n.entities.count&&e-this._createdAt>3e5)return!0;return!1}cleanup(){const e=Array.from(this._scenes.keys()),t=Date.now();for(const n of e){const e=this._scenes.get(n);e&&!this._activeScenes.has(n)&&e.entities&&0===e.entities.count&&t-this._createdAt>3e5&&(this.removeScene(n),Bn.debug(`自动清理空Scene: ${n} from World ${this.name}`))}}get isActive(){return this._isActive}get sceneCount(){return this._scenes.size}get createdAt(){return this._createdAt}}class Ln{constructor(e){this._nextScene=null,this._ecsAPI=null,this._logger=$("SceneManager"),this._performanceMonitor=null,this._pendingPersistentEntities=[],this._defaultWorld=new $n({name:"__default__"}),this._defaultWorld.start(),this._performanceMonitor=e||null}setSceneChangedCallback(e){this._onSceneChangedCallback=e}setScene(e){const t=this.currentScene;return t&&t instanceof xn&&(this._pendingPersistentEntities=t.extractPersistentEntities(),this._pendingPersistentEntities.length>0&&this._logger.debug(`Extracted ${this._pendingPersistentEntities.length} persistent entities for migration`)),this._defaultWorld.removeAllScenes(),this._performanceMonitor&&e.services.registerInstance(_,this._performanceMonitor),this._defaultWorld.createScene(Ln.DEFAULT_SCENE_ID,e),this._defaultWorld.setSceneActive(Ln.DEFAULT_SCENE_ID,!0),this._pendingPersistentEntities.length>0&&e instanceof xn&&(e.receiveMigratedEntities(this._pendingPersistentEntities),this._logger.debug(`Migrated ${this._pendingPersistentEntities.length} persistent entities to new scene`),this._pendingPersistentEntities=[]),e.querySystem&&e.eventSystem?this._ecsAPI=Nn(e,e.querySystem,e.eventSystem):this._ecsAPI=null,n.sceneChanged(),this._onSceneChangedCallback&&this._onSceneChangedCallback(),this._logger.info(`Scene changed to: ${e.name}`),e}loadScene(e){this._nextScene=e,this._logger.info(`Scheduled scene load: ${e.name}`)}get currentScene(){return this._defaultWorld.getScene(Ln.DEFAULT_SCENE_ID)}get api(){return this._ecsAPI}update(){this._nextScene&&(this.setScene(this._nextScene),this._nextScene=null),this._defaultWorld.updateGlobalSystems(),this._defaultWorld.updateScenes()}destroy(){this._logger.info("SceneManager destroying"),this._defaultWorld.destroy(),this._nextScene=null,this._ecsAPI=null,this._logger.info("SceneManager destroyed")}get hasScene(){return null!==this._defaultWorld.getScene(Ln.DEFAULT_SCENE_ID)}get hasPendingScene(){return null!==this._nextScene}dispose(){this.destroy()}}Ln.DEFAULT_SCENE_ID="__main__";let Wn=class{constructor(){this._config={enabled:!1,websocketUrl:"",debugFrameRate:30,autoReconnect:!0,channels:{entities:!0,systems:!0,performance:!0,components:!0,scenes:!0}}}setConfig(e){this._config=e}getConfig(){return this._config}isEnabled(){return this._config.enabled}dispose(){}};Wn=e([o(),t("design:paramtypes",[])],Wn);let Hn=class{constructor(){this.frameCounter=0,this.lastSendTime=0,this.sendInterval=0,this.isRunning=!1,this.originalConsole={log:console.log.bind(console),debug:console.debug.bind(console),info:console.info.bind(console),warn:console.warn.bind(console),error:console.error.bind(console)}}onInitialize(){this.config=this.configService.getConfig(),this.entityCollector=new lt,this.systemCollector=new ut,this.performanceCollector=new dt,this.componentCollector=new ft,this.sceneCollector=new gt,this.advancedProfilerCollector=new Ct,vt.setEnabled(!0),this.webSocketManager=new yt(this.config.websocketUrl,!1!==this.config.autoReconnect),this.webSocketManager.setMessageHandler(this.handleMessage.bind(this));const e=this.config.debugFrameRate||30;this.sendInterval=1e3/e,this.interceptConsole(),this.start()}start(){this.isRunning||(this.isRunning=!0,this.connectWebSocket())}stop(){this.isRunning&&(this.isRunning=!1,this.webSocketManager.disconnect())}interceptConsole(){console.log=(...e)=>{this.sendLog("info",this.formatLogMessage(e)),this.originalConsole.log(...e)},console.debug=(...e)=>{this.sendLog("debug",this.formatLogMessage(e)),this.originalConsole.debug(...e)},console.info=(...e)=>{this.sendLog("info",this.formatLogMessage(e)),this.originalConsole.info(...e)},console.warn=(...e)=>{this.sendLog("warn",this.formatLogMessage(e)),this.originalConsole.warn(...e)},console.error=(...e)=>{this.sendLog("error",this.formatLogMessage(e)),this.originalConsole.error(...e)}}formatLogMessage(e){return e.map(e=>{if("string"==typeof e)return e;if(e instanceof Error)return`${e.name}: ${e.message}`;if(null===e)return"null";if(void 0===e)return"undefined";if("object"==typeof e)try{return this.safeStringify(e,6)}catch{return Object.prototype.toString.call(e)}return String(e)}).join(" ")}safeStringify(e,t=6){const n=new WeakSet,s=(e,i)=>{if(null===e)return null;if(void 0===e)return;if("object"!=typeof e)return e;if(i>=t)return"[Max Depth Reached]";if(n.has(e))return"[Circular]";if(n.add(e),Array.isArray(e)){const t=e.map(e=>s(e,i+1));return n.delete(e),t}const r={};for(const t in e)Object.prototype.hasOwnProperty.call(e,t)&&(r[t]=s(e[t],i+1));return n.delete(e),r};return JSON.stringify(s(e,0))}sendLog(e,t){if(this.webSocketManager.getConnectionStatus())try{this.webSocketManager.send({type:"log",data:{level:e,message:t,timestamp:(new Date).toISOString()}})}catch(e){}}updateConfig(e){this.config=e;const t=e.debugFrameRate||30;this.sendInterval=1e3/t,this.webSocketManager&&e.websocketUrl&&(this.webSocketManager.disconnect(),this.webSocketManager=new yt(e.websocketUrl,!1!==e.autoReconnect),this.webSocketManager.setMessageHandler(this.handleMessage.bind(this)),this.connectWebSocket())}update(e){if(!this.isRunning||!this.config.enabled)return;this.frameCounter++;const t=Date.now();t-this.lastSendTime>=this.sendInterval&&(this.sendDebugData(),this.lastSendTime=t)}onSceneChanged(){this.isRunning&&this.config.enabled&&this.sendDebugData()}handleMessage(e){try{switch(e.type){case"capture_memory_snapshot":this.handleMemorySnapshotRequest();break;case"config_update":e.config&&this.updateConfig({...this.config,...e.config});break;case"expand_lazy_object":this.handleExpandLazyObjectRequest(e);break;case"get_component_properties":this.handleGetComponentPropertiesRequest(e);break;case"get_raw_entity_list":this.handleGetRawEntityListRequest(e);break;case"get_entity_details":this.handleGetEntityDetailsRequest(e);break;case"get_advanced_profiler_data":this.handleGetAdvancedProfilerDataRequest(e);break;case"set_profiler_selected_function":this.handleSetProfilerSelectedFunction(e);break;case"ping":this.webSocketManager.send({type:"pong",timestamp:Date.now()})}}catch(t){e.requestId&&this.webSocketManager.send({type:"error_response",requestId:e.requestId,error:t instanceof Error?t.message:String(t)})}}handleExpandLazyObjectRequest(e){try{const{entityId:t,componentIndex:n,propertyPath:s,requestId:i}=e;if(void 0===t||void 0===n||!s)return void this.webSocketManager.send({type:"expand_lazy_object_response",requestId:i,error:"缺少必要参数"});const r=this.sceneManager.currentScene,o=this.entityCollector.expandLazyObject(t,n,s,r);this.webSocketManager.send({type:"expand_lazy_object_response",requestId:i,data:o})}catch(t){this.webSocketManager.send({type:"expand_lazy_object_response",requestId:e.requestId,error:t instanceof Error?t.message:String(t)})}}handleGetComponentPropertiesRequest(e){try{const{entityId:t,componentIndex:n,requestId:s}=e;if(void 0===t||void 0===n)return void this.webSocketManager.send({type:"get_component_properties_response",requestId:s,error:"缺少必要参数"});const i=this.sceneManager.currentScene,r=this.entityCollector.getComponentProperties(t,n,i);this.webSocketManager.send({type:"get_component_properties_response",requestId:s,data:r})}catch(t){this.webSocketManager.send({type:"get_component_properties_response",requestId:e.requestId,error:t instanceof Error?t.message:String(t)})}}handleGetRawEntityListRequest(e){try{const{requestId:t}=e,n=this.sceneManager.currentScene,s=this.entityCollector.getRawEntityList(n);this.webSocketManager.send({type:"get_raw_entity_list_response",requestId:t,data:s})}catch(t){this.webSocketManager.send({type:"get_raw_entity_list_response",requestId:e.requestId,error:t instanceof Error?t.message:String(t)})}}handleGetEntityDetailsRequest(e){try{const{entityId:t,requestId:n}=e;if(void 0===t)return void this.webSocketManager.send({type:"get_entity_details_response",requestId:n,error:"缺少实体ID参数"});const s=this.sceneManager.currentScene,i=this.entityCollector.getEntityDetails(t,s);this.webSocketManager.send({type:"get_entity_details_response",requestId:n,data:i})}catch(t){this.webSocketManager.send({type:"get_entity_details_response",requestId:e.requestId,error:t instanceof Error?t.message:String(t)})}}handleGetAdvancedProfilerDataRequest(e){try{const{requestId:t}=e,n=vt.isEnabled()?this.advancedProfilerCollector.collectAdvancedData(this.performanceMonitor):this.advancedProfilerCollector.collectFromLegacyMonitor(this.performanceMonitor);this.webSocketManager.send({type:"get_advanced_profiler_data_response",requestId:t,data:n})}catch(t){this.webSocketManager.send({type:"get_advanced_profiler_data_response",requestId:e.requestId,error:t instanceof Error?t.message:String(t)})}}handleSetProfilerSelectedFunction(e){try{const{functionName:t,requestId:n}=e;this.advancedProfilerCollector.setSelectedFunction(t||null),this.sendDebugData(),this.webSocketManager.send({type:"set_profiler_selected_function_response",requestId:n,success:!0})}catch(t){this.webSocketManager.send({type:"set_profiler_selected_function_response",requestId:e.requestId,error:t instanceof Error?t.message:String(t)})}}handleMemorySnapshotRequest(){try{const e=this.captureMemorySnapshot();this.webSocketManager.send({type:"memory_snapshot_response",data:e})}catch(e){this.webSocketManager.send({type:"memory_snapshot_error",error:e instanceof Error?e.message:"内存快照捕获失败"})}}captureMemorySnapshot(){const e=Date.now(),t=this.collectBaseMemoryInfo(),n=this.sceneManager.currentScene,s=this.entityCollector.collectEntityDataWithMemory(n),i=n?.entities?this.collectComponentMemoryStats(n.entities):{totalMemory:0,componentTypes:0,totalInstances:0,breakdown:[]},r=this.collectSystemMemoryStats(),o=this.collectPoolMemoryStats(),a=this.collectPerformanceStats(),c=s.entitiesPerArchetype.reduce((e,t)=>e+t.memory,0);return{timestamp:e,version:"2.0",summary:{totalEntities:s.totalEntities,totalMemoryUsage:t.usedMemory,totalMemoryLimit:t.totalMemory,memoryUtilization:t.usedMemory/t.totalMemory*100,gcCollections:t.gcCollections,entityMemory:c,componentMemory:i.totalMemory,systemMemory:r.totalMemory,poolMemory:o.totalMemory},baseMemory:t,entities:{totalMemory:c,entityCount:s.totalEntities,archetypes:s.entitiesPerArchetype,largestEntities:s.topEntitiesByComponents},components:i,systems:r,pools:o,performance:a}}collectBaseMemoryInfo(){const e={totalMemory:0,usedMemory:0,freeMemory:0,gcCollections:0,heapInfo:null,detailedMemory:void 0};try{const t=performance;if(t.memory){const n=t.memory;e.totalMemory=n.jsHeapSizeLimit||536870912,e.usedMemory=n.usedJSHeapSize||0,e.freeMemory=e.totalMemory-e.usedMemory,e.heapInfo={totalJSHeapSize:n.totalJSHeapSize||0,usedJSHeapSize:n.usedJSHeapSize||0,jsHeapSizeLimit:n.jsHeapSizeLimit||0}}else e.totalMemory=536870912,e.freeMemory=536870912;t.measureUserAgentSpecificMemory&&t.measureUserAgentSpecificMemory().then(t=>{e.detailedMemory=t}).catch(()=>{})}catch(e){}return e}collectComponentMemoryStats(e){const t=new Map;let n=0;const s=new Map;for(const t of e.buffer)if(t&&!t.destroyed&&t.components)for(const e of t.components){const t=M(e);s.set(t,(s.get(t)||0)+1)}for(const[i,r]of s.entries()){const s=this.componentCollector.calculateDetailedComponentMemory(i),o=s*r;n+=o;const a=[];let c=0;for(const t of e.buffer)if(t&&!t.destroyed&&t.components){for(const e of t.components)if(M(e)===i&&(a.push({entityId:t.id,entityName:t.name||`Entity_${t.id}`,memory:s}),c++,c>=100))break;if(c>=100)break}t.set(i,{count:r,totalMemory:o,instances:a.slice(0,10)})}const i=Array.from(t.entries()).map(([e,t])=>({typeName:e,instanceCount:t.count,totalMemory:t.totalMemory,averageMemory:t.totalMemory/t.count,percentage:n>0?t.totalMemory/n*100:0,largestInstances:t.instances.sort((e,t)=>t.memory-e.memory).slice(0,3)})).sort((e,t)=>t.totalMemory-e.totalMemory);return{totalMemory:n,componentTypes:t.size,totalInstances:Array.from(t.values()).reduce((e,t)=>e+t.count,0),breakdown:i}}collectSystemMemoryStats(){const e=this.sceneManager.currentScene;let t=0;const n=[];try{const s=e?.systems;if(s){const e=new Map;for(const i of s){const s=J(i);let r;e.has(s)?r=e.get(s):(r=this.calculateQuickSystemSize(i),e.set(s,r)),t+=r,n.push({name:s,memory:r,enabled:!1!==i.enabled,updateOrder:i.updateOrder||0})}}}catch(e){}return{totalMemory:t,systemCount:n.length,breakdown:n.sort((e,t)=>t.memory-e.memory)}}calculateQuickSystemSize(e){if(!e||"object"!=typeof e)return 64;let t=128;try{const n=Object.keys(e);for(let s=0;s<Math.min(n.length,15);s++){const i=n[s];if(!i||"entities"===i||"scene"===i||"constructor"===i)continue;const r=e[i];t+=2*i.length,"string"==typeof r?t+=Math.min(2*r.length,100):"number"==typeof r?t+=8:"boolean"==typeof r?t+=4:Array.isArray(r)?t+=40+Math.min(8*r.length,200):"object"==typeof r&&null!==r&&(t+=64)}}catch(e){return 128}return Math.max(t,64)}collectPoolMemoryStats(){let e=0;const t=[];try{const n=pt.getInstance().getPoolStats();for(const[s,i]of n.entries()){const n=i,r=32*n.maxSize;e+=r,t.push({typeName:s,maxSize:n.maxSize,currentSize:n.currentSize||0,estimatedMemory:r,utilization:n.currentSize?n.currentSize/n.maxSize*100:0})}}catch(e){}try{const n=S.getAllPoolStats();for(const[s,i]of Object.entries(n)){const n=i;e+=n.estimatedMemoryUsage,t.push({typeName:`Pool_${s}`,maxSize:n.maxSize,currentSize:n.size,estimatedMemory:n.estimatedMemoryUsage,utilization:n.size/n.maxSize*100,hitRate:100*n.hitRate})}}catch(e){}return{totalMemory:e,poolCount:t.length,breakdown:t.sort((e,t)=>t.estimatedMemory-e.estimatedMemory)}}collectPerformanceStats(){try{if(!this.performanceMonitor)return{enabled:!1};const e=this.performanceMonitor.getAllSystemStats(),t=this.performanceMonitor.getPerformanceWarnings();return{enabled:this.performanceMonitor.enabled??!1,systemCount:e.size,warnings:t.slice(0,10),topSystems:Array.from(e.entries()).map(e=>{const[t,n]=e;return{name:t,averageTime:n.averageTime,maxTime:n.maxTime,samples:n.executionCount}}).sort((e,t)=>t.averageTime-e.averageTime).slice(0,5)}}catch(e){return{enabled:!1,error:e instanceof Error?e.message:String(e)}}}getDebugData(){const e=Date.now(),t=this.sceneManager.currentScene,n={timestamp:e,frameworkVersion:"1.0.0",isRunning:this.isRunning,frameworkLoaded:!0,currentScene:t?.name||"Unknown"};return this.config.channels.entities&&(n.entities=this.entityCollector.collectEntityData(t)),this.config.channels.systems&&(n.systems=this.systemCollector.collectSystemData(this.performanceMonitor,t)),this.config.channels.performance&&(n.performance=this.performanceCollector.collectPerformanceData(this.performanceMonitor)),this.config.channels.components&&(n.components=this.componentCollector.collectComponentData(t)),this.config.channels.scenes&&(n.scenes=this.sceneCollector.collectSceneData(t)),n}async connectWebSocket(){try{await this.webSocketManager.connect()}catch(e){}}sendDebugData(){if(this.webSocketManager.getConnectionStatus())try{const e=this.getDebugData(),t=vt.isEnabled(),n={type:"debug_data",data:e,advancedProfiler:t?this.advancedProfilerCollector.collectAdvancedData(this.performanceMonitor):null};this.webSocketManager.send(n)}catch(e){}}dispose(){this.stop(),console.log=this.originalConsole.log,console.debug=this.originalConsole.debug,console.info=this.originalConsole.info,console.warn=this.originalConsole.warn,console.error=this.originalConsole.error}};var jn;e([c(Ln),t("design:type",Ln)],Hn.prototype,"sceneManager",void 0),e([c(_),t("design:type",_)],Hn.prototype,"performanceMonitor",void 0),e([c(Wn),t("design:type",Wn)],Hn.prototype,"configService",void 0),Hn=e([o(),a()],Hn),function(e){e.NotInstalled="not_installed",e.Installed="installed",e.Failed="failed"}(jn||(jn={}));const Gn=$("PluginManager");class qn{constructor(){this._plugins=new Map,this._metadata=new Map,this._core=null,this._services=null}initialize(e,t){this._core=e,this._services=t,Gn.info("PluginManager initialized")}async install(e){if(!this._core||!this._services)throw new Error("PluginManager not initialized. Call initialize() first.");if(this._plugins.has(e.name))return void Gn.warn(`Plugin ${e.name} is already installed`);e.dependencies&&e.dependencies.length>0&&this._checkDependencies(e);const t={name:e.name,version:e.version,state:jn.NotInstalled,installedAt:Date.now()};this._metadata.set(e.name,t);try{Gn.info(`Installing plugin: ${e.name} v${e.version}`),await e.install(this._core,this._services),this._plugins.set(e.name,e),t.state=jn.Installed,Gn.info(`Plugin ${e.name} installed successfully`)}catch(n){throw t.state=jn.Failed,t.error=n instanceof Error?n.message:String(n),Gn.error(`Failed to install plugin ${e.name}:`,n),n}}async uninstall(e){const t=this._plugins.get(e);if(!t)throw new Error(`Plugin ${e} is not installed`);this._checkDependents(e);try{Gn.info(`Uninstalling plugin: ${e}`),await t.uninstall(),this._plugins.delete(e),this._metadata.delete(e),Gn.info(`Plugin ${e} uninstalled successfully`)}catch(t){throw Gn.error(`Failed to uninstall plugin ${e}:`,t),t}}getPlugin(e){return this._plugins.get(e)}getMetadata(e){return this._metadata.get(e)}getAllPlugins(){return Array.from(this._plugins.values())}getAllMetadata(){return Array.from(this._metadata.values())}isInstalled(e){return this._plugins.has(e)}_checkDependencies(e){if(!e.dependencies)return;const t=[];for(const n of e.dependencies)this._plugins.has(n)||t.push(n);if(t.length>0)throw new Error(`Plugin ${e.name} has unmet dependencies: ${t.join(", ")}`)}_checkDependents(e){const t=[];for(const n of this._plugins.values())n.dependencies&&n.dependencies.includes(e)&&t.push(n.name);if(t.length>0)throw new Error(`Cannot uninstall plugin ${e}: it is required by ${t.join(", ")}`)}dispose(){const e=Array.from(this._plugins.values()).reverse();for(const t of e)try{Gn.info(`Disposing plugin: ${t.name}`),t.uninstall()}catch(e){Gn.error(`Error disposing plugin ${t.name}:`,e)}this._plugins.clear(),this._metadata.clear(),this._core=null,this._services=null,Gn.info("PluginManager disposed")}}function Un(e){const t=`@esengine/service:${e}`;return{id:Symbol.for(t),name:e}}class Qn{constructor(){this._services=new Map}register(e,t){this._services.set(e.id,t)}get(e){return this._services.get(e.id)}require(e){const t=this._services.get(e.id);if(void 0===t)throw new Error(`Service not found: ${e.name}`);return t}has(e){return this._services.has(e.id)}unregister(e){return this._services.delete(e.id)}clear(){this._services.clear()}dispose(){this.clear()}}const Vn=$("WorldManager");class Yn{constructor(e={}){this._worlds=new Map,this._isRunning=!1,this._framesSinceCleanup=0,this._config={maxWorlds:50,autoCleanup:!0,cleanupFrameInterval:1800,debug:!1,...e},this._isRunning=!0,Vn.info("WorldManager已初始化",{maxWorlds:this._config.maxWorlds,autoCleanup:this._config.autoCleanup,cleanupFrameInterval:this._config.cleanupFrameInterval})}createWorld(e,t){if(!e||"string"!=typeof e||""===e.trim())throw new Error("World name不能为空");if(this._worlds.has(e))throw new Error(`World name '${e}' 已存在`);if(this._worlds.size>=this._config.maxWorlds)throw new Error(`已达到最大World数量限制: ${this._config.maxWorlds}`);const n={name:e,debug:t?.debug??this._config.debug??!1,...void 0!==t?.maxScenes&&{maxScenes:t.maxScenes},...void 0!==t?.autoCleanup&&{autoCleanup:t.autoCleanup}},s=new $n(n);return this._worlds.set(e,s),s}removeWorld(e){const t=this._worlds.get(e);return!!t&&(t.destroy(),this._worlds.delete(e),Vn.info(`移除World: ${e}`),!0)}getWorld(e){return this._worlds.get(e)||null}getWorldIds(){return Array.from(this._worlds.keys())}getAllWorlds(){return Array.from(this._worlds.values())}setWorldActive(e,t){const n=this._worlds.get(e);n?t?(n.start(),Vn.debug(`激活World: ${e}`)):(n.stop(),Vn.debug(`停用World: ${e}`)):Vn.warn(`World '${e}' 不存在`)}isWorldActive(e){const t=this._worlds.get(e);return t?.isActive??!1}updateAll(){if(this._isRunning){for(const e of this._worlds.values())e.isActive&&(e.updateGlobalSystems(),e.updateScenes());this._config.autoCleanup&&(this._framesSinceCleanup++,this._framesSinceCleanup>=this._config.cleanupFrameInterval&&(this.cleanup(),this._framesSinceCleanup=0,this._config.debug&&Vn.debug(`执行定期清理World (间隔: ${this._config.cleanupFrameInterval} 帧)`)))}}getActiveWorlds(){const e=[];for(const t of this._worlds.values())t.isActive&&e.push(t);return e}startAll(){this._isRunning=!0;for(const e of this._worlds.values())e.start();Vn.info("启动所有World")}stopAll(){this._isRunning=!1;for(const e of this._worlds.values())e.stop();Vn.info("停止所有World")}findWorlds(e){const t=[];for(const n of this._worlds.values())e(n)&&t.push(n);return t}findWorldByName(e){for(const t of this._worlds.values())if(t.name===e)return t;return null}getStats(){const e={totalWorlds:this._worlds.size,activeWorlds:this.activeWorldCount,totalScenes:0,totalEntities:0,totalSystems:0,memoryUsage:0,isRunning:this._isRunning,config:{...this._config},worlds:[]};for(const[t,n]of this._worlds){const s=n.getStats();e.totalScenes+=s.totalSystems,e.totalEntities+=s.totalEntities,e.totalSystems+=s.totalSystems,e.worlds.push({id:t,name:n.name,isActive:n.isActive,sceneCount:n.sceneCount,...s})}return e}getDetailedStatus(){return{...this.getStats(),worlds:Array.from(this._worlds.entries()).map(([e,t])=>({id:e,isActive:t.isActive,status:t.getStatus()}))}}cleanup(){const e=[];for(const[t,n]of this._worlds)this.shouldCleanupWorld(n)&&e.push(t);for(const t of e)this.removeWorld(t);return e.length>0&&Vn.debug(`清理了 ${e.length} 个World`),e.length}destroy(){Vn.info("正在销毁WorldManager..."),this.stopAll();const e=Array.from(this._worlds.keys());for(const t of e)this.removeWorld(t);this._worlds.clear(),this._isRunning=!1,Vn.info("WorldManager已销毁")}dispose(){this.destroy()}shouldCleanupWorld(e){if(e.isActive)return!1;const t=Date.now()-e.createdAt>6e5;if(0===e.sceneCount)return t;return!e.getAllScenes().some(e=>e.entities&&e.entities.count>0)&&t}get worldCount(){return this._worlds.size}get activeWorldCount(){let e=0;for(const t of this._worlds.values())t.isActive&&e++;return e}get isRunning(){return this._isRunning}get config(){return{...this._config}}}class Jn{constructor(e={}){if(Jn._instance=this,this._config={debug:!0,...e},this._serviceContainer=new En,this._timerManager=new g,this._serviceContainer.registerInstance(g,this._timerManager),this._performanceMonitor=new _,this._serviceContainer.registerInstance(_,this._performanceMonitor),this._config.debug&&this._performanceMonitor.enable(),this._poolManager=new v,this._serviceContainer.registerInstance(v,this._poolManager),this._sceneManager=new Ln(this._performanceMonitor),this._serviceContainer.registerInstance(Ln,this._sceneManager),this._sceneManager.setSceneChangedCallback(()=>{this._debugManager&&this._debugManager.onSceneChanged()}),this._worldManager=new Yn({debug:!!this._config.debug,...this._config.worldManagerConfig}),this._serviceContainer.registerInstance(Yn,this._worldManager),this._pluginManager=new qn,this._pluginManager.initialize(this,this._serviceContainer),this._serviceContainer.registerInstance(qn,this._pluginManager),this._pluginServiceRegistry=new Qn,this._serviceContainer.registerInstance(Qn,this._pluginServiceRegistry),this.debug=this._config.debug??!0,this._config.debugConfig?.enabled){const e=new Wn;e.setConfig(this._config.debugConfig),this._serviceContainer.registerInstance(Wn,e),this._serviceContainer.registerSingleton(Hn,e=>u(Hn,e)),this._debugManager=this._serviceContainer.resolve(Hn),this._debugManager.onInitialize()}this.initialize()}static get Instance(){return this._instance}static get services(){if(!this._instance)throw new Error("Core实例未创建,请先调用Core.create()");return this._instance._serviceContainer}static get pluginServices(){if(!this._instance)throw new Error("Core实例未创建,请先调用Core.create()");return this._instance._pluginServiceRegistry}static get worldManager(){if(!this._instance)throw new Error("Core实例未创建,请先调用Core.create()");return this._instance._worldManager}static create(e=!0){if(null==this._instance){const t="boolean"==typeof e?{debug:e}:e;this._instance=new Jn(t)}else this._logger.warn("Core实例已创建,返回现有实例");return this._instance}static setScene(e){if(!this._instance)throw Jn._logger.warn("Core实例未创建,请先调用Core.create()"),new Error("Core实例未创建");return this._instance._sceneManager.setScene(e)}static get scene(){return this._instance?this._instance._sceneManager.currentScene:null}static get ecsAPI(){return this._instance?this._instance._sceneManager.api:null}static loadScene(e){this._instance?this._instance._sceneManager.loadScene(e):Jn._logger.warn("Core实例未创建,请先调用Core.create()")}static update(e){this._instance?this._instance.updateInternal(e):Jn._logger.warn("Core实例未创建,请先调用Core.create()")}static schedule(e,t=!1,n,s){if(!this._instance)throw new Error("Core实例未创建,请先调用Core.create()");if(!s)throw new Error("onTime callback is required");return this._instance._timerManager.schedule(e,t,n,s)}static enableDebug(e){if(this._instance){if(this._instance._debugManager)this._instance._debugManager.updateConfig(e);else{const t=new Wn;t.setConfig(e),this._instance._serviceContainer.registerInstance(Wn,t),this._instance._serviceContainer.registerSingleton(Hn,e=>u(Hn,e)),this._instance._debugManager=this._instance._serviceContainer.resolve(Hn),this._instance._debugManager.onInitialize()}this._instance._config.debugConfig=e}else Jn._logger.warn("Core实例未创建,请先调用Core.create()")}static disableDebug(){this._instance&&(this._instance._debugManager&&(this._instance._debugManager.stop(),delete this._instance._debugManager),this._instance._config.debugConfig&&(this._instance._config.debugConfig.enabled=!1))}static getDebugData(){return this._instance?._debugManager?this._instance._debugManager.getDebugData():null}static get isDebugEnabled(){return this._instance?._config.debugConfig?.enabled||!1}static get performanceMonitor(){return this._instance?._performanceMonitor||null}static async installPlugin(e){if(!this._instance)throw new Error("Core实例未创建,请先调用Core.create()");await this._instance._pluginManager.install(e)}static async uninstallPlugin(e){if(!this._instance)throw new Error("Core实例未创建,请先调用Core.create()");await this._instance._pluginManager.uninstall(e)}static getPlugin(e){if(this._instance)return this._instance._pluginManager.getPlugin(e)}static isPluginInstalled(e){return!!this._instance&&this._instance._pluginManager.isInstalled(e)}initialize(){Jn._logger.info("Core initialized",{debug:this.debug,debugEnabled:this._config.debugConfig?.enabled||!1})}updateInternal(e){if(Jn.paused)return;const t=this._performanceMonitor.startMonitoring("Core.update");n.update(e),"updateFPS"in this._performanceMonitor&&"function"==typeof this._performanceMonitor.updateFPS&&this._performanceMonitor.updateFPS(n.deltaTime);const s=this._performanceMonitor.startMonitoring("Services.update");this._serviceContainer.updateAll(e),this._performanceMonitor.endMonitoring("Services.update",s,this._serviceContainer.getUpdatableCount()),this._poolManager.update(),this._sceneManager.update(),this._worldManager.updateAll(),this._performanceMonitor.endMonitoring("Core.update",t)}static destroy(){this._instance&&(this._instance._debugManager&&this._instance._debugManager.stop(),this._instance._serviceContainer.clear(),Jn._logger.info("Core destroyed"),this._instance=null)}}Jn.paused=!1,Jn._instance=null,Jn._logger=$("Core");const Kn=Un("runtimeMode");class Zn{constructor(e={}){this._callbacks=new Set,this._isEditor=e.isEditor??!1,this._isPlaying=e.isPlaying??!1,this._isPreview=e.isPreview??!1}get isEditor(){return this._isEditor}get isPlaying(){return this._isPlaying}get isPreview(){return this._isPreview}get isStandalone(){return!this._isEditor}onModeChanged(e){return this._callbacks.add(e),()=>{this._callbacks.delete(e)}}setEditorMode(e){this._isEditor!==e&&(this._isEditor=e,this._notifyChange())}setPlaying(e){this._isPlaying!==e&&(this._isPlaying=e,this._notifyChange())}setPreview(e){this._isPreview!==e&&(this._isPreview=e,this._notifyChange())}updateMode(e){let t=!1;void 0!==e.isEditor&&this._isEditor!==e.isEditor&&(this._isEditor=e.isEditor,t=!0),void 0!==e.isPlaying&&this._isPlaying!==e.isPlaying&&(this._isPlaying=e.isPlaying,t=!0),void 0!==e.isPreview&&this._isPreview!==e.isPreview&&(this._isPreview=e.isPreview,t=!0),t&&this._notifyChange()}_notifyChange(){for(const e of this._callbacks)try{e(this)}catch(e){console.error("[RuntimeModeService] Callback error:",e)}}dispose(){this._callbacks.clear()}}function Xn(){return new Zn({isEditor:!0,isPlaying:!1,isPreview:!1})}function es(){return new Zn({isEditor:!1,isPlaying:!0,isPreview:!1})}const ts=$("DebugPlugin");let ns=class{constructor(e){this.name="@esengine/debug-plugin",this.version="1.0.0",this.worldManager=null,this.updateTimer=null,this.autoStart=e?.autoStart??!1,this.updateInterval=e?.updateInterval??1e3}async install(e,t){this.worldManager=t.resolve(Yn),ts.info("ECS Debug Plugin installed"),this.autoStart&&this.start()}async uninstall(){this.stop(),this.worldManager=null,ts.info("ECS Debug Plugin uninstalled")}dispose(){this.stop(),this.worldManager=null}start(){this.updateTimer?ts.warn("Debug monitoring already started"):(ts.info("Starting debug monitoring"),this.updateTimer=setInterval(()=>{this.logStats()},this.updateInterval))}stop(){this.updateTimer&&(clearInterval(this.updateTimer),this.updateTimer=null,ts.info("Debug monitoring stopped"))}getStats(){if(!this.worldManager)throw new Error("Plugin not installed");const e=[];let t=0,n=0;const s=this.worldManager.getAllWorlds();for(const i of s)for(const s of i.getAllScenes()){const i=this.getSceneInfo(s);e.push(i),t+=i.entityCount,n+=i.systems.length}return{scenes:e,totalEntities:t,totalSystems:n,timestamp:Date.now()}}getSceneInfo(e){const t=e.entities.buffer,n=e.systems;return{name:e.name,entityCount:t.length,systems:n.map(e=>this.getSystemInfo(e)),entities:t.map(e=>this.getEntityInfo(e))}}getSystemInfo(e){const t=e.getPerformanceStats(),n=t?{avgExecutionTime:t.averageTime,maxExecutionTime:t.maxTime,totalCalls:t.executionCount}:void 0;return{name:e.constructor.name,enabled:e.enabled,updateOrder:e.updateOrder,entityCount:e.entities.length,...void 0!==n&&{performance:n}}}getEntityInfo(e){const t=e.components;return{id:e.id,name:e.name,enabled:e.enabled,tag:e.tag,componentCount:t.length,components:t.map(e=>this.getComponentInfo(e))}}getComponentInfo(e){const t=e.constructor.name,n={};for(const t of Object.keys(e))if(!t.startsWith("_")){const s=e[t];"function"!=typeof s&&(n[t]=s)}return{type:t,data:n}}queryEntities(e){if(!this.worldManager)throw new Error("Plugin not installed");const t=[],n=this.worldManager.getAllWorlds();for(const s of n)for(const n of s.getAllScenes())if(!e.sceneName||n.name===e.sceneName)for(const s of n.entities.buffer)if((void 0===e.tag||s.tag===e.tag)&&(!e.name||s.name.includes(e.name))){if(e.hasComponent){if(!s.components.some(t=>t.constructor.name===e.hasComponent))continue}t.push(this.getEntityInfo(s))}return t}logStats(){const e=this.getStats();ts.info("=== ECS Debug Stats ==="),ts.info(`Total Entities: ${e.totalEntities}`),ts.info(`Total Systems: ${e.totalSystems}`),ts.info(`Scenes: ${e.scenes.length}`);for(const t of e.scenes){ts.info(`\n[Scene: ${t.name}]`),ts.info(` Entities: ${t.entityCount}`),ts.info(` Systems: ${t.systems.length}`);for(const e of t.systems){const t=e.performance?` | Avg: ${e.performance.avgExecutionTime.toFixed(2)}ms, Max: ${e.performance.maxExecutionTime.toFixed(2)}ms`:"";ts.info(` - ${e.name} (${e.enabled?"enabled":"disabled"}) | Entities: ${e.entityCount}${t}`)}}ts.info("========================\n")}exportJSON(){const e=this.getStats();return JSON.stringify(e,null,2)}};ns=e([o(),t("design:paramtypes",[Object])],ns);class ss{constructor(e,t){this.func=e,this.context=t}}class is{constructor(){this._messageTable=new Map}addObserver(e,t,n){let s=this._messageTable.get(e);s||(s=[],this._messageTable.set(e,s)),this.hasObserver(e,t)||s.push(new ss(t,n))}removeObserver(e,t){const n=this._messageTable.get(e);if(n){const e=n.findIndex(e=>e.func==t);-1!=e&&n.splice(e,1)}}emit(e,...t){const n=this._messageTable.get(e);if(n)for(const e of n)e.func.call(e.context,...t)}hasObserver(e,t){const n=this._messageTable.get(e);return!!n&&n.some(e=>e.func===t)}removeAllObservers(e){void 0!==e?this._messageTable.delete(e):this._messageTable.clear()}dispose(){this._messageTable.clear()}getEventTypeCount(){return this._messageTable.size}getObserverCount(e){const t=this._messageTable.get(e);return t?t.length:0}}class rs{constructor(){this._enabled=!1}get enabled(){return this._enabled}set enabled(e){this.setEnabled(e)}setEnabled(e){this._enabled!=e&&(this._enabled=e,this._enabled?this.onEnabled():this.onDisabled())}onEnabled(){}onDisabled(){}update(){}}var os,as;!function(e){e.ENTITY_CREATED="entity:created",e.ENTITY_DESTROYED="entity:destroyed",e.ENTITY_ENABLED="entity:enabled",e.ENTITY_DISABLED="entity:disabled",e.ENTITY_TAG_ADDED="entity:tag:added",e.ENTITY_TAG_REMOVED="entity:tag:removed",e.ENTITY_NAME_CHANGED="entity:name:changed",e.COMPONENT_ADDED="component:added",e.COMPONENT_REMOVED="component:removed",e.COMPONENT_MODIFIED="component:modified",e.COMPONENT_ENABLED="component:enabled",e.COMPONENT_DISABLED="component:disabled",e.SYSTEM_ADDED="system:added",e.SYSTEM_REMOVED="system:removed",e.SYSTEM_ENABLED="system:enabled",e.SYSTEM_DISABLED="system:disabled",e.SYSTEM_PROCESSING_START="system:processing:start",e.SYSTEM_PROCESSING_END="system:processing:end",e.SYSTEM_ERROR="system:error",e.SCENE_CREATED="scene:created",e.SCENE_DESTROYED="scene:destroyed",e.SCENE_ACTIVATED="scene:activated",e.SCENE_DEACTIVATED="scene:deactivated",e.SCENE_PAUSED="scene:paused",e.SCENE_RESUMED="scene:resumed",e.QUERY_EXECUTED="query:executed",e.QUERY_CACHE_HIT="query:cache:hit",e.QUERY_CACHE_MISS="query:cache:miss",e.QUERY_OPTIMIZED="query:optimized",e.PERFORMANCE_WARNING="performance:warning",e.PERFORMANCE_CRITICAL="performance:critical",e.MEMORY_USAGE_HIGH="memory:usage:high",e.FRAME_RATE_DROP="frame:rate:drop",e.INDEX_CREATED="index:created",e.INDEX_UPDATED="index:updated",e.INDEX_OPTIMIZED="index:optimized",e.ARCHETYPE_CREATED="archetype:created",e.ARCHETYPE_ENTITY_ADDED="archetype:entity:added",e.ARCHETYPE_ENTITY_REMOVED="archetype:entity:removed",e.DIRTY_MARK_ADDED="dirty:mark:added",e.DIRTY_BATCH_PROCESSED="dirty:batch:processed",e.ERROR_OCCURRED="error:occurred",e.WARNING_ISSUED="warning:issued",e.FRAMEWORK_INITIALIZED="framework:initialized",e.FRAMEWORK_SHUTDOWN="framework:shutdown",e.DEBUG_INFO="debug:info",e.DEBUG_STATS_UPDATED="debug:stats:updated"}(os||(os={})),function(e){e[e.LOWEST=0]="LOWEST",e[e.LOW=25]="LOW",e[e.NORMAL=50]="NORMAL",e[e.HIGH=75]="HIGH",e[e.HIGHEST=100]="HIGHEST",e[e.CRITICAL=200]="CRITICAL"}(as||(as={}));const cs={ENTITY:{CREATED:os.ENTITY_CREATED,DESTROYED:os.ENTITY_DESTROYED,ENABLED:os.ENTITY_ENABLED,DISABLED:os.ENTITY_DISABLED,TAG_ADDED:os.ENTITY_TAG_ADDED,TAG_REMOVED:os.ENTITY_TAG_REMOVED,NAME_CHANGED:os.ENTITY_NAME_CHANGED},COMPONENT:{ADDED:os.COMPONENT_ADDED,REMOVED:os.COMPONENT_REMOVED,MODIFIED:os.COMPONENT_MODIFIED,ENABLED:os.COMPONENT_ENABLED,DISABLED:os.COMPONENT_DISABLED},SYSTEM:{ADDED:os.SYSTEM_ADDED,REMOVED:os.SYSTEM_REMOVED,ENABLED:os.SYSTEM_ENABLED,DISABLED:os.SYSTEM_DISABLED,PROCESSING_START:os.SYSTEM_PROCESSING_START,PROCESSING_END:os.SYSTEM_PROCESSING_END,ERROR:os.SYSTEM_ERROR},PERFORMANCE:{WARNING:os.PERFORMANCE_WARNING,CRITICAL:os.PERFORMANCE_CRITICAL,MEMORY_HIGH:os.MEMORY_USAGE_HIGH,FRAME_DROP:os.FRAME_RATE_DROP}};class hs{static isValid(e){return this.validTypes.has(e)}static getAllValidTypes(){return Array.from(this.validTypes)}static addCustomType(e){this.validTypes.add(e)}static removeCustomType(e){this.validTypes.delete(e)}}hs.validTypes=new Set([...Object.values(os),...Object.values(cs.ENTITY),...Object.values(cs.COMPONENT),...Object.values(cs.SYSTEM),...Object.values(cs.PERFORMANCE)]);class ls extends ct{constructor(e){super(e)}process(e){this.processSystem()}}class us extends ct{constructor(e){super(e)}process(e){}}class ds extends ct{constructor(e,t){super(t),this.acc=0,this.intervalRemainder=0,this.interval=e}onCheckProcessing(){return this.acc+=n.deltaTime,this.acc>=this.interval&&(this.intervalRemainder=this.acc-this.interval,this.acc=0,!0)}getIntervalDelta(){return this.interval+this.intervalRemainder}}class ms{constructor(){this.adapter=null,this.logger=$("PlatformManager")}static getInstance(){return ms.instance||(ms.instance=new ms),ms.instance}getAdapter(){if(!this.adapter)throw new Error("平台适配器未注册,请调用 registerAdapter() 注册适配器");return this.adapter}registerAdapter(e){this.adapter=e,this.logger.info(`平台适配器已注册: ${e.name}`,{name:e.name,version:e.version,supportsWorker:e.isWorkerSupported(),supportsSharedArrayBuffer:e.isSharedArrayBufferSupported(),hardwareConcurrency:e.getHardwareConcurrency()})}hasAdapter(){return null!==this.adapter}getAdapterInfo(){return this.adapter?{name:this.adapter.name,version:this.adapter.version,config:this.adapter.getPlatformConfig()}:null}supportsFeature(e){if(!this.adapter)return!1;const t=this.adapter.getPlatformConfig();switch(e){case"worker":return this.adapter.isWorkerSupported();case"shared-array-buffer":return this.adapter.isSharedArrayBufferSupported();case"transferable-objects":return t.supportsTransferableObjects;case"module-worker":return t.supportsModuleWorker;default:return!1}}getBasicWorkerConfig(){if(!this.adapter)return{platformSupportsWorker:!1,platformSupportsSharedArrayBuffer:!1,platformMaxWorkerCount:1,platformLimitations:{}};const e=this.adapter.getPlatformConfig();return{platformSupportsWorker:this.adapter.isWorkerSupported(),platformSupportsSharedArrayBuffer:this.adapter.isSharedArrayBufferSupported(),platformMaxWorkerCount:e.maxWorkerCount,platformLimitations:e.limitations||{}}}async getFullPlatformConfig(){if(!this.adapter)throw new Error("平台适配器未注册");return"function"==typeof this.adapter.getPlatformConfigAsync?await this.adapter.getPlatformConfigAsync():this.adapter.getPlatformConfig()}}class ps extends ct{constructor(e,t={}){super(e),this.workerPool=null,this.isProcessing=!1,this.sharedBuffer=null,this.sharedFloatArray=null,this.hasLoggedSyncMode=!1,this.platformAdapter=ms.getInstance().getAdapter();const n=t.workerCount??this.getMaxSystemWorkerCount(),s=this.getMaxSystemWorkerCount(),i=Math.min(n,s);n>s&&this.logger.warn(`请求 ${n} 个Worker,但系统最多支持 ${s} 个。实际使用 ${i} 个Worker。`),this.config={enableWorker:t.enableWorker??!0,workerCount:i,systemConfig:t.systemConfig,...void 0!==t.entitiesPerWorker&&{entitiesPerWorker:t.entitiesPerWorker},useSharedArrayBuffer:t.useSharedArrayBuffer??this.isSharedArrayBufferSupported(),entityDataSize:t.entityDataSize??this.getDefaultEntityDataSize(),maxEntities:t.maxEntities??1e4,...void 0!==t.workerScriptPath&&{workerScriptPath:t.workerScriptPath}},this.config.enableWorker&&this.isWorkerSupported()&&(this.config.useSharedArrayBuffer&&this.initializeSharedArrayBuffer(),this.initializeWorkerPool())}isWorkerSupported(){return this.platformAdapter.isWorkerSupported()}isSharedArrayBufferSupported(){return this.platformAdapter.isSharedArrayBufferSupported()}getMaxSystemWorkerCount(){return this.platformAdapter.getPlatformConfig().maxWorkerCount}initializeSharedArrayBuffer(){try{if(!this.isSharedArrayBufferSupported())return this.logger.warn(`${this.systemName}: 平台不支持SharedArrayBuffer,降级到单Worker模式以保证数据处理完整性`),this.config.useSharedArrayBuffer=!1,void(this.config.workerCount=1);const e=this.config.maxEntities*this.config.entityDataSize*4;this.sharedBuffer=this.platformAdapter.createSharedArrayBuffer(e),this.sharedBuffer&&(this.sharedFloatArray=new Float32Array(this.sharedBuffer)),this.logger.info(`${this.systemName}: SharedArrayBuffer初始化成功 (${e} 字节)`)}catch(e){this.logger.warn(`${this.systemName}: SharedArrayBuffer初始化失败,降级到单Worker模式以保证数据处理完整性`,e),this.config.useSharedArrayBuffer=!1,this.sharedBuffer=null,this.sharedFloatArray=null,this.config.workerCount=1}}initializeWorkerPool(){try{const e=this.platformAdapter.getPlatformConfig(),t=[];let n;if(this.config.workerScriptPath)n=this.config.workerScriptPath,this.logger.info(`${this.systemName}: 使用外部Worker文件: ${n}`);else{if(e.limitations?.noEval)return this.logger.error(`${this.systemName}: 当前平台不支持动态Worker脚本,请配置 workerScriptPath 指定预编译的Worker文件`),void(this.config.enableWorker=!1);{const t=this.createWorkerScript();n=(e.workerScriptPrefix||"")+t}}for(let e=0;e<this.config.workerCount;e++)try{const s=this.platformAdapter.createWorker(n,{name:`WorkerEntitySystem-${e}`});t.push(s)}catch(t){throw this.logger.error(`创建Worker ${e} 失败:`,t),t}this.workerPool=new fs(t)}catch(e){this.logger.error(`${this.systemName}: Worker池初始化失败`,e),this.config.enableWorker=!1}}createWorkerScript(){const e=this.workerProcess.toString().match(/\{([\s\S]*)\}/);if(!e)throw new Error("无法解析workerProcess方法");const t=e[1],n=this.config.entityDataSize,s=this.getSharedArrayBufferProcessFunction?.()||null;let i="";if(s){const e=s.toString().match(/\{([\s\S]*)\}/);e&&(i=e[1]??"")}return`\n // Worker脚本 - 支持SharedArrayBuffer\n let sharedFloatArray = null;\n const ENTITY_DATA_SIZE = ${n};\n\n self.onmessage = function(e) {\n const { type, id, entities, deltaTime, systemConfig, startIndex, endIndex, sharedBuffer } = e.data;\n\n\n try {\n // 处理SharedArrayBuffer初始化\n if (type === 'init' && sharedBuffer) {\n sharedFloatArray = new Float32Array(sharedBuffer);\n self.postMessage({ type: 'init', success: true });\n return;\n }\n\n // 处理SharedArrayBuffer数据\n if (type === 'shared' && sharedFloatArray) {\n processSharedArrayBuffer(startIndex, endIndex, deltaTime, systemConfig);\n self.postMessage({ id, result: null }); // SharedArrayBuffer不需要返回数据\n return;\n }\n\n // 传统处理方式\n if (entities) {\n // 定义处理函数\n function workerProcess(entities, deltaTime, systemConfig) {\n ${t}\n }\n\n // 执行处理\n const result = workerProcess(entities, deltaTime, systemConfig);\n\n // 处理Promise返回值\n if (result && typeof result.then === 'function') {\n result.then(finalResult => {\n self.postMessage({ id, result: finalResult });\n }).catch(error => {\n self.postMessage({ id, error: error.message });\n });\n } else {\n self.postMessage({ id, result });\n }\n }\n } catch (error) {\n self.postMessage({ id, error: error.message });\n }\n };\n\n // SharedArrayBuffer处理函数 - 由子类定义\n function processSharedArrayBuffer(startIndex, endIndex, deltaTime, systemConfig) {\n if (!sharedFloatArray) return;\n\n ${i?`\n // 用户定义的处理函数\n const userProcessFunction = function(sharedFloatArray, startIndex, endIndex, deltaTime, systemConfig) {\n ${i}\n };\n userProcessFunction(sharedFloatArray, startIndex, endIndex, deltaTime, systemConfig);\n `:""}\n }\n `}process(e){if(!this.isProcessing){this.isProcessing=!0;try{this.config.enableWorker&&this.workerPool?this.config.useSharedArrayBuffer&&this.sharedFloatArray&&this.isSharedArrayBufferSupported()?this.processWithSharedArrayBuffer(e).finally(()=>{this.isProcessing=!1}):(this.config.useSharedArrayBuffer&&this.logger.info(`${this.systemName}: 本帧降级到传统Worker模式`),this.processWithWorker(e).finally(()=>{this.isProcessing=!1})):(this.hasLoggedSyncMode||(this.logger.info(`${this.systemName}: Worker不可用,使用同步处理`),this.hasLoggedSyncMode=!0),this.processSynchronously(e),this.isProcessing=!1)}catch(e){throw this.isProcessing=!1,this.logger.error(`${this.systemName}: 处理失败`,e),e}}}async processWithSharedArrayBuffer(e){if(!this.sharedFloatArray)throw new Error("SharedArrayBuffer not initialized");this.writeEntitiesToSharedBuffer(e);const t=this.createSharedArrayBufferTasks(e.length);await Promise.all(t),this.readResultsFromSharedBuffer(e)}async processWithWorker(e){const t=[];for(let n=0;n<e.length;n++)t[n]=this.extractEntityData(e[n]);const s=this.createBatches(t),i=n.deltaTime,r=s.map(e=>this.workerPool.execute({entities:e,deltaTime:i,systemConfig:this.config.systemConfig})),o=await Promise.all(r);let a=0;for(const t of o)for(const n of t){if(a<e.length){const t=e[a];t&&n&&this.applyResult(t,n)}a++}}processSynchronously(e){const t=e.map(e=>this.extractEntityData(e)),s=n.deltaTime,i=this.workerProcess(t,s,this.config.systemConfig);i&&"function"==typeof i.then?i.then(t=>{e.forEach((e,n)=>{this.applyResult(e,t[n])})}):e.forEach((e,t)=>{this.applyResult(e,i[t])})}createBatches(e){const t=this.config.workerCount,n=[];if(this.config.entitiesPerWorker){const s=this.config.entitiesPerWorker;for(let t=0;t<e.length;t+=s){const i=Math.min(t+s,e.length);n.push(e.slice(t,i))}n.length>t&&this.logger.warn(`${this.systemName}: 创建了 ${n.length} 个批次,但只有 ${t} 个Worker。某些Worker将依次处理多个批次。`)}else{const s=Math.ceil(e.length/t);for(let i=0;i<t;i++){const t=i*s,r=Math.min(t+s,e.length);t<e.length&&n.push(e.slice(t,r))}}return n}writeEntitiesToSharedBuffer(e){if(this.sharedFloatArray)for(let t=0;t<e.length&&t<this.config.maxEntities;t++){const n=e[t],s=this.extractEntityData(n),i=t*this.config.entityDataSize;this.writeEntityToBuffer(s,i)}}createSharedArrayBufferTasks(e){const t=[];if(this.config.entitiesPerWorker){const s=this.config.entitiesPerWorker,i=Math.ceil(e/s),r=this.config.workerCount;i>r&&this.logger.warn(`${this.systemName}: 需要 ${i} 个任务处理 ${e} 个实体(每任务 ${s} 个),但只有 ${r} 个Worker。某些Worker将依次处理多个任务。`);for(let i=0;i<e;i+=s){const r=i,o=Math.min(i+s,e),a=this.workerPool.executeSharedBuffer({startIndex:r,endIndex:o,deltaTime:n.deltaTime,systemConfig:this.config.systemConfig});t.push(a)}}else{const s=Math.ceil(e/this.config.workerCount);for(let i=0;i<this.config.workerCount;i++){const r=i*s,o=Math.min(r+s,e);if(r<e){const e=this.workerPool.executeSharedBuffer({startIndex:r,endIndex:o,deltaTime:n.deltaTime,systemConfig:this.config.systemConfig});t.push(e)}}}return t}readResultsFromSharedBuffer(e){if(this.sharedFloatArray)for(let t=0;t<e.length&&t<this.config.maxEntities;t++){const n=e[t],s=t*this.config.entityDataSize,i=this.readEntityFromBuffer(s);i&&this.applyResult(n,i)}}updateConfig(e){const t={...this.config};if(void 0!==e.workerCount){const t=this.getMaxSystemWorkerCount(),n=Math.min(e.workerCount,t);e.workerCount>t&&this.logger.warn(`请求 ${e.workerCount} 个Worker,但系统最多支持 ${t} 个。实际使用 ${n} 个Worker。`),e.workerCount=n}Object.assign(this.config,e),t.useSharedArrayBuffer===this.config.useSharedArrayBuffer?t.workerCount===this.config.workerCount?(!this.config.enableWorker&&this.workerPool&&(this.workerPool.destroy(),this.workerPool=null),this.config.enableWorker&&!this.workerPool&&this.isWorkerSupported()&&this.initializeWorkerPool()):this.reinitializeWorkerPool():this.reinitializeWorkerSystem()}reinitializeWorkerSystem(){this.workerPool&&(this.workerPool.destroy(),this.workerPool=null),this.sharedBuffer=null,this.sharedFloatArray=null,this.config.useSharedArrayBuffer||(this.config.workerCount=1),this.config.enableWorker&&this.isWorkerSupported()&&(this.config.useSharedArrayBuffer&&this.initializeSharedArrayBuffer(),this.initializeWorkerPool())}reinitializeWorkerPool(){this.workerPool&&(this.workerPool.destroy(),this.workerPool=null),this.config.enableWorker&&this.isWorkerSupported()&&this.initializeWorkerPool()}getWorkerInfo(){let e="sync";return this.config.enableWorker&&this.workerPool&&(e=this.config.useSharedArrayBuffer&&this.sharedFloatArray&&this.isSharedArrayBufferSupported()?"shared-buffer":"worker"),{enabled:this.config.enableWorker,workerCount:this.config.workerCount,...void 0!==this.config.entitiesPerWorker&&{entitiesPerWorker:this.config.entitiesPerWorker},maxSystemWorkerCount:this.getMaxSystemWorkerCount(),isProcessing:this.isProcessing,sharedArrayBufferSupported:this.isSharedArrayBufferSupported(),sharedArrayBufferEnabled:this.config.useSharedArrayBuffer,currentMode:e}}onDestroy(){super.onDestroy(),this.workerPool&&(this.workerPool.destroy(),this.workerPool=null)}getLoggerName(){return J(this)}}class fs{constructor(e){this.workers=[],this.taskQueue=[],this.busyWorkers=new Set,this.taskCounter=0,this.workers=e;for(let t=0;t<e.length;t++){const n=e[t];n&&(n.onMessage(e=>this.handleWorkerMessage(t,e.data)),n.onError(e=>this.handleWorkerError(t,e)))}}executeSharedBuffer(e){return new Promise((t,n)=>{const s={id:"shared-task-"+ ++this.taskCounter,data:{...e,type:"shared"},resolve:()=>t(),reject:n};this.taskQueue.push(s),this.processQueue()})}execute(e){return new Promise((t,n)=>{const s={id:"task-"+ ++this.taskCounter,data:e,resolve:e=>{t(e)},reject:n};this.taskQueue.push(s),this.processQueue()})}processQueue(){if(0!==this.taskQueue.length)for(let e=0;e<this.workers.length;e++)if(!this.busyWorkers.has(e)&&this.taskQueue.length>0){const t=this.taskQueue.shift();this.busyWorkers.add(e);const n=this.workers[e];n.postMessage({id:t.id,...t.data}),n._currentTask=t}}handleWorkerMessage(e,t){const n=this.workers[e],s=n._currentTask;s&&(this.busyWorkers.delete(e),n._currentTask=null,t.error?s.reject(new Error(t.error)):s.resolve(t.result),this.processQueue())}handleWorkerError(e,t){const n=this.workers[e],s=n._currentTask;s&&(this.busyWorkers.delete(e),n._currentTask=null,s.reject(new Error(t.message))),this.processQueue()}destroy(){for(const e of this.workers)e.terminate();this.workers.length=0,this.taskQueue.length=0,this.busyWorkers.clear()}}let gs=class extends He{constructor(e="",t="",n=!1){super(),this.sourcePrefabGuid="",this.sourcePrefabPath="",this.isRoot=!1,this.rootInstanceEntityId=null,this.modifiedProperties=[],this.instantiatedAt=0,this.originalValues={},this.sourcePrefabGuid=e,this.sourcePrefabPath=t,this.isRoot=n,this.instantiatedAt=Date.now()}markPropertyModified(e,t){const n=`${e}.${t}`;this.modifiedProperties.includes(n)||this.modifiedProperties.push(n)}isPropertyModified(e,t){const n=`${e}.${t}`;return this.modifiedProperties.includes(n)}clearPropertyModified(e,t){const n=`${e}.${t}`,s=this.modifiedProperties.indexOf(n);-1!==s&&this.modifiedProperties.splice(s,1)}clearAllModifications(){this.modifiedProperties=[],this.originalValues={}}storeOriginalValue(e,t,n){const s=`${e}.${t}`;s in this.originalValues||(this.originalValues[s]=this.deepClone(n))}getOriginalValue(e){return this.originalValues[e]}hasOriginalValue(e,t){return`${e}.${t}`in this.originalValues}deepClone(e){if(null==e)return e;if("object"==typeof e)try{return JSON.parse(JSON.stringify(e))}catch{return e}return e}};e([Qe(),t("design:type",String)],gs.prototype,"sourcePrefabGuid",void 0),e([Qe(),t("design:type",String)],gs.prototype,"sourcePrefabPath",void 0),e([Qe(),t("design:type",Boolean)],gs.prototype,"isRoot",void 0),e([Qe(),t("design:type",Object)],gs.prototype,"rootInstanceEntityId",void 0),e([Qe(),t("design:type",Array)],gs.prototype,"modifiedProperties",void 0),e([Qe(),t("design:type",Number)],gs.prototype,"instantiatedAt",void 0),e([Qe(),t("design:type",Object)],gs.prototype,"originalValues",void 0),gs=e([U("PrefabInstance",{editor:{hideInInspector:!0}}),Ue({version:1,typeId:"PrefabInstance"}),t("design:paramtypes",[String,String,Boolean])],gs);class ys{constructor(e=!1){this.eventIdCounter=0,this.isDebugMode=!1,this.eventSystem=new sn,this.isDebugMode=e}emit(e,t,n=!1){this.validateEventType(e);const s=n?this.enhanceEventData(e,t):t;this.isDebugMode&&ys._logger.info(`发射事件: ${e}`,s),this.eventSystem.emitSync(e,s)}async emitAsync(e,t,n=!1){this.validateEventType(e);const s=n?this.enhanceEventData(e,t):t;this.isDebugMode&&ys._logger.info(`发射异步事件: ${e}`,s),await this.eventSystem.emit(e,s)}on(e,t,n={}){this.validateEventType(e);const s={once:n.once||!1,priority:n.priority||as.NORMAL,async:n.async||!1};return n.thisArg&&(s.thisArg=n.thisArg),this.isDebugMode&&ys._logger.info(`添加监听器: ${e}`,s),this.eventSystem.on(e,t,s)}once(e,t,n={}){return this.on(e,t,{...n,once:!0})}onAsync(e,t,n={}){return this.on(e,t,{...n,async:!0})}off(e,t){return this.isDebugMode&&ys._logger.info(`移除监听器: ${t} 事件: ${e}`),this.eventSystem.off(e,t)}offAll(e){this.isDebugMode&&ys._logger.info(`移除所有监听器: ${e}`),this.eventSystem.offAll(e)}hasListeners(e){return this.eventSystem.hasListeners(e)}getStats(e){const t=this.eventSystem.getStats(e);if(t instanceof Map){const e=new Map;return t.forEach((t,n)=>{e.set(n,this.convertEventStats(t))}),e}return this.convertEventStats(t)}clear(){this.isDebugMode&&ys._logger.info("清空所有监听器"),this.eventSystem.clear()}setEnabled(e){this.eventSystem.setEnabled(e)}setDebugMode(e){this.isDebugMode=e}setMaxListeners(e){this.eventSystem.setMaxListeners(e)}getListenerCount(e){return this.eventSystem.getListenerCount(e)}setBatchConfig(e,t,n){this.eventSystem.setBatchConfig(e,{batchSize:t,delay:n,enabled:!0})}flushBatch(e){this.eventSystem.flushBatch(e)}resetStats(e){this.eventSystem.resetStats(e)}emitEntityCreated(e){this.emit(os.ENTITY_CREATED,e)}emitEntityDestroyed(e){this.emit(os.ENTITY_DESTROYED,e)}emitComponentAdded(e){this.emit(os.COMPONENT_ADDED,e)}emitComponentRemoved(e){this.emit(os.COMPONENT_REMOVED,e)}emitSystemAdded(e){this.emit(os.SYSTEM_ADDED,e)}emitSystemRemoved(e){this.emit(os.SYSTEM_REMOVED,e)}emitSceneChanged(e){this.emit(os.SCENE_ACTIVATED,e)}emitPerformanceWarning(e){this.emit(os.PERFORMANCE_WARNING,e)}onEntityCreated(e,t){return this.on(os.ENTITY_CREATED,e,t)}onComponentAdded(e,t){return this.on(os.COMPONENT_ADDED,e,t)}onSystemError(e,t){return this.on(os.SYSTEM_ERROR,e,t)}onPerformanceWarning(e,t){return this.on(os.PERFORMANCE_WARNING,e,t)}validateEventType(e){this.isDebugMode&&(hs.isValid(e)||(ys._logger.warn(`未知事件类型: ${e}`),hs.addCustomType(e)))}enhanceEventData(e,t){if(null==t)return{timestamp:Date.now(),eventId:`${e}_${++this.eventIdCounter}`,source:"EventBus"};const n=t;return n.timestamp||(n.timestamp=Date.now()),n.eventId||(n.eventId=`${e}_${++this.eventIdCounter}`),n.source||(n.source="EventBus"),n}convertEventStats(e){return{eventType:e.eventType,listenerCount:e.listenerCount,triggerCount:e.triggerCount,totalExecutionTime:e.totalExecutionTime,averageExecutionTime:e.averageExecutionTime,lastTriggerTime:e.lastTriggerTime}}}ys._logger=$("EventBus");class _s{static getInstance(e=!1){return this.instance||(this.instance=new ys(e)),this.instance}static reset(e=!1){return this.instance&&this.instance.clear(),this.instance=new ys(e),this.instance}}class Ss{static registerComponentMigration(e,t,n,s){this.componentMigrations.has(e)||this.componentMigrations.set(e,new Map);this.componentMigrations.get(e).set(t,s)}static registerSceneMigration(e,t,n){this.sceneMigrations.set(e,n)}static migrateComponent(e,t){const n=e.version;if(n===t)return e;const s=this.componentMigrations.get(e.type);if(!s)return console.warn(`No migration path found for component ${e.type}`),e;const i={...e};let r=n;for(;r<t;){const t=s.get(r);if(!t){console.warn(`Missing migration from version ${r} to ${r+1} for ${e.type}`);break}i.data=t(i.data,r,r+1),r++}return i.version=r,i}static migrateScene(e,t){const n=e.version;if(n===t)return e;let s={...e},i=n;for(;i<t;){const e=this.sceneMigrations.get(i);if(!e){console.warn(`Missing scene migration from version ${i} to ${i+1}`);break}s=e(s,i,i+1),i++}return s.version=i,s=this.migrateSceneComponents(s),s}static migrateSceneComponents(e){const t={...e};return t.entities=e.entities.map(t=>({...t,components:t.components.map(t=>{const n=e.componentTypeRegistry.find(e=>e.typeName===t.type);return n&&n.version!==t.version?this.migrateComponent(t,n.version):t}),children:this.migrateEntitiesComponents(t.children,e.componentTypeRegistry)})),t}static migrateEntitiesComponents(e,t){return e.map(e=>({...e,components:e.components.map(e=>{const n=t.find(t=>t.typeName===e.type);return n&&n.version!==e.version?this.migrateComponent(e,n.version):e}),children:this.migrateEntitiesComponents(e.children,t)}))}static clearMigrations(){this.componentMigrations.clear(),this.sceneMigrations.clear()}static getComponentMigrationPath(e){const t=this.componentMigrations.get(e);return t?Array.from(t.keys()).sort((e,t)=>e-t):[]}static getSceneMigrationPath(){return Array.from(this.sceneMigrations.keys()).sort((e,t)=>e-t)}static canMigrateComponent(e,t,n){if(t===n)return!0;const s=this.componentMigrations.get(e);if(!s)return!1;for(let e=t;e<n;e++)if(!s.has(e))return!1;return!0}static canMigrateScene(e,t){if(e===t)return!0;for(let n=e;n<t;n++)if(!this.sceneMigrations.has(n))return!1;return!0}}Ss.componentMigrations=new Map,Ss.sceneMigrations=new Map;class vs{constructor(){this.fromVersion=1,this.toVersion=2}forComponent(e){return this.componentType=e,this}fromVersionToVersion(e,t){return this.fromVersion=e,this.toVersion=t,this}migrate(e){this.componentType?Ss.registerComponentMigration(this.componentType,this.fromVersion,this.toVersion,e):Ss.registerSceneMigration(this.fromVersion,this.toVersion,e)}}const Cs=1;class bs{static createPrefab(e,t,n){const s=t.includeChildren??!0,i=un.serialize(e,s,n),r=this.toPrefabEntity(i,!0),{componentTypes:o,componentTypeRegistry:a}=this.collectComponentTypes(r),c=Date.now(),h={name:t.name,createdAt:c,modifiedAt:c,componentTypes:o,referencedAssets:[]};return t.description&&(h.description=t.description),t.tags&&(h.tags=t.tags),{version:1,metadata:h,root:r,componentTypeRegistry:a}}static instantiate(e,t,n,s={}){const{parentId:i,name:r,preserveIds:o=!1,trackInstance:a=!0}=s,c=t.getSystem(ht)??null;let h=1;const{rootEntities:l,allEntities:u}=un.deserializeEntities([e.root],n,()=>{for(;t.findEntityById(h);)h++;return h++},o,t,c),d=l[0];if(!d)throw new Error("Failed to instantiate prefab: no root entity created");r&&(d.name=r);for(const e of u.values())t.entities.add(e);if(void 0!==i&&c){const e=t.findEntityById(i);e&&c.setParent(d,e)}if(a){const t=e.metadata.guid||"";this.addPrefabInstanceComponents(d,u,t,"",c)}return d}static toPrefabEntity(e,t){return{...e,isPrefabRoot:t,children:e.children.map(e=>this.toPrefabEntity(e,!1))}}static collectComponentTypes(e){const t=new Map,n=e=>{for(const n of e.components)t.has(n.type)||t.set(n.type,n.version);for(const t of e.children)n(t)};n(e);return{componentTypes:Array.from(t.keys()),componentTypeRegistry:Array.from(t.entries()).map(([e,t])=>({typeName:e,version:t}))}}static addPrefabInstanceComponents(e,t,n,s,i){const r=e.id,o=new gs(n,s,!0);o.rootInstanceEntityId=r,e.addComponent(o);for(const e of t.values()){if(e.id===r)continue;const t=new gs(n,s,!1);t.rootInstanceEntityId=r,e.addComponent(t)}}static isPrefabInstance(e){return e.hasComponent(gs)}static getSourcePrefabGuid(e){const t=e.getComponent(gs);return t?.sourcePrefabGuid||null}static getPrefabInstanceRoot(e){const t=e.getComponent(gs);if(!t||!t.rootInstanceEntityId)return null;const n=e.scene;return n&&n.findEntityById(t.rootInstanceEntityId)||null}static serialize(e,t=!0){return JSON.stringify(e,null,t?2:void 0)}static deserialize(e){const t=JSON.parse(e);if(!t.version||!t.metadata||!t.root)throw new Error("Invalid prefab data format");return t}static validate(e){const t=[];return"number"!=typeof e.version&&t.push("Invalid or missing version"),e.metadata?(e.metadata.name||t.push("Missing metadata.name"),Array.isArray(e.metadata.componentTypes)||t.push("Invalid metadata.componentTypes")):t.push("Missing metadata"),e.root?this.validateEntity(e.root,t,"root"):t.push("Missing root entity"),Array.isArray(e.componentTypeRegistry)||t.push("Invalid componentTypeRegistry"),t.length>0?{valid:!1,errors:t}:{valid:!0}}static validateEntity(e,t,n){"number"!=typeof e.id&&t.push(`${n}: Invalid or missing id`),"string"!=typeof e.name&&t.push(`${n}: Invalid or missing name`),Array.isArray(e.components)||t.push(`${n}: Invalid or missing components`),Array.isArray(e.children)?e.children.forEach((e,s)=>{this.validateEntity(e,t,`${n}.children[${s}]`)}):t.push(`${n}: Invalid or missing children`)}}const Es={NONE:0,FOLDER:4096,HIDDEN:8192,LOCKED:16384,EDITOR_ONLY:32768,PREFAB_INSTANCE:256,PREFAB_ROOT:512};function Ts(e,t){return 0!==(e&t)}function ws(e,t){return e|t}function Ms(e,t){return e&~t}function Is(e){return Ts(e,Es.FOLDER)}function As(e){return Ts(e,Es.HIDDEN)}function ks(e){return Ts(e,Es.LOCKED)}function Ds(e,t){const n=e.getComponent(t);if(!n)throw new Error(`Component ${t.name} not found on entity ${e.name} (id: ${e.id})`);return n}function xs(e,t){const n=e.getComponent(t);return null!==n?n:void 0}function Os(e,...t){return t.map(t=>e.getComponent(t))}function Ps(e,...t){return t.every(t=>e.hasComponent(t))}function Rs(e,...t){return t.some(t=>e.hasComponent(t))}function zs(e,t,n){return e.addComponent(t),n(t),e}function Fs(e,t,n){let s=e.getComponent(t);return s||(s=n(),e.addComponent(s)),s}function Ns(e,t,n){const s=e.getComponent(t);return!!s&&(Object.assign(s,n),!0)}class Bs{constructor(e){this._entity=e}with(e){return this._entity.addComponent(e),this}withConfigured(e,t){return this._entity.addComponent(e),t(e),this}withTag(e){return this._entity.tag=e,this}withName(e){return this._entity.name=e,this}withActive(e){return this._entity.active=e,this}withEnabled(e){return this._entity.enabled=e,this}withUpdateOrder(e){return this._entity.updateOrder=e,this}withChild(e){const t=this._entity.scene?.getSystem(ht);return t?.setParent(e,this._entity),this}build(){return this._entity}get entity(){return this._entity}}function $s(e){return new Bs(e)}class Ls{static getType(e){return e.constructor}}class Ws{static toNumber(e){return null==e?0:Number(e)}}function Hs(e){return"function"==typeof e&&e.prototype instanceof He}function js(e){return e.every(Hs)}class Gs{static detect(){const e=[];let t,n="unknown",s=!1;return"undefined"!=typeof globalThis&&e.push("globalThis"),"undefined"!=typeof window&&e.push("window"),"undefined"!=typeof self&&e.push("self"),this.isNodeJS()?(n="nodejs",s=!0,t="NodeAdapter",e.push("nodejs","process","require")):this.isWeChatMiniGame()?(n="wechat-minigame",s=!0,t="WeChatMiniGameAdapter",e.push("wx","wechat-minigame")):this.isByteDanceMiniGame()?(n="bytedance-minigame",s=!0,t="ByteDanceMiniGameAdapter",e.push("tt","bytedance-minigame")):this.isAlipayMiniGame()?(n="alipay-minigame",s=!0,t="AlipayMiniGameAdapter",e.push("my","alipay-minigame")):this.isBaiduMiniGame()?(n="baidu-minigame",s=!0,t="BaiduMiniGameAdapter",e.push("swan","baidu-minigame")):this.isBrowser()&&(n="browser",s=!0,t="BrowserAdapter",e.push("browser")),"undefined"!=typeof Worker&&e.push("Worker"),"undefined"!=typeof SharedArrayBuffer&&e.push("SharedArrayBuffer"),"undefined"!=typeof navigator&&navigator.hardwareConcurrency&&e.push("hardwareConcurrency"),"undefined"!=typeof performance&&"function"==typeof performance.now&&e.push("performance.now"),"undefined"!=typeof Blob&&e.push("Blob"),"undefined"!=typeof URL&&"function"==typeof URL.createObjectURL&&e.push("URL.createObjectURL"),{platform:n,confident:s,features:e,...t&&{adapterClass:t}}}static isWeChatMiniGame(){if(void 0!==globalThis.wx){const e=globalThis.wx;return!!(e.getSystemInfo&&e.createCanvas&&e.createImage)}return!1}static isByteDanceMiniGame(){if(void 0!==globalThis.tt){const e=globalThis.tt;return!!(e.getSystemInfo&&e.createCanvas&&e.createImage)}return!1}static isNodeJS(){try{return!("undefined"==typeof process||!process.versions||!process.versions.node||"undefined"==typeof require||"undefined"==typeof module||"undefined"==typeof exports||"undefined"!=typeof window||"undefined"!=typeof document)}catch{return!1}}static isAlipayMiniGame(){if(void 0!==globalThis.my){const e=globalThis.my;return!(!e.getSystemInfo||!e.createCanvas)}return!1}static isBaiduMiniGame(){if(void 0!==globalThis.swan){const e=globalThis.swan;return!(!e.getSystemInfo||!e.createCanvas)}return!1}static isBrowser(){return"undefined"!=typeof window&&"undefined"!=typeof document&&"undefined"!=typeof navigator&&void 0!==window.location}static isTauriEnvironment(){return"undefined"!=typeof window&&("__TAURI__"in window||"__TAURI_INTERNALS__"in window)}static isEditorEnvironment(){return"undefined"!=typeof window&&(!!this.isTauriEnvironment()||"__ESENGINE_EDITOR__"in window)}static getDetailedInfo(){const e={};return e.userAgent="undefined"!=typeof navigator?navigator.userAgent:"unknown",e.platform="undefined"!=typeof navigator?navigator.platform:"unknown",e.globalObjects={window:"undefined"!=typeof window,document:"undefined"!=typeof document,navigator:"undefined"!=typeof navigator,wx:void 0!==globalThis.wx,tt:void 0!==globalThis.tt,my:void 0!==globalThis.my,swan:void 0!==globalThis.swan},e.workerSupport={Worker:"undefined"!=typeof Worker,SharedWorker:"undefined"!=typeof SharedWorker,ServiceWorker:"undefined"!=typeof navigator&&"serviceWorker"in navigator,SharedArrayBuffer:"undefined"!=typeof SharedArrayBuffer,crossOriginIsolated:"undefined"!=typeof self&&self.crossOriginIsolated},e.performance={performanceNow:"undefined"!=typeof performance&&"function"==typeof performance.now,hardwareConcurrency:"undefined"!=typeof navigator?navigator.hardwareConcurrency:void 0},e.apiSupport={Blob:"undefined"!=typeof Blob,URL:"undefined"!=typeof URL,createObjectURL:"undefined"!=typeof URL&&"function"==typeof URL.createObjectURL,ArrayBuffer:"undefined"!=typeof ArrayBuffer,TypedArrays:"undefined"!=typeof Float32Array},e}}function qs(e){return ms.getInstance().registerAdapter(e)}function Us(){return ms.getInstance().getAdapter()}function Qs(){return ms.getInstance().getBasicWorkerConfig()}function Vs(){return ms.getInstance().getFullPlatformConfig()}function Ys(e){return ms.getInstance().supportsFeature(e)}function Js(){return ms.getInstance().hasAdapter()}export{Ct as AdvancedProfilerCollector,Ce as After,yn as AutoProfiler,ve as Before,dn as BinarySerializer,R as BitMask64Utils,jt as Bits,b as COMPONENT_DEPENDENCIES,E as COMPONENT_EDITOR_OPTIONS,C as COMPONENT_TYPE_NAME,Zt as ChangeOperation,z as Colors,at as CommandBuffer,rt as CommandType,en as CompiledQuery,He as Component,ft as ComponentDataCollector,mt as ComponentPool,pt as ComponentPoolManager,G as ComponentRegistry,ln as ComponentSerializer,Ut as ComponentSparseSet,nt as ComponentStorage,F as ConsoleLogger,Jn as Core,Tn as CycleDependencyError,_t as DEFAULT_PROFILER_CONFIG,In as DEFAULT_STAGE_ORDER,Wn as DebugConfigService,Hn as DebugManager,ns as DebugPlugin,Le as DeepCopy,U as ECSComponent,os as ECSEventType,Fn as ECSFluentAPI,Q as ECSSystem,Tt as EMPTY_GUID,ne as ENTITY_REF_METADATA,cs as EVENT_TYPES,is as Emitter,Ie as EnableSoA,$t as Entity,lt as EntityDataCollector,kn as EntityHandleManager,Lt as EntityList,Ht as EntityProcessorList,re as EntityRef,un as EntitySerializer,ct as EntitySystem,Es as EntityTags,Dn as EpochManager,ys as EventBus,as as EventPriority,hs as EventTypeValidator,ke as Float32,Ae as Float64,ss as FuncPack,Mt as GEN_BITS,At as GEN_MASK,_s as GlobalEventBus,rs as GlobalManager,Xe as HierarchyComponent,ht as HierarchySystem,wt as INDEX_BITS,It as INDEX_MASK,Wt as IdentifierPool,Je as IgnoreSerialization,be as InSet,fn as IncrementalSerializer,c as InjectProperty,o as Injectable,Oe as Int16,De as Int32,Re as Int8,ds as IntervalSystem,P as LogLevel,B as Logger,N as LoggerManager,kt as MAX_ENTITIES,Dt as MAX_GENERATION,et as Matcher,vs as MigrationBuilder,xt as NULL_HANDLE,Ws as NumberExtension,Cs as PREFAB_FORMAT_VERSION,me as PROPERTY_METADATA,us as PassiveSystem,dt as PerformanceDataCollector,_ as PerformanceMonitor,y as PerformanceWarningType,Gs as PlatformDetector,ms as PlatformManager,qn as PluginManager,Qn as PluginServiceRegistry,jn as PluginState,S as Pool,v as PoolManager,gs as PrefabInstanceComponent,bs as PrefabSerializer,ls as ProcessingSystem,Sn as Profile,ot as ProfileCategory,vn as ProfileClass,vt as ProfilerSDK,pe as Property,tn as QuerySystem,Xt as ReactiveQuery,Kt as ReactiveQueryChangeType,ee as ReferenceTracker,Zn as RuntimeModeService,Kn as RuntimeModeToken,ye as SCHEDULING_METADATA,je as SERIALIZABLE_METADATA,Ge as SERIALIZE_FIELD,qe as SERIALIZE_OPTIONS,q as SYSTEM_TYPE_NAME,xn as Scene,gt as SceneDataCollector,Ln as SceneManager,pn as SceneSerializer,Ue as Serializable,mn as SerializationContext,Qe as Serialize,$e as SerializeArray,Ve as SerializeAsMap,Ye as SerializeAsSet,Ne as SerializeMap,Be as SerializeSet,En as ServiceContainer,bn as ServiceLifetime,We as SoAStorage,Gt as SparseSet,Se as Stage,ut as SystemDataCollector,Mn as SystemDependencyGraph,An as SystemScheduler,n as Time,s as Timer,g as TimerManager,sn as TypeSafeEventSystem,Ls as TypeUtils,Bs as TypedEntityBuilder,on as TypedQueryBuilder,rn as TypedQueryResult,Pe as Uint16,xe as Uint32,ze as Uint8,Fe as Uint8Clamped,a as Updatable,Ss as VersionMigrationManager,yt as WebSocketManager,ps as WorkerEntitySystem,$n as World,Yn as WorldManager,zs as addAndConfigure,ws as addEntityTag,$s as buildEntity,Nn as createECSAPI,Xn as createEditorModeService,u as createInstance,$ as createLogger,an as createQuery,Un as createServiceToken,es as createStandaloneModeService,Rt as genOf,bt as generateGUID,Qs as getBasicWorkerConfig,I as getComponentDependencies,A as getComponentEditorOptions,k as getComponentInstanceEditorOptions,M as getComponentInstanceTypeName,w as getComponentTypeName,Os as getComponents,Us as getCurrentAdapter,oe as getEntityRefMetadata,he as getEntityRefProperties,Vs as getFullPlatformConfig,Fs as getOrAddComponent,l as getPropertyInjectMetadata,fe as getPropertyMetadata,X as getSceneByEntityId,Ee as getSchedulingMetadata,Ke as getSerializationMetadata,J as getSystemInstanceTypeName,V as getSystemMetadata,Y as getSystemTypeName,p as getUpdatableMetadata,Ft as handleEquals,Nt as handleToString,Js as hasAdapter,Rs as hasAnyComponent,Ps as hasComponents,T as hasECSComponentDecorator,ae as hasEntityRef,Ts as hasEntityTag,ge as hasPropertyMetadata,Te as hasSchedulingMetadata,Pt as indexOf,d as injectProperties,js as isComponentArray,D as isComponentHiddenInInspector,x as isComponentInstanceHiddenInInspector,Hs as isComponentType,ce as isEntityRefProperty,Is as isFolder,As as isHidden,ks as isLocked,Ze as isSerializable,m as isUpdatable,Et as isValidGUID,zt as isValidHandle,Ot as makeHandle,cn as queryFor,hn as queryForAll,f as registerInjectable,qs as registerPlatformAdapter,Ms as removeEntityTag,Ds as requireComponent,W as resetLoggerColors,H as setGlobalLogLevel,L as setLoggerColors,j as setLoggerFactory,Ys as supportsFeature,xs as tryGetComponent,Ns as updateComponent};
|
|
2
|
+
//# sourceMappingURL=index.mjs.map
|