@2112-lab/central-plant 0.1.2 → 0.1.4

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.
Files changed (119) hide show
  1. package/dist/bundle/index.js +1 -15498
  2. package/dist/cjs/_virtual/_rollupPluginBabelHelpers.js +1 -366
  3. package/dist/cjs/node_modules/@2112-lab/pathfinder/dist/index.esm.js +1 -1448
  4. package/dist/cjs/node_modules/three/examples/jsm/controls/OrbitControls.js +1 -1292
  5. package/dist/cjs/node_modules/three/examples/jsm/exporters/GLTFExporter.js +1 -0
  6. package/dist/cjs/node_modules/three/examples/jsm/exporters/OBJExporter.js +1 -0
  7. package/dist/cjs/node_modules/three/examples/jsm/exporters/PLYExporter.js +1 -0
  8. package/dist/cjs/node_modules/three/examples/jsm/exporters/STLExporter.js +1 -0
  9. package/dist/cjs/node_modules/three/examples/jsm/loaders/DRACOLoader.js +1 -0
  10. package/dist/cjs/node_modules/three/examples/jsm/loaders/GLTFLoader.js +1 -4374
  11. package/dist/cjs/node_modules/three/examples/jsm/loaders/RGBELoader.js +1 -465
  12. package/dist/cjs/node_modules/three/examples/jsm/renderers/CSS2DRenderer.js +1 -0
  13. package/dist/cjs/node_modules/three/examples/jsm/utils/BufferGeometryUtils.js +1 -117
  14. package/dist/cjs/src/analysis/analysis.js +1 -0
  15. package/dist/cjs/src/analysis/testing.js +1 -0
  16. package/dist/cjs/src/core/centralPlant.js +1 -0
  17. package/dist/cjs/src/core/debugLogger.js +1 -0
  18. package/dist/cjs/src/core/mathUtils.js +1 -0
  19. package/dist/cjs/src/core/nameUtils.js +1 -0
  20. package/dist/cjs/src/data/export.js +1 -0
  21. package/dist/cjs/src/data/import.js +1 -0
  22. package/dist/cjs/src/data/numerics.js +1 -0
  23. package/dist/cjs/src/helpers/sceneHelper.js +1 -0
  24. package/dist/cjs/src/index.js +1 -79
  25. package/dist/cjs/src/managers/components/animationManager.js +1 -0
  26. package/dist/cjs/src/managers/components/componentManager.js +1 -0
  27. package/dist/cjs/src/managers/components/pathfindingManager.js +1 -0
  28. package/dist/cjs/src/managers/controls/TransformControls.js +1 -0
  29. package/dist/cjs/src/managers/controls/cameraControlsManager.js +1 -0
  30. package/dist/cjs/src/managers/controls/dragDropManager.js +1 -0
  31. package/dist/cjs/src/managers/controls/keyboardControlsManager.js +1 -0
  32. package/dist/cjs/src/managers/controls/transformControlsManager.js +1 -0
  33. package/dist/cjs/src/managers/environment/environmentManager.js +1 -0
  34. package/dist/cjs/src/managers/environment/textureConfig.js +1 -0
  35. package/dist/cjs/src/managers/scene/sceneExportManager.js +1 -0
  36. package/dist/cjs/src/managers/scene/sceneInitializationManager.js +1 -0
  37. package/dist/cjs/src/managers/scene/sceneOperationsManager.js +1 -0
  38. package/dist/cjs/src/managers/scene/sceneTooltipsManager.js +1 -0
  39. package/dist/cjs/src/managers/system/disposalManager.js +1 -0
  40. package/dist/cjs/src/managers/system/hotReloadManager.js +1 -0
  41. package/dist/cjs/src/managers/system/performanceMonitor.js +1 -0
  42. package/dist/cjs/src/rendering/modelPreloader.js +1 -0
  43. package/dist/cjs/src/rendering/rendering2D.js +1 -0
  44. package/dist/cjs/src/rendering/rendering3D.js +1 -0
  45. package/dist/esm/_virtual/_rollupPluginBabelHelpers.js +1 -339
  46. package/dist/esm/node_modules/@2112-lab/pathfinder/dist/index.esm.js +1 -1444
  47. package/dist/esm/node_modules/three/examples/jsm/controls/OrbitControls.js +1 -1287
  48. package/dist/esm/node_modules/three/examples/jsm/exporters/GLTFExporter.js +1 -0
  49. package/dist/esm/node_modules/three/examples/jsm/exporters/OBJExporter.js +1 -0
  50. package/dist/esm/node_modules/three/examples/jsm/exporters/PLYExporter.js +1 -0
  51. package/dist/esm/node_modules/three/examples/jsm/exporters/STLExporter.js +1 -0
  52. package/dist/esm/node_modules/three/examples/jsm/loaders/DRACOLoader.js +1 -0
  53. package/dist/esm/node_modules/three/examples/jsm/loaders/GLTFLoader.js +1 -4370
  54. package/dist/esm/node_modules/three/examples/jsm/loaders/RGBELoader.js +1 -461
  55. package/dist/esm/node_modules/three/examples/jsm/renderers/CSS2DRenderer.js +1 -0
  56. package/dist/esm/node_modules/three/examples/jsm/utils/BufferGeometryUtils.js +1 -113
  57. package/dist/esm/src/analysis/analysis.js +1 -0
  58. package/dist/esm/src/analysis/testing.js +1 -0
  59. package/dist/esm/src/core/centralPlant.js +1 -0
  60. package/dist/esm/src/core/debugLogger.js +1 -0
  61. package/dist/esm/src/core/mathUtils.js +1 -0
  62. package/dist/esm/src/core/nameUtils.js +1 -0
  63. package/dist/esm/src/data/export.js +1 -0
  64. package/dist/esm/src/data/import.js +1 -0
  65. package/dist/esm/src/data/numerics.js +1 -0
  66. package/dist/esm/src/helpers/sceneHelper.js +1 -0
  67. package/dist/esm/src/index.js +1 -70
  68. package/dist/esm/src/managers/components/animationManager.js +1 -0
  69. package/dist/esm/src/managers/components/componentManager.js +1 -0
  70. package/dist/esm/src/managers/components/pathfindingManager.js +1 -0
  71. package/dist/esm/src/managers/controls/TransformControls.js +1 -0
  72. package/dist/esm/src/managers/controls/cameraControlsManager.js +1 -0
  73. package/dist/esm/src/managers/controls/dragDropManager.js +1 -0
  74. package/dist/esm/src/managers/controls/keyboardControlsManager.js +1 -0
  75. package/dist/esm/src/managers/controls/transformControlsManager.js +1 -0
  76. package/dist/esm/src/managers/environment/environmentManager.js +1 -0
  77. package/dist/esm/src/managers/environment/textureConfig.js +1 -0
  78. package/dist/esm/src/managers/scene/sceneExportManager.js +1 -0
  79. package/dist/esm/src/managers/scene/sceneInitializationManager.js +1 -0
  80. package/dist/esm/src/managers/scene/sceneOperationsManager.js +1 -0
  81. package/dist/esm/src/managers/scene/sceneTooltipsManager.js +1 -0
  82. package/dist/esm/src/managers/system/disposalManager.js +1 -0
  83. package/dist/esm/src/managers/system/hotReloadManager.js +1 -0
  84. package/dist/esm/src/managers/system/performanceMonitor.js +1 -0
  85. package/dist/esm/src/rendering/modelPreloader.js +1 -0
  86. package/dist/esm/src/rendering/rendering2D.js +1 -0
  87. package/dist/esm/src/rendering/rendering3D.js +1 -0
  88. package/dist/index.d.ts +52 -255
  89. package/package.json +3 -6
  90. package/dist/cjs/node_modules/three/examples/jsm/controls/TransformControls.js +0 -1543
  91. package/dist/cjs/src/animationManager.js +0 -121
  92. package/dist/cjs/src/componentManager.js +0 -151
  93. package/dist/cjs/src/debugLogger.js +0 -176
  94. package/dist/cjs/src/disposalManager.js +0 -185
  95. package/dist/cjs/src/environmentManager.js +0 -1308
  96. package/dist/cjs/src/hotReloadManager.js +0 -252
  97. package/dist/cjs/src/keyboardControlsManager.js +0 -206
  98. package/dist/cjs/src/nameUtils.js +0 -106
  99. package/dist/cjs/src/pathfindingManager.js +0 -503
  100. package/dist/cjs/src/performanceMonitor.js +0 -718
  101. package/dist/cjs/src/sceneExportManager.js +0 -292
  102. package/dist/cjs/src/sceneInitializationManager.js +0 -540
  103. package/dist/cjs/src/textureConfig.js +0 -624
  104. package/dist/cjs/src/transformControlsManager.js +0 -851
  105. package/dist/esm/node_modules/three/examples/jsm/controls/TransformControls.js +0 -1537
  106. package/dist/esm/src/animationManager.js +0 -112
  107. package/dist/esm/src/componentManager.js +0 -123
  108. package/dist/esm/src/debugLogger.js +0 -167
  109. package/dist/esm/src/disposalManager.js +0 -155
  110. package/dist/esm/src/environmentManager.js +0 -1282
  111. package/dist/esm/src/hotReloadManager.js +0 -244
  112. package/dist/esm/src/keyboardControlsManager.js +0 -196
  113. package/dist/esm/src/nameUtils.js +0 -99
  114. package/dist/esm/src/pathfindingManager.js +0 -479
  115. package/dist/esm/src/performanceMonitor.js +0 -712
  116. package/dist/esm/src/sceneExportManager.js +0 -286
  117. package/dist/esm/src/sceneInitializationManager.js +0 -513
  118. package/dist/esm/src/textureConfig.js +0 -595
  119. package/dist/esm/src/transformControlsManager.js +0 -827
@@ -0,0 +1 @@
1
+ import{createClass as t,classCallCheck as i}from"../../../_virtual/_rollupPluginBabelHelpers.js";var n=function(){return t(function t(n){i(this,t),this.sceneViewer=n||null,this.isDev="development"===process.env.NODE_ENV,this.instanceId=Date.now()+Math.random(),this.hotReloadCleanupHandler=null,this.visibilityChangeHandler=null,this.nuxtHotReloadHandler=null,this.memoryCheckInterval=null,this.timeoutIds=new Set,this.intervalIds=new Set},[{key:"setupHotReloadHandling",value:function(){var t=this;if(this.sceneViewer&&this.isDev){window._sceneViewerInstances||(window._sceneViewerInstances=new Set);try{window._sceneViewerInstances.add(this.sceneViewer)}catch(t){}this.hotReloadCleanupHandler=function(){if(t.sceneViewer){if(t.sceneViewer&&t.sceneViewer.tooltipsManager)try{t.sceneViewer.tooltipsManager.dispose(),t.sceneViewer.tooltipsManager=null}catch(t){}try{"function"==typeof t.sceneViewer.enhancedDisposal&&t.sceneViewer.enhancedDisposal()}catch(t){}try{import("./performanceMonitor.js").then(function(t){var i=t.PerformanceUI;i&&"function"==typeof i.cleanupAllInstances&&i.cleanupAllInstances()}).catch(function(t){})}catch(t){}if(window._sceneViewerInstances)try{window._sceneViewerInstances.delete(t.sceneViewer)}catch(t){}}};try{window.addEventListener("beforeunload",this.hotReloadCleanupHandler),window.addEventListener("pagehide",this.hotReloadCleanupHandler)}catch(t){}}}},{key:"cleanupHotReloadHandlers",value:function(){if(this.isDev)try{this.hotReloadCleanupHandler&&(window.removeEventListener("beforeunload",this.hotReloadCleanupHandler),window.removeEventListener("pagehide",this.hotReloadCleanupHandler),this.hotReloadCleanupHandler=null),this.visibilityChangeHandler&&(document.removeEventListener("visibilitychange",this.visibilityChangeHandler),this.visibilityChangeHandler=null),this.nuxtHotReloadHandler&&window.$nuxt&&window.$nuxt.$off&&(window.$nuxt.$off("routeChanged",this.nuxtHotReloadHandler),window.$nuxt.$off("$nuxtReady",this.nuxtHotReloadHandler),this.nuxtHotReloadHandler=null),this.memoryCheckInterval&&(clearInterval(this.memoryCheckInterval),this.memoryCheckInterval=null);this.sceneViewer;if(window._sceneViewerInstances&&this.sceneViewer)try{window._sceneViewerInstances.delete(this.sceneViewer)}catch(t){}this.sceneViewer=null,window._sceneViewerInstances&&0===window._sceneViewerInstances.size&&delete window._sceneViewerInstances}catch(t){}}},{key:"clearPendingOperations",value:function(){this.timeoutIds&&(this.timeoutIds.forEach(function(t){return clearTimeout(t)}),this.timeoutIds.clear()),this.intervalIds&&(this.intervalIds.forEach(function(t){return clearInterval(t)}),this.intervalIds.clear()),this.isDev}},{key:"forceGarbageCollectionHint",value:function(){this.isDev&&setTimeout(function(){window.gc?window.gc():new Array(1e6).fill(0).length=0},100)}},{key:"addTimeout",value:function(t){this.timeoutIds.add(t)}},{key:"addInterval",value:function(t){this.intervalIds.add(t)}},{key:"removeTimeout",value:function(t){this.timeoutIds.delete(t)}},{key:"removeInterval",value:function(t){this.intervalIds.delete(t)}}])}();export{n as HotReloadManager};
@@ -0,0 +1 @@
1
+ import{createClass as t,createForOfIteratorHelper as e,classCallCheck as i}from"../../../_virtual/_rollupPluginBabelHelpers.js";var s=function(){return t(function t(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:null;i(this,t),this.renderer=e,this.stats={fps:{current:0,average:0,min:1/0,max:0,history:[]},frameTime:{current:0,average:0,min:1/0,max:0,history:[]},memory:{geometries:0,textures:0,programs:0,heapUsed:0,heapTotal:0},drawCalls:{current:0,average:0,triangles:0,points:0,lines:0},gpu:{memoryUsage:0,extensions:[]},scene:{objects:0,lights:0,meshes:0,materials:0,visible:0}},this.frameCount=0,this.lastTime=performance.now(),this.updateInterval=100,this.maxHistoryLength=300,this.thresholds={fps:{good:55,warning:45,critical:30},frameTime:{good:16.67,warning:22.22,critical:33.33},memory:{warning:200,critical:300},drawCalls:{warning:500,critical:1e3}},this.callbacks=new Map,this.isMonitoring=!1,this.update=this.update.bind(this),this.getGPUInfo=this.getGPUInfo.bind(this)},[{key:"start",value:function(){this.isMonitoring=!0,this.lastTime=performance.now(),this.getGPUInfo()}},{key:"stop",value:function(){this.isMonitoring=!1}},{key:"update",value:function(){if(this.isMonitoring){var t=performance.now(),e=t-this.lastTime;this.frameCount++;var i=1e3/e,s=e;this.stats.fps.current=i,this.stats.frameTime.current=s,this.addToHistory(this.stats.fps,i),this.addToHistory(this.stats.frameTime,s),this.frameCount%this.updateInterval===0&&(this.updateAverages(),this.updateMemoryStats(),this.updateDrawCallStats(),this.updateSceneStats(),this.checkThresholds()),this.lastTime=t}}},{key:"addToHistory",value:function(t,e){t.history.push(e),t.history.length>this.maxHistoryLength&&t.history.shift(),t.min=Math.min(t.min,e),t.max=Math.max(t.max,e)}},{key:"updateAverages",value:function(){this.stats.fps.history.length>0&&(this.stats.fps.average=this.stats.fps.history.reduce(function(t,e){return t+e},0)/this.stats.fps.history.length),this.stats.frameTime.history.length>0&&(this.stats.frameTime.average=this.stats.frameTime.history.reduce(function(t,e){return t+e},0)/this.stats.frameTime.history.length)}},{key:"updateMemoryStats",value:function(){var t;if(this.renderer){var e=this.renderer.info;this.stats.memory.geometries=e.memory.geometries,this.stats.memory.textures=e.memory.textures,this.stats.memory.programs=(null===(t=e.programs)||void 0===t?void 0:t.length)||0,performance.memory&&(this.stats.memory.heapUsed=Math.round(performance.memory.usedJSHeapSize/1024/1024),this.stats.memory.heapTotal=Math.round(performance.memory.totalJSHeapSize/1024/1024))}}},{key:"updateDrawCallStats",value:function(){if(this.renderer){var t=this.renderer.info.render;this.stats.drawCalls.current=t.calls,this.stats.drawCalls.triangles=t.triangles,this.stats.drawCalls.points=t.points,this.stats.drawCalls.lines=t.lines,this.stats.drawCalls.history||(this.stats.drawCalls.history=[]),this.addToHistory(this.stats.drawCalls,t.calls),this.stats.drawCalls.history.length>0&&(this.stats.drawCalls.average=this.stats.drawCalls.history.reduce(function(t,e){return t+e},0)/this.stats.drawCalls.history.length)}}},{key:"updateSceneStats",value:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:null;if(t){var i,s=0,n=0,a=0,r=new Set,o=0,l=e(t.children);try{for(l.s();!(i=l.n()).done;){var h=i.value;s++,h.visible&&o++,h.isLight&&n++,h.isMesh&&(a++,h.material&&(Array.isArray(h.material)?h.material.forEach(function(t){return r.add(t.uuid)}):r.add(h.material.uuid)))}}catch(t){l.e(t)}finally{l.f()}this.stats.scene={objects:s,lights:n,meshes:a,materials:r.size,visible:o}}}},{key:"getGPUInfo",value:function(){if(this.renderer){var t=this.renderer.getContext();this.stats.gpu.extensions=t.getSupportedExtensions()||[];var e=t.getExtension("WEBGL_debug_renderer_info");e&&(this.stats.gpu.renderer=t.getParameter(e.UNMASKED_RENDERER_WEBGL),this.stats.gpu.vendor=t.getParameter(e.UNMASKED_VENDOR_WEBGL))}}},{key:"checkThresholds",value:function(){var t=[];this.stats.fps.average<this.thresholds.fps.critical?t.push({type:"critical",category:"FPS",value:this.stats.fps.average.toFixed(1),threshold:this.thresholds.fps.critical}):this.stats.fps.average<this.thresholds.fps.warning&&t.push({type:"warning",category:"FPS",value:this.stats.fps.average.toFixed(1),threshold:this.thresholds.fps.warning}),this.stats.frameTime.average>this.thresholds.frameTime.critical?t.push({type:"critical",category:"Frame Time",value:this.stats.frameTime.average.toFixed(2)+"ms",threshold:this.thresholds.frameTime.critical+"ms"}):this.stats.frameTime.average>this.thresholds.frameTime.warning&&t.push({type:"warning",category:"Frame Time",value:this.stats.frameTime.average.toFixed(2)+"ms",threshold:this.thresholds.frameTime.warning+"ms"}),this.stats.memory.heapUsed>this.thresholds.memory.critical?t.push({type:"critical",category:"Memory",value:this.stats.memory.heapUsed+"MB",threshold:this.thresholds.memory.critical+"MB"}):this.stats.memory.heapUsed>this.thresholds.memory.warning&&t.push({type:"warning",category:"Memory",value:this.stats.memory.heapUsed+"MB",threshold:this.thresholds.memory.warning+"MB"}),this.stats.drawCalls.average>this.thresholds.drawCalls.critical?t.push({type:"critical",category:"Draw Calls",value:Math.round(this.stats.drawCalls.average),threshold:this.thresholds.drawCalls.critical}):this.stats.drawCalls.average>this.thresholds.drawCalls.warning&&t.push({type:"warning",category:"Draw Calls",value:Math.round(this.stats.drawCalls.average),threshold:this.thresholds.drawCalls.warning}),t.length>0&&this.triggerCallback("warning",t)}},{key:"on",value:function(t,e){this.callbacks.has(t)||this.callbacks.set(t,[]),this.callbacks.get(t).push(e)}},{key:"off",value:function(t,e){if(this.callbacks.has(t)){var i=this.callbacks.get(t),s=i.indexOf(e);s>-1&&i.splice(s,1)}}},{key:"triggerCallback",value:function(t,e){this.callbacks.has(t)&&this.callbacks.get(t).forEach(function(t){return t(e)})}},{key:"getSummary",value:function(){return{fps:{current:Math.round(this.stats.fps.current),average:Math.round(this.stats.fps.average),min:Math.round(this.stats.fps.min),max:Math.round(this.stats.fps.max)},frameTime:{current:this.stats.frameTime.current.toFixed(2)+"ms",average:this.stats.frameTime.average.toFixed(2)+"ms"},memory:{geometries:this.stats.memory.geometries,textures:this.stats.memory.textures,heapUsed:this.stats.memory.heapUsed+"MB",heapTotal:this.stats.memory.heapTotal+"MB"},drawCalls:{current:this.stats.drawCalls.current,average:Math.round(this.stats.drawCalls.average),triangles:this.stats.drawCalls.triangles.toLocaleString()},scene:this.stats.scene}}},{key:"logSummary",value:function(){this.getSummary()}},{key:"reset",value:function(){var t=this;Object.keys(this.stats).forEach(function(e){t.stats[e].history&&(t.stats[e].history=[]),void 0!==t.stats[e].min&&(t.stats[e].min=1/0,t.stats[e].max=0,t.stats[e].average=0)}),this.frameCount=0}},{key:"exportData",value:function(){return{timestamp:(new Date).toISOString(),stats:JSON.parse(JSON.stringify(this.stats)),thresholds:this.thresholds,frameCount:this.frameCount}}}])}(),n=function(){return t(function t(e){var s=arguments.length>1&&void 0!==arguments[1]?arguments[1]:document.body,n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:"dark";i(this,t),this.monitor=e,this.container=s,this.element=null,this.isVisible=!1,this.updateInterval=null,this.theme=n},[{key:"show",value:function(){var t=this;this.cleanupExistingElements(),this.element&&this.hide(),this.element=document.createElement("div"),this.element.id="performance-monitor-ui",this.element.innerHTML=this.getHTML(),this.addStyles(),this.container.appendChild(this.element),this.isVisible=!0,this.startUpdating(),this.element.querySelector("#perf-toggle").addEventListener("click",function(){return t.toggleDetails()}),this.toggleDetails()}},{key:"cleanupExistingElements",value:function(){document.querySelectorAll("#performance-monitor-ui").forEach(function(t){try{t.parentNode&&t.parentNode.removeChild(t)}catch(t){}})}},{key:"hide",value:function(){this.stopUpdating(),this.removeDOMElement(),this.isVisible=!1}},{key:"dispose",value:function(){this.hide(),this.cleanupExistingElements(),this.monitor=null,this.container=null,this.element=null}},{key:"stopUpdating",value:function(){this.updateInterval&&(clearInterval(this.updateInterval),this.updateInterval=null)}},{key:"removeDOMElement",value:function(){if(this.element){try{this.element.parentNode&&this.container&&this.container.contains(this.element)?this.container.removeChild(this.element):this.element.parentNode&&this.element.parentNode.removeChild(this.element)}catch(t){try{this.element.remove&&this.element.remove()}catch(t){}}this.element=null}}},{key:"toggleDetails",value:function(){var t=this.element.querySelector("#perf-details"),e="none"===t.style.display;t.style.display=e?"block":"none",this.element.querySelector("#perf-toggle").textContent=e?"▼":"▲"}},{key:"startUpdating",value:function(){var t=this;this.updateInterval=setInterval(function(){t.isVisible&&t.element&&t.updateContent()},500)}},{key:"updateContent",value:function(){var t=this.monitor.getSummary();this.updateElement("#fps-value",t.fps.current),this.updateElement("#frametime-value",t.frameTime.current),this.updateElement("#memory-value",t.memory.heapUsed),this.updateElement("#drawcalls-value",t.drawCalls.current),this.updateElement("#fps-avg",t.fps.average),this.updateElement("#fps-min",t.fps.min),this.updateElement("#fps-max",t.fps.max),this.updateElement("#geometries-value",t.memory.geometries),this.updateElement("#textures-value",t.memory.textures),this.updateElement("#triangles-value",t.drawCalls.triangles),this.updateElement("#objects-value",t.scene.objects),this.updateElement("#meshes-value",t.scene.meshes),this.updatePerformanceIndicators(t)}},{key:"updateElement",value:function(t,e){var i=this.element.querySelector(t);i&&(i.textContent=e)}},{key:"updatePerformanceIndicators",value:function(t){var e=this.element.querySelector("#fps-value"),i=this.element.querySelector("#frametime-value");if(e){var s=t.fps.current;e.className=this.getPerformanceClass("fps",s)}if(i){var n=parseFloat(t.frameTime.current);i.className=this.getPerformanceClass("frameTime",n)}}},{key:"getPerformanceClass",value:function(t,e){var i=this.monitor.thresholds[t];return"fps"===t?e>=i.good?"perf-good":e>=i.warning?"perf-warning":"perf-critical":"frameTime"===t?e<=i.good?"perf-good":e<=i.warning?"perf-warning":"perf-critical":""}},{key:"getHTML",value:function(){return'\n <div class="perf-header">\n <span class="perf-title">Performance</span>\n <button id="perf-toggle">▼</button>\n </div>\n <div class="perf-main">\n <div class="perf-stat">\n <span class="perf-label">FPS:</span>\n <span id="fps-value" class="perf-value">0</span>\n </div>\n <div class="perf-stat">\n <span class="perf-label">Frame:</span>\n <span id="frametime-value" class="perf-value">0ms</span>\n </div>\n <div class="perf-stat">\n <span class="perf-label">Memory:</span>\n <span id="memory-value" class="perf-value">0MB</span>\n </div>\n <div class="perf-stat">\n <span class="perf-label">Calls:</span>\n <span id="drawcalls-value" class="perf-value">0</span>\n </div>\n </div>\n <div id="perf-details" class="perf-details">\n <div class="perf-section">\n <div class="perf-section-title">FPS Stats</div>\n <div class="perf-detail">Avg: <span id="fps-avg">0</span></div>\n <div class="perf-detail">Min: <span id="fps-min">0</span></div>\n <div class="perf-detail">Max: <span id="fps-max">0</span></div>\n </div>\n <div class="perf-section">\n <div class="perf-section-title">Memory</div>\n <div class="perf-detail">Geometries: <span id="geometries-value">0</span></div>\n <div class="perf-detail">Textures: <span id="textures-value">0</span></div>\n </div>\n <div class="perf-section">\n <div class="perf-section-title">Rendering</div>\n <div class="perf-detail">Triangles: <span id="triangles-value">0</span></div>\n <div class="perf-detail">Objects: <span id="objects-value">0</span></div>\n <div class="perf-detail">Meshes: <span id="meshes-value">0</span></div>\n </div>\n </div>\n '}},{key:"addStyles",value:function(){if(!document.getElementById("performance-monitor-styles")){var t=document.createElement("style");t.id="performance-monitor-styles";var e={dark:{background:"rgba(0, 0, 0, 0.8)",color:"white",borderColor:"rgba(255, 255, 255, 0.1)",separatorColor:"rgba(255, 255, 255, 0.2)",sectionTitleColor:"#FFC107",goodColor:"#4CAF50",warningColor:"#FF9800",criticalColor:"#F44336"},light:{background:"rgba(255, 255, 255, 0.95)",color:"#333333",borderColor:"rgba(0, 0, 0, 0.15)",separatorColor:"rgba(0, 0, 0, 0.1)",sectionTitleColor:"#1565C0",goodColor:"#2E7D32",warningColor:"#E65100",criticalColor:"#C62828"}},i=e[this.theme]||e.dark;t.textContent=" #performance-monitor-ui {\n position: fixed;\n bottom: 10px;\n right: 10px;\n background: ".concat(i.background,";\n color: ").concat(i.color,";\n font-family: 'Consolas', 'Monaco', 'Courier New', monospace;\n font-size: 12px;\n padding: 10px;\n border-radius: 5px;\n z-index: 10000;\n min-width: 150px;\n backdrop-filter: blur(5px);\n border: 1px solid ").concat(i.borderColor,";\n box-shadow: 0 4px 12px rgba(0, 0, 0, 0.15);\n }\n\n .perf-header {\n display: flex;\n justify-content: space-between;\n align-items: center;\n margin-bottom: 8px;\n border-bottom: 1px solid ").concat(i.separatorColor,";\n padding-bottom: 5px;\n }\n\n .perf-title {\n font-weight: bold;\n font-size: 14px;\n }\n\n #perf-toggle {\n background: none;\n border: none;\n color: ").concat(i.color,";\n cursor: pointer;\n font-size: 12px;\n padding: 0;\n width: 20px;\n height: 20px;\n }\n\n .perf-main {\n display: grid;\n grid-template-columns: 1fr;\n gap: 4px;\n }\n\n .perf-stat {\n display: flex;\n justify-content: space-between;\n align-items: center;\n }\n\n .perf-label {\n opacity: 0.8;\n }\n\n .perf-value {\n font-weight: bold;\n text-align: right;\n min-width: 50px;\n } .perf-good {\n color: ").concat(i.goodColor,";\n }\n\n .perf-warning {\n color: ").concat(i.warningColor,";\n }\n\n .perf-critical {\n color: ").concat(i.criticalColor,";\n }\n\n .perf-details {\n margin-top: 10px;\n padding-top: 8px;\n border-top: 1px solid ").concat(i.separatorColor,";\n }\n\n .perf-section {\n margin-bottom: 8px;\n }\n\n .perf-section-title {\n font-weight: bold;\n font-size: 11px;\n margin-bottom: 3px;\n color: ").concat(i.sectionTitleColor,";\n }\n\n .perf-detail {\n font-size: 10px;\n display: flex;\n justify-content: space-between;\n margin-bottom: 2px;\n opacity: 0.9;\n }\n "),document.head.appendChild(t)}}},{key:"setTheme",value:function(t){if("light"===t||"dark"===t){this.theme=t;var e=document.getElementById("performance-monitor-styles");e&&e.remove(),this.addStyles()}}}],[{key:"cleanupAllInstances",value:function(){var t=document.querySelectorAll("#performance-monitor-ui"),e=0;if(t.forEach(function(t){try{t.parentNode&&(t.parentNode.removeChild(t),e++)}catch(t){}}),0===document.querySelectorAll("#performance-monitor-ui").length){var i=document.getElementById("performance-monitor-styles");i&&i.remove()}return e}}])}();export{s as PerformanceMonitor,n as PerformanceUI};
@@ -0,0 +1 @@
1
+ import{createClass as t,classCallCheck as e,asyncToGenerator as i,regenerator as n,typeof as r}from"../../_virtual/_rollupPluginBabelHelpers.js";import"three";import{GLTFLoader as s}from"../../node_modules/three/examples/jsm/loaders/GLTFLoader.js";var o=function(){return t(function t(){e(this,t),this.modelCache=new Map,this.loadingPromises=new Map,this.gltfLoader=new s,this.isPreloading=!1,this.preloadingPromise=null,this.componentDictionary=null},[{key:"preloadAllModels",value:(a=i(n().m(function t(e){var i,s,o=this;return n().w(function(t){for(;;)switch(t.n){case 0:if(!this.isPreloading){t.n=1;break}return t.a(2,this.preloadingPromise);case 1:if(e&&"object"===r(e)){t.n=2;break}return t.a(2,Promise.reject(new Error("Invalid component dictionary")));case 2:return this.componentDictionary=e,this.isPreloading=!0,i=[],s=[],Object.keys(e).forEach(function(t){var n=e[t];n&&n.modelKey&&(i.includes(n.modelKey)||i.push(n.modelKey))}),i.forEach(function(t){s.push(o.preloadSingleModel(t))}),this.preloadingPromise=Promise.allSettled(s).then(function(t){var e=t.filter(function(t){return"fulfilled"===t.status}).length,n=t.filter(function(t){return"rejected"===t.status}).length;return o.isPreloading=!1,{successful:e,failed:n,total:i.length,cache:o.modelCache}}),t.a(2,this.preloadingPromise)}},t,this)})),function(t){return a.apply(this,arguments)})},{key:"preloadSingleModel",value:(u=i(n().m(function t(e){var i,r=this;return n().w(function(t){for(;;)switch(t.n){case 0:if(!this.modelCache.has(e)){t.n=1;break}return t.a(2,this.modelCache.get(e));case 1:if(!this.loadingPromises.has(e)){t.n=2;break}return t.a(2,this.loadingPromises.get(e));case 2:return i=new Promise(function(t,i){r.gltfLoader.load("/library/models/".concat(e),function(i){r.modelCache.set(e,i.scene),r.loadingPromises.delete(e),t(i.scene)},function(t){t.loaded,t.total},function(t){r.loadingPromises.delete(e),i(t)})}),this.loadingPromises.set(e,i),t.a(2,i)}},t,this)})),function(t){return u.apply(this,arguments)})},{key:"getCachedModel",value:function(t){return this.modelCache.has(t)?this.modelCache.get(t).clone():null}},{key:"getCachedModelWithDimensions",value:function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:null;if(this.modelCache.has(t)){var i=this.modelCache.get(t).clone();if(e&&this.componentDictionary){var n=this.componentDictionary[e];n&&n.boundingBox&&(i.userData||(i.userData={}),i.userData.dimensions={x:n.boundingBox.x,y:n.boundingBox.y,z:n.boundingBox.z})}return i}return null}},{key:"addDimensionsToModel",value:function(t,e){if(!t||!e)return t;if(this.componentDictionary){var i=this.componentDictionary[e];i&&i.boundingBox&&(t.userData||(t.userData={}),t.userData.dimensions={x:i.boundingBox.x,y:i.boundingBox.y,z:i.boundingBox.z})}return t}},{key:"getStatus",value:function(){return{isPreloading:this.isPreloading,cachedModels:Array.from(this.modelCache.keys()),totalCached:this.modelCache.size,currentlyLoading:Array.from(this.loadingPromises.keys())}}},{key:"reloadModel",value:(o=i(n().m(function t(e){return n().w(function(t){for(;;)if(0===t.n)return this.modelCache.delete(e),this.loadingPromises.delete(e),t.a(2,this.preloadSingleModel(e))},t,this)})),function(t){return o.apply(this,arguments)})},{key:"clearCache",value:function(){this.modelCache.forEach(function(t,e){t&&t.traverse&&t.traverse(function(t){t.geometry&&t.geometry.dispose(),t.material&&(Array.isArray(t.material)?t.material.forEach(function(t){return t.dispose()}):t.material.dispose())})}),this.modelCache.clear(),this.loadingPromises.clear(),this.isPreloading=!1,this.preloadingPromise=null}},{key:"getCacheStats",value:function(){var t={totalModels:this.modelCache.size,loadingModels:this.loadingPromises.size,isPreloading:this.isPreloading,memoryUsage:0};return this.modelCache.forEach(function(e){e&&e.traverse&&e.traverse(function(e){var i;e.geometry&&(t.memoryUsage+=12*((null===(i=e.geometry.attributes.position)||void 0===i?void 0:i.count)||0))})}),t}}]);var o,u,a}(),u=new o;export{o as ModelPreloader,u as default};
@@ -0,0 +1 @@
1
+ import{createClass as t,classCallCheck as i,defineProperty as n}from"../../_virtual/_rollupPluginBabelHelpers.js";var r=function(){return t(function t(r){var e=this;i(this,t),n(this,"draw",{line:function(t,i,n,r){var s=arguments.length>4&&void 0!==arguments[4]?arguments[4]:{};e.ctx&&(e.save(),e.setStyles(s),e.ctx.beginPath(),e.ctx.moveTo(t,i),e.ctx.lineTo(n,r),e.ctx.stroke(),e.restore())},rect:function(t,i,n,r){var s=arguments.length>4&&void 0!==arguments[4]?arguments[4]:{};e.ctx&&(e.save(),e.setStyles(s),s.fillStyle&&e.ctx.fillRect(t,i,n,r),s.strokeStyle&&e.ctx.strokeRect(t,i,n,r),e.restore())},circle:function(t,i,n){var r=arguments.length>3&&void 0!==arguments[3]?arguments[3]:{};e.ctx&&(e.save(),e.setStyles(r),e.ctx.beginPath(),e.ctx.arc(t,i,n,0,2*Math.PI),r.fillStyle&&e.ctx.fill(),r.strokeStyle&&e.ctx.stroke(),e.restore())},ellipse:function(t,i,n,r){var s=arguments.length>4&&void 0!==arguments[4]?arguments[4]:0,o=arguments.length>5&&void 0!==arguments[5]?arguments[5]:{};e.ctx&&(e.save(),e.setStyles(o),e.ctx.beginPath(),e.ctx.ellipse(t,i,n,r,s,0,2*Math.PI),o.fillStyle&&e.ctx.fill(),o.strokeStyle&&e.ctx.stroke(),e.restore())},polygon:function(t){var i=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};if(e.ctx&&!(t.length<3)){e.save(),e.setStyles(i),e.ctx.beginPath(),e.ctx.moveTo(t[0][0],t[0][1]);for(var n=1;n<t.length;n++)e.ctx.lineTo(t[n][0],t[n][1]);e.ctx.closePath(),i.fillStyle&&e.ctx.fill(),i.strokeStyle&&e.ctx.stroke(),e.restore()}},bezierCurve:function(t,i,n,r,s,o,u,a){var l=arguments.length>8&&void 0!==arguments[8]?arguments[8]:{};e.ctx&&(e.save(),e.setStyles(l),e.ctx.beginPath(),e.ctx.moveTo(t,i),e.ctx.bezierCurveTo(n,r,s,o,u,a),e.ctx.stroke(),e.restore())},text:function(t,i,n){var r=arguments.length>3&&void 0!==arguments[3]?arguments[3]:{};e.ctx&&(e.save(),e.setStyles(r),r.fillStyle&&e.ctx.fillText(t,i,n),r.strokeStyle&&e.ctx.strokeText(t,i,n),e.restore())},image:function(t,i,n){var r=arguments.length>3&&void 0!==arguments[3]?arguments[3]:null,s=arguments.length>4&&void 0!==arguments[4]?arguments[4]:null;e.ctx&&t&&(r&&s?e.ctx.drawImage(t,i,n,r,s):e.ctx.drawImage(t,i,n))}}),n(this,"transform",{translate:function(t,i){e.ctx&&e.ctx.translate(t,i)},rotate:function(t){e.ctx&&e.ctx.rotate(t)},scale:function(t){var i=arguments.length>1&&void 0!==arguments[1]?arguments[1]:t;e.ctx&&e.ctx.scale(t,i)},transform:function(t,i,n,r,s,o){e.ctx&&e.ctx.transform(t,i,n,r,s,o)},setTransform:function(t,i,n,r,s,o){e.ctx&&e.ctx.setTransform(t,i,n,r,s,o)},resetTransform:function(){e.ctx&&e.ctx.resetTransform()}}),n(this,"gradient",{linear:function(t,i,n,r,s){if(!e.ctx)return null;var o=e.ctx.createLinearGradient(t,i,n,r);return s.forEach(function(t){o.addColorStop(t.offset,t.color)}),o},radial:function(t,i,n,r,s,o,u){if(!e.ctx)return null;var a=e.ctx.createRadialGradient(t,i,n,r,s,o);return u.forEach(function(t){a.addColorStop(t.offset,t.color)}),a}}),n(this,"pattern",{fromImage:function(t){var i=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"repeat";return e.ctx&&t?e.ctx.createPattern(t,i):null},fromCanvas:function(t){var i=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"repeat";return e.ctx&&t?e.ctx.createPattern(t,i):null}}),n(this,"path",{begin:function(){e.ctx&&e.ctx.beginPath()},close:function(){e.ctx&&e.ctx.closePath()},moveTo:function(t,i){e.ctx&&e.ctx.moveTo(t,i)},lineTo:function(t,i){e.ctx&&e.ctx.lineTo(t,i)},arc:function(t,i,n,r,s){var o=arguments.length>5&&void 0!==arguments[5]&&arguments[5];e.ctx&&e.ctx.arc(t,i,n,r,s,o)},quadraticCurveTo:function(t,i,n,r){e.ctx&&e.ctx.quadraticCurveTo(t,i,n,r)},bezierCurveTo:function(t,i,n,r,s,o){e.ctx&&e.ctx.bezierCurveTo(t,i,n,r,s,o)},fill:function(){e.ctx&&e.ctx.fill()},stroke:function(){e.ctx&&e.ctx.stroke()},clip:function(){e.ctx&&e.ctx.clip()}}),n(this,"measure",{textWidth:function(t){var i=arguments.length>1&&void 0!==arguments[1]?arguments[1]:null;if(!e.ctx)return 0;if(i){var n=e.ctx.font;e.ctx.font=i;var r=e.ctx.measureText(t).width;return e.ctx.font=n,r}return e.ctx.measureText(t).width},textMetrics:function(t){var i=arguments.length>1&&void 0!==arguments[1]?arguments[1]:null;if(!e.ctx)return null;if(i){var n=e.ctx.font;e.ctx.font=i;var r=e.ctx.measureText(t);return e.ctx.font=n,r}return e.ctx.measureText(t)}}),n(this,"export",{toDataURL:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"image/png",i=arguments.length>1&&void 0!==arguments[1]?arguments[1]:.92;return e.canvas?e.canvas.toDataURL(t,i):""},toBlob:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"image/png",i=arguments.length>1&&void 0!==arguments[1]?arguments[1]:.92;return e.canvas?new Promise(function(n){e.canvas.toBlob(n,t,i)}):Promise.resolve(null)}}),this.canvas=r,this.ctx=null==r?void 0:r.getContext("2d"),this.width=(null==r?void 0:r.width)||800,this.height=(null==r?void 0:r.height)||600,this.pixelRatio=window.devicePixelRatio||1,this.state={transforms:[],styles:[]},this.setupCanvas()},[{key:"setupCanvas",value:function(){this.canvas&&this.ctx&&(this.canvas.width=this.width*this.pixelRatio,this.canvas.height=this.height*this.pixelRatio,this.ctx.scale(this.pixelRatio,this.pixelRatio),this.canvas.style.width=this.width+"px",this.canvas.style.height=this.height+"px")}},{key:"clear",value:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:null;this.ctx&&(t?(this.ctx.fillStyle=t,this.ctx.fillRect(0,0,this.width,this.height)):this.ctx.clearRect(0,0,this.width,this.height))}},{key:"save",value:function(){this.ctx&&(this.ctx.save(),this.state.transforms.push(this.ctx.getTransform()),this.state.styles.push({fillStyle:this.ctx.fillStyle,strokeStyle:this.ctx.strokeStyle,lineWidth:this.ctx.lineWidth,font:this.ctx.font,textAlign:this.ctx.textAlign,textBaseline:this.ctx.textBaseline}))}},{key:"restore",value:function(){this.ctx&&(this.ctx.restore(),this.state.transforms.pop(),this.state.styles.pop())}},{key:"setStyles",value:function(t){var i=this;this.ctx&&Object.keys(t).forEach(function(n){void 0!==i.ctx[n]&&(i.ctx[n]=t[n])})}},{key:"resize",value:function(t,i){this.width=t,this.height=i,this.setupCanvas()}},{key:"getDimensions",value:function(){return{width:this.width,height:this.height,pixelRatio:this.pixelRatio}}},{key:"dispose",value:function(){this.state.transforms=[],this.state.styles=[],this.canvas=null,this.ctx=null}}])}();export{r as Rendering2D};
@@ -0,0 +1 @@
1
+ import{createClass as i,toConsumableArray as t,objectSpread2 as e,classCallCheck as n,defineProperty as o}from"../../_virtual/_rollupPluginBabelHelpers.js";import*as r from"three";import{logger as s}from"../core/debugLogger.js";var a=function(){return i(function i(){var s=this,a=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};n(this,i),o(this,"lighting",{addAmbient:function(){var i,t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:4210752,e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:.4,n=new r.AmbientLight(t,e);return null===(i=s.scene)||void 0===i||i.add(n),n},addDirectional:function(){var i,e,n,o,a=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},d=a.color,v=void 0===d?16777215:d,h=a.intensity,l=void 0===h?1:h,u=a.position,c=void 0===u?[10,10,5]:u,f=a.target,p=void 0===f?[0,0,0]:f,m=a.castShadow,w=void 0===m||m,g=a.shadowMapSize,y=void 0===g?2048:g,S=a.shadowCameraNear,M=void 0===S?.5:S,x=a.shadowCameraFar,k=void 0===x?50:x,C=a.shadowCameraLeft,P=void 0===C?-10:C,D=a.shadowCameraRight,b=void 0===D?10:D,R=a.shadowCameraTop,_=void 0===R?10:R,B=a.shadowCameraBottom,j=void 0===B?-10:B,z=new r.DirectionalLight(v,l);return(i=z.position).set.apply(i,t(c)),(e=z.target.position).set.apply(e,t(p)),w&&(z.castShadow=!0,z.shadow.mapSize.width=y,z.shadow.mapSize.height=y,z.shadow.camera.near=M,z.shadow.camera.far=k,z.shadow.camera.left=P,z.shadow.camera.right=b,z.shadow.camera.top=_,z.shadow.camera.bottom=j),null===(n=s.scene)||void 0===n||n.add(z),null===(o=s.scene)||void 0===o||o.add(z.target),z},addPoint:function(){var i,e,n=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},o=n.color,a=void 0===o?16777215:o,d=n.intensity,v=void 0===d?1:d,h=n.distance,l=void 0===h?0:h,u=n.decay,c=void 0===u?2:u,f=n.position,p=void 0===f?[0,10,0]:f,m=n.castShadow,w=void 0!==m&&m,g=n.shadowMapSize,y=void 0===g?1024:g,S=new r.PointLight(a,v,l,c);return(i=S.position).set.apply(i,t(p)),w&&(S.castShadow=!0,S.shadow.mapSize.width=y,S.shadow.mapSize.height=y,S.shadow.camera.near=.1,S.shadow.camera.far=25),null===(e=s.scene)||void 0===e||e.add(S),S},addSpot:function(){var i,e,n,o,a=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},d=a.color,v=void 0===d?16777215:d,h=a.intensity,l=void 0===h?1:h,u=a.distance,c=void 0===u?0:u,f=a.angle,p=void 0===f?Math.PI/3:f,m=a.penumbra,w=void 0===m?0:m,g=a.decay,y=void 0===g?2:g,S=a.position,M=void 0===S?[0,10,0]:S,x=a.target,k=void 0===x?[0,0,0]:x,C=a.castShadow,P=void 0===C||C,D=a.shadowMapSize,b=void 0===D?1024:D,R=new r.SpotLight(v,l,c,p,w,y);return(i=R.position).set.apply(i,t(M)),(e=R.target.position).set.apply(e,t(k)),P&&(R.castShadow=!0,R.shadow.mapSize.width=b,R.shadow.mapSize.height=b,R.shadow.camera.near=.5,R.shadow.camera.far=50),null===(n=s.scene)||void 0===n||n.add(R),null===(o=s.scene)||void 0===o||o.add(R.target),R}}),o(this,"materials",{createStandard:function(){var i=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};return new r.MeshStandardMaterial(e({color:16777215,metalness:0,roughness:.5},i))},createPhysical:function(){var i=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};return new r.MeshPhysicalMaterial(e({color:16777215,metalness:0,roughness:.5,clearcoat:0,clearcoatRoughness:0},i))},createBasic:function(){var i=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};return new r.MeshBasicMaterial(e({color:16777215},i))},createShader:function(){var i=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};return new r.ShaderMaterial({vertexShader:i.vertexShader||"\n void main() {\n gl_Position = projectionMatrix * modelViewMatrix * vec4(position, 1.0);\n }\n ",fragmentShader:i.fragmentShader||"\n void main() {\n gl_FragColor = vec4(1.0, 0.0, 0.0, 1.0);\n }\n ",uniforms:i.uniforms||{}})}}),o(this,"geometry",{createBox:function(){var i=arguments.length>0&&void 0!==arguments[0]?arguments[0]:1,t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:1,e=arguments.length>2&&void 0!==arguments[2]?arguments[2]:1;return new r.BoxGeometry(i,t,e)},createSphere:function(){var i=arguments.length>0&&void 0!==arguments[0]?arguments[0]:1,t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:32,e=arguments.length>2&&void 0!==arguments[2]?arguments[2]:16;return new r.SphereGeometry(i,t,e)},createCylinder:function(){var i=arguments.length>0&&void 0!==arguments[0]?arguments[0]:1,t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:1,e=arguments.length>2&&void 0!==arguments[2]?arguments[2]:1,n=arguments.length>3&&void 0!==arguments[3]?arguments[3]:32;return new r.CylinderGeometry(i,t,e,n)},createPlane:function(){var i=arguments.length>0&&void 0!==arguments[0]?arguments[0]:1,t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:1;return new r.PlaneGeometry(i,t)}}),o(this,"renderTargets",{create:function(i,t){var n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{},o=new r.WebGLRenderTarget(i,t,e({minFilter:r.LinearFilter,magFilter:r.LinearFilter,format:r.RGBAFormat,type:r.UnsignedByteType},n)),a="rt_".concat(Date.now(),"_").concat(Math.random().toString(36).substr(2,9));return s.renderTargets.set(a,o),{id:a,renderTarget:o}},get:function(i){return s.renderTargets.get(i)},remove:function(i){var t=s.renderTargets.get(i);t&&(t.dispose(),s.renderTargets.delete(i))}}),o(this,"animation",{createMixer:function(i){return s.animationMixer=new r.AnimationMixer(i),s.animationMixer},addClip:function(i){if(!s.animationMixer)throw new Error("Animation mixer not created");return s.animationMixer.clipAction(i)},update:function(i){s.animationMixer&&s.animationMixer.update(i)}}),o(this,"screenshot",{toDataURL:function(){var i=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"image/png",t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:1;return s.renderer?s.renderer.domElement.toDataURL(i,t):""},toBlob:function(){var i=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"image/png",t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:1;return s.renderer?new Promise(function(e){s.renderer.domElement.toBlob(e,i,t)}):Promise.resolve(null)}}),this.options=e({antialias:!0,alpha:!0,shadowMapEnabled:!0,shadowMapType:r.PCFSoftShadowMap,toneMapping:r.ACESFilmicToneMapping,toneMappingExposure:1,outputColorSpace:r.SRGBColorSpace},a),this.renderer=null,this.scene=null,this.camera=null,this.controls=null,this.renderTargets=new Map,this.postProcessing={composer:null,passes:[]},this.stats={triangles:0,geometries:0,textures:0,calls:0,frameTime:0},this.animationMixer=null,this.clock=new r.Clock},[{key:"initializeRenderer",value:function(i){this.renderer&&this.dispose();try{return this.renderer=new r.WebGLRenderer({antialias:this.options.antialias,alpha:this.options.alpha,preserveDrawingBuffer:!1,powerPreference:"high-performance"}),this.renderer.setPixelRatio(Math.min(window.devicePixelRatio,2)),this.renderer.setSize(i.clientWidth,i.clientHeight),this.renderer.setClearColor(0,0),this.options.shadowMapEnabled&&(this.renderer.shadowMap.enabled=!0,this.renderer.shadowMap.type=this.options.shadowMapType),this.renderer.toneMapping=this.options.toneMapping,this.renderer.toneMappingExposure=this.options.toneMappingExposure,this.renderer.outputColorSpace=this.options.outputColorSpace,this.renderer.useLegacyLights=!1,i.appendChild(this.renderer.domElement),s.info("✅ 3D Renderer initialized"),this.renderer}catch(i){throw s.error("❌ Failed to initialize 3D renderer:",i),i}}},{key:"createScene",value:function(){var i=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},t=i.background,e=void 0===t?null:t,n=i.environment,o=void 0===n?null:n,a=i.fog,d=void 0===a?null:a;return this.scene=new r.Scene,e&&("string"==typeof e?this.scene.background=new r.Color(e):e.isTexture&&(this.scene.background=e)),o&&o.isTexture&&(this.scene.environment=o),d&&("linear"===d.type?this.scene.fog=new r.Fog(d.color,d.near,d.far):"exponential"===d.type&&(this.scene.fog=new r.FogExp2(d.color,d.density))),s.info("✅ 3D Scene created"),this.scene}},{key:"createCamera",value:function(){var i,e,n=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"perspective",o=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},a=null===(i=this.renderer)||void 0===i||null===(i=i.domElement)||void 0===i?void 0:i.parentElement,d=a?a.clientWidth/a.clientHeight:1;if("perspective"===n){var v=o.fov,h=void 0===v?75:v,l=o.near,u=void 0===l?.1:l,c=o.far,f=void 0===c?1e3:c;o.position,this.camera=new r.PerspectiveCamera(h,d,u,f)}else if("orthographic"===n){var p=o.left,m=void 0===p?-10:p,w=o.right,g=void 0===w?10:w,y=o.top,S=void 0===y?10:y,M=o.bottom,x=void 0===M?-10:M,k=o.near,C=void 0===k?.1:k,P=o.far,D=void 0===P?1e3:P;o.position,this.camera=new r.OrthographicCamera(m,g,S,x,C,D)}this.camera&&((e=this.camera.position).set.apply(e,t(position)),s.info("✅ ".concat(n," camera created")));return this.camera}},{key:"render",value:function(){var i=arguments.length>0&&void 0!==arguments[0]?arguments[0]:null,t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:null,e=arguments.length>2&&void 0!==arguments[2]?arguments[2]:null;if(this.renderer){var n=i||this.scene,o=t||this.camera;if(n&&o){var r=performance.now(),s=this.clock.getDelta();this.animation.update(s),this.renderer.render(n,o,e),this.stats.frameTime=performance.now()-r,this.updateRenderStats()}}}},{key:"updateRenderStats",value:function(){if(this.renderer){var i=this.renderer.info;this.stats.triangles=i.render.triangles,this.stats.geometries=i.memory.geometries,this.stats.textures=i.memory.textures,this.stats.calls=i.render.calls}}},{key:"getRenderStats",value:function(){return e({},this.stats)}},{key:"resize",value:function(i,t){if(this.renderer){if(this.renderer.setSize(i,t),this.camera){if(this.camera.isPerspectiveCamera)this.camera.aspect=i/t;else if(this.camera.isOrthographicCamera){var e=i/t;this.camera.left=-10*e,this.camera.right=10*e,this.camera.top=10,this.camera.bottom=-10}this.camera.updateProjectionMatrix()}this.renderTargets.forEach(function(e){e.setSize(i,t)})}}},{key:"dispose",value:function(){this.renderTargets.forEach(function(i){i.dispose()}),this.renderTargets.clear(),this.animationMixer&&(this.animationMixer.stopAllAction(),this.animationMixer=null),this.renderer&&(this.renderer.dispose(),this.renderer.forceContextLoss(),this.renderer.domElement.parentElement&&this.renderer.domElement.parentElement.removeChild(this.renderer.domElement),this.renderer=null),this.scene=null,this.camera=null,this.controls=null,s.info("✅ 3D Rendering disposed")}}])}();export{a as Rendering3D};
package/dist/index.d.ts CHANGED
@@ -1,255 +1,52 @@
1
- import * as THREE from 'three';
2
-
3
- // Common types
4
- export interface CentralPlantComponent {
5
- scene?: THREE.Scene;
6
- renderer?: THREE.WebGLRenderer;
7
- camera?: THREE.Camera;
8
- controls?: any;
9
- textureLoader?: THREE.TextureLoader;
10
- transformManager?: any;
11
- currentSceneData?: any;
12
- selectedObjectForTransform?: THREE.Object3D;
13
- pathfindingManager?: any;
14
- modelPreloader?: any;
15
- [key: string]: any;
16
- }
17
-
18
- // ==============================
19
- // Debug Logger
20
- // ==============================
21
- export interface Logger {
22
- info(message: string, ...args: any[]): void;
23
- warn(message: string, ...args: any[]): void;
24
- error(message: string, ...args: any[]): void;
25
- success(message: string, ...args: any[]): void;
26
- debug(message: string, ...args: any[]): void;
27
- trace(message: string, ...args: any[]): void;
28
- }
29
-
30
- export const logger: Logger;
31
- export const transformLogger: Logger;
32
- export const pathfinderLogger: Logger;
33
- export const modelLogger: Logger;
34
-
35
- // ==============================
36
- // Name Utils
37
- // ==============================
38
- export function generateUuidFromName(name: string): string;
39
- export function getHardcodedUuid(object: any): string;
40
- export function findObjectByHardcodedUuid(root: THREE.Object3D, uuid: string): THREE.Object3D | null;
41
-
42
- // ==============================
43
- // Model Preloader
44
- // ==============================
45
- export interface CacheStats {
46
- totalModels: number;
47
- memoryUsage: number;
48
- cached: string[];
49
- }
50
-
51
- export interface ModelPreloader {
52
- preloadAllModels(componentDictionary: Record<string, string>): Promise<void>;
53
- preloadModel(modelKey: string, modelUrl: string): Promise<THREE.Object3D>;
54
- getModel(modelKey: string): THREE.Object3D | null;
55
- clearCache(): void;
56
- getCacheStats(): CacheStats;
57
- }
58
-
59
- export const modelPreloader: ModelPreloader;
60
-
61
- // ==============================
62
- // Pathfinding Manager
63
- // ==============================
64
- export class PathfindingManager {
65
- constructor(component: CentralPlantComponent);
66
- getPathfinderVersionInfo(): Promise<{ version: string; detectionMethod: string; timestamp: string }>;
67
- logPathfinderVersion(context?: string): Promise<void>;
68
- getPathColor(index: number): string;
69
- initializePathfinder(data: any, crosscubeTextureSet: any): Promise<THREE.Object3D[]>;
70
- removeAllPaths(): void;
71
- createPipeMaterial(crosscubeTextureSet: any, pathIndex: number): THREE.Material;
72
- createPipePaths(paths: any[], crosscubeTextureSet: any): THREE.Object3D[];
73
- }
74
-
75
- export function getPathfindingManager(component?: CentralPlantComponent): PathfindingManager;
76
-
77
- // ==============================
78
- // Hot Reload Manager
79
- // ==============================
80
- export class HotReloadManager {
81
- constructor(componentInstance: any);
82
- setupHotReloadHandling(): void;
83
- cleanupHotReloadHandlers(): void;
84
- trackTimeout(timeoutId: number): number;
85
- trackInterval(intervalId: number): number;
86
- clearTrackedTimeout(timeoutId: number): boolean;
87
- clearTrackedInterval(intervalId: number): boolean;
88
- clearAllTrackedTimers(): void;
89
- }
90
-
91
- export function handleHotReload(instanceId: string, cleanupMethod: () => void): void;
92
- export function isHotReloading(): boolean;
93
- export function cleanupForHotReload(instanceId: string): void;
94
-
95
- // ==============================
96
- // Environment Manager
97
- // ==============================
98
- export class EnvironmentManager {
99
- constructor(component: CentralPlantComponent);
100
- createSkybox(): Promise<void>;
101
- setupLighting(): void;
102
- createGround(): THREE.Mesh | null;
103
- createWalls(): THREE.Mesh[];
104
- setFog(color?: number, density?: number): void;
105
- initializeEnvironment(): Promise<void>;
106
- }
107
-
108
- export function getEnvironmentManager(component?: CentralPlantComponent): EnvironmentManager;
109
- export function initializeEnvironment(component: CentralPlantComponent): Promise<EnvironmentManager>;
110
-
111
- // ==============================
112
- // Texture Config
113
- // ==============================
114
- export interface TextureSet {
115
- path: string;
116
- files: Record<string, string>;
117
- repeat?: { x: number; y: number };
118
- materialProps?: Record<string, any>;
119
- }
120
-
121
- export const TEXTURE_SETS: Record<string, TextureSet>;
122
-
123
- export function createTexture(
124
- textureLoader: THREE.TextureLoader,
125
- url: string,
126
- repeat?: { x: number; y: number }
127
- ): THREE.Texture | null;
128
-
129
- export function loadTextureSetAndCreateMaterial(
130
- component: CentralPlantComponent,
131
- textureSetName: string
132
- ): Promise<THREE.Material>;
133
-
134
- // ==============================
135
- // Scene Export Manager
136
- // ==============================
137
- export class SceneExportManager {
138
- constructor(componentInstance: CentralPlantComponent);
139
- exportSceneData(): any | null;
140
- downloadSceneExport(filename?: string | null): boolean;
141
- exportSceneDataAsString(pretty?: boolean): string | null;
142
- getExportMetadata(): {
143
- totalObjects: number;
144
- hasCurrentSceneData: boolean;
145
- connectionsCount: number;
146
- exportTimestamp: string;
147
- } | null;
148
- }
149
-
150
- export function getSceneExportManager(component?: CentralPlantComponent): SceneExportManager;
151
-
152
- // ==============================
153
- // Scene Operations Manager
154
- // ==============================
155
- export class SceneOperationsManager {
156
- constructor(component: CentralPlantComponent);
157
- clearSceneObjects(): void;
158
- ensureTransformControlsAttached(attachToSelected?: boolean): void;
159
- deselectObject(): void;
160
- loadSceneData(sceneData: any | string): boolean;
161
- findObjectByName(name: string): THREE.Object3D | null;
162
- findObjectByUuid(uuid: string): THREE.Object3D | null;
163
- removeObject(object: THREE.Object3D): boolean;
164
- duplicateObject(sourceObject: THREE.Object3D, options?: {
165
- positionOffset?: THREE.Vector3
166
- }): THREE.Object3D | null;
167
- }
168
-
169
- export function getSceneOperationsManager(component?: CentralPlantComponent): SceneOperationsManager;
170
-
171
- // ==============================
172
- // Transform Controls Manager
173
- // ==============================
174
- export interface TransformControlsConfig {
175
- size?: number;
176
- enabled?: boolean;
177
- showX?: boolean;
178
- showY?: boolean;
179
- showZ?: boolean;
180
- snap?: number | null;
181
- translationSnap?: number | null;
182
- rotationSnap?: number | null;
183
- scaleSnap?: number | null;
184
- showBoundingBox?: boolean;
185
- boundingBoxColor?: number;
186
- useBoundingBoxSelection?: boolean;
187
- }
188
-
189
- export interface TransformCallbacks {
190
- onObjectSelect?: (object: THREE.Object3D | null, selected: boolean) => void;
191
- onTransformStart?: (object: THREE.Object3D, transform: any) => void;
192
- onTransform?: (object: THREE.Object3D, currentTransform: any, initialTransform: any) => void;
193
- onTransformEnd?: (object: THREE.Object3D, finalTransform: any, initialTransform: any) => void;
194
- onModeChange?: (mode: 'translate' | 'rotate' | 'scale') => void;
195
- }
196
-
197
- export class TransformControlsManager {
198
- constructor(scene: THREE.Scene, camera: THREE.Camera, renderer: THREE.WebGLRenderer, orbitControls?: any);
199
- init(): Promise<void>;
200
- on(callbacks: TransformCallbacks): void;
201
- createTransformControls(): void;
202
- setupEventListeners(): void;
203
- setupKeyboardControls(): void;
204
- removeEventListeners(): void;
205
- selectObject(object: THREE.Object3D): THREE.Object3D | null;
206
- deselectObject(): THREE.Object3D | null;
207
- setMode(mode: 'translate' | 'rotate' | 'scale'): void;
208
- toggleSpace(): void;
209
- toggleVisibility(): void;
210
- setEnabled(enabled: boolean): void;
211
- updateAxisVisibility(): void;
212
- showBoundingBox(object: THREE.Object3D): void;
213
- hideBoundingBox(): void;
214
- updateBoundingBox(): void;
215
- captureObjectTransform(object: THREE.Object3D): any | null;
216
- setSnapValues(options: {
217
- translation?: number;
218
- rotation?: number;
219
- scale?: number;
220
- }): void;
221
- setSize(size: number): void;
222
- dispose(): void;
223
- }
224
-
225
- export function getTransformControlsManager(
226
- scene: THREE.Scene,
227
- camera: THREE.Camera,
228
- renderer: THREE.WebGLRenderer,
229
- orbitControls?: any
230
- ): TransformControlsManager;
231
-
232
- // ==============================
233
- // Main Module
234
- // ==============================
235
- export interface CentralPlantUtils {
236
- animation: any;
237
- component: any;
238
- debug: typeof import('./debugLogger');
239
- disposal: any;
240
- environment: typeof import('./environmentManager');
241
- hotReload: typeof import('./hotReloadManager');
242
- keyboardControls: any;
243
- modelPreloader: typeof import('./modelPreloader');
244
- name: typeof import('./nameUtils');
245
- pathfinding: typeof import('./pathfindingManager');
246
- performance: any;
247
- sceneExport: any;
248
- sceneInitialization: any;
249
- sceneOperations: any;
250
- texture: typeof import('./textureConfig');
251
- transformControls: any;
252
- }
253
-
254
- declare const CentralPlantUtils: CentralPlantUtils;
255
- export default CentralPlantUtils;
1
+ /**
2
+ * Central Plant Utils - Type Declarations
3
+ *
4
+ * This file provides TypeScript type definitions for all utility modules
5
+ * organized by their functional categories.
6
+ */
7
+
8
+ // Core utilities
9
+ export { CentralPlant } from './core/centralPlant.js';
10
+ export { DebugLogger, logger, transformLogger, pathfinderLogger, modelLogger } from './core/debugLogger.js';
11
+ export { generateUuidFromName, getHardcodedUuid, findObjectByHardcodedUuid } from './core/nameUtils.js';
12
+ export { MathUtils } from './core/mathUtils.js';
13
+
14
+ // Scene management
15
+ export { SceneInitializationManager } from './managers/scene/sceneInitializationManager.js';
16
+ export { SceneOperationsManager } from './managers/scene/sceneOperationsManager.js';
17
+ export { SceneExportManager } from './managers/scene/sceneExportManager.js';
18
+ export { SceneTooltipsManager } from './managers/scene/sceneTooltipsManager.js';
19
+
20
+ // Component management
21
+ export { ComponentManager } from './managers/components/componentManager.js';
22
+ export { AnimationManager } from './managers/components/animationManager.js';
23
+ export { PathfindingManager } from './managers/components/pathfindingManager.js';
24
+
25
+ // Controls management
26
+ export { createTransformControls } from './managers/controls/transformControlsManager.js';
27
+ export { KeyboardControlsManager } from './managers/controls/keyboardControlsManager.js';
28
+ export { CameraControlsManager } from './managers/controls/cameraControlsManager.js';
29
+ export { default as DragDropManager } from './managers/controls/dragDropManager.js';
30
+
31
+ // Environment management
32
+ export { EnvironmentManager } from './managers/environment/environmentManager.js';
33
+ export { loadTextureSetAndCreateMaterial } from './managers/environment/textureConfig.js';
34
+
35
+ // System management
36
+ export { HotReloadManager } from './managers/system/hotReloadManager.js';
37
+ export { DisposalManager } from './managers/system/disposalManager.js';
38
+ export { PerformanceMonitor } from './managers/system/performanceMonitor.js';
39
+
40
+ // Rendering utilities
41
+ export { default as modelPreloader } from './rendering/modelPreloader.js';
42
+ export * as Rendering2D from './rendering/rendering2D.js';
43
+ export * as Rendering3D from './rendering/rendering3D.js';
44
+
45
+ // Data handling
46
+ export * as ImportUtils from './data/import.js';
47
+ export * as ExportUtils from './data/export.js';
48
+ export * as Numerics from './data/numerics.js';
49
+
50
+ // Analysis utilities
51
+ export * as Analysis from './analysis/analysis.js';
52
+ export * as Testing from './analysis/testing.js';
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@2112-lab/central-plant",
3
- "version": "0.1.2",
3
+ "version": "0.1.4",
4
4
  "description": "Utility modules for the Central Plant Application",
5
5
  "main": "dist/bundle/index.js",
6
6
  "module": "dist/esm/index.js",
@@ -30,7 +30,7 @@
30
30
  "license": "MIT",
31
31
  "dependencies": {
32
32
  "@2112-lab/pathfinder": "^1.0.15",
33
- "three": ">=0.137.0"
33
+ "three": "^0.177.0"
34
34
  },
35
35
  "devDependencies": {
36
36
  "@babel/core": "^7.23.3",
@@ -45,8 +45,5 @@
45
45
  "rollup-plugin-typescript2": "^0.34.0",
46
46
  "tslib": "^2.5.0",
47
47
  "typescript": "^5.0.0"
48
- },
49
- "peerDependencies": {
50
- "three": ">=0.137.0"
51
48
  }
52
- }
49
+ }