@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.
- package/dist/cjs/_virtual/_rollupPluginBabelHelpers.js +432 -1
- package/dist/cjs/node_modules/@2112-lab/pathfinder/dist/index.esm.js +1448 -1
- package/dist/cjs/node_modules/three/examples/jsm/controls/OrbitControls.js +1853 -1
- package/dist/cjs/node_modules/three/examples/jsm/exporters/GLTFExporter.js +3537 -1
- package/dist/cjs/node_modules/three/examples/jsm/exporters/OBJExporter.js +305 -1
- package/dist/cjs/node_modules/three/examples/jsm/exporters/PLYExporter.js +542 -1
- package/dist/cjs/node_modules/three/examples/jsm/exporters/STLExporter.js +218 -1
- package/dist/cjs/node_modules/three/examples/jsm/loaders/DRACOLoader.js +683 -1
- package/dist/cjs/node_modules/three/examples/jsm/loaders/GLTFLoader.js +4811 -1
- package/dist/cjs/node_modules/three/examples/jsm/loaders/RGBELoader.js +480 -1
- package/dist/cjs/node_modules/three/examples/jsm/renderers/CSS2DRenderer.js +309 -1
- package/dist/cjs/node_modules/three/examples/jsm/utils/BufferGeometryUtils.js +120 -1
- package/dist/cjs/src/analysis/analysis.js +560 -1
- package/dist/cjs/src/analysis/testing.js +958 -1
- package/dist/cjs/src/core/centralPlant.js +1149 -1
- package/dist/cjs/src/core/debugLogger.js +175 -1
- package/dist/cjs/src/core/mathUtils.js +574 -1
- package/dist/cjs/src/core/nameUtils.js +93 -1
- package/dist/cjs/src/data/export.js +716 -1
- package/dist/cjs/src/data/import.js +380 -1
- package/dist/cjs/src/data/numerics.js +522 -1
- package/dist/cjs/src/helpers/sceneHelper.js +572 -1
- package/dist/cjs/src/index.js +69 -1
- package/dist/cjs/src/managers/components/animationManager.js +123 -1
- package/dist/cjs/src/managers/components/componentManager.js +332 -1
- package/dist/cjs/src/managers/components/pathfindingManager.js +1441 -1
- package/dist/cjs/src/managers/controls/TransformControls.js +1063 -1
- package/dist/cjs/src/managers/controls/cameraControlsManager.js +79 -1
- package/dist/cjs/src/managers/controls/dragDropManager.js +1026 -1
- package/dist/cjs/src/managers/controls/keyboardControlsManager.js +395 -1
- package/dist/cjs/src/managers/controls/transformControlsManager.js +1807 -1
- package/dist/cjs/src/managers/environment/environmentManager.js +714 -1
- package/dist/cjs/src/managers/environment/textureConfig.js +229 -1
- package/dist/cjs/src/managers/scene/sceneExportManager.js +264 -1
- package/dist/cjs/src/managers/scene/sceneInitializationManager.js +346 -1
- package/dist/cjs/src/managers/scene/sceneOperationsManager.js +1509 -1
- package/dist/cjs/src/managers/scene/sceneTooltipsManager.js +661 -1
- package/dist/cjs/src/managers/system/disposalManager.js +444 -1
- package/dist/cjs/src/managers/system/hotReloadManager.js +291 -1
- package/dist/cjs/src/managers/system/performanceMonitor.js +863 -1
- package/dist/cjs/src/rendering/modelPreloader.js +369 -1
- package/dist/cjs/src/rendering/rendering2D.js +631 -1
- package/dist/cjs/src/rendering/rendering3D.js +685 -1
- package/dist/esm/_virtual/_rollupPluginBabelHelpers.js +396 -1
- package/dist/esm/node_modules/@2112-lab/pathfinder/dist/index.esm.js +1444 -1
- package/dist/esm/node_modules/three/examples/jsm/controls/OrbitControls.js +1849 -1
- package/dist/esm/node_modules/three/examples/jsm/exporters/GLTFExporter.js +3533 -1
- package/dist/esm/node_modules/three/examples/jsm/exporters/OBJExporter.js +301 -1
- package/dist/esm/node_modules/three/examples/jsm/exporters/PLYExporter.js +538 -1
- package/dist/esm/node_modules/three/examples/jsm/exporters/STLExporter.js +214 -1
- package/dist/esm/node_modules/three/examples/jsm/loaders/DRACOLoader.js +679 -1
- package/dist/esm/node_modules/three/examples/jsm/loaders/GLTFLoader.js +4807 -1
- package/dist/esm/node_modules/three/examples/jsm/loaders/RGBELoader.js +476 -1
- package/dist/esm/node_modules/three/examples/jsm/renderers/CSS2DRenderer.js +304 -1
- package/dist/esm/node_modules/three/examples/jsm/utils/BufferGeometryUtils.js +116 -1
- package/dist/esm/src/analysis/analysis.js +536 -1
- package/dist/esm/src/analysis/testing.js +954 -1
- package/dist/esm/src/core/centralPlant.js +1144 -1
- package/dist/esm/src/core/debugLogger.js +167 -1
- package/dist/esm/src/core/mathUtils.js +570 -1
- package/dist/esm/src/core/nameUtils.js +87 -1
- package/dist/esm/src/data/export.js +712 -1
- package/dist/esm/src/data/import.js +356 -1
- package/dist/esm/src/data/numerics.js +518 -1
- package/dist/esm/src/helpers/sceneHelper.js +547 -1
- package/dist/esm/src/index.js +35 -1
- package/dist/esm/src/managers/components/animationManager.js +119 -1
- package/dist/esm/src/managers/components/componentManager.js +328 -1
- package/dist/esm/src/managers/components/pathfindingManager.js +1417 -1
- package/dist/esm/src/managers/controls/TransformControls.js +1057 -1
- package/dist/esm/src/managers/controls/cameraControlsManager.js +75 -1
- package/dist/esm/src/managers/controls/dragDropManager.js +1002 -1
- package/dist/esm/src/managers/controls/keyboardControlsManager.js +371 -1
- package/dist/esm/src/managers/controls/transformControlsManager.js +1782 -1
- package/dist/esm/src/managers/environment/environmentManager.js +690 -1
- package/dist/esm/src/managers/environment/textureConfig.js +202 -1
- package/dist/esm/src/managers/scene/sceneExportManager.js +260 -1
- package/dist/esm/src/managers/scene/sceneInitializationManager.js +322 -1
- package/dist/esm/src/managers/scene/sceneOperationsManager.js +1485 -1
- package/dist/esm/src/managers/scene/sceneTooltipsManager.js +637 -1
- package/dist/esm/src/managers/system/disposalManager.js +440 -1
- package/dist/esm/src/managers/system/hotReloadManager.js +287 -1
- package/dist/esm/src/managers/system/performanceMonitor.js +858 -1
- package/dist/esm/src/rendering/modelPreloader.js +364 -1
- package/dist/esm/src/rendering/rendering2D.js +627 -1
- package/dist/esm/src/rendering/rendering3D.js +661 -1
- package/package.json +1 -1
|
@@ -1 +1,714 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,"t",{value:!0});var e=require("../../../_virtual/_rollupPluginBabelHelpers.js"),r=require("three"),n=require("../../../node_modules/three/examples/jsm/loaders/RGBELoader.js"),t=require("./textureConfig.js"),o=require("../../core/debugLogger.js");function a(e){if(e&&e.t)return e;var r=Object.create(null);return e&&Object.keys(e).forEach(function(n){if("default"!==n){var t=Object.getOwnPropertyDescriptor(e,n);Object.defineProperty(r,n,t.get?t:{enumerable:!0,get:function(){return e[n]}})}}),r.default=e,Object.freeze(r)}var i=a(r),u=function(){return e.createClass(function r(n){e.classCallCheck(this,r),this.sceneViewer=n},[{key:"createSkybox",value:(f=e.asyncToGenerator(e.regenerator().m(function r(){var t,o,a,u,c,s,l,f,v,d;return e.regenerator().w(function(r){for(;;)switch(r.n){case 0:t=this.sceneViewer,(o=new i.PMREMGenerator(t.renderer)).compileEquirectangularShader(),a=[{type:"hdr",loader:new n.RGBELoader,paths:["/skyboxes/kloofendal_48d_partly_cloudy_puresky_2k.hdr","/skyboxes/kloofendal_48d_partly_cloudy_puresky_1k.hdr"]},{type:"jpeg",loader:t.textureLoader,paths:["/skyboxes/sky_fallback.jpg"]}],u=function(e,r){try{var n,a;e.mapping=i.EquirectangularReflectionMapping;var u=o.fromEquirectangular(e).texture;return null!==(n=t.scene.environment)&&void 0!==n&&n.dispose&&t.scene.environment.dispose(),null!==(a=t.scene.background)&&void 0!==a&&a.dispose&&t.scene.background.dispose(),t.scene.environment=u,t.scene.background=u,e.dispose(),!0}catch(e){return!1}},c=e.regenerator().m(function r(){var n,t,a,i,c,s,v,d;return e.regenerator().w(function(r){for(;;)switch(r.n){case 0:(n=f[l]).type,t=n.loader,a=n.paths,i=e.createForOfIteratorHelper(a),r.p=1,s=e.regenerator().m(function r(){var n,a;return e.regenerator().w(function(e){for(;;)switch(e.n){case 0:return n=c.value,e.p=1,e.n=2,new Promise(function(e,r){var o=setTimeout(function(){return r(new Error("Timeout"))},1e4);t.load(n,function(r){clearTimeout(o),e(r)},void 0,function(e){clearTimeout(o),r(e)})});case 2:if(a=e.v,!u(a)){e.n=3;break}return o.dispose(),e.a(2,{v:{v:void 0}});case 3:e.n=5;break;case 4:e.p=4,e.v;case 5:return e.a(2)}},r,null,[[1,4]])}),i.s();case 2:if((c=i.n()).done){r.n=5;break}return r.d(e.regeneratorValues(s()),3);case 3:if(!(v=r.v)){r.n=4;break}return r.a(2,v.v);case 4:r.n=2;break;case 5:r.n=7;break;case 6:r.p=6,d=r.v,i.e(d);case 7:return r.p=7,i.f(),r.f(7);case 8:return r.a(2)}},r,null,[[1,6,7,8]])}),l=0,f=a;case 1:if(!(l<f.length)){r.n=4;break}return r.d(e.regeneratorValues(c()),2);case 2:if(!(s=r.v)){r.n=3;break}return r.a(2,s.v);case 3:l++,r.n=1;break;case 4:v=new i.AmbientLight(16777215,.6),t.scene.add(v),(d=new i.Scene).add(new i.HemisphereLight(8900331,4473975,1)),t.scene.environment=o.fromScene(d).texture,t.scene.background=new i.Color(8900331),o.dispose();case 5:return r.a(2)}},r,this)})),function(){return f.apply(this,arguments)})},{key:"setupLighting",value:function(){var e=this.sceneViewer;e.scene.children=e.scene.children.filter(function(e){return!(e instanceof i.Light)});var r=new i.DirectionalLight(16777195,5);r.position.set(15,30,-10),r.castShadow=!0,r.shadow.camera.near=.1,r.shadow.camera.far=100,r.shadow.camera.left=-50,r.shadow.camera.right=50,r.shadow.camera.top=50,r.shadow.camera.bottom=-50,r.shadow.mapSize.width=2048,r.shadow.mapSize.height=2048,e.scene.add(r);var n=new i.DirectionalLight(16777164,.4);n.position.set(-10,10,-10),e.scene.add(n),o.logger.info("Scene lighting setup completed")}},{key:"addTexturedGround",value:(l=e.asyncToGenerator(e.regenerator().m(function r(){var n,a,u,c,s,l;return e.regenerator().w(function(e){for(;;)switch(e.n){case 0:return n=this.sceneViewer,o.logger.debug("Starting addTexturedGround..."),a=new i.PlaneGeometry(30,30),u=new i.MeshStandardMaterial({color:7829367,metalness:.2,roughness:.9}),(c=new i.Mesh(a,u)).rotation.x=-Math.PI/2,c.position.y=0,c.receiveShadow=!0,c.name="Ground",c.userData.isBaseGround=!0,n.scene.add(c),e.p=1,o.logger.debug("Loading concrete texture set..."),e.n=2,t.loadTextureSetAndCreateMaterial("gravel_embedded_concrete",n.textureLoader);case 2:s=e.v,c.material=s,c.material.needsUpdate=!0,o.logger.success("Ground material updated with textures"),e.n=4;break;case 3:e.p=3,l=e.v,o.logger.warn("Error loading ground textures:",l);case 4:return e.a(2)}},r,this,[[1,3]])})),function(){return l.apply(this,arguments)})},{key:"addBrickWalls",value:(s=e.asyncToGenerator(e.regenerator().m(function r(){var n,a,u,c,s,l,f;return e.regenerator().w(function(e){for(;;)switch(e.n){case 0:return n=this.sceneViewer,o.logger.debug("Starting addBrickWalls..."),a=2.5,u=.5,c=new i.MeshPhysicalMaterial({color:7824226,roughness:.9,metalness:.1,clearcoat:.05,clearcoatRoughness:.4}),s=function(e){var r=function(r,t,o,a,u,c){var s=arguments.length>6&&void 0!==arguments[6]?arguments[6]:0,l=arguments.length>7&&void 0!==arguments[7]?arguments[7]:1,f=new i.BoxGeometry(r,t,o);if(1!==l){for(var v=f.attributes.uv,d=v.array,h=0;h<d.length;h+=2)d[h+1]*=l;v.needsUpdate=!0}var k=new i.Mesh(f,e);return k.position.set(a,u-.56,c),0!==s&&k.rotateY(s),k.userData.isBrickWall=!0,k.castShadow=!0,k.receiveShadow=!0,k.name="Wall",n.scene.add(k),k};r(30,a,u,0,1.25,14.75,0,1),r(30,a,u,0,1.25,-14.75,0,1),r(u,8.5,29,14.75,4.25,0,0,3.4),r(u,a,29,-14.75,1.25,0,0,1)},s(c),o.logger.debug("Basic brick walls created"),e.p=1,o.logger.debug("Loading brick texture set..."),e.n=2,t.loadTextureSetAndCreateMaterial("brick",n.textureLoader);case 2:l=e.v,n.scene.traverse(function(e){e.isMesh&&e.userData.isBrickWall&&(e.material=l,e.material.needsUpdate=!0)}),o.logger.success("Brick walls updated with textures"),e.n=4;break;case 3:e.p=3,f=e.v,o.logger.warn("Error loading brick textures:",f);case 4:return e.a(2)}},r,this,[[1,3]])})),function(){return s.apply(this,arguments)})},{key:"addHorizonFog",value:function(){var e=this.sceneViewer,r=new i.ShaderMaterial({transparent:!0,uniforms:{fogColor:{value:new i.Color(5533306)},fogDensity:{value:1}},vertexShader:"\n varying vec2 vUv;\n void main() {\n vUv = uv;\n gl_Position = projectionMatrix * modelViewMatrix * vec4(position, 1.0);\n }\n ",fragmentShader:"\n uniform vec3 fogColor;\n uniform float fogDensity;\n varying vec2 vUv;\n \n void main() {\n vec2 center = vec2(0.5, 0.5);\n float dist = distance(vUv, center);\n float opacity = (1.0 - smoothstep(0.0, 0.5, dist)) * fogDensity;\n gl_FragColor = vec4(fogColor, opacity);\n }\n ",side:i.DoubleSide}),n=new i.PlaneGeometry(300,300),t=new i.Mesh(n,r);return t.rotation.x=-Math.PI/2,t.position.y=-3,t.name="fogPlane",e.scene.add(t),t}},{key:"initializeEnvironment",value:(c=e.asyncToGenerator(e.regenerator().m(function r(){return e.regenerator().w(function(e){for(;;)switch(e.n){case 0:return e.n=1,this.createSkybox();case 1:return this.setupLighting(),e.n=2,this.addTexturedGround();case 2:return e.n=3,this.addBrickWalls();case 3:this.addHorizonFog(),o.logger.info("Environment initialization completed");case 4:return e.a(2)}},r,this)})),function(){return c.apply(this,arguments)})},{key:"removeSkybox",value:function(){var e=this.sceneViewer;try{var r,n;return null!==(r=e.scene.environment)&&void 0!==r&&r.dispose&&e.scene.environment.dispose(),null!==(n=e.scene.background)&&void 0!==n&&n.dispose&&e.scene.background.dispose(),e.scene.environment=null,e.scene.background=new i.Color(16777215),o.logger.info("Skybox removed successfully"),!0}catch(e){return!1}}},{key:"setSkyboxType",value:(u=e.asyncToGenerator(e.regenerator().m(function r(n){var t,a,u,c,s;return e.regenerator().w(function(e){for(;;)switch(e.n){case 0:t=this.sceneViewer,e.p=1,null!==(a=t.scene.environment)&&void 0!==a&&a.dispose&&t.scene.environment.dispose(),null!==(u=t.scene.background)&&void 0!==u&&u.dispose&&t.scene.background.dispose(),(c=new i.PMREMGenerator(t.renderer)).compileEquirectangularShader(),s=n,e.n="HDR"===s?2:"Fallback"===s?4:"Color"===s?6:7;break;case 2:return e.n=3,this.loadHDRSkybox(c);case 3:case 5:return e.a(3,8);case 4:return e.n=5,this.loadFallbackSkybox(c);case 6:return this.setColorBackground(),e.a(3,8);case 7:return e.n=8,this.loadHDRSkybox(c);case 8:return c.dispose(),o.logger.info("Skybox type changed to: ".concat(n)),e.a(2,!0);case 9:return e.p=9,e.v,e.a(2,!1)}},r,this,[[1,9]])})),function(e){return u.apply(this,arguments)})},{key:"loadHDRSkybox",value:(a=e.asyncToGenerator(e.regenerator().m(function r(t){var o,a,u,c,s,l,f;return e.regenerator().w(function(r){for(;;)switch(r.n){case 0:o=this.sceneViewer,a=new n.RGBELoader,u=["/skyboxes/kloofendal_48d_partly_cloudy_puresky_2k.hdr","/skyboxes/kloofendal_48d_partly_cloudy_puresky_1k.hdr"],c=e.regenerator().m(function r(){var n,u,c;return e.regenerator().w(function(e){for(;;)switch(e.n){case 0:return n=f[l],e.p=1,e.n=2,new Promise(function(e,r){var t=setTimeout(function(){return r(new Error("Timeout"))},1e4);a.load(n,function(r){clearTimeout(t),e(r)},void 0,function(e){clearTimeout(t),r(e)})});case 2:return(u=e.v).mapping=i.EquirectangularReflectionMapping,c=t.fromEquirectangular(u).texture,o.scene.environment=c,o.scene.background=c,u.dispose(),e.a(2,{v:void 0});case 3:e.p=3,e.v;case 4:return e.a(2)}},r,null,[[1,3]])}),l=0,f=u;case 1:if(!(l<f.length)){r.n=4;break}return r.d(e.regeneratorValues(c()),2);case 2:if(!(s=r.v)){r.n=3;break}return r.a(2,s.v);case 3:l++,r.n=1;break;case 4:throw new Error("Failed to load any HDR skybox");case 5:return r.a(2)}},r,this)})),function(e){return a.apply(this,arguments)})},{key:"loadFallbackSkybox",value:(r=e.asyncToGenerator(e.regenerator().m(function r(n){var t,o,a;return e.regenerator().w(function(e){for(;;)switch(e.n){case 0:return t=this.sceneViewer,e.p=1,e.n=2,new Promise(function(e,r){var n=setTimeout(function(){return r(new Error("Timeout"))},1e4);t.textureLoader.load("/skyboxes/sky_fallback.jpg",function(r){clearTimeout(n),e(r)},void 0,function(e){clearTimeout(n),r(e)})});case 2:(o=e.v).mapping=i.EquirectangularReflectionMapping,a=n.fromEquirectangular(o).texture,t.scene.environment=a,t.scene.background=a,o.dispose(),e.n=4;break;case 3:throw e.p=3,e.v;case 4:return e.a(2)}},r,this,[[1,3]])})),function(e){return r.apply(this,arguments)})},{key:"setColorBackground",value:function(){var e=this.sceneViewer;e.scene.environment=null,e.scene.background=new i.Color(16777215);var r=new i.AmbientLight(16777215,.6);e.scene.add(r)}}]);var r,a,u,c,s,l,f}();exports.EnvironmentManager=u;
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, '__esModule', { value: true });
|
|
4
|
+
|
|
5
|
+
var _rollupPluginBabelHelpers = require('../../../_virtual/_rollupPluginBabelHelpers.js');
|
|
6
|
+
var THREE = require('three');
|
|
7
|
+
var RGBELoader = require('../../../node_modules/three/examples/jsm/loaders/RGBELoader.js');
|
|
8
|
+
var textureConfig = require('./textureConfig.js');
|
|
9
|
+
var debugLogger = require('../../core/debugLogger.js');
|
|
10
|
+
|
|
11
|
+
function _interopNamespace(e) {
|
|
12
|
+
if (e && e.__esModule) return e;
|
|
13
|
+
var n = Object.create(null);
|
|
14
|
+
if (e) {
|
|
15
|
+
Object.keys(e).forEach(function (k) {
|
|
16
|
+
if (k !== 'default') {
|
|
17
|
+
var d = Object.getOwnPropertyDescriptor(e, k);
|
|
18
|
+
Object.defineProperty(n, k, d.get ? d : {
|
|
19
|
+
enumerable: true,
|
|
20
|
+
get: function () { return e[k]; }
|
|
21
|
+
});
|
|
22
|
+
}
|
|
23
|
+
});
|
|
24
|
+
}
|
|
25
|
+
n["default"] = e;
|
|
26
|
+
return Object.freeze(n);
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
var THREE__namespace = /*#__PURE__*/_interopNamespace(THREE);
|
|
30
|
+
|
|
31
|
+
var EnvironmentManager = /*#__PURE__*/function () {
|
|
32
|
+
function EnvironmentManager(sceneViewer) {
|
|
33
|
+
_rollupPluginBabelHelpers.classCallCheck(this, EnvironmentManager);
|
|
34
|
+
this.sceneViewer = sceneViewer;
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
/**
|
|
38
|
+
* Create skybox with HDR environment mapping
|
|
39
|
+
*/
|
|
40
|
+
return _rollupPluginBabelHelpers.createClass(EnvironmentManager, [{
|
|
41
|
+
key: "createSkybox",
|
|
42
|
+
value: (function () {
|
|
43
|
+
var _createSkybox = _rollupPluginBabelHelpers.asyncToGenerator(/*#__PURE__*/_rollupPluginBabelHelpers.regenerator().m(function _callee() {
|
|
44
|
+
var component, pmremGenerator, loaders, applyEnvironmentMap, _loop, _ret, _i, _loaders, ambientLight, skyScene;
|
|
45
|
+
return _rollupPluginBabelHelpers.regenerator().w(function (_context3) {
|
|
46
|
+
while (1) switch (_context3.n) {
|
|
47
|
+
case 0:
|
|
48
|
+
component = this.sceneViewer;
|
|
49
|
+
pmremGenerator = new THREE__namespace.PMREMGenerator(component.renderer);
|
|
50
|
+
pmremGenerator.compileEquirectangularShader();
|
|
51
|
+
loaders = [{
|
|
52
|
+
type: 'hdr',
|
|
53
|
+
loader: new RGBELoader.RGBELoader(),
|
|
54
|
+
paths: ['/skyboxes/kloofendal_48d_partly_cloudy_puresky_2k.hdr', '/skyboxes/kloofendal_48d_partly_cloudy_puresky_1k.hdr']
|
|
55
|
+
}, {
|
|
56
|
+
type: 'jpeg',
|
|
57
|
+
loader: component.textureLoader,
|
|
58
|
+
paths: ['/skyboxes/sky_fallback.jpg']
|
|
59
|
+
}];
|
|
60
|
+
applyEnvironmentMap = function applyEnvironmentMap(envTexture, type) {
|
|
61
|
+
try {
|
|
62
|
+
var _component$scene$envi, _component$scene$back;
|
|
63
|
+
envTexture.mapping = THREE__namespace.EquirectangularReflectionMapping;
|
|
64
|
+
var processedEnvMap = pmremGenerator.fromEquirectangular(envTexture).texture;
|
|
65
|
+
if ((_component$scene$envi = component.scene.environment) !== null && _component$scene$envi !== void 0 && _component$scene$envi.dispose) component.scene.environment.dispose();
|
|
66
|
+
if ((_component$scene$back = component.scene.background) !== null && _component$scene$back !== void 0 && _component$scene$back.dispose) component.scene.background.dispose();
|
|
67
|
+
component.scene.environment = processedEnvMap;
|
|
68
|
+
component.scene.background = processedEnvMap;
|
|
69
|
+
envTexture.dispose();
|
|
70
|
+
console.log("\u2705 ".concat(type.toUpperCase(), " environment map applied successfully"));
|
|
71
|
+
return true;
|
|
72
|
+
} catch (error) {
|
|
73
|
+
console.warn("\u274C Failed to apply ".concat(type, " environment map:"), error);
|
|
74
|
+
return false;
|
|
75
|
+
}
|
|
76
|
+
};
|
|
77
|
+
_loop = /*#__PURE__*/_rollupPluginBabelHelpers.regenerator().m(function _loop() {
|
|
78
|
+
var _loaders$_i, type, loader, paths, _iterator, _step, _loop2, _ret2, _t2;
|
|
79
|
+
return _rollupPluginBabelHelpers.regenerator().w(function (_context2) {
|
|
80
|
+
while (1) switch (_context2.n) {
|
|
81
|
+
case 0:
|
|
82
|
+
_loaders$_i = _loaders[_i], type = _loaders$_i.type, loader = _loaders$_i.loader, paths = _loaders$_i.paths;
|
|
83
|
+
_iterator = _rollupPluginBabelHelpers.createForOfIteratorHelper(paths);
|
|
84
|
+
_context2.p = 1;
|
|
85
|
+
_loop2 = /*#__PURE__*/_rollupPluginBabelHelpers.regenerator().m(function _loop2() {
|
|
86
|
+
var path, texture, _t;
|
|
87
|
+
return _rollupPluginBabelHelpers.regenerator().w(function (_context) {
|
|
88
|
+
while (1) switch (_context.n) {
|
|
89
|
+
case 0:
|
|
90
|
+
path = _step.value;
|
|
91
|
+
_context.p = 1;
|
|
92
|
+
console.log("\uD83D\uDD04 Attempting to load ".concat(type.toUpperCase(), ": ").concat(path));
|
|
93
|
+
_context.n = 2;
|
|
94
|
+
return new Promise(function (resolve, reject) {
|
|
95
|
+
var timeout = setTimeout(function () {
|
|
96
|
+
return reject(new Error('Timeout'));
|
|
97
|
+
}, 10000);
|
|
98
|
+
loader.load(path, function (tex) {
|
|
99
|
+
clearTimeout(timeout);
|
|
100
|
+
resolve(tex);
|
|
101
|
+
}, undefined, function (err) {
|
|
102
|
+
clearTimeout(timeout);
|
|
103
|
+
reject(err);
|
|
104
|
+
});
|
|
105
|
+
});
|
|
106
|
+
case 2:
|
|
107
|
+
texture = _context.v;
|
|
108
|
+
if (!applyEnvironmentMap(texture, type)) {
|
|
109
|
+
_context.n = 3;
|
|
110
|
+
break;
|
|
111
|
+
}
|
|
112
|
+
pmremGenerator.dispose();
|
|
113
|
+
return _context.a(2, {
|
|
114
|
+
v: {
|
|
115
|
+
v: void 0
|
|
116
|
+
}
|
|
117
|
+
});
|
|
118
|
+
case 3:
|
|
119
|
+
_context.n = 5;
|
|
120
|
+
break;
|
|
121
|
+
case 4:
|
|
122
|
+
_context.p = 4;
|
|
123
|
+
_t = _context.v;
|
|
124
|
+
console.warn("\u26A0\uFE0F Failed to load ".concat(path, ":"), _t.message);
|
|
125
|
+
case 5:
|
|
126
|
+
return _context.a(2);
|
|
127
|
+
}
|
|
128
|
+
}, _loop2, null, [[1, 4]]);
|
|
129
|
+
});
|
|
130
|
+
_iterator.s();
|
|
131
|
+
case 2:
|
|
132
|
+
if ((_step = _iterator.n()).done) {
|
|
133
|
+
_context2.n = 5;
|
|
134
|
+
break;
|
|
135
|
+
}
|
|
136
|
+
return _context2.d(_rollupPluginBabelHelpers.regeneratorValues(_loop2()), 3);
|
|
137
|
+
case 3:
|
|
138
|
+
_ret2 = _context2.v;
|
|
139
|
+
if (!_ret2) {
|
|
140
|
+
_context2.n = 4;
|
|
141
|
+
break;
|
|
142
|
+
}
|
|
143
|
+
return _context2.a(2, _ret2.v);
|
|
144
|
+
case 4:
|
|
145
|
+
_context2.n = 2;
|
|
146
|
+
break;
|
|
147
|
+
case 5:
|
|
148
|
+
_context2.n = 7;
|
|
149
|
+
break;
|
|
150
|
+
case 6:
|
|
151
|
+
_context2.p = 6;
|
|
152
|
+
_t2 = _context2.v;
|
|
153
|
+
_iterator.e(_t2);
|
|
154
|
+
case 7:
|
|
155
|
+
_context2.p = 7;
|
|
156
|
+
_iterator.f();
|
|
157
|
+
return _context2.f(7);
|
|
158
|
+
case 8:
|
|
159
|
+
return _context2.a(2);
|
|
160
|
+
}
|
|
161
|
+
}, _loop, null, [[1, 6, 7, 8]]);
|
|
162
|
+
});
|
|
163
|
+
_i = 0, _loaders = loaders;
|
|
164
|
+
case 1:
|
|
165
|
+
if (!(_i < _loaders.length)) {
|
|
166
|
+
_context3.n = 4;
|
|
167
|
+
break;
|
|
168
|
+
}
|
|
169
|
+
return _context3.d(_rollupPluginBabelHelpers.regeneratorValues(_loop()), 2);
|
|
170
|
+
case 2:
|
|
171
|
+
_ret = _context3.v;
|
|
172
|
+
if (!_ret) {
|
|
173
|
+
_context3.n = 3;
|
|
174
|
+
break;
|
|
175
|
+
}
|
|
176
|
+
return _context3.a(2, _ret.v);
|
|
177
|
+
case 3:
|
|
178
|
+
_i++;
|
|
179
|
+
_context3.n = 1;
|
|
180
|
+
break;
|
|
181
|
+
case 4:
|
|
182
|
+
console.log('🎨 Using procedural sky fallback');
|
|
183
|
+
ambientLight = new THREE__namespace.AmbientLight(0xffffff, 0.6);
|
|
184
|
+
component.scene.add(ambientLight);
|
|
185
|
+
skyScene = new THREE__namespace.Scene();
|
|
186
|
+
skyScene.add(new THREE__namespace.HemisphereLight(0x87CEEB, 0x444477, 1));
|
|
187
|
+
component.scene.environment = pmremGenerator.fromScene(skyScene).texture;
|
|
188
|
+
component.scene.background = new THREE__namespace.Color(0x87CEEB);
|
|
189
|
+
pmremGenerator.dispose();
|
|
190
|
+
case 5:
|
|
191
|
+
return _context3.a(2);
|
|
192
|
+
}
|
|
193
|
+
}, _callee, this);
|
|
194
|
+
}));
|
|
195
|
+
function createSkybox() {
|
|
196
|
+
return _createSkybox.apply(this, arguments);
|
|
197
|
+
}
|
|
198
|
+
return createSkybox;
|
|
199
|
+
}()
|
|
200
|
+
/**
|
|
201
|
+
* Setup scene lighting
|
|
202
|
+
*/
|
|
203
|
+
)
|
|
204
|
+
}, {
|
|
205
|
+
key: "setupLighting",
|
|
206
|
+
value: function setupLighting() {
|
|
207
|
+
var component = this.sceneViewer;
|
|
208
|
+
|
|
209
|
+
// Remove existing lights
|
|
210
|
+
component.scene.children = component.scene.children.filter(function (child) {
|
|
211
|
+
return !(child instanceof THREE__namespace.Light);
|
|
212
|
+
});
|
|
213
|
+
|
|
214
|
+
// Sun light (main directional light)
|
|
215
|
+
var sunLight = new THREE__namespace.DirectionalLight(0xffffeb, 5);
|
|
216
|
+
sunLight.position.set(15, 30, -10);
|
|
217
|
+
sunLight.castShadow = true;
|
|
218
|
+
sunLight.shadow.camera.near = 0.1;
|
|
219
|
+
sunLight.shadow.camera.far = 100;
|
|
220
|
+
sunLight.shadow.camera.left = -50;
|
|
221
|
+
sunLight.shadow.camera.right = 50;
|
|
222
|
+
sunLight.shadow.camera.top = 50;
|
|
223
|
+
sunLight.shadow.camera.bottom = -50;
|
|
224
|
+
sunLight.shadow.mapSize.width = 2048;
|
|
225
|
+
sunLight.shadow.mapSize.height = 2048;
|
|
226
|
+
component.scene.add(sunLight);
|
|
227
|
+
// component.scene.add(sunLight.target)
|
|
228
|
+
|
|
229
|
+
// // Ambient hemispheric light
|
|
230
|
+
// const ambientLight = new THREE.HemisphereLight(0xffffff, 0x444466, 0.35)
|
|
231
|
+
// component.scene.add(ambientLight)
|
|
232
|
+
|
|
233
|
+
// Fill light (secondary directional light)
|
|
234
|
+
var fillLight = new THREE__namespace.DirectionalLight(0xffffcc, 0.4);
|
|
235
|
+
fillLight.position.set(-10, 10, -10);
|
|
236
|
+
component.scene.add(fillLight);
|
|
237
|
+
|
|
238
|
+
// // Rim light (for edge definition)
|
|
239
|
+
// const rimLight = new THREE.DirectionalLight(0xffffff, 0.9)
|
|
240
|
+
// rimLight.position.set(0, 0, -20)
|
|
241
|
+
// component.scene.add(rimLight)
|
|
242
|
+
|
|
243
|
+
// // Spot light (for focused illumination)
|
|
244
|
+
// const spotLight = new THREE.SpotLight(0xffffff, 0.5)
|
|
245
|
+
// spotLight.position.set(5, 15, 5)
|
|
246
|
+
// spotLight.angle = Math.PI / 6
|
|
247
|
+
// spotLight.penumbra = 0.3
|
|
248
|
+
// spotLight.decay = 1.5
|
|
249
|
+
// spotLight.distance = 50
|
|
250
|
+
// spotLight.castShadow = true
|
|
251
|
+
// spotLight.shadow.bias = -0.0003
|
|
252
|
+
// spotLight.shadow.mapSize.width = 2048
|
|
253
|
+
// spotLight.shadow.mapSize.height = 2048
|
|
254
|
+
// component.scene.add(spotLight)
|
|
255
|
+
|
|
256
|
+
debugLogger.logger.info('Scene lighting setup completed');
|
|
257
|
+
}
|
|
258
|
+
|
|
259
|
+
/**
|
|
260
|
+
* Add textured ground plane
|
|
261
|
+
*/
|
|
262
|
+
}, {
|
|
263
|
+
key: "addTexturedGround",
|
|
264
|
+
value: (function () {
|
|
265
|
+
var _addTexturedGround = _rollupPluginBabelHelpers.asyncToGenerator(/*#__PURE__*/_rollupPluginBabelHelpers.regenerator().m(function _callee2() {
|
|
266
|
+
var component, groundSize, groundGeometry, groundMaterial, ground, texturedMaterial, _t3;
|
|
267
|
+
return _rollupPluginBabelHelpers.regenerator().w(function (_context4) {
|
|
268
|
+
while (1) switch (_context4.n) {
|
|
269
|
+
case 0:
|
|
270
|
+
component = this.sceneViewer;
|
|
271
|
+
debugLogger.logger.debug('Starting addTexturedGround...');
|
|
272
|
+
groundSize = 30;
|
|
273
|
+
groundGeometry = new THREE__namespace.PlaneGeometry(groundSize, groundSize);
|
|
274
|
+
groundMaterial = new THREE__namespace.MeshStandardMaterial({
|
|
275
|
+
color: 0x777777,
|
|
276
|
+
metalness: 0.2,
|
|
277
|
+
roughness: 0.9
|
|
278
|
+
});
|
|
279
|
+
ground = new THREE__namespace.Mesh(groundGeometry, groundMaterial);
|
|
280
|
+
ground.rotation.x = -Math.PI / 2;
|
|
281
|
+
ground.position.y = 0;
|
|
282
|
+
ground.receiveShadow = true;
|
|
283
|
+
ground.name = 'Ground';
|
|
284
|
+
ground.userData.isBaseGround = true;
|
|
285
|
+
component.scene.add(ground);
|
|
286
|
+
_context4.p = 1;
|
|
287
|
+
debugLogger.logger.debug('Loading concrete texture set...');
|
|
288
|
+
_context4.n = 2;
|
|
289
|
+
return textureConfig.loadTextureSetAndCreateMaterial('gravel_embedded_concrete', component.textureLoader);
|
|
290
|
+
case 2:
|
|
291
|
+
texturedMaterial = _context4.v;
|
|
292
|
+
ground.material = texturedMaterial;
|
|
293
|
+
ground.material.needsUpdate = true;
|
|
294
|
+
debugLogger.logger.success('Ground material updated with textures');
|
|
295
|
+
_context4.n = 4;
|
|
296
|
+
break;
|
|
297
|
+
case 3:
|
|
298
|
+
_context4.p = 3;
|
|
299
|
+
_t3 = _context4.v;
|
|
300
|
+
debugLogger.logger.warn('Error loading ground textures:', _t3);
|
|
301
|
+
case 4:
|
|
302
|
+
return _context4.a(2);
|
|
303
|
+
}
|
|
304
|
+
}, _callee2, this, [[1, 3]]);
|
|
305
|
+
}));
|
|
306
|
+
function addTexturedGround() {
|
|
307
|
+
return _addTexturedGround.apply(this, arguments);
|
|
308
|
+
}
|
|
309
|
+
return addTexturedGround;
|
|
310
|
+
}()
|
|
311
|
+
/**
|
|
312
|
+
* Add brick walls around the scene
|
|
313
|
+
*/
|
|
314
|
+
)
|
|
315
|
+
}, {
|
|
316
|
+
key: "addBrickWalls",
|
|
317
|
+
value: (function () {
|
|
318
|
+
var _addBrickWalls = _rollupPluginBabelHelpers.asyncToGenerator(/*#__PURE__*/_rollupPluginBabelHelpers.regenerator().m(function _callee3() {
|
|
319
|
+
var component, wallHeight, wallThickness, groundSize, halfGroundSize, brickMaterial, createWalls, texturedBrickMaterial, _t4;
|
|
320
|
+
return _rollupPluginBabelHelpers.regenerator().w(function (_context5) {
|
|
321
|
+
while (1) switch (_context5.n) {
|
|
322
|
+
case 0:
|
|
323
|
+
component = this.sceneViewer;
|
|
324
|
+
debugLogger.logger.debug('Starting addBrickWalls...');
|
|
325
|
+
wallHeight = 2.5;
|
|
326
|
+
wallThickness = 0.5;
|
|
327
|
+
groundSize = 30;
|
|
328
|
+
halfGroundSize = groundSize / 2;
|
|
329
|
+
brickMaterial = new THREE__namespace.MeshPhysicalMaterial({
|
|
330
|
+
color: 0x776362,
|
|
331
|
+
roughness: 0.9,
|
|
332
|
+
metalness: 0.1,
|
|
333
|
+
clearcoat: 0.05,
|
|
334
|
+
clearcoatRoughness: 0.4
|
|
335
|
+
});
|
|
336
|
+
createWalls = function createWalls(material) {
|
|
337
|
+
var createWall = function createWall(width, height, depth, x, y, z) {
|
|
338
|
+
var rotation = arguments.length > 6 && arguments[6] !== undefined ? arguments[6] : 0;
|
|
339
|
+
var textureScaleY = arguments.length > 7 && arguments[7] !== undefined ? arguments[7] : 1;
|
|
340
|
+
var geometry = new THREE__namespace.BoxGeometry(width, height, depth);
|
|
341
|
+
if (textureScaleY !== 1) {
|
|
342
|
+
var uvAttribute = geometry.attributes.uv;
|
|
343
|
+
var uvArray = uvAttribute.array;
|
|
344
|
+
for (var i = 0; i < uvArray.length; i += 2) {
|
|
345
|
+
uvArray[i + 1] *= textureScaleY;
|
|
346
|
+
}
|
|
347
|
+
uvAttribute.needsUpdate = true;
|
|
348
|
+
}
|
|
349
|
+
var wall = new THREE__namespace.Mesh(geometry, material);
|
|
350
|
+
wall.position.set(x, y - 0.56, z);
|
|
351
|
+
if (rotation !== 0) {
|
|
352
|
+
wall.rotateY(rotation);
|
|
353
|
+
}
|
|
354
|
+
wall.userData.isBrickWall = true;
|
|
355
|
+
wall.castShadow = true;
|
|
356
|
+
wall.receiveShadow = true;
|
|
357
|
+
wall.name = "Wall";
|
|
358
|
+
component.scene.add(wall);
|
|
359
|
+
return wall;
|
|
360
|
+
};
|
|
361
|
+
|
|
362
|
+
// Create walls with optimized direct values
|
|
363
|
+
createWall(groundSize, wallHeight, wallThickness, 0, wallHeight / 2, halfGroundSize - wallThickness / 2, 0, 1.0);
|
|
364
|
+
createWall(groundSize, wallHeight, wallThickness, 0, wallHeight / 2, -halfGroundSize + wallThickness / 2, 0, 1.0);
|
|
365
|
+
createWall(wallThickness, wallHeight + 6.0, groundSize - wallThickness * 2, halfGroundSize - wallThickness / 2, (wallHeight + 6.0) / 2, 0, 0, (wallHeight + 6.0) / wallHeight);
|
|
366
|
+
createWall(wallThickness, wallHeight, groundSize - wallThickness * 2, -halfGroundSize + wallThickness / 2, wallHeight / 2, 0, 0, 1.0);
|
|
367
|
+
};
|
|
368
|
+
createWalls(brickMaterial);
|
|
369
|
+
debugLogger.logger.debug('Basic brick walls created');
|
|
370
|
+
_context5.p = 1;
|
|
371
|
+
debugLogger.logger.debug('Loading brick texture set...');
|
|
372
|
+
_context5.n = 2;
|
|
373
|
+
return textureConfig.loadTextureSetAndCreateMaterial('brick', component.textureLoader);
|
|
374
|
+
case 2:
|
|
375
|
+
texturedBrickMaterial = _context5.v;
|
|
376
|
+
component.scene.traverse(function (object) {
|
|
377
|
+
if (object.isMesh && object.userData.isBrickWall) {
|
|
378
|
+
object.material = texturedBrickMaterial;
|
|
379
|
+
object.material.needsUpdate = true;
|
|
380
|
+
}
|
|
381
|
+
});
|
|
382
|
+
debugLogger.logger.success('Brick walls updated with textures');
|
|
383
|
+
_context5.n = 4;
|
|
384
|
+
break;
|
|
385
|
+
case 3:
|
|
386
|
+
_context5.p = 3;
|
|
387
|
+
_t4 = _context5.v;
|
|
388
|
+
debugLogger.logger.warn('Error loading brick textures:', _t4);
|
|
389
|
+
case 4:
|
|
390
|
+
return _context5.a(2);
|
|
391
|
+
}
|
|
392
|
+
}, _callee3, this, [[1, 3]]);
|
|
393
|
+
}));
|
|
394
|
+
function addBrickWalls() {
|
|
395
|
+
return _addBrickWalls.apply(this, arguments);
|
|
396
|
+
}
|
|
397
|
+
return addBrickWalls;
|
|
398
|
+
}()
|
|
399
|
+
/**
|
|
400
|
+
* Add horizon fog effect
|
|
401
|
+
*/
|
|
402
|
+
)
|
|
403
|
+
}, {
|
|
404
|
+
key: "addHorizonFog",
|
|
405
|
+
value: function addHorizonFog() {
|
|
406
|
+
var component = this.sceneViewer;
|
|
407
|
+
var groundSize = 30;
|
|
408
|
+
var fogSize = groundSize * 10;
|
|
409
|
+
var fogMaterial = new THREE__namespace.ShaderMaterial({
|
|
410
|
+
transparent: true,
|
|
411
|
+
uniforms: {
|
|
412
|
+
fogColor: {
|
|
413
|
+
value: new THREE__namespace.Color(0x546E7A)
|
|
414
|
+
},
|
|
415
|
+
fogDensity: {
|
|
416
|
+
value: 1
|
|
417
|
+
}
|
|
418
|
+
},
|
|
419
|
+
vertexShader: "\n varying vec2 vUv;\n void main() {\n vUv = uv;\n gl_Position = projectionMatrix * modelViewMatrix * vec4(position, 1.0);\n }\n ",
|
|
420
|
+
fragmentShader: "\n uniform vec3 fogColor;\n uniform float fogDensity;\n varying vec2 vUv;\n \n void main() {\n vec2 center = vec2(0.5, 0.5);\n float dist = distance(vUv, center);\n float opacity = (1.0 - smoothstep(0.0, 0.5, dist)) * fogDensity;\n gl_FragColor = vec4(fogColor, opacity);\n }\n ",
|
|
421
|
+
side: THREE__namespace.DoubleSide
|
|
422
|
+
});
|
|
423
|
+
var fogGeometry = new THREE__namespace.PlaneGeometry(fogSize, fogSize);
|
|
424
|
+
var fogPlane = new THREE__namespace.Mesh(fogGeometry, fogMaterial);
|
|
425
|
+
fogPlane.rotation.x = -Math.PI / 2;
|
|
426
|
+
fogPlane.position.y = -3.0;
|
|
427
|
+
fogPlane.name = "fogPlane";
|
|
428
|
+
component.scene.add(fogPlane);
|
|
429
|
+
return fogPlane;
|
|
430
|
+
}
|
|
431
|
+
|
|
432
|
+
/**
|
|
433
|
+
* Initialize complete environment
|
|
434
|
+
*/
|
|
435
|
+
}, {
|
|
436
|
+
key: "initializeEnvironment",
|
|
437
|
+
value: (function () {
|
|
438
|
+
var _initializeEnvironment = _rollupPluginBabelHelpers.asyncToGenerator(/*#__PURE__*/_rollupPluginBabelHelpers.regenerator().m(function _callee4() {
|
|
439
|
+
return _rollupPluginBabelHelpers.regenerator().w(function (_context6) {
|
|
440
|
+
while (1) switch (_context6.n) {
|
|
441
|
+
case 0:
|
|
442
|
+
_context6.n = 1;
|
|
443
|
+
return this.createSkybox();
|
|
444
|
+
case 1:
|
|
445
|
+
this.setupLighting();
|
|
446
|
+
_context6.n = 2;
|
|
447
|
+
return this.addTexturedGround();
|
|
448
|
+
case 2:
|
|
449
|
+
_context6.n = 3;
|
|
450
|
+
return this.addBrickWalls();
|
|
451
|
+
case 3:
|
|
452
|
+
this.addHorizonFog();
|
|
453
|
+
debugLogger.logger.info('Environment initialization completed');
|
|
454
|
+
case 4:
|
|
455
|
+
return _context6.a(2);
|
|
456
|
+
}
|
|
457
|
+
}, _callee4, this);
|
|
458
|
+
}));
|
|
459
|
+
function initializeEnvironment() {
|
|
460
|
+
return _initializeEnvironment.apply(this, arguments);
|
|
461
|
+
}
|
|
462
|
+
return initializeEnvironment;
|
|
463
|
+
}()
|
|
464
|
+
/**
|
|
465
|
+
* Remove the current skybox and reset to a plain background
|
|
466
|
+
*/
|
|
467
|
+
)
|
|
468
|
+
}, {
|
|
469
|
+
key: "removeSkybox",
|
|
470
|
+
value: function removeSkybox() {
|
|
471
|
+
var component = this.sceneViewer;
|
|
472
|
+
try {
|
|
473
|
+
var _component$scene$envi2, _component$scene$back2;
|
|
474
|
+
// Dispose of current environment and background textures
|
|
475
|
+
if ((_component$scene$envi2 = component.scene.environment) !== null && _component$scene$envi2 !== void 0 && _component$scene$envi2.dispose) {
|
|
476
|
+
component.scene.environment.dispose();
|
|
477
|
+
}
|
|
478
|
+
if ((_component$scene$back2 = component.scene.background) !== null && _component$scene$back2 !== void 0 && _component$scene$back2.dispose) {
|
|
479
|
+
component.scene.background.dispose();
|
|
480
|
+
}
|
|
481
|
+
|
|
482
|
+
// Set to null/plain background
|
|
483
|
+
component.scene.environment = null;
|
|
484
|
+
component.scene.background = new THREE__namespace.Color(0xffffff); // White background
|
|
485
|
+
|
|
486
|
+
debugLogger.logger.info('Skybox removed successfully');
|
|
487
|
+
return true;
|
|
488
|
+
} catch (error) {
|
|
489
|
+
console.error('❌ Error removing skybox:', error);
|
|
490
|
+
return false;
|
|
491
|
+
}
|
|
492
|
+
}
|
|
493
|
+
|
|
494
|
+
/**
|
|
495
|
+
* Set the skybox type dynamically
|
|
496
|
+
* @param {string} skyboxType - 'HDR', 'Fallback', or 'Color'
|
|
497
|
+
*/
|
|
498
|
+
}, {
|
|
499
|
+
key: "setSkyboxType",
|
|
500
|
+
value: (function () {
|
|
501
|
+
var _setSkyboxType = _rollupPluginBabelHelpers.asyncToGenerator(/*#__PURE__*/_rollupPluginBabelHelpers.regenerator().m(function _callee5(skyboxType) {
|
|
502
|
+
var component, _component$scene$envi3, _component$scene$back3, _pmremGenerator, _t5, _t6;
|
|
503
|
+
return _rollupPluginBabelHelpers.regenerator().w(function (_context7) {
|
|
504
|
+
while (1) switch (_context7.n) {
|
|
505
|
+
case 0:
|
|
506
|
+
component = this.sceneViewer;
|
|
507
|
+
_context7.p = 1;
|
|
508
|
+
console.log("\uD83C\uDF0C Changing skybox type to: ".concat(skyboxType));
|
|
509
|
+
|
|
510
|
+
// Dispose of current environment textures
|
|
511
|
+
if ((_component$scene$envi3 = component.scene.environment) !== null && _component$scene$envi3 !== void 0 && _component$scene$envi3.dispose) {
|
|
512
|
+
component.scene.environment.dispose();
|
|
513
|
+
}
|
|
514
|
+
if ((_component$scene$back3 = component.scene.background) !== null && _component$scene$back3 !== void 0 && _component$scene$back3.dispose) {
|
|
515
|
+
component.scene.background.dispose();
|
|
516
|
+
}
|
|
517
|
+
_pmremGenerator = new THREE__namespace.PMREMGenerator(component.renderer);
|
|
518
|
+
_pmremGenerator.compileEquirectangularShader();
|
|
519
|
+
_t5 = skyboxType;
|
|
520
|
+
_context7.n = _t5 === 'HDR' ? 2 : _t5 === 'Fallback' ? 4 : _t5 === 'Color' ? 6 : 7;
|
|
521
|
+
break;
|
|
522
|
+
case 2:
|
|
523
|
+
_context7.n = 3;
|
|
524
|
+
return this.loadHDRSkybox(_pmremGenerator);
|
|
525
|
+
case 3:
|
|
526
|
+
return _context7.a(3, 8);
|
|
527
|
+
case 4:
|
|
528
|
+
_context7.n = 5;
|
|
529
|
+
return this.loadFallbackSkybox(_pmremGenerator);
|
|
530
|
+
case 5:
|
|
531
|
+
return _context7.a(3, 8);
|
|
532
|
+
case 6:
|
|
533
|
+
this.setColorBackground();
|
|
534
|
+
return _context7.a(3, 8);
|
|
535
|
+
case 7:
|
|
536
|
+
console.warn("Unknown skybox type: ".concat(skyboxType, ", falling back to HDR"));
|
|
537
|
+
_context7.n = 8;
|
|
538
|
+
return this.loadHDRSkybox(_pmremGenerator);
|
|
539
|
+
case 8:
|
|
540
|
+
_pmremGenerator.dispose();
|
|
541
|
+
debugLogger.logger.info("Skybox type changed to: ".concat(skyboxType));
|
|
542
|
+
return _context7.a(2, true);
|
|
543
|
+
case 9:
|
|
544
|
+
_context7.p = 9;
|
|
545
|
+
_t6 = _context7.v;
|
|
546
|
+
console.error('❌ Error setting skybox type:', _t6);
|
|
547
|
+
return _context7.a(2, false);
|
|
548
|
+
}
|
|
549
|
+
}, _callee5, this, [[1, 9]]);
|
|
550
|
+
}));
|
|
551
|
+
function setSkyboxType(_x) {
|
|
552
|
+
return _setSkyboxType.apply(this, arguments);
|
|
553
|
+
}
|
|
554
|
+
return setSkyboxType;
|
|
555
|
+
}()
|
|
556
|
+
/**
|
|
557
|
+
* Load HDR skybox specifically
|
|
558
|
+
*/
|
|
559
|
+
)
|
|
560
|
+
}, {
|
|
561
|
+
key: "loadHDRSkybox",
|
|
562
|
+
value: (function () {
|
|
563
|
+
var _loadHDRSkybox = _rollupPluginBabelHelpers.asyncToGenerator(/*#__PURE__*/_rollupPluginBabelHelpers.regenerator().m(function _callee6(pmremGenerator) {
|
|
564
|
+
var component, rgbeLoader, hdrPaths, _loop3, _ret3, _i2, _hdrPaths;
|
|
565
|
+
return _rollupPluginBabelHelpers.regenerator().w(function (_context9) {
|
|
566
|
+
while (1) switch (_context9.n) {
|
|
567
|
+
case 0:
|
|
568
|
+
component = this.sceneViewer;
|
|
569
|
+
rgbeLoader = new RGBELoader.RGBELoader();
|
|
570
|
+
hdrPaths = ['/skyboxes/kloofendal_48d_partly_cloudy_puresky_2k.hdr', '/skyboxes/kloofendal_48d_partly_cloudy_puresky_1k.hdr'];
|
|
571
|
+
_loop3 = /*#__PURE__*/_rollupPluginBabelHelpers.regenerator().m(function _loop3() {
|
|
572
|
+
var path, texture, processedEnvMap, _t7;
|
|
573
|
+
return _rollupPluginBabelHelpers.regenerator().w(function (_context8) {
|
|
574
|
+
while (1) switch (_context8.n) {
|
|
575
|
+
case 0:
|
|
576
|
+
path = _hdrPaths[_i2];
|
|
577
|
+
_context8.p = 1;
|
|
578
|
+
console.log("\uD83D\uDD04 Loading HDR: ".concat(path));
|
|
579
|
+
_context8.n = 2;
|
|
580
|
+
return new Promise(function (resolve, reject) {
|
|
581
|
+
var timeout = setTimeout(function () {
|
|
582
|
+
return reject(new Error('Timeout'));
|
|
583
|
+
}, 10000);
|
|
584
|
+
rgbeLoader.load(path, function (tex) {
|
|
585
|
+
clearTimeout(timeout);
|
|
586
|
+
resolve(tex);
|
|
587
|
+
}, undefined, function (err) {
|
|
588
|
+
clearTimeout(timeout);
|
|
589
|
+
reject(err);
|
|
590
|
+
});
|
|
591
|
+
});
|
|
592
|
+
case 2:
|
|
593
|
+
texture = _context8.v;
|
|
594
|
+
texture.mapping = THREE__namespace.EquirectangularReflectionMapping;
|
|
595
|
+
processedEnvMap = pmremGenerator.fromEquirectangular(texture).texture;
|
|
596
|
+
component.scene.environment = processedEnvMap;
|
|
597
|
+
component.scene.background = processedEnvMap;
|
|
598
|
+
texture.dispose();
|
|
599
|
+
console.log('✅ HDR skybox loaded successfully');
|
|
600
|
+
return _context8.a(2, {
|
|
601
|
+
v: void 0
|
|
602
|
+
});
|
|
603
|
+
case 3:
|
|
604
|
+
_context8.p = 3;
|
|
605
|
+
_t7 = _context8.v;
|
|
606
|
+
console.warn("\u26A0\uFE0F Failed to load HDR skybox ".concat(path, ":"), _t7.message);
|
|
607
|
+
case 4:
|
|
608
|
+
return _context8.a(2);
|
|
609
|
+
}
|
|
610
|
+
}, _loop3, null, [[1, 3]]);
|
|
611
|
+
});
|
|
612
|
+
_i2 = 0, _hdrPaths = hdrPaths;
|
|
613
|
+
case 1:
|
|
614
|
+
if (!(_i2 < _hdrPaths.length)) {
|
|
615
|
+
_context9.n = 4;
|
|
616
|
+
break;
|
|
617
|
+
}
|
|
618
|
+
return _context9.d(_rollupPluginBabelHelpers.regeneratorValues(_loop3()), 2);
|
|
619
|
+
case 2:
|
|
620
|
+
_ret3 = _context9.v;
|
|
621
|
+
if (!_ret3) {
|
|
622
|
+
_context9.n = 3;
|
|
623
|
+
break;
|
|
624
|
+
}
|
|
625
|
+
return _context9.a(2, _ret3.v);
|
|
626
|
+
case 3:
|
|
627
|
+
_i2++;
|
|
628
|
+
_context9.n = 1;
|
|
629
|
+
break;
|
|
630
|
+
case 4:
|
|
631
|
+
throw new Error('Failed to load any HDR skybox');
|
|
632
|
+
case 5:
|
|
633
|
+
return _context9.a(2);
|
|
634
|
+
}
|
|
635
|
+
}, _callee6, this);
|
|
636
|
+
}));
|
|
637
|
+
function loadHDRSkybox(_x2) {
|
|
638
|
+
return _loadHDRSkybox.apply(this, arguments);
|
|
639
|
+
}
|
|
640
|
+
return loadHDRSkybox;
|
|
641
|
+
}()
|
|
642
|
+
/**
|
|
643
|
+
* Load fallback JPEG skybox
|
|
644
|
+
*/
|
|
645
|
+
)
|
|
646
|
+
}, {
|
|
647
|
+
key: "loadFallbackSkybox",
|
|
648
|
+
value: (function () {
|
|
649
|
+
var _loadFallbackSkybox = _rollupPluginBabelHelpers.asyncToGenerator(/*#__PURE__*/_rollupPluginBabelHelpers.regenerator().m(function _callee7(pmremGenerator) {
|
|
650
|
+
var component, texture, processedEnvMap, _t8;
|
|
651
|
+
return _rollupPluginBabelHelpers.regenerator().w(function (_context0) {
|
|
652
|
+
while (1) switch (_context0.n) {
|
|
653
|
+
case 0:
|
|
654
|
+
component = this.sceneViewer;
|
|
655
|
+
_context0.p = 1;
|
|
656
|
+
console.log('🔄 Loading fallback skybox');
|
|
657
|
+
_context0.n = 2;
|
|
658
|
+
return new Promise(function (resolve, reject) {
|
|
659
|
+
var timeout = setTimeout(function () {
|
|
660
|
+
return reject(new Error('Timeout'));
|
|
661
|
+
}, 10000);
|
|
662
|
+
component.textureLoader.load('/skyboxes/sky_fallback.jpg', function (tex) {
|
|
663
|
+
clearTimeout(timeout);
|
|
664
|
+
resolve(tex);
|
|
665
|
+
}, undefined, function (err) {
|
|
666
|
+
clearTimeout(timeout);
|
|
667
|
+
reject(err);
|
|
668
|
+
});
|
|
669
|
+
});
|
|
670
|
+
case 2:
|
|
671
|
+
texture = _context0.v;
|
|
672
|
+
texture.mapping = THREE__namespace.EquirectangularReflectionMapping;
|
|
673
|
+
processedEnvMap = pmremGenerator.fromEquirectangular(texture).texture;
|
|
674
|
+
component.scene.environment = processedEnvMap;
|
|
675
|
+
component.scene.background = processedEnvMap;
|
|
676
|
+
texture.dispose();
|
|
677
|
+
console.log('✅ Fallback skybox loaded successfully');
|
|
678
|
+
_context0.n = 4;
|
|
679
|
+
break;
|
|
680
|
+
case 3:
|
|
681
|
+
_context0.p = 3;
|
|
682
|
+
_t8 = _context0.v;
|
|
683
|
+
console.warn('⚠️ Failed to load fallback skybox:', _t8.message);
|
|
684
|
+
throw _t8;
|
|
685
|
+
case 4:
|
|
686
|
+
return _context0.a(2);
|
|
687
|
+
}
|
|
688
|
+
}, _callee7, this, [[1, 3]]);
|
|
689
|
+
}));
|
|
690
|
+
function loadFallbackSkybox(_x3) {
|
|
691
|
+
return _loadFallbackSkybox.apply(this, arguments);
|
|
692
|
+
}
|
|
693
|
+
return loadFallbackSkybox;
|
|
694
|
+
}()
|
|
695
|
+
/**
|
|
696
|
+
* Set solid color background
|
|
697
|
+
*/
|
|
698
|
+
)
|
|
699
|
+
}, {
|
|
700
|
+
key: "setColorBackground",
|
|
701
|
+
value: function setColorBackground() {
|
|
702
|
+
var component = this.sceneViewer;
|
|
703
|
+
component.scene.environment = null;
|
|
704
|
+
component.scene.background = new THREE__namespace.Color(0xffffff); // White background
|
|
705
|
+
|
|
706
|
+
// Add basic ambient lighting since we don't have environment lighting
|
|
707
|
+
var ambientLight = new THREE__namespace.AmbientLight(0xffffff, 0.6);
|
|
708
|
+
component.scene.add(ambientLight);
|
|
709
|
+
console.log('✅ Color background set successfully');
|
|
710
|
+
}
|
|
711
|
+
}]);
|
|
712
|
+
}();
|
|
713
|
+
|
|
714
|
+
exports.EnvironmentManager = EnvironmentManager;
|