@2112-lab/central-plant 0.1.1 → 0.1.3

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 (55) hide show
  1. package/dist/bundle/index.js +1 -15140
  2. package/dist/cjs/_virtual/_rollupPluginBabelHelpers.js +1 -353
  3. package/dist/cjs/node_modules/@2112-lab/pathfinder/dist/index.esm.js +1 -0
  4. package/dist/cjs/node_modules/three/examples/jsm/controls/OrbitControls.js +1 -1292
  5. package/dist/cjs/node_modules/three/examples/jsm/controls/TransformControls.js +1 -1543
  6. package/dist/cjs/node_modules/three/examples/jsm/loaders/GLTFLoader.js +1 -4374
  7. package/dist/cjs/node_modules/three/examples/jsm/loaders/RGBELoader.js +1 -465
  8. package/dist/cjs/node_modules/three/examples/jsm/utils/BufferGeometryUtils.js +1 -117
  9. package/dist/cjs/src/animationManager.js +1 -121
  10. package/dist/cjs/src/componentManager.js +1 -151
  11. package/dist/cjs/src/debugLogger.js +1 -176
  12. package/dist/cjs/src/disposalManager.js +1 -185
  13. package/dist/cjs/src/environmentManager.js +1 -1308
  14. package/dist/cjs/src/hotReloadManager.js +1 -252
  15. package/dist/cjs/src/index.js +1 -128
  16. package/dist/cjs/src/keyboardControlsManager.js +1 -206
  17. package/dist/cjs/src/nameUtils.js +1 -106
  18. package/dist/cjs/src/pathfindingManager.js +1 -321
  19. package/dist/cjs/src/performanceMonitor.js +1 -718
  20. package/dist/cjs/src/sceneExportManager.js +1 -292
  21. package/dist/cjs/src/sceneInitializationManager.js +1 -540
  22. package/dist/cjs/src/textureConfig.js +1 -624
  23. package/dist/cjs/src/transformControlsManager.js +1 -851
  24. package/dist/esm/_virtual/_rollupPluginBabelHelpers.js +1 -328
  25. package/dist/esm/node_modules/@2112-lab/pathfinder/dist/index.esm.js +1 -0
  26. package/dist/esm/node_modules/three/examples/jsm/controls/OrbitControls.js +1 -1287
  27. package/dist/esm/node_modules/three/examples/jsm/controls/TransformControls.js +1 -1537
  28. package/dist/esm/node_modules/three/examples/jsm/loaders/GLTFLoader.js +1 -4370
  29. package/dist/esm/node_modules/three/examples/jsm/loaders/RGBELoader.js +1 -461
  30. package/dist/esm/node_modules/three/examples/jsm/utils/BufferGeometryUtils.js +1 -113
  31. package/dist/esm/src/animationManager.js +1 -112
  32. package/dist/esm/src/componentManager.js +1 -123
  33. package/dist/esm/src/debugLogger.js +1 -167
  34. package/dist/esm/src/disposalManager.js +1 -155
  35. package/dist/esm/src/environmentManager.js +1 -1282
  36. package/dist/esm/src/hotReloadManager.js +1 -244
  37. package/dist/esm/src/index.js +1 -118
  38. package/dist/esm/src/keyboardControlsManager.js +1 -196
  39. package/dist/esm/src/nameUtils.js +1 -99
  40. package/dist/esm/src/pathfindingManager.js +1 -295
  41. package/dist/esm/src/performanceMonitor.js +1 -712
  42. package/dist/esm/src/sceneExportManager.js +1 -286
  43. package/dist/esm/src/sceneInitializationManager.js +1 -513
  44. package/dist/esm/src/textureConfig.js +1 -595
  45. package/dist/esm/src/transformControlsManager.js +1 -827
  46. package/dist/index.d.ts +0 -4
  47. package/package.json +1 -1
  48. package/dist/cjs/src/ConnectionManager.js +0 -114
  49. package/dist/cjs/src/Pathfinder.js +0 -88
  50. package/dist/cjs/src/modelPreloader.js +0 -488
  51. package/dist/cjs/src/sceneOperationsManager.js +0 -596
  52. package/dist/esm/src/ConnectionManager.js +0 -110
  53. package/dist/esm/src/Pathfinder.js +0 -84
  54. package/dist/esm/src/modelPreloader.js +0 -464
  55. package/dist/esm/src/sceneOperationsManager.js +0 -572
@@ -1,1282 +1 @@
1
- import { createClass as _createClass, toConsumableArray as _toConsumableArray, asyncToGenerator as _asyncToGenerator, regenerator as _regenerator, classCallCheck as _classCallCheck, regeneratorValues as _regeneratorValues, createForOfIteratorHelper as _createForOfIteratorHelper, slicedToArray as _slicedToArray } from '../_virtual/_rollupPluginBabelHelpers.js';
2
- import * as THREE from 'three';
3
- import { logger } from './debugLogger.js';
4
-
5
- // We'll need to import RGBELoader from three examples
6
- var RGBELoader;
7
-
8
- /**
9
- * Helper function to get asset paths that works in both bundled and modular contexts
10
- * @param {string} assetPath - Relative path from the assets directory
11
- * @returns {string} - The full path to the asset
12
- */
13
- function getAssetPath(assetPath) {
14
- // Strip leading slash if present
15
- if (assetPath.startsWith('/')) {
16
- assetPath = assetPath.substring(1);
17
- }
18
-
19
- // In browser context, check for different module formats
20
- if (typeof window !== 'undefined') {
21
- // For bundled version, assets should be in dist/bundle/assets/
22
- // For ESM/CJS, assets should be in their respective folders
23
-
24
- // Try to determine if we're using the bundled version or ESM/CJS
25
- var isBundled = typeof CentralPlantUtils !== 'undefined';
26
-
27
- // Check if we're running in a Nuxt.js environment (localhost:3000 is a common dev server)
28
- var isNuxtEnv = window.location.hostname === 'localhost' && (window.location.port === '3000' || window.location.port === '3001');
29
- if (isNuxtEnv) {
30
- // In Nuxt.js environment, assets are likely in the /static directory at the root
31
- return "/".concat(assetPath); // No /assets/ prefix in the URL path
32
- } else if (isBundled) {
33
- // Get the base URL for the module
34
- var baseUrl = import.meta.url;
35
- // In bundled format, assets are in the assets folder next to the bundle
36
- return new URL("./assets/".concat(assetPath), baseUrl).href;
37
- } else {
38
- // Get the base URL for the module
39
- var _baseUrl = import.meta.url;
40
- // In ESM/CJS format, need to go up relative to current module path
41
- return new URL("../assets/".concat(assetPath), _baseUrl).href;
42
- }
43
- }
44
-
45
- // In Node.js context
46
- return "assets/".concat(assetPath);
47
- }
48
-
49
- // Dynamic import for browser compatibility
50
- function importThreeLoaders() {
51
- return _importThreeLoaders.apply(this, arguments);
52
- } // This will be imported once textureConfig is created
53
- function _importThreeLoaders() {
54
- _importThreeLoaders = _asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee8() {
55
- var module, _t0;
56
- return _regenerator().w(function (_context0) {
57
- while (1) switch (_context0.n) {
58
- case 0:
59
- if (!(typeof window !== 'undefined')) {
60
- _context0.n = 4;
61
- break;
62
- }
63
- _context0.p = 1;
64
- console.log('📦 Attempting to dynamically import RGBELoader...');
65
- // Dynamic import for browser
66
- _context0.n = 2;
67
- return import('../node_modules/three/examples/jsm/loaders/RGBELoader.js');
68
- case 2:
69
- module = _context0.v;
70
- RGBELoader = module.RGBELoader;
71
- console.log('✅ RGBELoader imported successfully:', RGBELoader ? 'Available' : 'Undefined');
72
- return _context0.a(2, true);
73
- case 3:
74
- _context0.p = 3;
75
- _t0 = _context0.v;
76
- console.error('Failed to load Three.js loaders:', _t0);
77
- throw new Error('Failed to load Three.js loaders');
78
- case 4:
79
- return _context0.a(2, false);
80
- }
81
- }, _callee8, null, [[1, 3]]);
82
- }));
83
- return _importThreeLoaders.apply(this, arguments);
84
- }
85
- var textureConfig = {
86
- loadTextureSetAndCreateMaterial: null,
87
- checkThreeJSCompatibility: null,
88
- forceUpdateMaterials: null
89
- };
90
- function importTextureConfig() {
91
- return _importTextureConfig.apply(this, arguments);
92
- }
93
- function _importTextureConfig() {
94
- _importTextureConfig = _asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee9() {
95
- var module, importedFunctions, _t1;
96
- return _regenerator().w(function (_context1) {
97
- while (1) switch (_context1.n) {
98
- case 0:
99
- if (!(typeof window !== 'undefined')) {
100
- _context1.n = 4;
101
- break;
102
- }
103
- _context1.p = 1;
104
- console.log('📦 Attempting to dynamically import textureConfig...');
105
- _context1.n = 2;
106
- return import('./textureConfig.js');
107
- case 2:
108
- module = _context1.v;
109
- // Store all exported functions
110
- textureConfig.loadTextureSetAndCreateMaterial = module.loadTextureSetAndCreateMaterial;
111
- textureConfig.checkThreeJSCompatibility = module.checkThreeJSCompatibility;
112
- textureConfig.forceUpdateMaterials = module.forceUpdateMaterials;
113
-
114
- // Check what was successfully imported
115
- importedFunctions = Object.entries(textureConfig).filter(function (_ref2) {
116
- var _ref3 = _slicedToArray(_ref2, 2);
117
- _ref3[0];
118
- var fn = _ref3[1];
119
- return typeof fn === 'function';
120
- }).map(function (_ref4) {
121
- var _ref5 = _slicedToArray(_ref4, 1),
122
- name = _ref5[0];
123
- return name;
124
- });
125
- console.log("\u2705 TextureConfig imported successfully with functions: ".concat(importedFunctions.join(', ')));
126
-
127
- // Run compatibility check if available
128
- if (typeof textureConfig.checkThreeJSCompatibility === 'function') {
129
- textureConfig.checkThreeJSCompatibility();
130
- }
131
- return _context1.a(2, true);
132
- case 3:
133
- _context1.p = 3;
134
- _t1 = _context1.v;
135
- console.error('Failed to load texture config:', _t1);
136
- return _context1.a(2, false);
137
- case 4:
138
- return _context1.a(2, false);
139
- }
140
- }, _callee9, null, [[1, 3]]);
141
- }));
142
- return _importTextureConfig.apply(this, arguments);
143
- }
144
- var EnvironmentManager = /*#__PURE__*/function () {
145
- function EnvironmentManager(component) {
146
- _classCallCheck(this, EnvironmentManager);
147
- this.component = component;
148
-
149
- // Track loader status
150
- this.loadersInitialized = false;
151
-
152
- // Initialize loaders immediately
153
- this.initLoaders();
154
- }
155
- return _createClass(EnvironmentManager, [{
156
- key: "initLoaders",
157
- value: function () {
158
- var _initLoaders = _asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee() {
159
- var _t;
160
- return _regenerator().w(function (_context) {
161
- while (1) switch (_context.n) {
162
- case 0:
163
- console.log('🔄 Pre-initializing loaders in EnvironmentManager constructor...');
164
- _context.p = 1;
165
- _context.n = 2;
166
- return Promise.all([importThreeLoaders(), importTextureConfig()]);
167
- case 2:
168
- this.loadersInitialized = true;
169
- console.log('✅ EnvironmentManager loaders pre-initialized successfully');
170
- _context.n = 4;
171
- break;
172
- case 3:
173
- _context.p = 3;
174
- _t = _context.v;
175
- console.warn('⚠️ Error pre-initializing loaders:', _t);
176
- case 4:
177
- return _context.a(2);
178
- }
179
- }, _callee, this, [[1, 3]]);
180
- }));
181
- function initLoaders() {
182
- return _initLoaders.apply(this, arguments);
183
- }
184
- return initLoaders;
185
- }()
186
- /**
187
- * Create skybox with HDR environment mapping
188
- */
189
- }, {
190
- key: "createSkybox",
191
- value: (function () {
192
- var _createSkybox = _asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee2() {
193
- var _this = this;
194
- var component, isContextLost, pmremGenerator, hdrPath1, hdrPath2, jpgPath, loaders, applyEnvironmentMap, _loop, _ret, _i, _loaders, _t4, _t5, _t6;
195
- return _regenerator().w(function (_context4) {
196
- while (1) switch (_context4.n) {
197
- case 0:
198
- component = this.component;
199
- if (!(!component || !component.renderer || !component.scene)) {
200
- _context4.n = 1;
201
- break;
202
- }
203
- logger.warn('Cannot create skybox: component, renderer or scene not available');
204
- return _context4.a(2);
205
- case 1:
206
- console.log('🌍 Starting skybox creation process...');
207
-
208
- // Make sure RGBELoader is available
209
- if (RGBELoader) {
210
- _context4.n = 5;
211
- break;
212
- }
213
- console.log('⏳ RGBELoader not loaded yet, initializing now...');
214
- _context4.p = 2;
215
- _context4.n = 3;
216
- return importThreeLoaders();
217
- case 3:
218
- console.log('✅ RGBELoader loaded on demand');
219
- _context4.n = 5;
220
- break;
221
- case 4:
222
- _context4.p = 4;
223
- _t4 = _context4.v;
224
- console.error('❌ Failed to load RGBELoader:', _t4);
225
- this.createFallbackEnvironment();
226
- return _context4.a(2);
227
- case 5:
228
- _context4.p = 5;
229
- // Check if renderer is valid - safely check for context loss
230
- isContextLost = component.renderer.context && typeof component.renderer.context.isContextLost === 'function' ? component.renderer.context.isContextLost() : false;
231
- console.log('🔍 WebGL context check:', isContextLost ? 'Context lost' : 'Context valid');
232
- if (!(!component.renderer.capabilities || isContextLost)) {
233
- _context4.n = 6;
234
- break;
235
- }
236
- logger.warn('WebGL context is lost or invalid, using fallback environment');
237
- this.createFallbackEnvironment();
238
- return _context4.a(2);
239
- case 6:
240
- _context4.p = 6;
241
- pmremGenerator = new THREE.PMREMGenerator(component.renderer);
242
-
243
- // Check if the generator was created successfully
244
- if (pmremGenerator) {
245
- _context4.n = 7;
246
- break;
247
- }
248
- throw new Error('PMREMGenerator could not be created');
249
- case 7:
250
- // Attempt to compile the shader - this can fail if the context is limited
251
- pmremGenerator.compileEquirectangularShader();
252
- _context4.n = 9;
253
- break;
254
- case 8:
255
- _context4.p = 8;
256
- _t5 = _context4.v;
257
- logger.warn('Failed to initialize PMREMGenerator:', _t5);
258
- this.createFallbackEnvironment();
259
- return _context4.a(2);
260
- case 9:
261
- // Get resolved paths for better debugging
262
- hdrPath1 = getAssetPath('skyboxes/kloofendal_48d_partly_cloudy_puresky_2k.hdr');
263
- hdrPath2 = getAssetPath('skyboxes/kloofendal_48d_partly_cloudy_puresky_1k.hdr');
264
- jpgPath = getAssetPath('skyboxes/sky_fallback.jpg');
265
- console.log('🔍 Resolved HDR paths:', {
266
- hdr2k: hdrPath1,
267
- hdr1k: hdrPath2,
268
- jpg: jpgPath
269
- });
270
- loaders = [{
271
- type: 'hdr',
272
- loader: new RGBELoader(),
273
- paths: [hdrPath1, hdrPath2]
274
- }, {
275
- type: 'jpeg',
276
- loader: component.textureLoader || new THREE.TextureLoader(),
277
- paths: [jpgPath]
278
- }]; // Configure texture loaders with CORS settings
279
- loaders.forEach(function (_ref) {
280
- var loader = _ref.loader;
281
- if (loader && typeof loader.setCrossOrigin === 'function') {
282
- loader.setCrossOrigin('anonymous');
283
- }
284
- });
285
- console.log('🔄 Configured loaders with CORS settings and fallback paths');
286
- applyEnvironmentMap = function applyEnvironmentMap(envTexture, type) {
287
- try {
288
- var _component$scene$envi, _component$scene$back;
289
- // Set proper mapping
290
- envTexture.mapping = THREE.EquirectangularReflectionMapping;
291
- // Ensure a valid color space is set for the texture
292
- if (envTexture.colorSpace !== undefined) {
293
- // For Three.js >= r152 (current version)
294
- envTexture.colorSpace = component.renderer.outputColorSpace || THREE.SRGBColorSpace;
295
- } else if (envTexture.encoding !== undefined) {
296
- // For older versions (legacy support)
297
- envTexture.encoding = component.renderer.outputEncoding || THREE.sRGBEncoding;
298
- }
299
-
300
- // Generate processed environment map
301
- var processedEnvMap = pmremGenerator.fromEquirectangular(envTexture).texture;
302
-
303
- // Diagnostic logging
304
- logger.info("Generating environment map:\n - Type: ".concat(type, "\n - Texture valid: ").concat(envTexture !== null, "\n - Processed map valid: ").concat(processedEnvMap !== null, "\n - Renderer encoding: ").concat(component.renderer.outputEncoding || component.renderer.outputColorSpace, "\n - Texture encoding: ").concat(envTexture.encoding || envTexture.colorSpace));
305
-
306
- // Clean up previous environment/background
307
- if ((_component$scene$envi = component.scene.environment) !== null && _component$scene$envi !== void 0 && _component$scene$envi.dispose) component.scene.environment.dispose();
308
- if ((_component$scene$back = component.scene.background) !== null && _component$scene$back !== void 0 && _component$scene$back.dispose) component.scene.background.dispose();
309
-
310
- // Apply to scene
311
- component.scene.environment = processedEnvMap;
312
- component.scene.background = processedEnvMap;
313
-
314
- // Clean up original texture
315
- envTexture.dispose();
316
-
317
- // Force a renderer update
318
- if (component.renderer) {
319
- component.renderer.toneMappingExposure = 1.0;
320
- component.renderer.render(component.scene, component.camera);
321
- }
322
- logger.info("Environment map (".concat(type, ") applied successfully"));
323
- return true;
324
- } catch (error) {
325
- logger.warn("Failed to apply ".concat(type, " environment map:"), error);
326
- return false;
327
- }
328
- };
329
- _loop = /*#__PURE__*/_regenerator().m(function _loop() {
330
- var _loaders$_i, type, loader, paths, _iterator, _step, _loop2, _ret2, _t3;
331
- return _regenerator().w(function (_context3) {
332
- while (1) switch (_context3.n) {
333
- case 0:
334
- _loaders$_i = _loaders[_i], type = _loaders$_i.type, loader = _loaders$_i.loader, paths = _loaders$_i.paths;
335
- _iterator = _createForOfIteratorHelper(paths);
336
- _context3.p = 1;
337
- _loop2 = /*#__PURE__*/_regenerator().m(function _loop2() {
338
- var path, exists, texture, _t2;
339
- return _regenerator().w(function (_context2) {
340
- while (1) switch (_context2.n) {
341
- case 0:
342
- path = _step.value;
343
- _context2.p = 1;
344
- if (!(path.startsWith('/') && !path.includes('://'))) {
345
- _context2.n = 3;
346
- break;
347
- }
348
- _context2.n = 2;
349
- return _this.checkLocalTextureExists(path);
350
- case 2:
351
- exists = _context2.v;
352
- console.log("\uD83D\uDD0D Local texture check for ".concat(path, ": ").concat(exists ? 'Available' : 'Not found'));
353
- if (exists) {
354
- _context2.n = 3;
355
- break;
356
- }
357
- return _context2.a(2, 0);
358
- case 3:
359
- logger.info("Attempting to load ".concat(type, " texture: ").concat(path));
360
- _context2.n = 4;
361
- return new Promise(function (resolve, reject) {
362
- var timeout = setTimeout(function () {
363
- return reject(new Error("Timeout loading ".concat(path)));
364
- }, 10000);
365
-
366
- // Add event listeners for better diagnostics
367
- var onProgress = function onProgress(event) {
368
- if (event.lengthComputable) {
369
- var percentComplete = event.loaded / event.total * 100;
370
- console.log("Loading ".concat(path, ": ").concat(Math.round(percentComplete), "% complete"));
371
- }
372
- };
373
- loader.load(path, function (tex) {
374
- clearTimeout(timeout);
375
- console.log("\u2705 Successfully loaded ".concat(type, " texture: ").concat(path));
376
- resolve(tex);
377
- }, onProgress, function (err) {
378
- clearTimeout(timeout);
379
- console.warn("\u274C Failed to load ".concat(path, ":"), err.message);
380
- reject(err);
381
- });
382
- });
383
- case 4:
384
- texture = _context2.v;
385
- if (!applyEnvironmentMap(texture, type)) {
386
- _context2.n = 5;
387
- break;
388
- }
389
- pmremGenerator.dispose();
390
- return _context2.a(2, {
391
- v: {
392
- v: void 0
393
- }
394
- });
395
- case 5:
396
- _context2.n = 7;
397
- break;
398
- case 6:
399
- _context2.p = 6;
400
- _t2 = _context2.v;
401
- logger.warn("Failed to load ".concat(path, ":"), _t2.message);
402
- case 7:
403
- return _context2.a(2);
404
- }
405
- }, _loop2, null, [[1, 6]]);
406
- });
407
- _iterator.s();
408
- case 2:
409
- if ((_step = _iterator.n()).done) {
410
- _context3.n = 6;
411
- break;
412
- }
413
- return _context3.d(_regeneratorValues(_loop2()), 3);
414
- case 3:
415
- _ret2 = _context3.v;
416
- if (!(_ret2 === 0)) {
417
- _context3.n = 4;
418
- break;
419
- }
420
- return _context3.a(3, 5);
421
- case 4:
422
- if (!_ret2) {
423
- _context3.n = 5;
424
- break;
425
- }
426
- return _context3.a(2, _ret2.v);
427
- case 5:
428
- _context3.n = 2;
429
- break;
430
- case 6:
431
- _context3.n = 8;
432
- break;
433
- case 7:
434
- _context3.p = 7;
435
- _t3 = _context3.v;
436
- _iterator.e(_t3);
437
- case 8:
438
- _context3.p = 8;
439
- _iterator.f();
440
- return _context3.f(8);
441
- case 9:
442
- return _context3.a(2);
443
- }
444
- }, _loop, null, [[1, 7, 8, 9]]);
445
- });
446
- _i = 0, _loaders = loaders;
447
- case 10:
448
- if (!(_i < _loaders.length)) {
449
- _context4.n = 13;
450
- break;
451
- }
452
- return _context4.d(_regeneratorValues(_loop()), 11);
453
- case 11:
454
- _ret = _context4.v;
455
- if (!_ret) {
456
- _context4.n = 12;
457
- break;
458
- }
459
- return _context4.a(2, _ret.v);
460
- case 12:
461
- _i++;
462
- _context4.n = 10;
463
- break;
464
- case 13:
465
- // If we reached here, all texture attempts failed - use procedural sky
466
- this.createProceduralSky(pmremGenerator);
467
- _context4.n = 15;
468
- break;
469
- case 14:
470
- _context4.p = 14;
471
- _t6 = _context4.v;
472
- logger.error('Error creating skybox:', _t6);
473
- this.createFallbackEnvironment();
474
- case 15:
475
- return _context4.a(2);
476
- }
477
- }, _callee2, this, [[6, 8], [5, 14], [2, 4]]);
478
- }));
479
- function createSkybox() {
480
- return _createSkybox.apply(this, arguments);
481
- }
482
- return createSkybox;
483
- }()
484
- /**
485
- * Create a fallback environment when renderer issues occur
486
- */
487
- )
488
- }, {
489
- key: "createFallbackEnvironment",
490
- value: function createFallbackEnvironment() {
491
- var component = this.component;
492
- if (!component || !component.scene) return;
493
- logger.info('Creating basic fallback environment');
494
- // Add simple ambient and directional light
495
- var ambientLight = new THREE.AmbientLight(0xffffff, 0.6);
496
- component.scene.add(ambientLight);
497
- var directionalLight = new THREE.DirectionalLight(0xffffff, 0.8);
498
- directionalLight.position.set(1, 2, 3);
499
- component.scene.add(directionalLight);
500
-
501
- // Set a simple background color
502
- component.scene.background = new THREE.Color(0x87CEEB);
503
- }
504
-
505
- /**
506
- * Create procedural sky when textures fail to load
507
- */
508
- }, {
509
- key: "createProceduralSky",
510
- value: function createProceduralSky(pmremGenerator) {
511
- var component = this.component;
512
- if (!component || !component.scene) return;
513
- logger.info('Using procedural sky fallback');
514
- var ambientLight = new THREE.AmbientLight(0xffffff, 0.6);
515
- component.scene.add(ambientLight);
516
-
517
- // Add a directional light for better illumination
518
- var directionalLight = new THREE.DirectionalLight(0xffffff, 0.8);
519
- directionalLight.position.set(1, 1, 1);
520
- component.scene.add(directionalLight);
521
- try {
522
- // Only attempt PMREM generation if we have a valid pmremGenerator
523
- if (pmremGenerator && typeof pmremGenerator.fromScene === 'function') {
524
- var skyScene = new THREE.Scene();
525
- skyScene.add(new THREE.HemisphereLight(0x87CEEB, 0x444477, 1));
526
-
527
- // Generate environment map from scene
528
- var envMap = pmremGenerator.fromScene(skyScene);
529
- if (envMap && envMap.texture) {
530
- component.scene.environment = envMap.texture;
531
- }
532
- }
533
-
534
- // Always set a background color as fallback
535
- component.scene.background = new THREE.Color(0x87CEEB);
536
- } catch (error) {
537
- logger.warn('Failed to create procedural sky, using simple background', error);
538
- component.scene.background = new THREE.Color(0x87CEEB);
539
- } finally {
540
- if (pmremGenerator && typeof pmremGenerator.dispose === 'function') {
541
- pmremGenerator.dispose();
542
- }
543
- }
544
- }
545
-
546
- /**
547
- * Setup scene lighting
548
- */
549
- }, {
550
- key: "setupLighting",
551
- value: function setupLighting() {
552
- var component = this.component;
553
- if (!component || !component.scene) {
554
- logger.warn('Cannot setup lighting: component or scene not available');
555
- return;
556
- }
557
-
558
- // Remove existing lights first
559
- var existingLights = [];
560
- component.scene.traverse(function (object) {
561
- if (object instanceof THREE.Light) {
562
- existingLights.push(object);
563
- }
564
- });
565
- existingLights.forEach(function (light) {
566
- component.scene.remove(light);
567
- });
568
-
569
- // Main directional light (sun)
570
- var directionalLight = new THREE.DirectionalLight(0xffffff, 0.8);
571
- directionalLight.position.set(5, 10, 7);
572
- directionalLight.castShadow = true;
573
-
574
- // Optimize shadow map
575
- directionalLight.shadow.mapSize.width = 1024;
576
- directionalLight.shadow.mapSize.height = 1024;
577
- directionalLight.shadow.camera.near = 1;
578
- directionalLight.shadow.camera.far = 30;
579
- directionalLight.shadow.camera.left = -10;
580
- directionalLight.shadow.camera.right = 10;
581
- directionalLight.shadow.camera.top = 10;
582
- directionalLight.shadow.camera.bottom = -10;
583
- directionalLight.shadow.bias = -0.001;
584
- component.scene.add(directionalLight);
585
-
586
- // Ambient light for general illumination
587
- var ambientLight = new THREE.AmbientLight(0xffffff, 0.3);
588
- component.scene.add(ambientLight);
589
-
590
- // Hemisphere light to simulate sky/ground reflection
591
- var hemisphereLight = new THREE.HemisphereLight(0xffffff, 0x444477, 0.3);
592
- component.scene.add(hemisphereLight);
593
- logger.info('Scene lighting setup complete');
594
- }
595
-
596
- /**
597
- * Create ground plane
598
- */
599
- }, {
600
- key: "createGround",
601
- value: function createGround() {
602
- var component = this.component;
603
- if (!component || !component.scene) {
604
- logger.warn('Cannot create ground: component or scene not available');
605
- return null;
606
- }
607
-
608
- // Create a ground plane
609
- var groundGeometry = new THREE.PlaneGeometry(100, 100);
610
- var groundMaterial = new THREE.MeshStandardMaterial({
611
- color: 0xcccccc,
612
- roughness: 0.8,
613
- metalness: 0.2,
614
- side: THREE.DoubleSide
615
- });
616
- var ground = new THREE.Mesh(groundGeometry, groundMaterial);
617
- ground.rotation.x = -Math.PI / 2; // Rotate to be horizontal
618
- ground.position.y = -0.01; // Slightly below origin
619
- ground.receiveShadow = true;
620
-
621
- // Set user data for identification
622
- ground.userData = {
623
- isEnvironmentObject: true,
624
- type: 'ground'
625
- };
626
- component.scene.add(ground);
627
- logger.info('Ground plane created');
628
- return ground;
629
- }
630
-
631
- /**
632
- * Create walls for the environment
633
- */
634
- }, {
635
- key: "createWalls",
636
- value: function createWalls() {
637
- var component = this.component;
638
- if (!component || !component.scene) {
639
- logger.warn('Cannot create walls: component or scene not available');
640
- return [];
641
- }
642
- var walls = [];
643
- var wallHeight = 20;
644
- var roomSize = 50;
645
- var wallThickness = 1;
646
- var wallColor = 0xdddddd;
647
-
648
- // Wall materials
649
- var wallMaterial = new THREE.MeshStandardMaterial({
650
- color: wallColor,
651
- roughness: 0.9,
652
- metalness: 0.1,
653
- side: THREE.DoubleSide
654
- });
655
-
656
- // Create walls (north, east, south, west)
657
- var wallGeometries = [new THREE.BoxGeometry(roomSize, wallHeight, wallThickness),
658
- // North
659
- new THREE.BoxGeometry(wallThickness, wallHeight, roomSize),
660
- // East
661
- new THREE.BoxGeometry(roomSize, wallHeight, wallThickness),
662
- // South
663
- new THREE.BoxGeometry(wallThickness, wallHeight, roomSize) // West
664
- ];
665
- var wallPositions = [[0, wallHeight / 2, -roomSize / 2],
666
- // North
667
- [roomSize / 2, wallHeight / 2, 0],
668
- // East
669
- [0, wallHeight / 2, roomSize / 2],
670
- // South
671
- [-roomSize / 2, wallHeight / 2, 0] // West
672
- ];
673
- var wallNames = ['north-wall', 'east-wall', 'south-wall', 'west-wall'];
674
-
675
- // Create each wall
676
- for (var i = 0; i < 4; i++) {
677
- var _wall$position;
678
- var wall = new THREE.Mesh(wallGeometries[i], wallMaterial);
679
- (_wall$position = wall.position).set.apply(_wall$position, _toConsumableArray(wallPositions[i]));
680
- wall.receiveShadow = true;
681
- wall.castShadow = true;
682
-
683
- // Set user data for identification
684
- wall.userData = {
685
- isEnvironmentObject: true,
686
- type: 'wall',
687
- name: wallNames[i]
688
- };
689
- component.scene.add(wall);
690
- walls.push(wall);
691
- }
692
- logger.info('Environment walls created');
693
- return walls;
694
- }
695
-
696
- /**
697
- * Set fog in the scene
698
- */
699
- }, {
700
- key: "setFog",
701
- value: function setFog() {
702
- var color = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 0xcccccc;
703
- var density = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0.01;
704
- var component = this.component;
705
- if (!component || !component.scene) {
706
- logger.warn('Cannot set fog: component or scene not available');
707
- return;
708
- }
709
- component.scene.fog = new THREE.FogExp2(color, density);
710
- logger.info('Scene fog applied');
711
- } /**
712
- * Initialize the default environment
713
- */
714
- }, {
715
- key: "initializeEnvironment",
716
- value: (function () {
717
- var _initializeEnvironment = _asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee3() {
718
- var _this2 = this;
719
- var component, loadersReady, textureConfigReady, ground, walls, _t7;
720
- return _regenerator().w(function (_context5) {
721
- while (1) switch (_context5.n) {
722
- case 0:
723
- component = this.component; // Make sure loaders are initialized first
724
- console.log('🚀 Initializing loaders for environment...');
725
- _context5.p = 1;
726
- _context5.n = 2;
727
- return importThreeLoaders();
728
- case 2:
729
- loadersReady = _context5.v;
730
- _context5.n = 3;
731
- return importTextureConfig();
732
- case 3:
733
- textureConfigReady = _context5.v;
734
- console.log('✅ Environment loaders initialized:', {
735
- loaders: loadersReady ? 'Ready' : 'Failed',
736
- textureConfig: textureConfigReady ? 'Ready' : 'Failed'
737
- });
738
- _context5.n = 5;
739
- break;
740
- case 4:
741
- _context5.p = 4;
742
- _t7 = _context5.v;
743
- console.warn('⚠️ Error initializing environment loaders:', _t7);
744
- case 5:
745
- if (component) {
746
- _context5.n = 6;
747
- break;
748
- }
749
- logger.error('❌ Cannot initialize environment: component is null');
750
- return _context5.a(2);
751
- case 6:
752
- if (component.renderer) {
753
- _context5.n = 7;
754
- break;
755
- }
756
- logger.error('❌ Cannot initialize environment: renderer is null');
757
- return _context5.a(2);
758
- case 7:
759
- // Configure renderer for proper HDR rendering
760
- console.log('🎨 Configuring renderer for environment...');
761
-
762
- // Don't override existing settings from sceneInitializationManager
763
- // Just ensure we have reasonable values set
764
- if (!component.renderer.toneMapping) {
765
- component.renderer.toneMapping = THREE.ACESFilmicToneMapping;
766
- }
767
- component.renderer.toneMappingExposure = 1.0;
768
-
769
- // Ensure correct color space is set based on Three.js version
770
- if (component.renderer.outputColorSpace !== undefined) {
771
- component.renderer.outputColorSpace = THREE.SRGBColorSpace; // For newer Three.js
772
- console.log('✅ Set SRGBColorSpace for renderer (newer Three.js)');
773
- } else if (component.renderer.outputEncoding !== undefined) {
774
- component.renderer.outputEncoding = THREE.sRGBEncoding; // For older Three.js
775
- console.log('✅ Set sRGBEncoding for renderer (older Three.js)');
776
- }
777
- logger.info("Renderer configured for HDR:\n - Tone mapping: ".concat(component.renderer.toneMapping, "\n - Color space: ").concat(component.renderer.outputColorSpace || component.renderer.outputEncoding));
778
-
779
- // Create skybox (includes base lighting)
780
- _context5.n = 8;
781
- return this.createSkybox();
782
- case 8:
783
- // Add additional lighting
784
- this.setupLighting();
785
-
786
- // Use textured ground instead of basic ground
787
- console.log('🌍 Creating ground with texture...');
788
- _context5.n = 9;
789
- return this.addTexturedGround();
790
- case 9:
791
- ground = _context5.v;
792
- if (!ground) {
793
- logger.error('❌ Failed to create textured ground');
794
- } else {
795
- logger.info('✅ Ground created successfully');
796
- }
797
-
798
- // Add walls with textures
799
- console.log('🧱 Creating walls with textures...');
800
- _context5.n = 10;
801
- return this.addBrickWalls();
802
- case 10:
803
- walls = _context5.v;
804
- if (!walls || walls.length === 0) {
805
- logger.warn('⚠️ No walls were created');
806
- } else {
807
- logger.info("\u2705 Created ".concat(walls.length, " walls"));
808
- }
809
-
810
- // Add atmospheric fog
811
- this.addHorizonFog();
812
- logger.info('Environment initialization complete'); // Force material refresh to ensure textures are applied correctly
813
- this.forceRefreshMaterials();
814
-
815
- // Force renderer refresh
816
- if (component.renderer && component.scene && component.camera) {
817
- component.renderer.render(component.scene, component.camera);
818
- console.log('🔄 Forced initial render to refresh scene');
819
-
820
- // Schedule another render after a short delay to catch any async texture loading
821
- setTimeout(function () {
822
- if (component.renderer && !component.isDestroyed) {
823
- _this2.forceRefreshMaterials();
824
- component.renderer.render(component.scene, component.camera);
825
- console.log('🔄 Performed delayed render to catch async texture loads');
826
- }
827
- }, 1000);
828
- }
829
- case 11:
830
- return _context5.a(2);
831
- }
832
- }, _callee3, this, [[1, 4]]);
833
- }));
834
- function initializeEnvironment() {
835
- return _initializeEnvironment.apply(this, arguments);
836
- }
837
- return initializeEnvironment;
838
- }()
839
- /**
840
- * Add textured ground with materials from textureConfig
841
- */
842
- )
843
- }, {
844
- key: "addTexturedGround",
845
- value: (function () {
846
- var _addTexturedGround = _asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee4() {
847
- var component, groundMaterial, debugMaterial, groundGeometry, ground, debugGround, errorGeometry, errorMaterial, errorGround, _t8;
848
- return _regenerator().w(function (_context6) {
849
- while (1) switch (_context6.n) {
850
- case 0:
851
- if (textureConfig.loadTextureSetAndCreateMaterial) {
852
- _context6.n = 2;
853
- break;
854
- }
855
- console.log('🔄 TextureConfig module not yet loaded, importing now...');
856
- _context6.n = 1;
857
- return importTextureConfig();
858
- case 1:
859
- if (textureConfig.loadTextureSetAndCreateMaterial) {
860
- _context6.n = 2;
861
- break;
862
- }
863
- console.error('❌ Failed to load textureConfig module, falling back to basic ground');
864
- return _context6.a(2, this.createGround());
865
- case 2:
866
- component = this.component;
867
- if (!(!component || !component.scene)) {
868
- _context6.n = 3;
869
- break;
870
- }
871
- logger.warn('Cannot create textured ground: component or scene not available');
872
- return _context6.a(2, null);
873
- case 3:
874
- // Force texture loading with crossOrigin support
875
- if (!component.textureLoader) {
876
- console.log('🔄 Creating texture loader in component');
877
- component.textureLoader = new THREE.TextureLoader();
878
- component.textureLoader.setCrossOrigin('anonymous');
879
- }
880
-
881
- // Remove existing ground if present
882
- component.scene.traverse(function (object) {
883
- if (object.userData && object.userData.type === 'ground') {
884
- component.scene.remove(object);
885
- }
886
- });
887
- _context6.p = 4;
888
- console.log('🌍 Creating textured ground plane...');
889
- // Use the gravel_embedded_concrete texture set
890
- console.log('🔄 Loading ground material textures...');
891
- _context6.n = 5;
892
- return textureConfig.loadTextureSetAndCreateMaterial(component, 'gravel_embedded_concrete');
893
- case 5:
894
- groundMaterial = _context6.v;
895
- if (groundMaterial) {
896
- _context6.n = 6;
897
- break;
898
- }
899
- throw new Error('Failed to create ground material');
900
- case 6:
901
- console.log('✅ Ground material created');
902
-
903
- // First create a colored material to verify the mesh creation works
904
- debugMaterial = new THREE.MeshBasicMaterial({
905
- color: 0x22ff22,
906
- // Bright green for visibility
907
- wireframe: false,
908
- side: THREE.DoubleSide
909
- }); // Create a composite ground with both materials
910
- groundGeometry = new THREE.PlaneGeometry(100, 100); // Create the main ground mesh
911
- ground = new THREE.Mesh(groundGeometry, groundMaterial);
912
- ground.rotation.x = -Math.PI / 2; // Rotate to be horizontal
913
- ground.position.y = -0.01; // Slightly below origin
914
- ground.receiveShadow = true;
915
-
916
- // Create a debug ground mesh slightly below the main ground
917
- debugGround = new THREE.Mesh(groundGeometry, debugMaterial);
918
- debugGround.rotation.x = -Math.PI / 2;
919
- debugGround.position.y = -0.02; // Below the main ground
920
- debugGround.visible = false; // Hide by default
921
-
922
- // Set user data for identification
923
- ground.userData = {
924
- isEnvironmentObject: true,
925
- isBaseGround: true,
926
- type: 'ground'
927
- };
928
- debugGround.userData = {
929
- isEnvironmentObject: true,
930
- type: 'ground-debug'
931
- };
932
-
933
- // Add both to scene
934
- component.scene.add(ground);
935
- component.scene.add(debugGround);
936
-
937
- // Log some properties about the created ground
938
- console.log('🌍 Textured ground created with properties:', {
939
- material: groundMaterial.type,
940
- hasMap: !!groundMaterial.map,
941
- hasNormalMap: !!groundMaterial.normalMap,
942
- hasRoughnessMap: !!groundMaterial.roughnessMap,
943
- hasMetalnessMap: !!groundMaterial.metalnessMap,
944
- hasAoMap: !!groundMaterial.aoMap,
945
- hasBumpMap: !!groundMaterial.bumpMap,
946
- materialColor: groundMaterial.color ? "#".concat(groundMaterial.color.getHexString()) : 'none'
947
- });
948
- logger.info('Textured ground created');
949
- return _context6.a(2, ground);
950
- case 7:
951
- _context6.p = 7;
952
- _t8 = _context6.v;
953
- logger.error('Error creating textured ground:', _t8);
954
- // Create a bright colored ground so it's obvious something was wrong
955
- errorGeometry = new THREE.PlaneGeometry(100, 100);
956
- errorMaterial = new THREE.MeshBasicMaterial({
957
- color: 0xff0000,
958
- wireframe: true,
959
- side: THREE.DoubleSide
960
- });
961
- errorGround = new THREE.Mesh(errorGeometry, errorMaterial);
962
- errorGround.rotation.x = -Math.PI / 2;
963
- errorGround.position.y = -0.01;
964
- errorGround.userData = {
965
- isEnvironmentObject: true,
966
- isBaseGround: true,
967
- type: 'ground-error'
968
- };
969
- component.scene.add(errorGround);
970
- console.error('⚠️ Fallback to error ground (red wireframe) due to texture loading failure:', _t8);
971
- return _context6.a(2, errorGround);
972
- }
973
- }, _callee4, this, [[4, 7]]);
974
- }));
975
- function addTexturedGround() {
976
- return _addTexturedGround.apply(this, arguments);
977
- }
978
- return addTexturedGround;
979
- }()
980
- /**
981
- * Add brick walls with materials from textureConfig
982
- */
983
- )
984
- }, {
985
- key: "addBrickWalls",
986
- value: (function () {
987
- var _addBrickWalls = _asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee5() {
988
- var component, wallMaterial, walls, wallHeight, roomSize, wallThickness, wallGeometries, wallPositions, wallNames, i, _wall$position2, wall, _t9;
989
- return _regenerator().w(function (_context7) {
990
- while (1) switch (_context7.n) {
991
- case 0:
992
- if (textureConfig.loadTextureSetAndCreateMaterial) {
993
- _context7.n = 2;
994
- break;
995
- }
996
- console.log('🔄 TextureConfig module not yet loaded for brick walls, importing now...');
997
- _context7.n = 1;
998
- return importTextureConfig();
999
- case 1:
1000
- if (textureConfig.loadTextureSetAndCreateMaterial) {
1001
- _context7.n = 2;
1002
- break;
1003
- }
1004
- console.error('❌ Failed to load textureConfig module for brick walls');
1005
- return _context7.a(2, this.createWalls());
1006
- case 2:
1007
- component = this.component;
1008
- if (!(!component || !component.scene)) {
1009
- _context7.n = 3;
1010
- break;
1011
- }
1012
- logger.warn('Cannot create brick walls: component or scene not available');
1013
- return _context7.a(2, []);
1014
- case 3:
1015
- // Remove existing walls if present
1016
- component.scene.traverse(function (object) {
1017
- if (object.userData && object.userData.type === 'wall') {
1018
- component.scene.remove(object);
1019
- }
1020
- });
1021
- _context7.p = 4;
1022
- // Use the brick texture set
1023
- console.log('🧱 Loading brick wall material textures...');
1024
- _context7.n = 5;
1025
- return textureConfig.loadTextureSetAndCreateMaterial(component, 'brick');
1026
- case 5:
1027
- wallMaterial = _context7.v;
1028
- walls = [];
1029
- wallHeight = 20;
1030
- roomSize = 50;
1031
- wallThickness = 1; // Create walls (north, east, south, west)
1032
- wallGeometries = [new THREE.BoxGeometry(roomSize, wallHeight, wallThickness),
1033
- // North
1034
- new THREE.BoxGeometry(wallThickness, wallHeight, roomSize),
1035
- // East
1036
- new THREE.BoxGeometry(roomSize, wallHeight, wallThickness),
1037
- // South
1038
- new THREE.BoxGeometry(wallThickness, wallHeight, roomSize) // West
1039
- ];
1040
- wallPositions = [[0, wallHeight / 2, -roomSize / 2],
1041
- // North
1042
- [roomSize / 2, wallHeight / 2, 0],
1043
- // East
1044
- [0, wallHeight / 2, roomSize / 2],
1045
- // South
1046
- [-roomSize / 2, wallHeight / 2, 0] // West
1047
- ];
1048
- wallNames = ['north-wall', 'east-wall', 'south-wall', 'west-wall']; // Create each wall
1049
- for (i = 0; i < 4; i++) {
1050
- wall = new THREE.Mesh(wallGeometries[i], wallMaterial);
1051
- (_wall$position2 = wall.position).set.apply(_wall$position2, _toConsumableArray(wallPositions[i]));
1052
- wall.receiveShadow = true;
1053
- wall.castShadow = true;
1054
-
1055
- // Set user data for identification
1056
- wall.userData = {
1057
- isEnvironmentObject: true,
1058
- type: 'wall',
1059
- name: wallNames[i]
1060
- };
1061
- component.scene.add(wall);
1062
- walls.push(wall);
1063
- }
1064
- logger.info('Textured environment walls created');
1065
- return _context7.a(2, walls);
1066
- case 6:
1067
- _context7.p = 6;
1068
- _t9 = _context7.v;
1069
- logger.error('Error creating brick walls:', _t9);
1070
- // Fallback to simple walls
1071
- return _context7.a(2, this.createWalls());
1072
- }
1073
- }, _callee5, this, [[4, 6]]);
1074
- }));
1075
- function addBrickWalls() {
1076
- return _addBrickWalls.apply(this, arguments);
1077
- }
1078
- return addBrickWalls;
1079
- }()
1080
- /**
1081
- * Add horizon fog effect
1082
- */
1083
- )
1084
- }, {
1085
- key: "addHorizonFog",
1086
- value: function addHorizonFog() {
1087
- var component = this.component;
1088
- if (!component || !component.scene) {
1089
- logger.warn('Cannot set horizon fog: component or scene not available');
1090
- return;
1091
- }
1092
-
1093
- // Light blue-ish fog color
1094
- var fogColor = 0xd8e0ff;
1095
- // Less dense than the default fog
1096
- var fogDensity = 0.005;
1097
- component.scene.fog = new THREE.FogExp2(fogColor, fogDensity);
1098
- logger.info('Horizon fog applied');
1099
- }
1100
-
1101
- /**
1102
- * Helper to check if a texture exists locally in static directory
1103
- * @param {string} path - Relative path to texture in static directory
1104
- * @returns {Promise<boolean>}
1105
- */
1106
- }, {
1107
- key: "checkLocalTextureExists",
1108
- value: (function () {
1109
- var _checkLocalTextureExists = _asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee6(path) {
1110
- return _regenerator().w(function (_context8) {
1111
- while (1) switch (_context8.n) {
1112
- case 0:
1113
- // Remove leading slash if present
1114
- if (path.startsWith('/')) {
1115
- path = path.substring(1);
1116
- }
1117
-
1118
- // For browser environment
1119
- if (!(typeof window !== 'undefined')) {
1120
- _context8.n = 1;
1121
- break;
1122
- }
1123
- return _context8.a(2, new Promise(function (resolve) {
1124
- var img = new Image();
1125
- img.onload = function () {
1126
- return resolve(true);
1127
- };
1128
- img.onerror = function () {
1129
- return resolve(false);
1130
- };
1131
-
1132
- // Use the path directly - it should already be processed by getAssetPath
1133
- img.src = path;
1134
-
1135
- // Set a timeout in case the image load hangs
1136
- setTimeout(function () {
1137
- return resolve(false);
1138
- }, 2000);
1139
- }));
1140
- case 1:
1141
- return _context8.a(2, false);
1142
- }
1143
- }, _callee6);
1144
- }));
1145
- function checkLocalTextureExists(_x) {
1146
- return _checkLocalTextureExists.apply(this, arguments);
1147
- }
1148
- return checkLocalTextureExists;
1149
- }()
1150
- /**
1151
- * Force refresh all materials in the scene
1152
- * Helpful for ensuring textures are correctly displayed
1153
- */
1154
- )
1155
- }, {
1156
- key: "forceRefreshMaterials",
1157
- value: function forceRefreshMaterials() {
1158
- var component = this.component;
1159
- if (!component || !component.scene) {
1160
- logger.warn('Cannot refresh materials: component or scene not available');
1161
- return;
1162
- }
1163
- console.log('🔄 Forcing material refresh for all objects...');
1164
- var updatedMaterials = 0;
1165
- var textureFixes = 0;
1166
-
1167
- // Import helper functions if available
1168
- var hasValidImageData = textureConfig.hasValidImageData || function (texture) {
1169
- return texture && texture.image;
1170
- };
1171
- var createPlaceholderTexture = textureConfig.createPlaceholderTexture || function () {
1172
- return null;
1173
- };
1174
-
1175
- // Traverse all meshes in the scene
1176
- component.scene.traverse(function (object) {
1177
- if (object.isMesh && object.material) {
1178
- // Handle both single materials and material arrays
1179
- var materials = Array.isArray(object.material) ? object.material : [object.material];
1180
- materials.forEach(function (material) {
1181
- if (material) {
1182
- // Update material properties
1183
- material.needsUpdate = true;
1184
-
1185
- // Ensure color values are properly set
1186
- if (material.color) {
1187
- if (typeof material.color.convertSRGBToLinear === 'function') {
1188
- material.color.convertSRGBToLinear();
1189
- }
1190
- }
1191
-
1192
- // Check for maps and ensure they're correctly configured
1193
- var maps = ['map', 'normalMap', 'roughnessMap', 'metalnessMap', 'aoMap', 'bumpMap'];
1194
- maps.forEach(function (mapType) {
1195
- var map = material[mapType];
1196
- if (map) {
1197
- // Check if this texture might trigger the warning
1198
- var hasValidData = hasValidImageData(map);
1199
- if (!hasValidData) {
1200
- console.warn("\u26A0\uFE0F Found texture without valid image data in ".concat(mapType, " for object ").concat(object.name || object.uuid));
1201
-
1202
- // Create and use a placeholder texture for now
1203
- if (createPlaceholderTexture) {
1204
- var placeholderColor = mapType === 'normalMap' ? 0x8080ff : 0xcccccc;
1205
- var placeholder = createPlaceholderTexture(placeholderColor);
1206
- if (placeholder) {
1207
- material[mapType] = placeholder;
1208
- textureFixes++;
1209
- console.log("\uD83D\uDD04 Replaced missing image texture with placeholder for ".concat(mapType));
1210
- }
1211
- }
1212
- } else {
1213
- map.needsUpdate = true;
1214
-
1215
- // Ensure correct color space for diffuse maps
1216
- if (mapType === 'map' && map.colorSpace !== undefined) {
1217
- map.colorSpace = THREE.SRGBColorSpace;
1218
- } else if (mapType === 'map' && map.encoding !== undefined) {
1219
- map.encoding = THREE.sRGBEncoding;
1220
- }
1221
- }
1222
- }
1223
- });
1224
- updatedMaterials++;
1225
- }
1226
- });
1227
- }
1228
- });
1229
-
1230
- // Use the dedicated function from textureConfig if available
1231
- if (textureConfig.forceUpdateMaterials) {
1232
- textureConfig.forceUpdateMaterials(component.scene);
1233
- }
1234
- console.log("\u2705 Refreshed ".concat(updatedMaterials, " materials, fixed ").concat(textureFixes, " texture warnings"));
1235
-
1236
- // Force a renderer update if possible
1237
- if (component.renderer && component.camera) {
1238
- component.renderer.render(component.scene, component.camera);
1239
- }
1240
- }
1241
- }]);
1242
- }();
1243
-
1244
- // Create a singleton instance
1245
- var environmentManager = null;
1246
-
1247
- /**
1248
- * Get the global environment manager instance
1249
- */
1250
- function getEnvironmentManager() {
1251
- var component = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : null;
1252
- if (!environmentManager || component && environmentManager.component !== component) {
1253
- environmentManager = new EnvironmentManager(component);
1254
- }
1255
- return environmentManager;
1256
- }
1257
- var environmentManager$1 = {
1258
- EnvironmentManager: EnvironmentManager,
1259
- getEnvironmentManager: getEnvironmentManager,
1260
- // Default initialization method for ease of use
1261
- initializeEnvironment: function () {
1262
- var _initializeEnvironment2 = _asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee7(component) {
1263
- var manager;
1264
- return _regenerator().w(function (_context9) {
1265
- while (1) switch (_context9.n) {
1266
- case 0:
1267
- manager = getEnvironmentManager(component);
1268
- _context9.n = 1;
1269
- return manager.initializeEnvironment();
1270
- case 1:
1271
- return _context9.a(2, manager);
1272
- }
1273
- }, _callee7);
1274
- }));
1275
- function initializeEnvironment(_x2) {
1276
- return _initializeEnvironment2.apply(this, arguments);
1277
- }
1278
- return initializeEnvironment;
1279
- }()
1280
- };
1281
-
1282
- export { EnvironmentManager, environmentManager$1 as default, getEnvironmentManager };
1
+ import{createClass as e,toConsumableArray as n,asyncToGenerator as r,regenerator as t,classCallCheck as a,regeneratorValues as i,createForOfIteratorHelper as o,slicedToArray as s}from"../_virtual/_rollupPluginBabelHelpers.js";import*as u from"three";import{logger as c}from"./debugLogger.js";var l;function f(e){if(e.startsWith("/")&&(e=e.substring(1)),"undefined"!=typeof window){var n="undefined"!=typeof CentralPlantUtils;if("localhost"===window.location.hostname&&("3000"===window.location.port||"3001"===window.location.port))return"/".concat(e);if(n){var r=import.meta.url;return new URL("./assets/".concat(e),r).href}var t=import.meta.url;return new URL("../assets/".concat(e),t).href}return"assets/".concat(e)}function d(){return v.apply(this,arguments)}function v(){return(v=r(t().m(function e(){var n;return t().w(function(e){for(;;)switch(e.n){case 0:if("undefined"==typeof window){e.n=4;break}return e.p=1,e.n=2,import("../node_modules/three/examples/jsm/loaders/RGBELoader.js");case 2:return n=e.v,l=n.RGBELoader,e.a(2,!0);case 3:throw e.p=3,e.v,new Error("Failed to load Three.js loaders");case 4:return e.a(2,!1)}},e,null,[[1,3]])}))).apply(this,arguments)}var w={loadTextureSetAndCreateMaterial:null,checkThreeJSCompatibility:null,forceUpdateMaterials:null};function h(){return p.apply(this,arguments)}function p(){return(p=r(t().m(function e(){var n;return t().w(function(e){for(;;)switch(e.n){case 0:if("undefined"==typeof window){e.n=4;break}return e.p=1,e.n=2,import("./textureConfig.js");case 2:return n=e.v,w.loadTextureSetAndCreateMaterial=n.loadTextureSetAndCreateMaterial,w.checkThreeJSCompatibility=n.checkThreeJSCompatibility,w.forceUpdateMaterials=n.forceUpdateMaterials,Object.entries(w).filter(function(e){var n=s(e,2);return n[0],"function"==typeof n[1]}).map(function(e){return s(e,1)[0]}),"function"==typeof w.checkThreeJSCompatibility&&w.checkThreeJSCompatibility(),e.a(2,!0);case 3:return e.p=3,e.v,e.a(2,!1);case 4:return e.a(2,!1)}},e,null,[[1,3]])}))).apply(this,arguments)}var m=function(){return e(function e(n){a(this,e),this.component=n,this.loadersInitialized=!1,this.initLoaders()},[{key:"initLoaders",value:(b=r(t().m(function e(){return t().w(function(e){for(;;)switch(e.n){case 0:return e.p=1,e.n=2,Promise.all([d(),h()]);case 2:this.loadersInitialized=!0,e.n=4;break;case 3:e.p=3,e.v;case 4:return e.a(2)}},e,this,[[1,3]])})),function(){return b.apply(this,arguments)})},{key:"createSkybox",value:(k=r(t().m(function e(){var n,r,a,s,v,w,h,p,m,k,b,y,g,E,x=this;return t().w(function(e){for(;;)switch(e.n){case 0:if((n=this.component)&&n.renderer&&n.scene){e.n=1;break}return c.warn("Cannot create skybox: component, renderer or scene not available"),e.a(2);case 1:if(l){e.n=5;break}return e.p=2,e.n=3,d();case 3:e.n=5;break;case 4:return e.p=4,e.v,this.createFallbackEnvironment(),e.a(2);case 5:if(e.p=5,r=!(!n.renderer.context||"function"!=typeof n.renderer.context.isContextLost)&&n.renderer.context.isContextLost(),n.renderer.capabilities&&!r){e.n=6;break}return c.warn("WebGL context is lost or invalid, using fallback environment"),this.createFallbackEnvironment(),e.a(2);case 6:if(e.p=6,a=new u.PMREMGenerator(n.renderer)){e.n=7;break}throw new Error("PMREMGenerator could not be created");case 7:a.compileEquirectangularShader(),e.n=9;break;case 8:return e.p=8,g=e.v,c.warn("Failed to initialize PMREMGenerator:",g),this.createFallbackEnvironment(),e.a(2);case 9:s=f("skyboxes/kloofendal_48d_partly_cloudy_puresky_2k.hdr"),v=f("skyboxes/kloofendal_48d_partly_cloudy_puresky_1k.hdr"),w=f("skyboxes/sky_fallback.jpg"),(h=[{type:"hdr",loader:new l,paths:[s,v]},{type:"jpeg",loader:n.textureLoader||new u.TextureLoader,paths:[w]}]).forEach(function(e){var n=e.loader;n&&"function"==typeof n.setCrossOrigin&&n.setCrossOrigin("anonymous")}),p=function(e,r){try{var t,i;e.mapping=u.EquirectangularReflectionMapping,void 0!==e.colorSpace?e.colorSpace=n.renderer.outputColorSpace||u.SRGBColorSpace:void 0!==e.encoding&&(e.encoding=n.renderer.outputEncoding||u.sRGBEncoding);var o=a.fromEquirectangular(e).texture;return c.info("Generating environment map:\n - Type: ".concat(r,"\n - Texture valid: ").concat(null!==e,"\n - Processed map valid: ").concat(null!==o,"\n - Renderer encoding: ").concat(n.renderer.outputEncoding||n.renderer.outputColorSpace,"\n - Texture encoding: ").concat(e.encoding||e.colorSpace)),null!==(t=n.scene.environment)&&void 0!==t&&t.dispose&&n.scene.environment.dispose(),null!==(i=n.scene.background)&&void 0!==i&&i.dispose&&n.scene.background.dispose(),n.scene.environment=o,n.scene.background=o,e.dispose(),n.renderer&&(n.renderer.toneMappingExposure=1,n.renderer.render(n.scene,n.camera)),c.info("Environment map (".concat(r,") applied successfully")),!0}catch(e){return c.warn("Failed to apply ".concat(r," environment map:"),e),!1}},m=t().m(function e(){var n,r,s,u,l,f,d,v,w;return t().w(function(e){for(;;)switch(e.n){case 0:n=y[b],r=n.type,s=n.loader,u=n.paths,l=o(u),e.p=1,d=t().m(function e(){var n,i,o;return t().w(function(e){for(;;)switch(e.n){case 0:if(n=f.value,e.p=1,!n.startsWith("/")||n.includes("://")){e.n=3;break}return e.n=2,x.checkLocalTextureExists(n);case 2:if(e.v){e.n=3;break}return e.a(2,0);case 3:return c.info("Attempting to load ".concat(r," texture: ").concat(n)),e.n=4,new Promise(function(e,r){var t=setTimeout(function(){return r(new Error("Timeout loading ".concat(n)))},1e4);s.load(n,function(n){clearTimeout(t),e(n)},function(e){e.lengthComputable&&(e.loaded,e.total)},function(e){clearTimeout(t),r(e)})});case 4:if(i=e.v,!p(i,r)){e.n=5;break}return a.dispose(),e.a(2,{v:{v:void 0}});case 5:e.n=7;break;case 6:e.p=6,o=e.v,c.warn("Failed to load ".concat(n,":"),o.message);case 7:return e.a(2)}},e,null,[[1,6]])}),l.s();case 2:if((f=l.n()).done){e.n=6;break}return e.d(i(d()),3);case 3:if(0!==(v=e.v)){e.n=4;break}return e.a(3,5);case 4:if(!v){e.n=5;break}return e.a(2,v.v);case 5:e.n=2;break;case 6:e.n=8;break;case 7:e.p=7,w=e.v,l.e(w);case 8:return e.p=8,l.f(),e.f(8);case 9:return e.a(2)}},e,null,[[1,7,8,9]])}),b=0,y=h;case 10:if(!(b<y.length)){e.n=13;break}return e.d(i(m()),11);case 11:if(!(k=e.v)){e.n=12;break}return e.a(2,k.v);case 12:b++,e.n=10;break;case 13:this.createProceduralSky(a),e.n=15;break;case 14:e.p=14,E=e.v,c.error("Error creating skybox:",E),this.createFallbackEnvironment();case 15:return e.a(2)}},e,this,[[6,8],[5,14],[2,4]])})),function(){return k.apply(this,arguments)})},{key:"createFallbackEnvironment",value:function(){var e=this.component;if(e&&e.scene){c.info("Creating basic fallback environment");var n=new u.AmbientLight(16777215,.6);e.scene.add(n);var r=new u.DirectionalLight(16777215,.8);r.position.set(1,2,3),e.scene.add(r),e.scene.background=new u.Color(8900331)}}},{key:"createProceduralSky",value:function(e){var n=this.component;if(n&&n.scene){c.info("Using procedural sky fallback");var r=new u.AmbientLight(16777215,.6);n.scene.add(r);var t=new u.DirectionalLight(16777215,.8);t.position.set(1,1,1),n.scene.add(t);try{if(e&&"function"==typeof e.fromScene){var a=new u.Scene;a.add(new u.HemisphereLight(8900331,4473975,1));var i=e.fromScene(a);i&&i.texture&&(n.scene.environment=i.texture)}n.scene.background=new u.Color(8900331)}catch(e){c.warn("Failed to create procedural sky, using simple background",e),n.scene.background=new u.Color(8900331)}finally{e&&"function"==typeof e.dispose&&e.dispose()}}}},{key:"setupLighting",value:function(){var e=this.component;if(e&&e.scene){var n=[];e.scene.traverse(function(e){e instanceof u.Light&&n.push(e)}),n.forEach(function(n){e.scene.remove(n)});var r=new u.DirectionalLight(16777215,.8);r.position.set(5,10,7),r.castShadow=!0,r.shadow.mapSize.width=1024,r.shadow.mapSize.height=1024,r.shadow.camera.near=1,r.shadow.camera.far=30,r.shadow.camera.left=-10,r.shadow.camera.right=10,r.shadow.camera.top=10,r.shadow.camera.bottom=-10,r.shadow.bias=-.001,e.scene.add(r);var t=new u.AmbientLight(16777215,.3);e.scene.add(t);var a=new u.HemisphereLight(16777215,4473975,.3);e.scene.add(a),c.info("Scene lighting setup complete")}else c.warn("Cannot setup lighting: component or scene not available")}},{key:"createGround",value:function(){var e=this.component;if(!e||!e.scene)return c.warn("Cannot create ground: component or scene not available"),null;var n=new u.PlaneGeometry(100,100),r=new u.MeshStandardMaterial({color:13421772,roughness:.8,metalness:.2,side:u.DoubleSide}),t=new u.Mesh(n,r);return t.rotation.x=-Math.PI/2,t.position.y=-.01,t.receiveShadow=!0,t.userData={isEnvironmentObject:!0,type:"ground"},e.scene.add(t),c.info("Ground plane created"),t}},{key:"createWalls",value:function(){var e=this.component;if(!e||!e.scene)return c.warn("Cannot create walls: component or scene not available"),[];for(var r=[],t=20,a=50,i=new u.MeshStandardMaterial({color:14540253,roughness:.9,metalness:.1,side:u.DoubleSide}),o=[new u.BoxGeometry(a,t,1),new u.BoxGeometry(1,t,a),new u.BoxGeometry(a,t,1),new u.BoxGeometry(1,t,a)],s=[[0,10,-25],[25,10,0],[0,10,25],[-25,10,0]],l=["north-wall","east-wall","south-wall","west-wall"],f=0;f<4;f++){var d,v=new u.Mesh(o[f],i);(d=v.position).set.apply(d,n(s[f])),v.receiveShadow=!0,v.castShadow=!0,v.userData={isEnvironmentObject:!0,type:"wall",name:l[f]},e.scene.add(v),r.push(v)}return c.info("Environment walls created"),r}},{key:"setFog",value:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:13421772,n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:.01,r=this.component;r&&r.scene?(r.scene.fog=new u.FogExp2(e,n),c.info("Scene fog applied")):c.warn("Cannot set fog: component or scene not available")}},{key:"initializeEnvironment",value:(m=r(t().m(function e(){var n,r,a=this;return t().w(function(e){for(;;)switch(e.n){case 0:return n=this.component,e.p=1,e.n=2,d();case 2:return e.v,e.n=3,h();case 3:e.v,e.n=5;break;case 4:e.p=4,e.v;case 5:if(n){e.n=6;break}return c.error("❌ Cannot initialize environment: component is null"),e.a(2);case 6:if(n.renderer){e.n=7;break}return c.error("❌ Cannot initialize environment: renderer is null"),e.a(2);case 7:return n.renderer.toneMapping||(n.renderer.toneMapping=u.ACESFilmicToneMapping),n.renderer.toneMappingExposure=1,void 0!==n.renderer.outputColorSpace?n.renderer.outputColorSpace=u.SRGBColorSpace:void 0!==n.renderer.outputEncoding&&(n.renderer.outputEncoding=u.sRGBEncoding),c.info("Renderer configured for HDR:\n - Tone mapping: ".concat(n.renderer.toneMapping,"\n - Color space: ").concat(n.renderer.outputColorSpace||n.renderer.outputEncoding)),e.n=8,this.createSkybox();case 8:return this.setupLighting(),e.n=9,this.addTexturedGround();case 9:return e.v?c.info("✅ Ground created successfully"):c.error("❌ Failed to create textured ground"),e.n=10,this.addBrickWalls();case 10:(r=e.v)&&0!==r.length?c.info("✅ Created ".concat(r.length," walls")):c.warn("⚠️ No walls were created"),this.addHorizonFog(),c.info("Environment initialization complete"),this.forceRefreshMaterials(),n.renderer&&n.scene&&n.camera&&(n.renderer.render(n.scene,n.camera),setTimeout(function(){n.renderer&&!n.isDestroyed&&(a.forceRefreshMaterials(),n.renderer.render(n.scene,n.camera))},1e3));case 11:return e.a(2)}},e,this,[[1,4]])})),function(){return m.apply(this,arguments)})},{key:"addTexturedGround",value:(p=r(t().m(function e(){var n,r,a,i,o,s,l,f,d,v;return t().w(function(e){for(;;)switch(e.n){case 0:if(w.loadTextureSetAndCreateMaterial){e.n=2;break}return e.n=1,h();case 1:if(w.loadTextureSetAndCreateMaterial){e.n=2;break}return e.a(2,this.createGround());case 2:if((n=this.component)&&n.scene){e.n=3;break}return c.warn("Cannot create textured ground: component or scene not available"),e.a(2,null);case 3:return n.textureLoader||(n.textureLoader=new u.TextureLoader,n.textureLoader.setCrossOrigin("anonymous")),n.scene.traverse(function(e){e.userData&&"ground"===e.userData.type&&n.scene.remove(e)}),e.p=4,e.n=5,w.loadTextureSetAndCreateMaterial(n,"gravel_embedded_concrete");case 5:if(r=e.v){e.n=6;break}throw new Error("Failed to create ground material");case 6:return a=new u.MeshBasicMaterial({color:2293538,wireframe:!1,side:u.DoubleSide}),i=new u.PlaneGeometry(100,100),(o=new u.Mesh(i,r)).rotation.x=-Math.PI/2,o.position.y=-.01,o.receiveShadow=!0,(s=new u.Mesh(i,a)).rotation.x=-Math.PI/2,s.position.y=-.02,s.visible=!1,o.userData={isEnvironmentObject:!0,isBaseGround:!0,type:"ground"},s.userData={isEnvironmentObject:!0,type:"ground-debug"},n.scene.add(o),n.scene.add(s),c.info("Textured ground created"),e.a(2,o);case 7:return e.p=7,v=e.v,c.error("Error creating textured ground:",v),l=new u.PlaneGeometry(100,100),f=new u.MeshBasicMaterial({color:16711680,wireframe:!0,side:u.DoubleSide}),(d=new u.Mesh(l,f)).rotation.x=-Math.PI/2,d.position.y=-.01,d.userData={isEnvironmentObject:!0,isBaseGround:!0,type:"ground-error"},n.scene.add(d),e.a(2,d)}},e,this,[[4,7]])})),function(){return p.apply(this,arguments)})},{key:"addBrickWalls",value:(v=r(t().m(function e(){var r,a,i,o,s,l,f,d,v,p,m,k;return t().w(function(e){for(;;)switch(e.n){case 0:if(w.loadTextureSetAndCreateMaterial){e.n=2;break}return e.n=1,h();case 1:if(w.loadTextureSetAndCreateMaterial){e.n=2;break}return e.a(2,this.createWalls());case 2:if((r=this.component)&&r.scene){e.n=3;break}return c.warn("Cannot create brick walls: component or scene not available"),e.a(2,[]);case 3:return r.scene.traverse(function(e){e.userData&&"wall"===e.userData.type&&r.scene.remove(e)}),e.p=4,e.n=5,w.loadTextureSetAndCreateMaterial(r,"brick");case 5:for(a=e.v,i=[],o=20,s=50,l=[new u.BoxGeometry(s,o,1),new u.BoxGeometry(1,o,s),new u.BoxGeometry(s,o,1),new u.BoxGeometry(1,o,s)],f=[[0,10,-25],[25,10,0],[0,10,25],[-25,10,0]],d=["north-wall","east-wall","south-wall","west-wall"],v=0;v<4;v++)m=new u.Mesh(l[v],a),(p=m.position).set.apply(p,n(f[v])),m.receiveShadow=!0,m.castShadow=!0,m.userData={isEnvironmentObject:!0,type:"wall",name:d[v]},r.scene.add(m),i.push(m);return c.info("Textured environment walls created"),e.a(2,i);case 6:return e.p=6,k=e.v,c.error("Error creating brick walls:",k),e.a(2,this.createWalls())}},e,this,[[4,6]])})),function(){return v.apply(this,arguments)})},{key:"addHorizonFog",value:function(){var e=this.component;if(e&&e.scene){e.scene.fog=new u.FogExp2(14213375,.005),c.info("Horizon fog applied")}else c.warn("Cannot set horizon fog: component or scene not available")}},{key:"checkLocalTextureExists",value:(s=r(t().m(function e(n){return t().w(function(e){for(;;)switch(e.n){case 0:if(n.startsWith("/")&&(n=n.substring(1)),"undefined"==typeof window){e.n=1;break}return e.a(2,new Promise(function(e){var r=new Image;r.onload=function(){return e(!0)},r.onerror=function(){return e(!1)},r.src=n,setTimeout(function(){return e(!1)},2e3)}));case 1:return e.a(2,!1)}},e)})),function(e){return s.apply(this,arguments)})},{key:"forceRefreshMaterials",value:function(){var e=this.component;if(e&&e.scene){var n=w.hasValidImageData||function(e){return e&&e.image},r=w.createPlaceholderTexture||function(){return null};e.scene.traverse(function(e){e.isMesh&&e.material&&(Array.isArray(e.material)?e.material:[e.material]).forEach(function(e){if(e){e.needsUpdate=!0,e.color&&"function"==typeof e.color.convertSRGBToLinear&&e.color.convertSRGBToLinear();["map","normalMap","roughnessMap","metalnessMap","aoMap","bumpMap"].forEach(function(t){var a=e[t];if(a)if(n(a))a.needsUpdate=!0,"map"===t&&void 0!==a.colorSpace?a.colorSpace=u.SRGBColorSpace:"map"===t&&void 0!==a.encoding&&(a.encoding=u.sRGBEncoding);else if(r){var i=r("normalMap"===t?8421631:13421772);i&&(e[t]=i)}})}})}),w.forceUpdateMaterials&&w.forceUpdateMaterials(e.scene),e.renderer&&e.camera&&e.renderer.render(e.scene,e.camera)}else c.warn("Cannot refresh materials: component or scene not available")}}]);var s,v,p,m,k,b}(),k=null;function b(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:null;return(!k||e&&k.component!==e)&&(k=new m(e)),k}var y,g={EnvironmentManager:m,getEnvironmentManager:b,initializeEnvironment:(y=r(t().m(function e(n){var r;return t().w(function(e){for(;;)switch(e.n){case 0:return r=b(n),e.n=1,r.initializeEnvironment();case 1:return e.a(2,r)}},e)})),function(e){return y.apply(this,arguments)})};export{m as EnvironmentManager,g as default,b as getEnvironmentManager};