UNPKG

@esengine/ecs-framework

Version:

用于Laya、Cocos Creator等JavaScript游戏引擎的高性能ECS框架

3 lines 256 kB
!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?t(exports):"function"==typeof define&&define.amd?define(["exports"],t):t((e="undefined"!=typeof globalThis?globalThis:e||self).ECS={})}(this,(function(e){"use strict";function t(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,i=Array(t);n<t;n++)i[n]=e[n];return i}function n(e,t,n,i,r,s,o){try{var a=e[s](o),c=a.value}catch(e){return void n(e)}a.done?t(c):Promise.resolve(c).then(i,r)}function i(e){return function(){var t=this,i=arguments;return new Promise((function(r,s){var o=e.apply(t,i);function a(e){n(o,r,s,a,c,"next",e)}function c(e){n(o,r,s,a,c,"throw",e)}a(void 0)}))}}function r(e,t,n){if(l())return Reflect.construct.apply(null,arguments);var i=[null];i.push.apply(i,t);var r=new(e.bind.apply(e,i));return n&&p(r,n.prototype),r}function s(e,t){for(var n=0;n<t.length;n++){var i=t[n];i.enumerable=i.enumerable||!1,i.configurable=!0,"value"in i&&(i.writable=!0),Object.defineProperty(e,m(i.key),i)}}function o(e,t,n){return t&&s(e.prototype,t),n&&s(e,n),Object.defineProperty(e,"prototype",{writable:!1}),e}function a(e,n){var i="undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(i)return(i=i.call(e)).next.bind(i);if(Array.isArray(e)||(i=function(e,n){if(e){if("string"==typeof e)return t(e,n);var i={}.toString.call(e).slice(8,-1);return"Object"===i&&e.constructor&&(i=e.constructor.name),"Map"===i||"Set"===i?Array.from(e):"Arguments"===i||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(i)?t(e,n):void 0}}(e))||n){i&&(e=i);var r=0;return function(){return r>=e.length?{done:!0}:{done:!1,value:e[r++]}}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}function c(){return c=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var i in n)({}).hasOwnProperty.call(n,i)&&(e[i]=n[i])}return e},c.apply(null,arguments)}function u(e){return u=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(e){return e.__proto__||Object.getPrototypeOf(e)},u(e)}function h(e,t){e.prototype=Object.create(t.prototype),e.prototype.constructor=e,p(e,t)}function l(){try{var e=!Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){})))}catch(e){}return(l=function(){return!!e})()}function f(){ /*! regenerator-runtime -- Copyright (c) 2014-present, Facebook, Inc. -- license (MIT): https://github.com/babel/babel/blob/main/packages/babel-helpers/LICENSE */ var e,t,n="function"==typeof Symbol?Symbol:{},i=n.iterator||"@@iterator",r=n.toStringTag||"@@toStringTag";function s(n,i,r,s){var c=i&&i.prototype instanceof a?i:a,u=Object.create(c.prototype);return d(u,"_invoke",function(n,i,r){var s,a,c,u=0,h=r||[],l=!1,f={p:0,n:0,v:e,a:d,f:d.bind(e,4),d:function(t,n){return s=t,a=0,c=e,f.n=n,o}};function d(n,i){for(a=n,c=i,t=0;!l&&u&&!r&&t<h.length;t++){var r,s=h[t],d=f.p,p=s[2];n>3?(r=p===i)&&(c=s[(a=s[4])?5:(a=3,3)],s[4]=s[5]=e):s[0]<=d&&((r=n<2&&d<s[1])?(a=0,f.v=i,f.n=s[1]):d<p&&(r=n<3||s[0]>i||i>p)&&(s[4]=n,s[5]=i,f.n=p,a=0))}if(r||n>1)return o;throw l=!0,i}return function(r,h,p){if(u>1)throw TypeError("Generator is already running");for(l&&1===h&&d(h,p),a=h,c=p;(t=a<2?e:c)||!l;){s||(a?a<3?(a>1&&(f.n=-1),d(a,c)):f.n=c:f.v=c);try{if(u=2,s){if(a||(r="next"),t=s[r]){if(!(t=t.call(s,c)))throw TypeError("iterator result is not an object");if(!t.done)return t;c=t.value,a<2&&(a=0)}else 1===a&&(t=s.return)&&t.call(s),a<2&&(c=TypeError("The iterator does not provide a '"+r+"' method"),a=1);s=e}else if((t=(l=f.n<0)?c:n.call(i,f))!==o)break}catch(t){s=e,a=1,c=t}finally{u=1}}return{value:t,done:l}}}(n,r,s),!0),u}var o={};function a(){}function c(){}function u(){}t=Object.getPrototypeOf;var h=[][i]?t(t([][i]())):(d(t={},i,(function(){return this})),t),l=u.prototype=a.prototype=Object.create(h);function p(e){return Object.setPrototypeOf?Object.setPrototypeOf(e,u):(e.__proto__=u,d(e,r,"GeneratorFunction")),e.prototype=Object.create(l),e}return c.prototype=u,d(l,"constructor",u),d(u,"constructor",c),c.displayName="GeneratorFunction",d(u,r,"GeneratorFunction"),d(l),d(l,r,"Generator"),d(l,i,(function(){return this})),d(l,"toString",(function(){return"[object Generator]"})),(f=function(){return{w:s,m:p}})()}function d(e,t,n,i){var r=Object.defineProperty;try{r({},"",{})}catch(e){r=0}d=function(e,t,n,i){function s(t,n){d(e,t,(function(e){return this._invoke(t,n,e)}))}t?r?r(e,t,{value:n,enumerable:!i,configurable:!i,writable:!i}):e[t]=n:(s("next",0),s("throw",1),s("return",2))},d(e,t,n,i)}function p(e,t){return p=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(e,t){return e.__proto__=t,e},p(e,t)}function m(e){var t=function(e,t){if("object"!=typeof e||!e)return e;var n=e[Symbol.toPrimitive];if(void 0!==n){var i=n.call(e,t);if("object"!=typeof i)return i;throw new TypeError("@@toPrimitive must return a primitive value.")}return String(e)}(e,"string");return"symbol"==typeof t?t:t+""}function y(e){var t="function"==typeof Map?new Map:void 0;return y=function(e){if(null===e||!function(e){try{return-1!==Function.toString.call(e).indexOf("[native code]")}catch(t){return"function"==typeof e}}(e))return e;if("function"!=typeof e)throw new TypeError("Super expression must either be null or a function");if(void 0!==t){if(t.has(e))return t.get(e);t.set(e,n)}function n(){return r(e,arguments,u(this).constructor)}return n.prototype=Object.create(e.prototype,{constructor:{value:n,enumerable:!1,writable:!0,configurable:!0}}),p(n,e)},y(e)}function g(e,t,n,i){var r,s=arguments.length,o=s<3?t:null===i?i=Object.getOwnPropertyDescriptor(t,n):i;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)o=Reflect.decorate(e,t,n,i);else for(var a=e.length-1;a>=0;a--)(r=e[a])&&(o=(s<3?r(o):s>3?r(t,n,o):r(t,n))||o);return s>3&&o&&Object.defineProperty(t,n,o),o}function v(e,t){return function(n,i){t(n,i,e)}}function _(e,t){if("object"==typeof Reflect&&"function"==typeof Reflect.metadata)return Reflect.metadata(e,t)}"function"==typeof SuppressedError&&SuppressedError;var S=function(){function e(){}return e.update=function(e){this.unscaledDeltaTime=e,this.deltaTime=e*this.timeScale,this.unscaledTotalTime+=this.unscaledDeltaTime,this.totalTime+=this.deltaTime,this.frameCount++},e.sceneChanged=function(){this.frameCount=0,this.totalTime=0,this.unscaledTotalTime=0,this.deltaTime=0,this.unscaledDeltaTime=0},e.checkEvery=function(e,t){return this.totalTime-t>=e},e}();S.deltaTime=0,S.unscaledDeltaTime=0,S.totalTime=0,S.unscaledTotalTime=0,S.timeScale=1,S.frameCount=0;var C,E=function(){function e(){this._timeInSeconds=0,this._repeats=!1,this._isDone=!1,this._elapsedTime=0}var t=e.prototype;return t.getContext=function(){return this.context},t.reset=function(){this._elapsedTime=0},t.stop=function(){this._isDone=!0},t.tick=function(){return!this._isDone&&this._elapsedTime>this._timeInSeconds&&(this._elapsedTime-=this._timeInSeconds,this._onTime(this),this._isDone||this._repeats||(this._isDone=!0)),this._elapsedTime+=S.deltaTime,this._isDone},t.initialize=function(e,t,n,i){this._timeInSeconds=e,this._repeats=t,this.context=n,this._onTime=i.bind(n)},t.unload=function(){this.context=null,this._onTime=null},o(e,[{key:"isDone",get:function(){return this._isDone}},{key:"elapsedTime",get:function(){return this._elapsedTime}}])}(),b=new WeakMap,w=new WeakMap,T=new WeakMap;function A(){return function(e){var t=b.get(e);b.set(e,c({injectable:!0,dependencies:[]},(null==t?void 0:t.properties)&&{properties:t.properties}))}}function M(e){return void 0===e&&(e=0),function(t){var 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.");T.set(t,{updatable:!0,priority:e})}}function I(e){return function(t,n,i){var r=w.get(t);r||(r=new Map,w.set(t,r)),r.set(i,e)}}function k(e){var t,n=b.get(e);return null!==(t=null==n?void 0:n.injectable)&&void 0!==t&&t}function D(e,t){for(var n,i=(n=e,w.get(n)||new Map),s=[],o=e.length,a=0;a<o;a++){var c=i.get(a);if(c){if("string"==typeof c||"symbol"==typeof c)throw new Error("String and Symbol service identifiers are not yet supported in constructor injection. Please use class types for "+e.name+" parameter "+a);s.push(t.resolve(c))}else s.push(void 0)}return r(e,s)}function x(e,t){var n,i=e.constructor,r=(n=i,b.get(n));if(null!=r&&r.properties&&0!==r.properties.size)for(var s,o=a(r.properties);!(s=o()).done;){var c=s.value,u=c[0],h=c[1],l=t.resolve(h);null!==l&&(e[u]=l)}}function O(e){var t,n=T.get(e);return null!==(t=null==n?void 0:n.updatable)&&void 0!==t&&t}function R(e){return T.get(e)}e.TimerManager=function(){function e(){this._timers=[]}var t=e.prototype;return t.update=function(){for(var e=this._timers.length-1;e>=0;e--)this._timers[e].tick()&&(this._timers[e].unload(),this._timers.splice(e,1))},t.schedule=function(e,t,n,i){var r=new E;return r.initialize(e,t,n,i),this._timers.push(r),r},t.dispose=function(){for(var e,t=a(this._timers);!(e=t()).done;){e.value.unload()}this._timers=[]},e}(),e.TimerManager=g([M()],e.TimerManager),e.PerformanceWarningType=void 0,(C=e.PerformanceWarningType||(e.PerformanceWarningType={})).HIGH_EXECUTION_TIME="high_execution_time",C.HIGH_MEMORY_USAGE="high_memory_usage",C.HIGH_CPU_USAGE="high_cpu_usage",C.FREQUENT_GC="frequent_gc",C.LOW_FPS="low_fps",C.HIGH_ENTITY_COUNT="high_entity_count";var z=function(){function e(){this._systemData=new Map,this._systemStats=new Map,this._isEnabled=!1,this._maxRecentSamples=60}var t=e.prototype;return t.enable=function(){this._isEnabled=!0},t.disable=function(){this._isEnabled=!1},t.startMonitoring=function(e){return this._isEnabled?performance.now():0},t.endMonitoring=function(e,t,n){if(void 0===n&&(n=0),this._isEnabled&&0!==t){var i=performance.now(),r=i-t,s={name:e,executionTime:r,entityCount:n,averageTimePerEntity:n>0?r/n:0,lastUpdateTime:i};this._systemData.set(e,s),this.updateStats(e,r)}},t.updateStats=function(e,t){var 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)},t.calculateAdvancedStats=function(e){if(0!==e.recentTimes.length){var t=e.recentTimes.reduce((function(e,t){return e+t}),0)/e.recentTimes.length,n=e.recentTimes.reduce((function(e,n){return e+Math.pow(n-t,2)}),0)/e.recentTimes.length;e.standardDeviation=Math.sqrt(n);var i=[].concat(e.recentTimes).sort((function(e,t){return e-t})),r=i.length;e.percentile95=i[Math.floor(.95*r)]||0,e.percentile99=i[Math.floor(.99*r)]||0}},t.getSystemData=function(e){return this._systemData.get(e)},t.getSystemStats=function(e){return this._systemStats.get(e)},t.getAllSystemData=function(){return new Map(this._systemData)},t.getAllSystemStats=function(){return new Map(this._systemStats)},t.getPerformanceReport=function(){if(!this._isEnabled)return"Performance monitoring is disabled.";var e=[];e.push("=== ECS Performance Report ==="),e.push("");for(var t,n=a(Array.from(this._systemStats.entries()).sort((function(e,t){return t[1].averageTime-e[1].averageTime})));!(t=n()).done;){var i=t.value,r=i[0],s=i[1],o=this._systemData.get(r);e.push("System: "+r),e.push(" Current: "+(null==o?void 0:o.executionTime.toFixed(2))+"ms ("+(null==o?void 0:o.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)"),null!=o&&o.averageTimePerEntity&&o.averageTimePerEntity>0&&e.push(" Per Entity: "+o.averageTimePerEntity.toFixed(4)+"ms"),e.push("")}var c=Array.from(this._systemData.values()).reduce((function(e,t){return e+t.executionTime}),0);return e.push("Total Frame Time: "+c.toFixed(2)+"ms"),e.push("Systems Count: "+this._systemData.size),e.join("\n")},t.reset=function(){this._systemData.clear(),this._systemStats.clear()},t.resetSystem=function(e){this._systemData.delete(e),this._systemStats.delete(e)},t.getPerformanceWarnings=function(e){void 0===e&&(e=16.67);for(var t,n=[],i=a(this._systemData.entries());!(t=i()).done;){var r=t.value,s=r[0],o=r[1];o.executionTime>e&&n.push(s+": "+o.executionTime.toFixed(2)+"ms (>"+e+"ms)")}return n},t.setMaxRecentSamples=function(e){this._maxRecentSamples=e;for(var t,n=a(this._systemStats.values());!(t=n()).done;)for(var i=t.value;i.recentTimes.length>e;)i.recentTimes.shift()},t.dispose=function(){this._systemData.clear(),this._systemStats.clear(),this._isEnabled=!1},o(e,[{key:"isEnabled",get:function(){return this._isEnabled}}])}(),P=function(){function e(e,t,n){void 0===t&&(t=100),void 0===n&&(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}}e.getPool=function(t,n,i){void 0===n&&(n=100),void 0===i&&(i=1024);var r=this._pools.get(t);return r||(r=new e((function(){return new t}),n,i),this._pools.set(t,r)),r};var t=e.prototype;return t.obtain=function(){if(this._stats.totalObtained++,this._objects.length>0){var e=this._objects.pop();return this._stats.size--,this._updateHitRate(),this._updateMemoryUsage(),e}return this._stats.totalCreated++,this._updateHitRate(),this._createFn()},t.release=function(e){e&&(this._stats.totalReleased++,this._stats.size<this._maxSize&&(e.reset(),this._objects.push(e),this._stats.size++,this._updateMemoryUsage()))},t.getStats=function(){return c({},this._stats)},t.clear=function(){for(var e,t=a(this._objects);!(e=t()).done;){e.value.reset()}this._objects.length=0,this._stats.size=0,this._updateMemoryUsage()},t.compact=function(e){for(var t=null!=e?e:Math.floor(this._objects.length/2);this._objects.length>t;){var n=this._objects.pop();n&&(n.reset(),this._stats.size--)}this._updateMemoryUsage()},t.prewarm=function(e){for(var t=Math.min(e,this._maxSize-this._objects.length),n=0;n<t;n++){var i=this._createFn();i.reset(),this._objects.push(i),this._stats.totalCreated++,this._stats.size++}this._updateMemoryUsage()},t.setMaxSize=function(e){this._maxSize=e,this._stats.maxSize=e,this._objects.length>e&&this.compact(e)},t.getAvailableCount=function(){return this._objects.length},t.isEmpty=function(){return 0===this._objects.length},t.isFull=function(){return this._objects.length>=this._maxSize},e.getAllPoolTypes=function(){return Array.from(this._pools.keys())},e.getAllPoolStats=function(){for(var e,t={},n=a(this._pools);!(e=n()).done;){var i=e.value,r=i[0],s=i[1];t[r.name||r.toString()]=s.getStats()}return t},e.compactAllPools=function(){for(var e,t=a(this._pools.values());!(e=t()).done;){e.value.compact()}},e.clearAllPools=function(){for(var e,t=a(this._pools.values());!(e=t()).done;){e.value.clear()}this._pools.clear()},e.getGlobalStatsString=function(){var e=this.getAllPoolStats(),t=["=== Object Pool Global Statistics ===",""];if(0===Object.keys(e).length)return t.push("No pools registered"),t.join("\n");for(var n=0,i=Object.entries(e);n<i.length;n++){var r=i[n],s=r[0],o=r[1];t.push(s+":"),t.push(" Size: "+o.size+"/"+o.maxSize),t.push(" Hit Rate: "+(100*o.hitRate).toFixed(1)+"%"),t.push(" Total Created: "+o.totalCreated),t.push(" Total Obtained: "+o.totalObtained),t.push(" Memory: "+(o.estimatedMemoryUsage/1024).toFixed(1)+" KB"),t.push("")}return t.join("\n")},t._updateHitRate=function(){if(0===this._stats.totalObtained)this._stats.hitRate=0;else{var e=this._stats.totalObtained-this._stats.totalCreated;this._stats.hitRate=e/this._stats.totalObtained}},t._updateMemoryUsage=function(){this._stats.estimatedMemoryUsage=this._stats.size*this._objectSize},e}();P._pools=new Map;var N=function(){function e(){this.pools=new Map,this.autoCompactInterval=6e4,this.lastCompactTime=0}var t=e.prototype;return t.registerPool=function(e,t){this.pools.set(e,t)},t.getPool=function(e){return this.pools.get(e)||null},t.update=function(){var e=Date.now();e-this.lastCompactTime>this.autoCompactInterval&&(this.compactAllPools(),this.lastCompactTime=e)},t.createPool=function(e,t,n,i){void 0===n&&(n=100),void 0===i&&(i=1024);var r=this.pools.get(e);return r||(r=new P(t,n,i),this.pools.set(e,r)),r},t.removePool=function(e){var t=this.pools.get(e);return!!t&&(t.clear(),this.pools.delete(e),!0)},t.getPoolNames=function(){return Array.from(this.pools.keys())},t.getPoolCount=function(){return this.pools.size},t.compactAllPools=function(){for(var e,t=a(this.pools.values());!(e=t()).done;){e.value.compact()}},t.clearAllPools=function(){for(var e,t=a(this.pools.values());!(e=t()).done;){e.value.clear()}},t.getAllStats=function(){for(var e,t=new Map,n=a(this.pools);!(e=n()).done;){var i=e.value,r=i[0],s=i[1];t.set(r,s.getStats())}return t},t.getGlobalStats=function(){for(var e,t=0,n=0,i=0,r=0,s=0,o=0,c=a(this.pools.values());!(e=c()).done;){var u=e.value.getStats();t+=u.size,n+=u.maxSize,i+=u.totalCreated,r+=u.totalObtained,s+=u.totalReleased,o+=u.estimatedMemoryUsage}return{size:t,maxSize:n,totalCreated:i,totalObtained:r,totalReleased:s,hitRate:0===r?0:(r-i)/r,estimatedMemoryUsage:o}},t.getStatsString=function(){var e=["=== Pool Manager Statistics ===",""];if(0===this.pools.size)return e.push("No pools registered"),e.join("\n");var 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(var n,i=a(this.pools);!(n=i()).done;){var r=n.value,s=r[0],o=r[1].getStats();e.push(s+":"),e.push(" Size: "+o.size+"/"+o.maxSize),e.push(" Hit Rate: "+(100*o.hitRate).toFixed(1)+"%"),e.push(" Memory: "+(o.estimatedMemoryUsage/1024).toFixed(1)+" KB"),e.push("")}return e.join("\n")},t.setAutoCompactInterval=function(e){this.autoCompactInterval=e},t.prewarmAllPools=function(){for(var e,t=a(this.pools.values());!(e=t()).done;){var n=e.value,i=n.getStats(),r=Math.floor(.2*i.maxSize);n.prewarm(r)}},t.reset=function(){this.clearAllPools(),this.pools.clear(),this.lastCompactTime=0},t.dispose=function(){this.reset()},e}(),L=Symbol("ComponentTypeName"),B=Symbol("SystemTypeName");function W(e){return e.__systemMetadata__}function F(e){var t=e[L];return t||(e.name||"UnknownComponent")}function H(e){var t=e[B];return t||(e.name||"UnknownSystem")}function j(e){return F(e.constructor)}function U(e){return H(e.constructor)}var q=function(){function e(e){this._target=e}return e.prototype.deref=function(){return this._target},e}(),G="undefined"!=typeof globalThis&&globalThis.WeakRef||"undefined"!=typeof global&&global.WeakRef||"undefined"!=typeof window&&window.WeakRef||q,Q=new Map;function V(e){var t=Q.get(e);return(null==t?void 0:t.deref())||null}var Y,J=function(){function e(){this._references=new Map}var t=e.prototype;return t.registerReference=function(e,t,n){var i=e.id,r=this._references.get(i);r||(r=new Set,this._references.set(i,r)),this._findRecord(r,t,n)||r.add({component:new G(t),propertyKey:n})},t.unregisterReference=function(e,t,n){var i=e.id,r=this._references.get(i);if(r){var s=this._findRecord(r,t,n);s&&(r.delete(s),0===r.size&&this._references.delete(i))}},t.clearReferencesTo=function(e){var t=this._references.get(e);if(t){for(var n,i=[],r=a(t);!(n=r()).done;){var s=n.value;s.component.deref()&&i.push(s)}for(var o=0,c=i;o<c.length;o++){var u=c[o],h=u.component.deref();h&&(h[u.propertyKey]=null)}this._references.delete(e)}},t.clearComponentReferences=function(e){for(var t,n=a(this._references.entries());!(t=n()).done;){for(var i,r=t.value,s=r[0],o=r[1],c=[],u=a(o);!(i=u()).done;){var h=i.value,l=h.component.deref();l&&l!==e||c.push(h)}for(var f=0,d=c;f<d.length;f++){var p=d[f];o.delete(p)}0===o.size&&this._references.delete(s)}},t.getReferencesTo=function(e){var t=this._references.get(e);if(!t)return[];for(var n,i=[],r=a(t);!(n=r()).done;){var s=n.value;s.component.deref()&&i.push(s)}return i},t.cleanup=function(){for(var e,t=[],n=a(this._references.entries());!(e=n()).done;){for(var i,r=e.value,s=r[0],o=r[1],c=[],u=a(o);!(i=u()).done;){var h=i.value;h.component.deref()||c.push(h)}for(var l=0,f=c;l<f.length;l++){var d=f[l];o.delete(d)}0===o.size&&t.push(s)}for(var p=0,m=t;p<m.length;p++){var y=m[p];this._references.delete(y)}},t.registerEntityScene=function(e,t){Q.set(e,new G(t))},t.unregisterEntityScene=function(e){Q.delete(e)},t.getDebugInfo=function(){for(var e,t={},n=a(this._references.entries());!(e=n()).done;){for(var i,r=e.value,s=r[0],o=[],c=a(r[1]);!(i=c()).done;){var u=i.value,h=u.component.deref();h&&o.push({componentId:h.id,propertyKey:u.propertyKey})}o.length>0&&(t["entity_"+s]=o)}return t},t._findRecord=function(e,t,n){for(var i,r=a(e);!(i=r()).done;){var s=i.value;if(s.component.deref()===t&&s.propertyKey===n)return s}},e}();e.LogLevel=void 0,(Y=e.LogLevel||(e.LogLevel={}))[Y.Debug=0]="Debug",Y[Y.Info=1]="Info",Y[Y.Warn=2]="Warn",Y[Y.Error=3]="Error",Y[Y.Fatal=4]="Fatal",Y[Y.None=5]="None";var Z={BLACK:"",RED:"",GREEN:"",YELLOW:"",BLUE:"",MAGENTA:"",CYAN:"",WHITE:"",BRIGHT_BLACK:"",BRIGHT_RED:"",BRIGHT_GREEN:"",BRIGHT_YELLOW:"",BRIGHT_BLUE:"",BRIGHT_MAGENTA:"",BRIGHT_CYAN:"",BRIGHT_WHITE:"",RESET:"",BOLD:"",UNDERLINE:""},X=function(){function t(t){void 0===t&&(t={}),this._config=c({level:e.LogLevel.Info,enableTimestamp:!0,enableColors:"undefined"==typeof window},t)}var n=t.prototype;return n.debug=function(t){for(var n=arguments.length,i=new Array(n>1?n-1:0),r=1;r<n;r++)i[r-1]=arguments[r];this.log.apply(this,[e.LogLevel.Debug,t].concat(i))},n.info=function(t){for(var n=arguments.length,i=new Array(n>1?n-1:0),r=1;r<n;r++)i[r-1]=arguments[r];this.log.apply(this,[e.LogLevel.Info,t].concat(i))},n.warn=function(t){for(var n=arguments.length,i=new Array(n>1?n-1:0),r=1;r<n;r++)i[r-1]=arguments[r];this.log.apply(this,[e.LogLevel.Warn,t].concat(i))},n.error=function(t){for(var n=arguments.length,i=new Array(n>1?n-1:0),r=1;r<n;r++)i[r-1]=arguments[r];this.log.apply(this,[e.LogLevel.Error,t].concat(i))},n.fatal=function(t){for(var n=arguments.length,i=new Array(n>1?n-1:0),r=1;r<n;r++)i[r-1]=arguments[r];this.log.apply(this,[e.LogLevel.Fatal,t].concat(i))},n.setLevel=function(e){this._config.level=e},n.setColors=function(e){0===Object.keys(e).length?delete this._config.colors:this._config.colors=c({},this._config.colors,e)},n.setPrefix=function(e){this._config.prefix=e},n.log=function(t,n){if(!(t<this._config.level)){var i=n;if(this._config.enableTimestamp)i="["+(new Date).toISOString()+"] "+i;if(this._config.prefix&&(i="["+this._config.prefix+"] "+i),i="["+e.LogLevel[t].toUpperCase()+"] "+i,this._config.output)this._config.output(t,i);else{for(var r=arguments.length,s=new Array(r>2?r-2:0),o=2;o<r;o++)s[o-2]=arguments[o];this.outputToConsole.apply(this,[t,i].concat(s))}}},n.outputToConsole=function(t,n){for(var i=this._config.enableColors?this.getColors():null,r=arguments.length,s=new Array(r>2?r-2:0),o=2;o<r;o++)s[o-2]=arguments[o];switch(t){case e.LogLevel.Debug:var a,c;if(i)(a=console).debug.apply(a,[""+i.debug+n+i.reset].concat(s));else(c=console).debug.apply(c,[n].concat(s));break;case e.LogLevel.Info:var u,h;if(i)(u=console).info.apply(u,[""+i.info+n+i.reset].concat(s));else(h=console).info.apply(h,[n].concat(s));break;case e.LogLevel.Warn:var l,f;if(i)(l=console).warn.apply(l,[""+i.warn+n+i.reset].concat(s));else(f=console).warn.apply(f,[n].concat(s));break;case e.LogLevel.Error:var d,p;if(i)(d=console).error.apply(d,[""+i.error+n+i.reset].concat(s));else(p=console).error.apply(p,[n].concat(s));break;case e.LogLevel.Fatal:var m,y;if(i)(m=console).error.apply(m,[""+i.fatal+n+i.reset].concat(s));else(y=console).error.apply(y,[n].concat(s))}},n.getColors=function(){return c({},{debug:Z.BRIGHT_BLACK,info:Z.GREEN,warn:Z.YELLOW,error:Z.RED,fatal:Z.BRIGHT_RED,reset:Z.RESET},this._config.colors)},t}(),K=function(){function t(){this._loggers=new Map,this._defaultLevel=e.LogLevel.Info}var n=t.prototype;return n.createDefaultLogger=function(){return this._loggerFactory?this._loggerFactory():new X({level:this._defaultLevel})},t.getInstance=function(){return t._instance||(t._instance=new t),t._instance},n.getLogger=function(e){if(!e)return this.defaultLogger;if(!this._loggers.has(e)){var t=this._loggerFactory?this._loggerFactory(e):new X({prefix:e,level:this._defaultLevel});this._loggers.set(e,t)}return this._loggers.get(e)},n.setLogger=function(e,t){this._loggers.set(e,t)},n.setGlobalLevel=function(e){this._defaultLevel=e,this._defaultLogger instanceof X&&this._defaultLogger.setLevel(e);for(var t,n=a(this._loggers.values());!(t=n()).done;){var i=t.value;i instanceof X&&i.setLevel(e)}},n.createChildLogger=function(e,t){var n=e+"."+t;return this.getLogger(n)},n.setGlobalColors=function(e){this._defaultLogger instanceof X&&this._defaultLogger.setColors(e);for(var t,n=a(this._loggers.values());!(t=n()).done;){var i=t.value;i instanceof X&&i.setColors(e)}},n.resetColors=function(){this._defaultLogger instanceof X&&this._defaultLogger.setColors({});for(var e,t=a(this._loggers.values());!(e=t()).done;){var n=e.value;n instanceof X&&n.setColors({})}},n.setLoggerFactory=function(e){(this._defaultLogger||this._loggers.size>0)&&console.warn("[LoggerManager] setLoggerFactory 应该在导入 ECS 模块之前调用。已创建的 logger 引用不会被更新。"),this._loggerFactory=e,delete this._defaultLogger,this._loggers.clear()},o(t,[{key:"defaultLogger",get:function(){return this._defaultLogger||(this._defaultLogger=this.createDefaultLogger()),this._defaultLogger}}])}(),$=K.getInstance().getLogger();function ee(e){return K.getInstance().getLogger(e)}var te=ee("EntityRefDecorator"),ne=Symbol("EntityRefMetadata"),ie=Symbol("EntityRefValues");function re(e){var t=e[ie];return t||(t=new Map,e[ie]=t),t}function se(e){return e&&("function"==typeof e?e:e.constructor)[ne]||null}var oe=function(){function e(){}var t=e.prototype;return t.collectEntityData=function(e){if(!e)return this.getEmptyEntityDebugData();var t,n=e.entities;if(!n)return this.getEmptyEntityDebugData();try{t=n.getStats?n.getStats():this.calculateFallbackEntityStats(n)}catch(e){return{totalEntities:0,activeEntities:0,pendingAdd:0,pendingRemove:0,entitiesPerArchetype:[],topEntitiesByComponents:[],entityHierarchy:[],entityDetailsMap:{}}}var i=this.collectArchetypeData(e);return{totalEntities:t.totalEntities,activeEntities:t.activeEntities,pendingAdd:t.pendingAdd||0,pendingRemove:t.pendingRemove||0,entitiesPerArchetype:i.distribution,topEntitiesByComponents:i.topEntities,entityHierarchy:[],entityDetailsMap:{}}},t.getRawEntityList=function(e){if(!e)return[];var t=e.entities;return null!=t&&t.buffer?t.buffer.map((function(e){var t,n;return{id:e.id,name:e.name||"Entity_"+e.id,active:!1!==e.active,enabled:!1!==e.enabled,activeInHierarchy:!1!==e.activeInHierarchy,componentCount:e.components.length,componentTypes:e.components.map((function(e){return j(e)})),parentId:(null===(t=e.parent)||void 0===t?void 0:t.id)||null,childIds:(null===(n=e.children)||void 0===n?void 0:n.map((function(e){return e.id})))||[],depth:e.getDepth?e.getDepth():0,tag:e.tag||0,updateOrder:e.updateOrder||0}})):[]},t.getEntityDetails=function(e,t){try{var n,i,r;if(!t)return null;var s=t.entities;if(null==s||!s.buffer)return null;var o=s.buffer.find((function(t){return t.id===e}));if(!o)return null;var a=o.getDebugInfo?o.getDebugInfo():this.buildFallbackEntityInfo(o,t),u=this.extractComponentDetails(o.components),h=this.getSceneInfo(t);return c({},a,{scene:h.name,sceneName:h.name,sceneType:h.type,parentName:(null===(n=o.parent)||void 0===n?void 0:n.name)||null,components:u||[],componentCount:(null===(i=o.components)||void 0===i?void 0:i.length)||0,componentTypes:(null===(r=o.components)||void 0===r?void 0:r.map((function(e){return j(e)})))||[]})}catch(e){return{error:"获取实体详情失败: "+(e instanceof Error?e.message:String(e)),scene:"获取失败",components:[],componentCount:0,componentTypes:[]}}},t.getSceneInfo=function(e){var 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{var i,r=null===(i=Object.getPrototypeOf(e))||void 0===i||null===(i=i.constructor)||void 0===i?void 0:i.name;r&&"Object"!==r&&(t=r,n=r)}}catch(e){t="场景名获取失败"}return{name:t,type:n}},t.collectEntityDataWithMemory=function(e){if(!e)return this.getEmptyEntityDebugData();var t,n=e.entities;if(!n)return this.getEmptyEntityDebugData();try{t=n.getStats?n.getStats():this.calculateFallbackEntityStats(n)}catch(e){return{totalEntities:0,activeEntities:0,pendingAdd:0,pendingRemove:0,entitiesPerArchetype:[],topEntitiesByComponents:[],entityHierarchy:[],entityDetailsMap:{}}}var i=this.collectArchetypeDataWithMemory(e);return{totalEntities:t.totalEntities,activeEntities:t.activeEntities,pendingAdd:t.pendingAdd||0,pendingRemove:t.pendingRemove||0,entitiesPerArchetype:i.distribution,topEntitiesByComponents:i.topEntities,entityHierarchy:this.buildEntityHierarchyTree(n),entityDetailsMap:this.buildEntityDetailsMap(n,e)}},t.collectArchetypeData=function(e){var t;if(e&&e.archetypeSystem&&"function"==typeof e.archetypeSystem.getAllArchetypes)return this.extractArchetypeStatistics(e.archetypeSystem);var n={entities:(null===(t=e.entities)||void 0===t?void 0:t.buffer)||[]};return{distribution:this.getArchetypeDistributionFast(n),topEntities:this.getTopEntitiesByComponentsFast(n)}},t.getArchetypeDistributionFast=function(e){var t=new Map;return e&&e.entities&&e.entities.forEach((function(e){var n,i=(null===(n=e.components)||void 0===n?void 0:n.map((function(e){return j(e)})))||[],r=i.length>0?i.sort().join(", "):"无组件",s=t.get(r);s?s.count++:t.set(r,{count:1,componentTypes:i})})),Array.from(t.entries()).map((function(e){return{signature:e[0],count:e[1].count,memory:0}})).sort((function(e,t){return t.count-e.count})).slice(0,20)},t.getTopEntitiesByComponentsFast=function(e){return e&&e.entities?e.entities.map((function(e){var t;return{id:e.id.toString(),name:e.name||"Entity_"+e.id,componentCount:(null===(t=e.components)||void 0===t?void 0:t.length)||0,memory:0}})).sort((function(e,t){return t.componentCount-e.componentCount})):[]},t.collectArchetypeDataWithMemory=function(e){var t;if(e&&e.archetypeSystem&&"function"==typeof e.archetypeSystem.getAllArchetypes)return this.extractArchetypeStatisticsWithMemory(e.archetypeSystem);var n={entities:(null===(t=e.entities)||void 0===t?void 0:t.buffer)||[]};return{distribution:this.getArchetypeDistributionWithMemory(n),topEntities:this.getTopEntitiesByComponentsWithMemory(n)}},t.extractArchetypeStatistics=function(e){var t=e.getAllArchetypes(),n=[],i=[];return t.forEach((function(e){var t,r,s=(null===(t=e.componentTypes)||void 0===t?void 0:t.map((function(e){return e.name})).join(","))||"Unknown",o=(null===(r=e.entities)||void 0===r?void 0:r.length)||0;n.push({signature:s,count:o,memory:0}),e.entities&&e.entities.forEach((function(e){var t;i.push({id:e.id.toString(),name:e.name||"Entity_"+e.id,componentCount:(null===(t=e.components)||void 0===t?void 0:t.length)||0,memory:0})}))})),n.sort((function(e,t){return t.count-e.count})),i.sort((function(e,t){return t.componentCount-e.componentCount})),{distribution:n,topEntities:i}},t.extractArchetypeStatisticsWithMemory=function(e){var t=this,n=e.getAllArchetypes(),i=[],r=[];return n.forEach((function(e){var n,s,o=(null===(n=e.componentTypes)||void 0===n?void 0:n.map((function(e){return e.name})).join(","))||"Unknown",a=(null===(s=e.entities)||void 0===s?void 0:s.length)||0,c=0;if(e.entities&&e.entities.length>0){for(var u=Math.min(5,e.entities.length),h=0,l=0;l<u;l++)h+=t.estimateEntityMemoryUsage(e.entities[l]);c=h/u*a}i.push({signature:o,count:a,memory:c}),e.entities&&e.entities.forEach((function(e){var n;r.push({id:e.id.toString(),name:e.name||"Entity_"+e.id,componentCount:(null===(n=e.components)||void 0===n?void 0:n.length)||0,memory:t.estimateEntityMemoryUsage(e)})}))})),i.sort((function(e,t){return t.count-e.count})),r.sort((function(e,t){return t.componentCount-e.componentCount})),{distribution:i,topEntities:r}},t.getArchetypeDistributionWithMemory=function(e){var t=this,n=new Map;return e&&e.entities&&e.entities.forEach((function(e){var i,r=(null===(i=e.components)||void 0===i?void 0:i.map((function(e){return j(e)})))||[],s=r.length>0?r.sort().join(", "):"无组件",o=n.get(s),a=t.estimateEntityMemoryUsage(e);(isNaN(a)||a<0)&&(a=0),o?(o.count++,o.memory+=a):n.set(s,{count:1,memory:a,componentTypes:r})})),Array.from(n.entries()).map((function(e){var t=e[0],n=e[1];return{signature:t,count:n.count,memory:isNaN(n.memory)?0:n.memory}})).sort((function(e,t){return t.count-e.count}))},t.getTopEntitiesByComponentsWithMemory=function(e){var t=this;return e&&e.entities?e.entities.map((function(e){var n;return{id:e.id.toString(),name:e.name||"Entity_"+e.id,componentCount:(null===(n=e.components)||void 0===n?void 0:n.length)||0,memory:t.estimateEntityMemoryUsage(e)}})).sort((function(e,t){return t.componentCount-e.componentCount})):[]},t.getEmptyEntityDebugData=function(){return{totalEntities:0,activeEntities:0,pendingAdd:0,pendingRemove:0,entitiesPerArchetype:[],topEntitiesByComponents:[],entityHierarchy:[],entityDetailsMap:{}}},t.calculateFallbackEntityStats=function(e){var t=e.buffer||[],n=t.filter((function(e){return e.enabled&&!e.isDestroyed}));return{totalEntities:t.length,activeEntities:n.length,pendingAdd:0,pendingRemove:0,averageComponentsPerEntity:n.length>0?t.reduce((function(e,t){var n;return e+((null===(n=t.components)||void 0===n?void 0:n.length)||0)}),0)/n.length:0}},t.estimateEntityMemoryUsage=function(e){var t=this;try{var n=0,i=this.calculateObjectSize(e,["components","children","parent"]);return!isNaN(i)&&i>0&&(n+=i),e.components&&Array.isArray(e.components)&&e.components.forEach((function(e){var i=t.calculateObjectSize(e,["entity"]);!isNaN(i)&&i>0&&(n+=i)})),isNaN(n)||n<0?0:n}catch(e){return 0}},t.calculateObjectSize=function(e,t){if(void 0===t&&(t=[]),!e||"object"!=typeof e)return 0;var n=new WeakSet,i=function(e,r){if(void 0===r&&(r=0),!e||"object"!=typeof e||r>=2)return 0;if(n.has(e))return 0;n.add(e);var s=32;try{for(var o=Object.keys(e),a=Math.min(o.length,20),c=0;c<a;c++){var u=o[c];if(u&&!t.includes(u)&&"constructor"!==u&&"__proto__"!==u&&!u.startsWith("_cc_")&&!u.startsWith("__")){var h=e[u];s+=2*u.length,"string"==typeof h?s+=Math.min(2*h.length,200):"number"==typeof h?s+=8:"boolean"==typeof h?s+=4:Array.isArray(h)?s+=40+Math.min(8*h.length,160):"object"==typeof h&&null!==h&&(s+=i(h,r+1))}}}catch(e){return 64}return s};try{var r=i(e);return Math.max(r,32)}catch(e){return 64}},t.buildEntityHierarchyTree=function(e){var t=this;if(null==e||!e.buffer)return[];var n=[];return e.buffer.forEach((function(e){if(!e.parent){var i=t.buildEntityHierarchyNode(e);n.push(i)}})),n.sort((function(e,t){return e.name<t.name?-1:e.name>t.name?1:e.id-t.id})),n},t.buildEntityHierarchyNode=function(e){var t,n=this,i={id:e.id,name:e.name||"Entity_"+e.id,active:!1!==e.active,enabled:!1!==e.enabled,activeInHierarchy:!1!==e.activeInHierarchy,componentCount:e.components.length,componentTypes:e.components.map((function(e){return j(e)})),parentId:(null===(t=e.parent)||void 0===t?void 0:t.id)||null,children:[],depth:e.getDepth?e.getDepth():0,tag:e.tag||0,updateOrder:e.updateOrder||0};(e.children&&e.children.length>0&&(i.children=e.children.map((function(e){return n.buildEntityHierarchyNode(e)}))),"function"==typeof e.getDebugInfo)&&(i=c({},i,e.getDebugInfo()));return e.components&&e.components.length>0&&(i.componentDetails=this.extractComponentDetails(e.components)),i},t.buildEntityDetailsMap=function(e,t){var n=this;if(null==e||!e.buffer)return{};for(var i={},r=e.buffer,s=0;s<r.length;s+=100){r.slice(s,s+100).forEach((function(e){var r,s=e.getDebugInfo?e.getDebugInfo():n.buildFallbackEntityInfo(e,t),o=e.getComponentCacheStats?e.getComponentCacheStats():null,a=n.extractComponentDetails(e.components);i[e.id]=c({},s,{parentName:(null===(r=e.parent)||void 0===r?void 0:r.name)||null,components:a,componentTypes:s.componentTypes||a.map((function(e){return e.typeName})),cachePerformance:o?{hitRate:o.cacheStats.hitRate,size:o.cacheStats.size,maxSize:o.cacheStats.maxSize}:null})}))}return i},t.buildFallbackEntityInfo=function(e,t){var n,i,r,s=this.getSceneInfo(t);return{name:e.name||"Entity_"+e.id,id:e.id,enabled:!1!==e.enabled,active:!1!==e.active,activeInHierarchy:!1!==e.activeInHierarchy,destroyed:e.isDestroyed||!1,scene:s.name,sceneName:s.name,sceneType:s.type,componentCount:e.components.length,componentTypes:e.components.map((function(e){return j(e)})),componentMask:(null===(n=e.componentMask)||void 0===n?void 0:n.toString())||"0",parentId:(null===(i=e.parent)||void 0===i?void 0:i.id)||null,childCount:(null===(r=e.children)||void 0===r?void 0:r.length)||0,childIds:e.children.map((function(e){return e.id}))||[],depth:e.getDepth?e.getDepth():0,tag:e.tag||0,updateOrder:e.updateOrder||0}},t.extractComponentDetails=function(e){var t=this;return e.map((function(e){var n=j(e),i={};try{Object.keys(e).forEach((function(n){if(!n.startsWith("_")&&"entity"!==n&&"constructor"!==n){var r=e[n];null!=r&&(i[n]=t.formatPropertyValue(r))}})),0===Object.keys(i).length&&(i._info="该组件没有公开属性",i._componentId=j(e))}catch(t){i._error="属性提取失败",i._componentId=j(e)}return{typeName:n,properties:i}}))},t.getComponentProperties=function(e,t,n){var i=this;try{if(!n)return{};var r=n.entities;if(null==r||!r.buffer)return{};var s=r.buffer.find((function(t){return t.id===e}));if(!s||t>=s.components.length)return{};var o=s.components[t],a={};return Object.keys(o).forEach((function(e){if(!e.startsWith("_")&&"entity"!==e){var t=o[e];null!=t&&(a[e]=i.formatPropertyValue(t))}})),a}catch(e){return{_error:"属性提取失败"}}},t.formatPropertyValue=function(e,t){return void 0===t&&(t=0),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)},t.formatObjectFirstLevel=function(e){var t=this;try{if(Array.isArray(e)){if(0===e.length)return[];if(e.length>10){var n=e.slice(0,3).map((function(e){return t.formatPropertyValue(e,1)}));return{_isLazyArray:!0,_arrayLength:e.length,_sample:n,_summary:"数组["+e.length+"个元素]"}}return e.map((function(e){return t.formatPropertyValue(e,1)}))}var i=Object.keys(e);if(0===i.length)return{};for(var r={},s=0,o=0,a=i;o<a.length;o++){var c=a[o];if(s>=15){r._hasMoreProperties=!0,r._totalProperties=i.length,r._hiddenCount=i.length-s;break}if(!c.startsWith("_")&&!c.startsWith("$")&&"function"!=typeof e[c])try{var u=e[c];null!=u&&(r[c]=this.formatPropertyValue(u,1),s++)}catch(e){r[c]="[访问失败: "+(e instanceof Error?e.message:String(e))+"]",s++}}return r}catch(e){return"[对象解析失败: "+(e instanceof Error?e.message:String(e))+"]"}},t.createLazyLoadPlaceholder=function(e){try{var t,n=(null===(t=e.constructor)||void 0===t?void 0:t.name)||"Object";return{_isLazyObject:!0,_typeName:n,_summary:this.getObjectSummary(e,n),_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)}}},t.getObjectSummary=function(e,t){try{if((t.toLowerCase().includes("vec")||t.toLowerCase().includes("vector"))&&void 0!==e.x&&void 0!==e.y){var 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){var i=void 0!==e.a?e.a:1;return t+"("+e.r+", "+e.g+", "+e.b+", "+i+")"}if(t.toLowerCase().includes("node"))return t+": "+(e.name||e._name||"未命名");if(t.toLowerCase().includes("component")){var r,s,o=(null===(r=e.node)||void 0===r?void 0:r.name)||(null===(s=e.node)||void 0===s?void 0:s._name)||"";return t+(o?" on "+o:"")}var a=Object.keys(e);return 0===a.length?t+" (空对象)":t+" ("+a.length+"个属性)"}catch(e){return t+" (无法分析)"}},t.generateObjectId=function(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(e){return"obj_"+Math.random().toString(36).substr(2,9)}},t.expandLazyObject=function(e,t,n,i){try{if(!i)return null;var r=i.entities;if(null==r||!r.buffer)return null;var s=r.buffer.find((function(t){return t.id===e}));if(!s)return null;if(t>=s.components.length)return null;var o=s.components[t],a=this.getObjectByPath(o,n);return a?this.formatObjectFirstLevel(a):null}catch(e){return{error:"展开失败: "+(e instanceof Error?e.message:String(e))}}},t.getObjectByPath=function(e,t){if(!t)return e;for(var n,i=e,r=a(t.split("."));!(n=r()).done;){var s=n.value;if(null==i)return null;if(s.includes("[")&&s.includes("]")){var o=s.substring(0,s.indexOf("[")),c=parseInt(s.substring(s.indexOf("[")+1,s.indexOf("]")));if(o&&(i=i[o]),!(Array.isArray(i)&&c>=0&&c<i.length))return null;i=i[c]}else i=i[s]}return i},e}(),ae=function(){function e(){}return e.prototype.collectSystemData=function(e,t){if(!t)return{totalSystems:0,systemsInfo:[]};var n=t.entityProcessors;if(!n)return{totalSystems:0,systemsInfo:[]};var i=n.processors||[],r=new Map,s=new Map;if(e)try{r=e.getAllSystemStats(),s=e.getAllSystemData()}catch(e){}return{totalSystems:i.length,systemsInfo:i.map((function(e){var t,n=e.systemName||U(e),i=r.get(n),o=s.get(n);return{name:n,type:U(e),entityCount:(null===(t=e.entities)||void 0===t?void 0:t.length)||0,executionTime:(null==i?void 0:i.averageTime)||(null==o?void 0:o.executionTime)||0,minExecutionTime:(null==i?void 0:i.minTime)===Number.MAX_VALUE?0:(null==i?void 0:i.minTime)||0,maxExecutionTime:(null==i?void 0:i.maxTime)||0,executionTimeHistory:(null==i?void 0:i.recentTimes)||[],updateOrder:e.updateOrder||0,enabled:!1!==e.enabled,lastUpdateTime:(null==o?void 0:o.lastUpdateTime)||0}}))}},e}(),ce=function(){function e(){this.frameTimeHistory=[],this.maxHistoryLength=60,this.gcCollections=0,this.lastMemoryCheck=0}var t=e.prototype;return t.collectPerformanceData=function(e){var t=S.deltaTime,n=1e3*t,i=t>0?Math.round(1/t):0,r=this.getECSPerformanceData(e),s=r.totalExecutionTime,o=n>0?s/n*100:0,a=0;performance.memory&&(a=performance.memory.usedJSHeapSize/1024/1024),this.frameTimeHistory.push(s),this.frameTimeHistory.length>this.maxHistoryLength&&this.frameTimeHistory.shift();var c=this.frameTimeHistory.filter((function(e){return e>=0}));return{frameTime:s,engineFrameTime:n,ecsPercentage:o,memoryUsage:a,fps:i,averageFrameTime:c.length>0?c.reduce((function(e,t){return e+t}),0)/c.length:s,minFrameTime:c.length>0?Math.min.apply(Math,c):s,maxFrameTime:c.length>0?Math.max.apply(Math,c):s,frameTimeHistory:[].concat(this.frameTimeHistory),systemPerformance:this.getSystemPerformance(e),systemBreakdown:r.systemBreakdown,memoryDetails:this.getMemoryDetails()}},t.getECSPerformanceData=function(e){if(!e)return{totalExecutionTime:0,systemBreakdown:[]};if(!e.enabled){try{e.enabled=!0}catch(e){}return{totalExecutionTime:0,systemBreakdown:[]}}try{var t=0,n=[],i=e.getAllSystemStats();if(0===i.size)return{totalExecutionTime:0,systemBreakdown:[]};for(var r,s=a(i.entries());!(r=s()).done;){var o=r.value,c=o[0],u=o[1],h=u.recentTimes&&u.recentTimes.length>0?u.recentTimes[u.recentTimes.length-1]:u.averageTime||0;t+=h,n.push({systemName:c,executionTime:h,percentage:0})}return n.forEach((function(e){e.percentage=t>0?e.executionTime/t*100:0})),n.sort((function(e,t){return t.executionTime-e.executionTime})),{totalExecutionTime:t,systemBreakdown:n}}catch(e){return{totalExecutionTime:0,systemBreakdown:[]}}},t.getSystemPerformance=function(e){if(!e)return[];try{var t=e.getAllSystemStats(),n=e.getAllSystemData();return Array.from(t.entries()).map((function(e){var t=e[0],i=e[1],r=n.get(t);return{systemName:t,averageTime:i.averageTime||0,maxTime:i.maxTime||0,minTime:i.minTime===Number.MAX_VALUE?0:i.minTime||0,samples:i.executionCount||0,percentage:0,entityCount:(null==r?void 0:r.entityCount)||0,lastExecutionTime:(null==r?void 0:r.executionTime)||0}}))}catch(e){return[]}},t.getMemoryDetails=function(){var e={entities:0,components:0,systems:0,pooled:0,totalMemory:0,usedMemory:0,freeMemory:0,gcCollections:this.updateGCCount()};try{if(performance.memory){var 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},t.updateGCCount=function(){try{return"undefined"!=typeof PerformanceObserver||performance.measureUserAgentSpecificMemory,this.gcCollections}catch(e){return this.gcCollections}},e}(),ue=function(){function e(e,t,n,i){void 0===n&&(n=1e3),void 0===i&&(i=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,i)}var t=e.prototype;return t.acquire=function(){return this.stats.totalAcquired++,this.pool.length>0?this.pool.pop():(this.stats.totalCreated++,this.createFn())},t.release=function(e){this.stats.totalReleased++,this.pool.length>=this.maxSize||(this.resetFn&&this.resetFn(e),this.pool.push(e))},t.prewarm=function(e){for(var t=Math.min(e,this.maxSize),n=this.pool.length;n<t;n++){var i=this.createFn();this.resetFn&&this.resetFn(i),this.pool.push(i),this.stats.totalCreated++}},t.shrink=function(){for(;this.pool.length>this.minSize;)this.pool.pop()},t.clear=function(){this.pool.length=0},t.getAvailableCount=function(){return this.pool.length},t.getMaxSize=function(){return this.maxSize},t.getStats=function(){var 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}},e}(),he=function(){function e(){this.pools=new Map,this.usageTracker=new Map,this.autoCleanupInterval=6e4,this.lastCleanupTime=0}e.getInstance=function(){return e.instance||(e.instance=new e),e.instance};var t=e.prototype;return t.registerPool=function(e,t,n,i,r){this.pools.set(e,new ue(t,n,i,r)),this.usageTracker.set(e,{createCount:0,releaseCount:0,lastAccessTime:Date.now()})},t.acquireComponent=function(e){var t=this.pools.get(e);return this.trackUsage(e,"create"),t?t.acquire():null},t.releaseComponent=function(e,t){var n=this.pools.get(e);this.trackUsage(e,"release"),n&&n.release(t)},t.trackUsage=function(e,t){var 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()},t.update=function(){var e=Date.now();if(!(e-this.lastCleanupTime<this.autoCleanupInterval)){for(var t,n=a(this.usageTracker.entries());!(t=n()).done;){var i=t.value,r=i[0];if(e-i[1].lastAccessTime>12e4){var s=this.pools.get(r);s&&s.shrink()}}this.lastCleanupTime=e}},t.getHotComponents=function(e){return void 0===e&&(e=100),Array.from(this.usageTracker.entries()).filter((function(t){return t[0],t[1].createCount>e})).map((function(e){return e[0]}))},t.prewarmAll=function(e){void 0===e&&(e=100);for(var t,n=a(this.pools.values());!(t=n()).done;){t.value.prewarm(e)}},t.clearAll=function(){for(var e,t=a(this.pools.values());!(e=t()).done;){e.value.clear()}},t.reset=function(){this.pools.clear(),this.usageTracker.clear()},t.getGlobalStats=function(){for(var e,t=[],n=a(this.pools.entries());!(e=n()).done;){var i=e.value,r=i[0],s=i[1];t.push({componentName:r,poolStats:s.getStats(),usage:this.usageTracker.get(r)})}return t},t.getPoolStats=function(){for(var e,t=new Map,n=a(this.pools);!(e=n()).done;){var i=e.value,r=i[0],s=i[1];t.set(r,{available:s.getAvailableCount(),maxSize:s.getMaxSize()})}return t},t.getPoolUtilization=function(){for(var e,t=new Map,n=a(this.pools);!(e=n()).done;){var i=e.value,r=i[0],s=i[1],o=s.getAvailableCount(),c=s.getMaxSize(),u=c-o,h=c>0?u/c*100:0;t.set(r,{used:u,total:c,utilization:h})}return t},t.getComponentUtilization=function(e){var t=this.pools.get(e);if(!t)return 0;var n=t.getAvailableCount(),i=t.getMaxSize();return i>0?(i-n)/i*100:0},e}(),le=function(){function e(){}var t=e.prototype;return t.collectComponentData=function(e){var t=this;if(!e)return{componentTypes:0,componentInstances:0,componentStats:[]};var n=e.entities;if(null==n||!n.buffer)return{componentTypes:0,componentInstances:0,componentStats:[]};var i=new Map,r=0;n.buffer.forEach((function(e){e.components&&e.components.forEach((function(e){var t=j(e),n=i.get(t)||{count:0,entities:0};n.count++,r++,i.set(t,n)}))}));var s=new Map,o=new Map;try{for(var c,u=he.getInstance(),h=u.getPoolStats(),l=u.getPoolUtilization(),f=a(h.entries());!(c=f()).done;){var d=c.value,p=d[0],m=d[1];o.set(p,m.maxSize)}for(var y,g=a(l.entries());!(y=g()).done;){var v=y.value,_=v[0],S=v[1];s.set(_,S.utilization)}}catch(e){}return{componentTypes:i.size,componentInstances:r,componentStats:Array.from(i.entries()).map((function(i){var r=i[0],a=i[1],c=o.get(r)||0,u=s.get(r)||0,h=t.getEstimatedComponentSize(r,e);return{typeName:r,instanceCount:a.count,memoryPerInstance:h,totalMemory:a.count*h,poolSize:c,poolUtilization:u,averagePerEntity:a.count/n.buffer.length}}))}},t.getEstimatedComponentSize=function(t,n){if(e.component