@2112-lab/central-plant 0.1.4 โ†’ 0.1.5

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 (87) hide show
  1. package/dist/cjs/_virtual/_rollupPluginBabelHelpers.js +432 -1
  2. package/dist/cjs/node_modules/@2112-lab/pathfinder/dist/index.esm.js +1448 -1
  3. package/dist/cjs/node_modules/three/examples/jsm/controls/OrbitControls.js +1853 -1
  4. package/dist/cjs/node_modules/three/examples/jsm/exporters/GLTFExporter.js +3537 -1
  5. package/dist/cjs/node_modules/three/examples/jsm/exporters/OBJExporter.js +305 -1
  6. package/dist/cjs/node_modules/three/examples/jsm/exporters/PLYExporter.js +542 -1
  7. package/dist/cjs/node_modules/three/examples/jsm/exporters/STLExporter.js +218 -1
  8. package/dist/cjs/node_modules/three/examples/jsm/loaders/DRACOLoader.js +683 -1
  9. package/dist/cjs/node_modules/three/examples/jsm/loaders/GLTFLoader.js +4811 -1
  10. package/dist/cjs/node_modules/three/examples/jsm/loaders/RGBELoader.js +480 -1
  11. package/dist/cjs/node_modules/three/examples/jsm/renderers/CSS2DRenderer.js +309 -1
  12. package/dist/cjs/node_modules/three/examples/jsm/utils/BufferGeometryUtils.js +120 -1
  13. package/dist/cjs/src/analysis/analysis.js +560 -1
  14. package/dist/cjs/src/analysis/testing.js +958 -1
  15. package/dist/cjs/src/core/centralPlant.js +1149 -1
  16. package/dist/cjs/src/core/debugLogger.js +175 -1
  17. package/dist/cjs/src/core/mathUtils.js +574 -1
  18. package/dist/cjs/src/core/nameUtils.js +93 -1
  19. package/dist/cjs/src/data/export.js +716 -1
  20. package/dist/cjs/src/data/import.js +380 -1
  21. package/dist/cjs/src/data/numerics.js +522 -1
  22. package/dist/cjs/src/helpers/sceneHelper.js +572 -1
  23. package/dist/cjs/src/index.js +69 -1
  24. package/dist/cjs/src/managers/components/animationManager.js +123 -1
  25. package/dist/cjs/src/managers/components/componentManager.js +332 -1
  26. package/dist/cjs/src/managers/components/pathfindingManager.js +1441 -1
  27. package/dist/cjs/src/managers/controls/TransformControls.js +1063 -1
  28. package/dist/cjs/src/managers/controls/cameraControlsManager.js +79 -1
  29. package/dist/cjs/src/managers/controls/dragDropManager.js +1026 -1
  30. package/dist/cjs/src/managers/controls/keyboardControlsManager.js +395 -1
  31. package/dist/cjs/src/managers/controls/transformControlsManager.js +1807 -1
  32. package/dist/cjs/src/managers/environment/environmentManager.js +714 -1
  33. package/dist/cjs/src/managers/environment/textureConfig.js +229 -1
  34. package/dist/cjs/src/managers/scene/sceneExportManager.js +264 -1
  35. package/dist/cjs/src/managers/scene/sceneInitializationManager.js +346 -1
  36. package/dist/cjs/src/managers/scene/sceneOperationsManager.js +1509 -1
  37. package/dist/cjs/src/managers/scene/sceneTooltipsManager.js +661 -1
  38. package/dist/cjs/src/managers/system/disposalManager.js +444 -1
  39. package/dist/cjs/src/managers/system/hotReloadManager.js +291 -1
  40. package/dist/cjs/src/managers/system/performanceMonitor.js +863 -1
  41. package/dist/cjs/src/rendering/modelPreloader.js +369 -1
  42. package/dist/cjs/src/rendering/rendering2D.js +631 -1
  43. package/dist/cjs/src/rendering/rendering3D.js +685 -1
  44. package/dist/esm/_virtual/_rollupPluginBabelHelpers.js +396 -1
  45. package/dist/esm/node_modules/@2112-lab/pathfinder/dist/index.esm.js +1444 -1
  46. package/dist/esm/node_modules/three/examples/jsm/controls/OrbitControls.js +1849 -1
  47. package/dist/esm/node_modules/three/examples/jsm/exporters/GLTFExporter.js +3533 -1
  48. package/dist/esm/node_modules/three/examples/jsm/exporters/OBJExporter.js +301 -1
  49. package/dist/esm/node_modules/three/examples/jsm/exporters/PLYExporter.js +538 -1
  50. package/dist/esm/node_modules/three/examples/jsm/exporters/STLExporter.js +214 -1
  51. package/dist/esm/node_modules/three/examples/jsm/loaders/DRACOLoader.js +679 -1
  52. package/dist/esm/node_modules/three/examples/jsm/loaders/GLTFLoader.js +4807 -1
  53. package/dist/esm/node_modules/three/examples/jsm/loaders/RGBELoader.js +476 -1
  54. package/dist/esm/node_modules/three/examples/jsm/renderers/CSS2DRenderer.js +304 -1
  55. package/dist/esm/node_modules/three/examples/jsm/utils/BufferGeometryUtils.js +116 -1
  56. package/dist/esm/src/analysis/analysis.js +536 -1
  57. package/dist/esm/src/analysis/testing.js +954 -1
  58. package/dist/esm/src/core/centralPlant.js +1144 -1
  59. package/dist/esm/src/core/debugLogger.js +167 -1
  60. package/dist/esm/src/core/mathUtils.js +570 -1
  61. package/dist/esm/src/core/nameUtils.js +87 -1
  62. package/dist/esm/src/data/export.js +712 -1
  63. package/dist/esm/src/data/import.js +356 -1
  64. package/dist/esm/src/data/numerics.js +518 -1
  65. package/dist/esm/src/helpers/sceneHelper.js +547 -1
  66. package/dist/esm/src/index.js +35 -1
  67. package/dist/esm/src/managers/components/animationManager.js +119 -1
  68. package/dist/esm/src/managers/components/componentManager.js +328 -1
  69. package/dist/esm/src/managers/components/pathfindingManager.js +1417 -1
  70. package/dist/esm/src/managers/controls/TransformControls.js +1057 -1
  71. package/dist/esm/src/managers/controls/cameraControlsManager.js +75 -1
  72. package/dist/esm/src/managers/controls/dragDropManager.js +1002 -1
  73. package/dist/esm/src/managers/controls/keyboardControlsManager.js +371 -1
  74. package/dist/esm/src/managers/controls/transformControlsManager.js +1782 -1
  75. package/dist/esm/src/managers/environment/environmentManager.js +690 -1
  76. package/dist/esm/src/managers/environment/textureConfig.js +202 -1
  77. package/dist/esm/src/managers/scene/sceneExportManager.js +260 -1
  78. package/dist/esm/src/managers/scene/sceneInitializationManager.js +322 -1
  79. package/dist/esm/src/managers/scene/sceneOperationsManager.js +1485 -1
  80. package/dist/esm/src/managers/scene/sceneTooltipsManager.js +637 -1
  81. package/dist/esm/src/managers/system/disposalManager.js +440 -1
  82. package/dist/esm/src/managers/system/hotReloadManager.js +287 -1
  83. package/dist/esm/src/managers/system/performanceMonitor.js +858 -1
  84. package/dist/esm/src/rendering/modelPreloader.js +364 -1
  85. package/dist/esm/src/rendering/rendering2D.js +627 -1
  86. package/dist/esm/src/rendering/rendering3D.js +661 -1
  87. package/package.json +1 -1
@@ -1 +1,369 @@
1
- "use strict";Object.defineProperty(exports,"t",{value:!0});var t=require("../../_virtual/_rollupPluginBabelHelpers.js");require("three");var e=require("../../node_modules/three/examples/jsm/loaders/GLTFLoader.js"),i=function(){return t.createClass(function i(){t.classCallCheck(this,i),this.modelCache=new Map,this.loadingPromises=new Map,this.gltfLoader=new e.GLTFLoader,this.isPreloading=!1,this.preloadingPromise=null,this.componentDictionary=null},[{key:"preloadAllModels",value:(r=t.asyncToGenerator(t.regenerator().m(function e(i){var n,r,s=this;return t.regenerator().w(function(e){for(;;)switch(e.n){case 0:if(!this.isPreloading){e.n=1;break}return e.a(2,this.preloadingPromise);case 1:if(i&&"object"===t.typeof(i)){e.n=2;break}return e.a(2,Promise.reject(new Error("Invalid component dictionary")));case 2:return this.componentDictionary=i,this.isPreloading=!0,n=[],r=[],Object.keys(i).forEach(function(t){var e=i[t];e&&e.modelKey&&(n.includes(e.modelKey)||n.push(e.modelKey))}),n.forEach(function(t){r.push(s.preloadSingleModel(t))}),this.preloadingPromise=Promise.allSettled(r).then(function(t){var e=t.filter(function(t){return"fulfilled"===t.status}).length,i=t.filter(function(t){return"rejected"===t.status}).length;return s.isPreloading=!1,{successful:e,failed:i,total:n.length,cache:s.modelCache}}),e.a(2,this.preloadingPromise)}},e,this)})),function(t){return r.apply(this,arguments)})},{key:"preloadSingleModel",value:(n=t.asyncToGenerator(t.regenerator().m(function e(i){var n,r=this;return t.regenerator().w(function(t){for(;;)switch(t.n){case 0:if(!this.modelCache.has(i)){t.n=1;break}return t.a(2,this.modelCache.get(i));case 1:if(!this.loadingPromises.has(i)){t.n=2;break}return t.a(2,this.loadingPromises.get(i));case 2:return n=new Promise(function(t,e){r.gltfLoader.load("/library/models/".concat(i),function(e){r.modelCache.set(i,e.scene),r.loadingPromises.delete(i),t(e.scene)},function(t){t.loaded,t.total},function(t){r.loadingPromises.delete(i),e(t)})}),this.loadingPromises.set(i,n),t.a(2,n)}},e,this)})),function(t){return n.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:(i=t.asyncToGenerator(t.regenerator().m(function e(i){return t.regenerator().w(function(t){for(;;)if(0===t.n)return this.modelCache.delete(i),this.loadingPromises.delete(i),t.a(2,this.preloadSingleModel(i))},e,this)})),function(t){return i.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 i,n,r}(),n=new i;exports.ModelPreloader=i,exports.default=n;
1
+ 'use strict';
2
+
3
+ Object.defineProperty(exports, '__esModule', { value: true });
4
+
5
+ var _rollupPluginBabelHelpers = require('../../_virtual/_rollupPluginBabelHelpers.js');
6
+ require('three');
7
+ var GLTFLoader = require('../../node_modules/three/examples/jsm/loaders/GLTFLoader.js');
8
+
9
+ var ModelPreloader = /*#__PURE__*/function () {
10
+ function ModelPreloader() {
11
+ _rollupPluginBabelHelpers.classCallCheck(this, ModelPreloader);
12
+ this.modelCache = new Map(); // Cache for loaded GLB models
13
+ this.loadingPromises = new Map(); // Track ongoing loads to prevent duplicates
14
+ this.gltfLoader = new GLTFLoader.GLTFLoader();
15
+ this.isPreloading = false;
16
+ this.preloadingPromise = null;
17
+ this.componentDictionary = null;
18
+ console.log('๐Ÿš€ ModelPreloader initialized');
19
+ }
20
+
21
+ /**
22
+ * Preload all models from the component dictionary
23
+ * @param {Object} componentDictionary - The component dictionary object
24
+ * @returns {Promise} Promise that resolves when all models are loaded
25
+ */
26
+ return _rollupPluginBabelHelpers.createClass(ModelPreloader, [{
27
+ key: "preloadAllModels",
28
+ value: (function () {
29
+ var _preloadAllModels = _rollupPluginBabelHelpers.asyncToGenerator(/*#__PURE__*/_rollupPluginBabelHelpers.regenerator().m(function _callee(componentDictionary) {
30
+ var _this = this;
31
+ var modelKeys, preloadPromises;
32
+ return _rollupPluginBabelHelpers.regenerator().w(function (_context) {
33
+ while (1) switch (_context.n) {
34
+ case 0:
35
+ if (!this.isPreloading) {
36
+ _context.n = 1;
37
+ break;
38
+ }
39
+ console.log('โณ Preloading already in progress, returning existing promise');
40
+ return _context.a(2, this.preloadingPromise);
41
+ case 1:
42
+ if (!(!componentDictionary || _rollupPluginBabelHelpers["typeof"](componentDictionary) !== 'object')) {
43
+ _context.n = 2;
44
+ break;
45
+ }
46
+ console.error('โŒ Invalid component dictionary provided to preloader');
47
+ return _context.a(2, Promise.reject(new Error('Invalid component dictionary')));
48
+ case 2:
49
+ this.componentDictionary = componentDictionary;
50
+ this.isPreloading = true;
51
+ console.log('๐Ÿ”„ Starting to preload all models from component dictionary...');
52
+ modelKeys = [];
53
+ preloadPromises = []; // Extract all unique model keys from the component dictionary
54
+ Object.keys(componentDictionary).forEach(function (componentType) {
55
+ var component = componentDictionary[componentType];
56
+ if (component && component.modelKey) {
57
+ if (!modelKeys.includes(component.modelKey)) {
58
+ modelKeys.push(component.modelKey);
59
+ }
60
+ }
61
+ });
62
+ console.log("\uD83C\uDFAF Found ".concat(modelKeys.length, " unique models to preload:"), modelKeys);
63
+
64
+ // Create preload promises for each model
65
+ modelKeys.forEach(function (modelKey) {
66
+ preloadPromises.push(_this.preloadSingleModel(modelKey));
67
+ });
68
+
69
+ // Wait for all models to load (or fail)
70
+ this.preloadingPromise = Promise.allSettled(preloadPromises).then(function (results) {
71
+ var successful = results.filter(function (result) {
72
+ return result.status === 'fulfilled';
73
+ }).length;
74
+ var failed = results.filter(function (result) {
75
+ return result.status === 'rejected';
76
+ }).length;
77
+ console.log("\u2705 Preloading completed: ".concat(successful, " successful, ").concat(failed, " failed"));
78
+ if (failed > 0) {
79
+ console.warn('โš ๏ธ Some models failed to preload:', results.filter(function (result) {
80
+ return result.status === 'rejected';
81
+ }).map(function (result) {
82
+ return result.reason;
83
+ }));
84
+ }
85
+ _this.isPreloading = false;
86
+ return {
87
+ successful: successful,
88
+ failed: failed,
89
+ total: modelKeys.length,
90
+ cache: _this.modelCache
91
+ };
92
+ });
93
+ return _context.a(2, this.preloadingPromise);
94
+ }
95
+ }, _callee, this);
96
+ }));
97
+ function preloadAllModels(_x) {
98
+ return _preloadAllModels.apply(this, arguments);
99
+ }
100
+ return preloadAllModels;
101
+ }()
102
+ /**
103
+ * Preload a single model
104
+ * @param {string} modelKey - The model key (filename)
105
+ * @returns {Promise} Promise that resolves with the loaded model
106
+ */
107
+ )
108
+ }, {
109
+ key: "preloadSingleModel",
110
+ value: (function () {
111
+ var _preloadSingleModel = _rollupPluginBabelHelpers.asyncToGenerator(/*#__PURE__*/_rollupPluginBabelHelpers.regenerator().m(function _callee2(modelKey) {
112
+ var _this2 = this;
113
+ var loadPromise;
114
+ return _rollupPluginBabelHelpers.regenerator().w(function (_context2) {
115
+ while (1) switch (_context2.n) {
116
+ case 0:
117
+ if (!this.modelCache.has(modelKey)) {
118
+ _context2.n = 1;
119
+ break;
120
+ }
121
+ console.log("\uD83C\uDFAF Model ".concat(modelKey, " already cached, skipping"));
122
+ return _context2.a(2, this.modelCache.get(modelKey));
123
+ case 1:
124
+ if (!this.loadingPromises.has(modelKey)) {
125
+ _context2.n = 2;
126
+ break;
127
+ }
128
+ console.log("\u23F3 Model ".concat(modelKey, " already loading, waiting for completion"));
129
+ return _context2.a(2, this.loadingPromises.get(modelKey));
130
+ case 2:
131
+ console.log("\uD83D\uDD04 Starting preload of model: ".concat(modelKey));
132
+ loadPromise = new Promise(function (resolve, reject) {
133
+ _this2.gltfLoader.load("/library/models/".concat(modelKey), function (gltf) {
134
+ console.log("\u2705 Successfully preloaded model: ".concat(modelKey));
135
+ // Cache the scene for future use
136
+ _this2.modelCache.set(modelKey, gltf.scene);
137
+ // Remove from loading promises
138
+ _this2.loadingPromises.delete(modelKey);
139
+ resolve(gltf.scene);
140
+ }, function (progress) {
141
+ // Optional: track loading progress
142
+ var percentage = progress.loaded / progress.total * 100;
143
+ if (percentage % 25 === 0) {
144
+ // Log every 25%
145
+ console.log("\uD83D\uDCCA Loading ".concat(modelKey, ": ").concat(percentage.toFixed(0), "%"));
146
+ }
147
+ }, function (error) {
148
+ console.error("\u274C Failed to preload model ".concat(modelKey, ":"), error);
149
+ // Remove from loading promises
150
+ _this2.loadingPromises.delete(modelKey);
151
+ reject(error);
152
+ });
153
+ }); // Cache the loading promise
154
+ this.loadingPromises.set(modelKey, loadPromise);
155
+ return _context2.a(2, loadPromise);
156
+ }
157
+ }, _callee2, this);
158
+ }));
159
+ function preloadSingleModel(_x2) {
160
+ return _preloadSingleModel.apply(this, arguments);
161
+ }
162
+ return preloadSingleModel;
163
+ }()
164
+ /**
165
+ * Get a cached model (cloned for use)
166
+ * @param {string} modelKey - The model key
167
+ * @returns {THREE.Object3D|null} Cloned model or null if not found
168
+ */
169
+ )
170
+ }, {
171
+ key: "getCachedModel",
172
+ value: function getCachedModel(modelKey) {
173
+ if (this.modelCache.has(modelKey)) {
174
+ console.log("\uD83C\uDFAF Returning cached model: ".concat(modelKey));
175
+ return this.modelCache.get(modelKey).clone();
176
+ }
177
+ console.warn("\u26A0\uFE0F Model ".concat(modelKey, " not found in cache"));
178
+ return null;
179
+ }
180
+
181
+ /**
182
+ * Get a cached model (cloned for use) with dimensions from component dictionary
183
+ * @param {string} modelKey - The model key
184
+ * @param {string} libraryId - The library ID to look up dimensions
185
+ * @returns {THREE.Object3D|null} Cloned model with dimensions or null if not found
186
+ */
187
+ }, {
188
+ key: "getCachedModelWithDimensions",
189
+ value: function getCachedModelWithDimensions(modelKey) {
190
+ var libraryId = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : null;
191
+ if (this.modelCache.has(modelKey)) {
192
+ console.log("\uD83C\uDFAF Returning cached model with dimensions: ".concat(modelKey));
193
+ var clonedModel = this.modelCache.get(modelKey).clone();
194
+
195
+ // Add dimensions from component dictionary if available
196
+ if (libraryId && this.componentDictionary) {
197
+ var componentData = this.componentDictionary[libraryId];
198
+ if (componentData && componentData.boundingBox) {
199
+ if (!clonedModel.userData) {
200
+ clonedModel.userData = {};
201
+ }
202
+
203
+ // Add dimensions to userData
204
+ clonedModel.userData.dimensions = {
205
+ x: componentData.boundingBox.x,
206
+ y: componentData.boundingBox.y,
207
+ z: componentData.boundingBox.z
208
+ };
209
+ console.log("\uD83D\uDCCF Added dimensions to model userData for ".concat(libraryId, ":"), clonedModel.userData.dimensions);
210
+ } else {
211
+ console.warn("\u26A0\uFE0F No bounding box found for ".concat(libraryId, " in component dictionary"));
212
+ }
213
+ } else {
214
+ console.warn("\u26A0\uFE0F No libraryId provided or component dictionary not available for dimensions lookup");
215
+ }
216
+ return clonedModel;
217
+ }
218
+ console.warn("\u26A0\uFE0F Model ".concat(modelKey, " not found in cache"));
219
+ return null;
220
+ }
221
+
222
+ /**
223
+ * Add dimensions to an existing model from component dictionary
224
+ * @param {THREE.Object3D} model - The model to add dimensions to
225
+ * @param {string} libraryId - The library ID to look up dimensions
226
+ * @returns {THREE.Object3D} The model with dimensions added
227
+ */
228
+ }, {
229
+ key: "addDimensionsToModel",
230
+ value: function addDimensionsToModel(model, libraryId) {
231
+ if (!model || !libraryId) {
232
+ console.warn("\u26A0\uFE0F Invalid model or libraryId provided for dimensions");
233
+ return model;
234
+ }
235
+ if (this.componentDictionary) {
236
+ var componentData = this.componentDictionary[libraryId];
237
+ if (componentData && componentData.boundingBox) {
238
+ if (!model.userData) {
239
+ model.userData = {};
240
+ }
241
+
242
+ // Add dimensions to userData
243
+ model.userData.dimensions = {
244
+ x: componentData.boundingBox.x,
245
+ y: componentData.boundingBox.y,
246
+ z: componentData.boundingBox.z
247
+ };
248
+ console.log("\uD83D\uDCCF Added dimensions to existing model userData for ".concat(libraryId, ":"), model.userData.dimensions);
249
+ } else {
250
+ console.warn("\u26A0\uFE0F No bounding box found for ".concat(libraryId, " in component dictionary"));
251
+ }
252
+ } else {
253
+ console.warn("\u26A0\uFE0F Component dictionary not available for dimensions lookup");
254
+ }
255
+ return model;
256
+ }
257
+
258
+ /**
259
+ * Get preloading status
260
+ * @returns {Object} Status object
261
+ */
262
+ }, {
263
+ key: "getStatus",
264
+ value: function getStatus() {
265
+ return {
266
+ isPreloading: this.isPreloading,
267
+ cachedModels: Array.from(this.modelCache.keys()),
268
+ totalCached: this.modelCache.size,
269
+ currentlyLoading: Array.from(this.loadingPromises.keys())
270
+ };
271
+ }
272
+
273
+ /**
274
+ * Force reload a specific model
275
+ * @param {string} modelKey - The model key to reload
276
+ * @returns {Promise} Promise that resolves with the reloaded model
277
+ */
278
+ }, {
279
+ key: "reloadModel",
280
+ value: (function () {
281
+ var _reloadModel = _rollupPluginBabelHelpers.asyncToGenerator(/*#__PURE__*/_rollupPluginBabelHelpers.regenerator().m(function _callee3(modelKey) {
282
+ return _rollupPluginBabelHelpers.regenerator().w(function (_context3) {
283
+ while (1) switch (_context3.n) {
284
+ case 0:
285
+ console.log("\uD83D\uDD04 Force reloading model: ".concat(modelKey));
286
+
287
+ // Remove from cache and loading promises
288
+ this.modelCache.delete(modelKey);
289
+ this.loadingPromises.delete(modelKey);
290
+
291
+ // Preload again
292
+ return _context3.a(2, this.preloadSingleModel(modelKey));
293
+ }
294
+ }, _callee3, this);
295
+ }));
296
+ function reloadModel(_x3) {
297
+ return _reloadModel.apply(this, arguments);
298
+ }
299
+ return reloadModel;
300
+ }()
301
+ /**
302
+ * Clear all cached models (for cleanup)
303
+ */
304
+ )
305
+ }, {
306
+ key: "clearCache",
307
+ value: function clearCache() {
308
+ console.log('๐Ÿงน Clearing model preloader cache...');
309
+
310
+ // Dispose of all cached models
311
+ this.modelCache.forEach(function (model, modelKey) {
312
+ console.log("\uD83D\uDDD1\uFE0F Disposing cached model: ".concat(modelKey));
313
+ if (model && model.traverse) {
314
+ model.traverse(function (child) {
315
+ if (child.geometry) {
316
+ child.geometry.dispose();
317
+ }
318
+ if (child.material) {
319
+ if (Array.isArray(child.material)) {
320
+ child.material.forEach(function (material) {
321
+ return material.dispose();
322
+ });
323
+ } else {
324
+ child.material.dispose();
325
+ }
326
+ }
327
+ });
328
+ }
329
+ });
330
+ this.modelCache.clear();
331
+ this.loadingPromises.clear();
332
+ this.isPreloading = false;
333
+ this.preloadingPromise = null;
334
+ console.log('โœ… Model preloader cache cleared');
335
+ }
336
+
337
+ /**
338
+ * Get cache statistics
339
+ * @returns {Object} Cache statistics
340
+ */
341
+ }, {
342
+ key: "getCacheStats",
343
+ value: function getCacheStats() {
344
+ var stats = {
345
+ totalModels: this.modelCache.size,
346
+ loadingModels: this.loadingPromises.size,
347
+ isPreloading: this.isPreloading,
348
+ memoryUsage: 0
349
+ };
350
+
351
+ // Estimate memory usage (rough calculation)
352
+ this.modelCache.forEach(function (model) {
353
+ if (model && model.traverse) {
354
+ model.traverse(function (child) {
355
+ if (child.geometry) {
356
+ var _child$geometry$attri;
357
+ stats.memoryUsage += (((_child$geometry$attri = child.geometry.attributes.position) === null || _child$geometry$attri === void 0 ? void 0 : _child$geometry$attri.count) || 0) * 12; // Rough estimate
358
+ }
359
+ });
360
+ }
361
+ });
362
+ return stats;
363
+ }
364
+ }]);
365
+ }(); // Create singleton instance
366
+ var modelPreloader = new ModelPreloader();
367
+
368
+ exports.ModelPreloader = ModelPreloader;
369
+ exports["default"] = modelPreloader;