@roomle/web-sdk 2.62.0-alpha.2 → 2.62.0-alpha.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (194) hide show
  1. package/lib/{banana-for-scale-cec4f902.js → banana-for-scale-c4a33098.js} +2 -2
  2. package/lib/{banana-for-scale-cec4f902.js.map → banana-for-scale-c4a33098.js.map} +1 -1
  3. package/lib/{banana-for-scale-4bf07a71.nomodule.js → banana-for-scale-d2707d3a.nomodule.js} +2 -2
  4. package/lib/{banana-for-scale-4bf07a71.nomodule.js.map → banana-for-scale-d2707d3a.nomodule.js.map} +1 -1
  5. package/lib/{component-dimensioning-e4b34771.nomodule.js → component-dimensioning-1319be8f.nomodule.js} +2 -2
  6. package/lib/component-dimensioning-1319be8f.nomodule.js.map +1 -0
  7. package/lib/{component-dimensioning-8674a683.js → component-dimensioning-389dc894.js} +2 -2
  8. package/lib/component-dimensioning-389dc894.js.map +1 -0
  9. package/lib/{component-raycast-helper-fe026df5.nomodule.js → component-raycast-helper-4a0456c1.nomodule.js} +2 -2
  10. package/lib/component-raycast-helper-4a0456c1.nomodule.js.map +1 -0
  11. package/lib/{component-raycast-helper-e3e94ea2.js → component-raycast-helper-e2956b00.js} +2 -2
  12. package/lib/component-raycast-helper-e2956b00.js.map +1 -0
  13. package/lib/{configurator-27956d1a.js → configurator-a432160a.js} +2 -2
  14. package/lib/configurator-a432160a.js.map +1 -0
  15. package/lib/{configurator-2c001801.nomodule.js → configurator-f6c18b4f.nomodule.js} +2 -2
  16. package/lib/configurator-f6c18b4f.nomodule.js.map +1 -0
  17. package/lib/configurator-main-7d317938.js +2 -0
  18. package/lib/configurator-main-7d317938.js.map +1 -0
  19. package/lib/configurator-main.nomodule.js +1 -1
  20. package/lib/{continuous-drawing-helper-f7df831f.nomodule.js → continuous-drawing-helper-07739909.nomodule.js} +2 -2
  21. package/lib/continuous-drawing-helper-07739909.nomodule.js.map +1 -0
  22. package/lib/{continuous-drawing-helper-999d2225.js → continuous-drawing-helper-2dc3cb40.js} +2 -2
  23. package/lib/continuous-drawing-helper-2dc3cb40.js.map +1 -0
  24. package/lib/{default-light-setting-673c155a.js → default-light-setting-0e777c93.js} +2 -2
  25. package/lib/default-light-setting-0e777c93.js.map +1 -0
  26. package/lib/{default-light-setting-d87cf148.nomodule.js → default-light-setting-e6f7b96c.nomodule.js} +2 -2
  27. package/lib/default-light-setting-e6f7b96c.nomodule.js.map +1 -0
  28. package/lib/definitions/common-core/src/utils/init-data.d.ts +1 -0
  29. package/lib/definitions/common-core/src/utils/shims.d.ts +4 -0
  30. package/lib/definitions/common-core/src/webgl/image-renderer.d.ts +1 -1
  31. package/lib/definitions/common-core/src/webgl/renderer/baked-ground-contact-shadow.d.ts +1 -0
  32. package/lib/definitions/common-core/src/webgl/renderer/shadow-and-ao-pass.d.ts +3 -0
  33. package/lib/definitions/configurator-core/src/webgl/configurator-scene-event-handler.d.ts +2 -0
  34. package/lib/definitions/configurator-core/src/webgl/configurator-scene-manager.d.ts +1 -0
  35. package/lib/definitions/planner-core/mock/planner-mock-helper.d.ts +1 -0
  36. package/lib/definitions/planner-core/src/webgl/planner-scene-event-handler.d.ts +3 -0
  37. package/lib/{dimensioning-helper-dba00fd2.js → dimensioning-helper-9b64c1d3.js} +2 -2
  38. package/lib/{dimensioning-helper-dba00fd2.js.map → dimensioning-helper-9b64c1d3.js.map} +1 -1
  39. package/lib/{dimensioning-helper-264136b7.nomodule.js → dimensioning-helper-fe23dfaf.nomodule.js} +2 -2
  40. package/lib/{dimensioning-helper-264136b7.nomodule.js.map → dimensioning-helper-fe23dfaf.nomodule.js.map} +1 -1
  41. package/lib/{glb-viewer-a541ed1d.js → glb-viewer-9a11a5b0.js} +2 -2
  42. package/lib/{glb-viewer-a541ed1d.js.map → glb-viewer-9a11a5b0.js.map} +1 -1
  43. package/lib/{glb-viewer-2805d936.nomodule.js → glb-viewer-cec299f7.nomodule.js} +2 -2
  44. package/lib/{glb-viewer-2805d936.nomodule.js.map → glb-viewer-cec299f7.nomodule.js.map} +1 -1
  45. package/lib/glb-viewer-main-235aab0c.js +2 -0
  46. package/lib/glb-viewer-main-235aab0c.js.map +1 -0
  47. package/lib/glb-viewer-main.nomodule.js +1 -1
  48. package/lib/legacy/{banana-for-scale-a412d37f.legacy.js → banana-for-scale-88d8581a.legacy.js} +2 -2
  49. package/lib/legacy/{banana-for-scale-a412d37f.legacy.js.map → banana-for-scale-88d8581a.legacy.js.map} +1 -1
  50. package/lib/legacy/{component-dimensioning-6e9cd138.legacy.js → component-dimensioning-a79959a0.legacy.js} +2 -2
  51. package/lib/legacy/component-dimensioning-a79959a0.legacy.js.map +1 -0
  52. package/lib/legacy/{component-raycast-helper-df155872.legacy.js → component-raycast-helper-26dd569c.legacy.js} +2 -2
  53. package/lib/legacy/component-raycast-helper-26dd569c.legacy.js.map +1 -0
  54. package/lib/legacy/{configurator-54d980f3.legacy.js → configurator-ae13408f.legacy.js} +2 -2
  55. package/lib/legacy/configurator-ae13408f.legacy.js.map +1 -0
  56. package/lib/legacy/configurator-main.legacy.js +1 -1
  57. package/lib/legacy/{continuous-drawing-helper-4cd81ec1.legacy.js → continuous-drawing-helper-c7da1629.legacy.js} +2 -2
  58. package/lib/legacy/continuous-drawing-helper-c7da1629.legacy.js.map +1 -0
  59. package/lib/legacy/{default-light-setting-ce102bf5.legacy.js → default-light-setting-6d0f5156.legacy.js} +2 -2
  60. package/lib/legacy/default-light-setting-6d0f5156.legacy.js.map +1 -0
  61. package/lib/legacy/{dimensioning-helper-fb0065ad.legacy.js → dimensioning-helper-de3fe813.legacy.js} +2 -2
  62. package/lib/legacy/{dimensioning-helper-fb0065ad.legacy.js.map → dimensioning-helper-de3fe813.legacy.js.map} +1 -1
  63. package/lib/legacy/{glb-viewer-c56bc94a.legacy.js → glb-viewer-5f648a61.legacy.js} +2 -2
  64. package/lib/legacy/{glb-viewer-c56bc94a.legacy.js.map → glb-viewer-5f648a61.legacy.js.map} +1 -1
  65. package/lib/legacy/glb-viewer-main.legacy.js +1 -1
  66. package/lib/legacy/{material-viewer-0ca8b3db.legacy.js → material-viewer-15308efe.legacy.js} +2 -2
  67. package/lib/legacy/material-viewer-15308efe.legacy.js.map +1 -0
  68. package/lib/legacy/material-viewer-main.legacy.js +1 -1
  69. package/lib/legacy/planner-fcae1334.legacy.js +2 -0
  70. package/lib/legacy/{planner-13bbc5a3.legacy.js.map → planner-fcae1334.legacy.js.map} +1 -1
  71. package/lib/legacy/planner-main.legacy.js +1 -1
  72. package/lib/legacy/roomle-configurator-788f21c9.legacy.js +2 -0
  73. package/lib/legacy/roomle-configurator-788f21c9.legacy.js.map +1 -0
  74. package/lib/legacy/roomle-dependency-injection-5ba725ab.legacy.js +9 -0
  75. package/lib/legacy/{roomle-dependency-injection-dc0483ff.legacy.js.map → roomle-dependency-injection-5ba725ab.legacy.js.map} +1 -1
  76. package/lib/legacy/roomle-sdk.legacy.js +1 -1
  77. package/lib/legacy/{scene-manager-596431cf.legacy.js → scene-manager-867bbd63.legacy.js} +2 -2
  78. package/lib/legacy/{scene-manager-596431cf.legacy.js.map → scene-manager-867bbd63.legacy.js.map} +1 -1
  79. package/lib/legacy/{script-loader-01e1b6ac.legacy.js → script-loader-1137a1f3.legacy.js} +2 -2
  80. package/lib/legacy/script-loader-1137a1f3.legacy.js.map +1 -0
  81. package/lib/legacy/static/{ConfiguratorKernel-3c438fd9aaa1fdb0.wasm → ConfiguratorKernel-9457a9c787a94211.wasm} +0 -0
  82. package/lib/legacy/static/{ConfiguratorKernel-4cb77e9684405367.wasm → ConfiguratorKernel-9a599eeb4293df18.wasm} +0 -0
  83. package/lib/legacy/static/{ConfiguratorKernelJs-025e23263a602803.mem → ConfiguratorKernelJs-27242c64dc21b819.mem} +0 -0
  84. package/lib/legacy/static/{ConfiguratorKernelJs-c77efebe49773832.js → ConfiguratorKernelJs-9abaf09525b8e7fb.js} +24 -24
  85. package/lib/{static/RoomleCore-a89be3bfc4f7fab9.wasm → legacy/static/RoomleCore-02c32bc54042f811.wasm} +0 -0
  86. package/lib/legacy/static/{RoomleCore-a27af56d0e172446.wasm → RoomleCore-0fd00939f2ec4d85.wasm} +0 -0
  87. package/lib/legacy/static/{RoomleCoreJs-243c4c103728cbb3.js → RoomleCoreJs-0bfad314ad4cc1a1.js} +8164 -8163
  88. package/lib/legacy/static/{RoomleCoreJs-65d3f0c1baaee528.mem → RoomleCoreJs-7305a65c8029e4fe.mem} +0 -0
  89. package/lib/legacy/static/{RoomleToolsCore-41ae722eee0f64be.wasm → RoomleToolsCore-e1d07cb2981103bc.wasm} +0 -0
  90. package/lib/legacy/static/{RoomleToolsCore-da152887ffb1a789.wasm → RoomleToolsCore-ee930f1b940807bb.wasm} +0 -0
  91. package/lib/legacy/{stats-helper-f7d5d715.legacy.js → stats-helper-c7d64341.legacy.js} +2 -2
  92. package/lib/legacy/stats-helper-c7d64341.legacy.js.map +1 -0
  93. package/lib/legacy/{tools-core-03a1b7ed.legacy.js → tools-core-12dafc66.legacy.js} +2 -2
  94. package/lib/legacy/tools-core-12dafc66.legacy.js.map +1 -0
  95. package/lib/{material-viewer-15e6f991.js → material-viewer-34d3e0e5.js} +2 -2
  96. package/lib/material-viewer-34d3e0e5.js.map +1 -0
  97. package/lib/{material-viewer-4863828f.nomodule.js → material-viewer-72f2d5db.nomodule.js} +2 -2
  98. package/lib/material-viewer-72f2d5db.nomodule.js.map +1 -0
  99. package/lib/material-viewer-main-98214c56.js +2 -0
  100. package/lib/material-viewer-main-98214c56.js.map +1 -0
  101. package/lib/material-viewer-main.nomodule.js +1 -1
  102. package/lib/planner-d0144c2d.js +2 -0
  103. package/lib/{planner-29dfad1f.js.map → planner-d0144c2d.js.map} +1 -1
  104. package/lib/planner-e9de8f30.nomodule.js +2 -0
  105. package/lib/{planner-b7dc6e82.nomodule.js.map → planner-e9de8f30.nomodule.js.map} +1 -1
  106. package/lib/planner-main-da9a2058.js +2 -0
  107. package/lib/planner-main-da9a2058.js.map +1 -0
  108. package/lib/planner-main.nomodule.js +1 -1
  109. package/lib/roomle-configurator-2fe2645f.nomodule.js +2 -0
  110. package/lib/roomle-configurator-2fe2645f.nomodule.js.map +1 -0
  111. package/lib/roomle-configurator-e440c1ed.js +2 -0
  112. package/lib/roomle-configurator-e440c1ed.js.map +1 -0
  113. package/lib/roomle-dependency-injection-a6b6e5b9.js +9 -0
  114. package/lib/{roomle-dependency-injection-074ecade.js.map → roomle-dependency-injection-a6b6e5b9.js.map} +1 -1
  115. package/lib/roomle-dependency-injection-e730f5db.nomodule.js +9 -0
  116. package/lib/{roomle-dependency-injection-a00c310a.nomodule.js.map → roomle-dependency-injection-e730f5db.nomodule.js.map} +1 -1
  117. package/lib/{roomle-sdk-bc295cc1.js → roomle-sdk-745bb5ed.js} +2 -2
  118. package/lib/roomle-sdk-745bb5ed.js.map +1 -0
  119. package/lib/roomle-sdk.nomodule.js +1 -1
  120. package/lib/{scene-manager-9f8f68ef.nomodule.js → scene-manager-8263aabe.nomodule.js} +2 -2
  121. package/lib/{scene-manager-9f8f68ef.nomodule.js.map → scene-manager-8263aabe.nomodule.js.map} +1 -1
  122. package/lib/{scene-manager-296a1b7b.js → scene-manager-d62ae8cb.js} +2 -2
  123. package/lib/{scene-manager-296a1b7b.js.map → scene-manager-d62ae8cb.js.map} +1 -1
  124. package/lib/{script-loader-99a1d192.js → script-loader-91c2a731.js} +2 -2
  125. package/lib/script-loader-91c2a731.js.map +1 -0
  126. package/lib/{script-loader-4b5257fa.nomodule.js → script-loader-d6f3f6fd.nomodule.js} +2 -2
  127. package/lib/script-loader-d6f3f6fd.nomodule.js.map +1 -0
  128. package/lib/static/{ConfiguratorKernel-3c438fd9aaa1fdb0.wasm → ConfiguratorKernel-9457a9c787a94211.wasm} +0 -0
  129. package/lib/static/{ConfiguratorKernel-4cb77e9684405367.wasm → ConfiguratorKernel-9a599eeb4293df18.wasm} +0 -0
  130. package/lib/static/{ConfiguratorKernelJs-025e23263a602803.mem → ConfiguratorKernelJs-27242c64dc21b819.mem} +0 -0
  131. package/lib/static/{ConfiguratorKernelJs-c77efebe49773832.js → ConfiguratorKernelJs-9abaf09525b8e7fb.js} +24 -24
  132. package/lib/{legacy/static/RoomleCore-a89be3bfc4f7fab9.wasm → static/RoomleCore-02c32bc54042f811.wasm} +0 -0
  133. package/lib/static/{RoomleCore-a27af56d0e172446.wasm → RoomleCore-0fd00939f2ec4d85.wasm} +0 -0
  134. package/lib/static/{RoomleCoreJs-243c4c103728cbb3.js → RoomleCoreJs-0bfad314ad4cc1a1.js} +8164 -8163
  135. package/lib/static/{RoomleCoreJs-65d3f0c1baaee528.mem → RoomleCoreJs-7305a65c8029e4fe.mem} +0 -0
  136. package/lib/static/{RoomleToolsCore-41ae722eee0f64be.wasm → RoomleToolsCore-e1d07cb2981103bc.wasm} +0 -0
  137. package/lib/static/{RoomleToolsCore-da152887ffb1a789.wasm → RoomleToolsCore-ee930f1b940807bb.wasm} +0 -0
  138. package/lib/{stats-helper-0e2d9322.nomodule.js → stats-helper-517ef448.nomodule.js} +2 -2
  139. package/lib/stats-helper-517ef448.nomodule.js.map +1 -0
  140. package/lib/{stats-helper-6ea0ac86.js → stats-helper-f6f1b022.js} +2 -2
  141. package/lib/stats-helper-f6f1b022.js.map +1 -0
  142. package/lib/{tools-core-d1ebdd0a.nomodule.js → tools-core-53ba3292.nomodule.js} +2 -2
  143. package/lib/tools-core-53ba3292.nomodule.js.map +1 -0
  144. package/lib/{tools-core-fc860c8e.js → tools-core-c87dbec3.js} +2 -2
  145. package/lib/tools-core-c87dbec3.js.map +1 -0
  146. package/package.json +2 -2
  147. package/lib/component-dimensioning-8674a683.js.map +0 -1
  148. package/lib/component-dimensioning-e4b34771.nomodule.js.map +0 -1
  149. package/lib/component-raycast-helper-e3e94ea2.js.map +0 -1
  150. package/lib/component-raycast-helper-fe026df5.nomodule.js.map +0 -1
  151. package/lib/configurator-27956d1a.js.map +0 -1
  152. package/lib/configurator-2c001801.nomodule.js.map +0 -1
  153. package/lib/configurator-main-562dc10c.js +0 -2
  154. package/lib/configurator-main-562dc10c.js.map +0 -1
  155. package/lib/continuous-drawing-helper-999d2225.js.map +0 -1
  156. package/lib/continuous-drawing-helper-f7df831f.nomodule.js.map +0 -1
  157. package/lib/default-light-setting-673c155a.js.map +0 -1
  158. package/lib/default-light-setting-d87cf148.nomodule.js.map +0 -1
  159. package/lib/glb-viewer-main-8d10a619.js +0 -2
  160. package/lib/glb-viewer-main-8d10a619.js.map +0 -1
  161. package/lib/legacy/component-dimensioning-6e9cd138.legacy.js.map +0 -1
  162. package/lib/legacy/component-raycast-helper-df155872.legacy.js.map +0 -1
  163. package/lib/legacy/configurator-54d980f3.legacy.js.map +0 -1
  164. package/lib/legacy/continuous-drawing-helper-4cd81ec1.legacy.js.map +0 -1
  165. package/lib/legacy/default-light-setting-ce102bf5.legacy.js.map +0 -1
  166. package/lib/legacy/material-viewer-0ca8b3db.legacy.js.map +0 -1
  167. package/lib/legacy/planner-13bbc5a3.legacy.js +0 -2
  168. package/lib/legacy/roomle-configurator-f59a7632.legacy.js +0 -2
  169. package/lib/legacy/roomle-configurator-f59a7632.legacy.js.map +0 -1
  170. package/lib/legacy/roomle-dependency-injection-dc0483ff.legacy.js +0 -9
  171. package/lib/legacy/script-loader-01e1b6ac.legacy.js.map +0 -1
  172. package/lib/legacy/stats-helper-f7d5d715.legacy.js.map +0 -1
  173. package/lib/legacy/tools-core-03a1b7ed.legacy.js.map +0 -1
  174. package/lib/material-viewer-15e6f991.js.map +0 -1
  175. package/lib/material-viewer-4863828f.nomodule.js.map +0 -1
  176. package/lib/material-viewer-main-f03d4d28.js +0 -2
  177. package/lib/material-viewer-main-f03d4d28.js.map +0 -1
  178. package/lib/planner-29dfad1f.js +0 -2
  179. package/lib/planner-b7dc6e82.nomodule.js +0 -2
  180. package/lib/planner-main-1aae4a26.js +0 -2
  181. package/lib/planner-main-1aae4a26.js.map +0 -1
  182. package/lib/roomle-configurator-a7019f32.js +0 -2
  183. package/lib/roomle-configurator-a7019f32.js.map +0 -1
  184. package/lib/roomle-configurator-bab499d9.nomodule.js +0 -2
  185. package/lib/roomle-configurator-bab499d9.nomodule.js.map +0 -1
  186. package/lib/roomle-dependency-injection-074ecade.js +0 -9
  187. package/lib/roomle-dependency-injection-a00c310a.nomodule.js +0 -9
  188. package/lib/roomle-sdk-bc295cc1.js.map +0 -1
  189. package/lib/script-loader-4b5257fa.nomodule.js.map +0 -1
  190. package/lib/script-loader-99a1d192.js.map +0 -1
  191. package/lib/stats-helper-0e2d9322.nomodule.js.map +0 -1
  192. package/lib/stats-helper-6ea0ac86.js.map +0 -1
  193. package/lib/tools-core-d1ebdd0a.nomodule.js.map +0 -1
  194. package/lib/tools-core-fc860c8e.js.map +0 -1
@@ -1,2 +1,2 @@
1
- import{_ as __decorate,i as inject,E as EventDispatcher,t as toRadiant,Q as position3VectorsAreEqual,T as position2VectorsAreEqual,U as compareBox3Size,w as getIdealDistance,y as toDegrees,V as MaterialCreator,X as createMaterial,Y as addTexture,Z as getGUI,$ as rotationQuaternionsAreEqual,a0 as getDelta,a1 as MIN_MOVE_DISTANCE,a2 as LightSourceDetector,a3 as EnvironmentMapDecodeMaterial,a4 as sanitizedCameraMode,e as CAMERA_TYPE,a5 as RoomleWebGLRenderer,a6 as standaloneConfiguratorQualityLevels,a7 as ENV_HDR_256_FILE_NAME,s as dispose,p as DynamicLightSettingLoader,x as RoomleComponentFactoryInitializer}from"./roomle-dependency-injection-074ecade.js";import{a as Vector3,by as debounce,J as PerspectiveCamera,V as Vector2,bA as areCameraParametersEqual,ab as Sphere,aa as Box3,ae as Euler,Q as Quaternion,al as deepMerge,O as Object3D,x as Mesh,bB as Shape,bC as Path,bD as ShapeGeometry,k as TextureLoader,bE as Fog,C as Color,p as RepeatWrapping,u as DoubleSide,N as OrthographicCamera,K as MathUtils,aB as handleJsonResponse,S as SpotLight,A as AmbientLight,D as DirectionalLight,R as RectAreaLight,bF as IcosahedronGeometry,aU as ShaderMaterial,b5 as PlaneGeometry,f as MeshBasicMaterial,bG as CircleGeometry,s as LineBasicMaterial,B as BufferGeometry,y as LineSegments,bH as PMREMGenerator,aT as Matrix3,a_ as NoBlending,a$ as Scene,af as CubeTexture,a6 as Texture,bI as Clock,bz as getColor,bu as WebGLRenderer,h as SRGBColorSpace,bd as PCFSoftShadowMap,bJ as download}from"./main-thread-to-worker-d5d5841d.js";var TWEEN_FILE_NAME="static/Tween-d57ee5d181fce582.js";class CameraControl extends EventDispatcher{constructor(t,e,i){if(super(),this._tweenEnd=null,this._cameraStandingStill=!0,this._pitch=toRadiant(10),this._yaw=toRadiant(-30),this._distance=-1,this._locked=!1,this._inputListeners=[],this._lerpEnabled=!0,this._creator_=t,this._inputManager=e,this._initInputListener(),this._addInputListeners(),this._cameraPosition=new Vector3,this._targetPosition=new Vector3,i?this._cameraPosition.copy(i):this._cameraPosition=new Vector3(0,.5,3),this._initData.debug){const t=this.getDebugCameraPosition();t&&this._setCurrentCameraParameters(t)}let n=this._domHelper.getClientDimensions();this._width=n.x,this._height=n.y,this._dispatchCameraIdle=debounce(this._dispatchCameraIdle.bind(this),32)}getCamera(){return this._getCamera()}_addInputListeners(){this._inputListeners.forEach(t=>{this._inputManager.addEventListener(t.key,t.fun,this)})}_removeInputListeners(){this._inputListeners.forEach(t=>{this._inputManager.removeEventListener(t.key,t.fun)}),this._inputListeners=[]}cleanUp(){this._removeInputListeners()}animateCamera(t){let e=this._cameraPosition;if(!e||position3VectorsAreEqual(e,this.getCamera().position))return this._cameraStandingStill||(this._cameraStandingStill=!0,setTimeout(()=>this._dispatchCameraIdle(),16),this._initData.debug&&this.saveDebugCameraPosition()),!1;if(this._cameraStandingStill&&this.dispatchEvent(7,3),this._cameraStandingStill=!1,this._lerpEnabled&&!this._tweenEnd){let i=this.getCamera().position.clone();const n=Math.min(10*t,1);i.lerp(e,n),this.getCamera().position.copy(i)}else this.getCamera().position.copy(e);return!0}getDebugCameraPosition(){return JSON.parse(localStorage.getItem("debug_camera_position"))}saveDebugCameraPosition(){localStorage.setItem("debug_camera_position",JSON.stringify(this.getCurrentCameraParameters()))}_dispatchCameraIdle(){this.dispatchEvent(8,3)}_tweenCameraParameter(t,e,i=!1){return new Promise(n=>{if(e.yaw-t.yaw<=-Math.PI?t.yaw-=2*Math.PI:e.yaw-t.yaw>=Math.PI&&(t.yaw+=2*Math.PI),window.TWEEN){if(null!==this._tweenEnd&&this._tweenEnd.blockOtherTweens)return;this._tweenEnd=e,new TWEEN.Tween(t).to(e,400).easing(TWEEN.Easing.Sinusoidal.In).onUpdate(()=>{this.dispatchEvent(1,3),this._yaw=t.yaw,this._pitch=t.pitch,this._distance=t.distance,this._setCameraNear(),this._update(new Vector3(t.targetX,t.targetY,t.targetZ),i)}).onComplete(()=>{this.dispatchEvent(2,3),this._dispatchCameraIdle(),this._tweenEnd=null,n()}).start(),this.dispatchEvent(0,3)}})}_setCameraNear(){const t=this.getCamera();if(t instanceof PerspectiveCamera){const e=Math.max(.1,this._distance/6);t.near=e}}getCurrentCameraParameters(){const t=this._targetPosition.clone();return{yaw:this._yaw,pitch:this._pitch,distance:this._distance,targetX:t.x,targetY:t.y,targetZ:t.z}}_setCurrentCameraParameters(t){this._yaw=t.yaw,this._pitch=t.pitch,this._distance=t.distance,this._targetPosition.copy(new Vector3(t.targetX,t.targetY,t.targetZ))}_rotateHorizontal(t){this._yaw-=t,this._yaw<-Math.PI?this._yaw+=2*Math.PI:this._yaw>Math.PI&&(this._yaw-=2*Math.PI)}_rotateVertical(t){this._pitch+=t,this._pitch<-Math.PI?this._pitch+=2*Math.PI:this._pitch>Math.PI&&(this._pitch-=2*Math.PI)}saveState(t){if(t||!this._stateSaved){let t=this._yaw,e=this._pitch,i=this._distance,n=this._targetPosition.clone();if(this._stateSaved={yaw:t,pitch:e,distance:i,targetX:n.x,targetY:n.y,targetZ:n.z,blockOtherTweens:!0},this._getCamera().fov){let t=this._getCamera();this._stateSaved.fov=t.fov,this._stateSaved.near=t.near,this._stateSaved.far=t.far}return this._stateSaved}return null}resetToState(){if(this._stateSaved){this._stateSaved.blockOtherTweens=!1;let t=this._targetPosition.clone();this._tweenCameraParameter({yaw:this._yaw,pitch:this._pitch,distance:this._distance,targetX:t.x,targetY:t.y,targetZ:t.z},this._stateSaved,!0)}this._stateSaved=null}setToState(t,e){this._tweenCameraParameter(t,e,!0)}hasSavedState(){return null!=this._stateSaved}lock(){this._locked=!0}unlock(){this._locked=!1}isLocked(){return this._locked}getTargetPosition(){return this._targetPosition}_saveYawAndPitch(){this._getCamera().userData.yaw=this._yaw,this._getCamera().userData.pitch=this._pitch}getInputPosition(t){const{x:e,y:i}=this._domHelper.getClientDimensions();return new Vector3(t.x/e*2-1,-t.y/i*2+1,.5)}addLightContainer(t){t.name="lights";const e=this._getCamera(),i=e.children.find(t=>"lights"===t.name);i&&e.remove(i),e.add(t)}checkNearFarDistance(t){if(!t)return;const e=this._cameraPosition.distanceTo(t),i=this._getCamera();i instanceof PerspectiveCamera&&e>i.far&&(i.far=e+1)}setBounds(t){this._boundingBox=t}}__decorate([inject],CameraControl.prototype,"_domHelper",void 0),__decorate([inject],CameraControl.prototype,"_initData",void 0);class ZoomChangeEvent{constructor(t,e){this.minZoom=!1,this.maxZoom=!1,this.minZoom=t,this.maxZoom=e}}const DISTANCE_FACTOR=2.725;class CameraControl3D extends CameraControl{constructor(t,e,i,n){super(t,e,i),this._bounds=new Vector3,this._scale=1,this._state=0,this._zoomSpeed=Math.pow(.95,3),this.minDistance=0,this.maxDistance=5,this.minPolarAngle=toRadiant(0),this.maxPolarAngle=toRadiant(85),this._objectRotation=0,this.minAzimuthAngle=Number.NEGATIVE_INFINITY,this.maxAzimuthAngle=Number.POSITIVE_INFINITY,this._zoomDistance=.1,this._userInteraction=!1,this._currentZoomHash="",this._maxZoomedIn=!1,this._maxZoomedOut=!1,this._panningEnabled=!1,this._targetPositionIsPanned=!1,n?this._camera=n:this._initCamera(),this._targetPosition||(this._targetPosition=new Vector3(0,0,0),this._targetPositionIsPanned=!1);const{cameraRestriction:s,zoomDistance:a,minVerticalCameraAngle:o,maxVerticalCameraAngle:r,minHorizontalCameraAngle:h,maxHorizontalCameraAngle:c}=this._initData;if(a&&(this._zoomDistance=a/100),void 0!==o&&(this.minPolarAngle=toRadiant(o<0?o:-1*o)),void 0!==r&&(this.maxPolarAngle=toRadiant(r)),void 0!==h&&(this.minAzimuthAngle=toRadiant(h<0?h:-1*h)),void 0!==c&&(this.maxAzimuthAngle=toRadiant(c)),void 0!==s){let t=Math.abs(toRadiant(s));this.minAzimuthAngle=-t,this.maxAzimuthAngle=t,this.maxPolarAngle=Math.min(t,toRadiant(85))}this._update()}_getCamera(){return this._camera||this._initCamera(),this._camera}getCamera(){return super.getCamera()}_initCamera(){this._camera=new PerspectiveCamera,this._camera.fov=30,this._camera.aspect=this._width/this._height,this._camera.near=.1,this._camera.far=100,this._camera.updateProjectionMatrix(),this._camera.layers.set(3),this._camera.layers.enable(1),this._camera.layers.enable(2),this._camera.layers.enable(6),this._camera.layers.enable(5)}setObjectRotation(t){this._objectRotation=t}getObjectRotation(){return this._objectRotation}updateCamera(){let{x:t,y:e}=this._domHelper.getClientDimensions();this._camera.aspect=t/e,this._camera.updateProjectionMatrix()}animateCamera(t){if(!super.animateCamera(t))return!1;let e=this._targetPosition;return!!e&&(this.getCamera().lookAt(e),!0)}_initInputListener(){this._inputListeners.push({key:3,fun:()=>{this._state=1}}),this._inputListeners.push({key:6,fun:t=>{var e,i;1!==this._state||this._locked||(this._userInteraction=!0,!(void 0!==(null===(e=t.event)||void 0===e?void 0:e.shiftKey)&&(null===(i=t.event)||void 0===i?void 0:i.shiftKey))&&this._panningEnabled&&this.disablePanning(),this._move(new Vector2(t.position.x,t.position.y),t.type))}}),this._inputListeners.push({key:11,fun:t=>{1===this._state||this._locked||(this._userInteraction=!0,this._pan(new Vector2(t.position.x,t.position.y),t.type))}}),this._inputListeners.push({key:4,fun:t=>{1===this._state&&this.dispatchEvent(2,t.type),this._state=0,this._orbitPosition=null,this._lerpEnabled=!0}}),this._inputListeners.push({key:7,fun:({event:t})=>{this._maxZoomedIn||(t&&(t.preventDefault(),t.stopPropagation()),this.zoomIn())}}),this._inputListeners.push({key:8,fun:({event:t})=>{this._maxZoomedOut||(t&&(t.preventDefault(),t.stopPropagation()),this.zoomOut())}})}_panTargetPosition(t){const e=t.clone().sub(this._orbitPosition),i=this._domHelper.element,n=this._targetPosition.project(this._camera),s=Math.max(2,4*(1-this._distance/this.maxDistance));n.x=n.x-e.x/i.clientHeight*s,n.y=n.y+e.y/i.clientHeight*s,this._targetPositionIsPanned=!0,this._targetPosition.copy(n.unproject(this._camera))}_pan(t,e){this._lerpEnabled=!1,this._orbitPosition||(this._orbitPosition=new Vector2(t.x,t.y),this.dispatchEvent(0,e)),this._panTargetPosition(t),position2VectorsAreEqual(this._orbitPosition,t)||this.dispatchEvent(1,e),this._orbitPosition.copy(t),this._update()}_move(t,e){this._orbitPosition||(this._orbitPosition=new Vector2(t.x,t.y),this.dispatchEvent(0,e));const i=t.clone().sub(this._orbitPosition),n=this._domHelper.element;this._panningEnabled?this._panTargetPosition(t):(this._rotateHorizontal(2*Math.PI*i.x/n.clientWidth*1),this._rotateVertical(2*Math.PI*i.y/n.clientHeight*1)),position2VectorsAreEqual(this._orbitPosition,t)||this.dispatchEvent(1,e),this._orbitPosition.copy(t),this._update()}checkBoundsAndPlaceCamera(t,e=!0){this._boundingBox&&compareBox3Size(t,this._boundingBox)<=0?this.setBounds(t):this.zoomToFitBounds(t,e)}zoomToFitBounds(t,e=!0){this.setBounds(t);const i=t.getSize(new Vector3);if(this._initData.debug||i.x+i.y+i.z===0)return;const n=this.getCurrentCameraParameters(),s=t.getCenter(new Vector3),a=this._setDistanceAndRangesBasedOnBounds(i);this._checkZoomDistance(t,a);const o={yaw:e?this._yaw:n.yaw,pitch:e?this._pitch:n.pitch,distance:a,targetX:s.x,targetY:s.y,targetZ:s.z};areCameraParametersEqual(n,o)||this._tweenCameraParameter(n,o,!1)}updateToBounds(t,e,i=!0,n){if(this.setBounds(t),this._initData.debug)return;const s=t.getCenter(new Vector3);n?(this._targetPosition=n.clone(),this._targetPositionIsPanned=!1):this._targetPositionIsPanned||(this._targetPosition=new Vector3(s.x,s.y,s.z));const a=this.getCurrentCameraParameters(),o=t.getSize(new Vector3);if(i){const i=this._setDistanceAndRangesBasedOnBounds(o);this._distance=i,this._checkZoomDistance(t,i),this._userInteraction?this._tweenCameraParameter(a,{yaw:this._yaw,pitch:this._pitch,distance:this._distance,targetX:this._targetPosition.x,targetY:this._targetPosition.y,targetZ:this._targetPosition.z},e):this._update()}else this._setDistanceAndRangesBasedOnBounds(o,!1);this._update()}_checkZoomDistance(t,e){const i=t.getBoundingSphere(new Sphere);e-i.radius<this._zoomDistance&&(console.warn("the initial camera position is closer than the zoomDistance param, zoomDistance is set to initial camera position."),this._zoomDistance=e-i.radius)}_setDistanceAndRangesBasedOnBounds(t,e=!0){const{offsetWidth:i,offsetHeight:n}=this._getOffset();this._bounds.copy(t);const{cameraSpacing:s}=this._initData;t.addScalar(s/100),this.minDistance=Math.sqrt(t.x*t.x+t.y*t.y+t.z*t.z);const a=Math.max(t.x,t.y),{x:o,y:r}=this._getMargin(i,n),h=getIdealDistance(t.x+o,t.y+r,t.z,this._camera.fov,i,n);return this._distance<h&&e&&(this._distance=h),this.maxDistance=h+a,this.maxDistance<2&&(this.maxDistance=2),this._camera.far=5*this.maxDistance,this._setCameraNear(),h}_getIdealDistance(){const{offsetWidth:t,offsetHeight:e}=this._getOffset(),{x:i,y:n}=this._getMargin(t,e);return getIdealDistance(this._bounds.x+i,this._bounds.y+n,this._bounds.z,this._camera.fov,t,e)}_getOffset(){const t=this._domHelper.getClientDimensions(),e=t.x,i=t.y;return{offsetWidth:this._camera.offset?e-e*this._camera.offset.left-e*(1-this._camera.offset.right):e,offsetHeight:this._camera.offset?i-i*this._camera.offset.bottom-i*(1-this._camera.offset.top):i}}_getMargin(t,e){let i=this._bounds.x/2,n=this._bounds.y/2;return t>1080&&(i+=this._bounds.x<.3?.2:0,i+=this._bounds.x*(t/1080-1)),e>1080&&(i+=this._bounds.y<.3?.2:0,n+=this._bounds.y*(e/1080-1)),{x:i,y:n}}reset(t,e,i,n,s=!0){const a=t.getSize(new Vector3);if(a){if(e)this._targetPosition.copy(e);else{const e=t.getCenter(new Vector3);this._targetPosition.copy(e)}const o=this.getCurrentCameraParameters();if(i||(i=-30),n||(n=10),i+=toDegrees(this._objectRotation),this._initData.debug)return this._distance=this._setDistanceAndRangesBasedOnBounds(a),this._update(this._targetPosition),void this._setDistanceAndRangesBasedOnBounds(a);const r=this._setDistanceAndRangesBasedOnBounds(a),h=toRadiant(n),c=toRadiant(i);let d=this._targetPosition.clone();s?this._tweenCameraParameter(o,{yaw:c,pitch:h,distance:r,targetX:d.x,targetY:d.y,targetZ:d.z},!0):(this._pitch=h,this._yaw=c,this._distance=r,this._update(this._targetPosition))}else console.warn("you cant reset without bounds!")}updateAndReset(t,e,i,n,s,a=!0){const o=new Vector3(-t.x/2,0,-t.z/2),r=new Vector3(t.x/2,t.y,t.z/2);if(this._boundingBox=new Box3(o,r),s&&t.addScalar(s),e?this._targetPosition.copy(e):(this._targetPosition=new Vector3(0,t.y/2,0),this._targetPositionIsPanned=!1),-1===this._distance){const e=this._setDistanceAndRangesBasedOnBounds(t);this._distance=Math.max(2,e)}const h=this.getCurrentCameraParameters();i||(i=-30),n||(n=10),i+=toDegrees(this._objectRotation),this._pitch=toRadiant(n),this._yaw=toRadiant(i),this._setDistanceAndRangesBasedOnBounds(t);let c=this._targetPosition.clone();a?this._tweenCameraParameter(h,{yaw:this._yaw,pitch:this._pitch,distance:this.maxDistance,targetX:c.x,targetY:c.y,targetZ:c.z},!0):this._update(this._targetPosition)}_update(t,e){this._initData.debug?this._pitch=Math.max(toRadiant(-89),Math.min(toRadiant(89),this._pitch)):(this._yaw=Math.max(this.minAzimuthAngle,Math.min(this.maxAzimuthAngle,this._yaw)),this._pitch=Math.max(this.minPolarAngle,Math.min(this.maxPolarAngle,this._pitch))),this._saveYawAndPitch();const i=new Euler(-this._pitch,this._yaw,0,"ZYX"),n=(new Quaternion).setFromEuler(i),s=new Vector3(0,0,-1);s.applyQuaternion(n),this._distance*=this._scale,this._initData.debug||(this._distance=Math.min(this.maxDistance,this._distance)),t&&this._targetPosition.copy(t);const a=this._targetPosition.clone().sub(s.multiplyScalar(this._distance));if(this._initData.debug)this._cameraPosition.copy(a),this._zoomChanged(!1,!1);else if(e)this._cameraPosition.copy(a);else{const t=this._getCameraSphere(a);null!=this._boundingBox&&this._boundingBox.intersectsSphere(t)&&this._scale>=1?this._distance+=.1:null==this._boundingBox||this._boundingBox.intersectsSphere(t)?this._zoomChanged(!1,!0):(this._cameraPosition.copy(a),this._distance===this.maxDistance?this._zoomChanged(!0,!1):this._zoomChanged(!1,!1))}this._scale=1}_zoomChanged(t,e){let i=t+""+e;0===this._currentZoomHash.length||this._currentZoomHash!==i?(this.dispatchEvent(5,new ZoomChangeEvent(t,e)),this._currentZoomHash=i):t||e||this.dispatchEvent(5,new ZoomChangeEvent(t,e)),this._maxZoomedIn=e,this._maxZoomedOut=t}zoomTo(t){return this._tweenCameraParameter(this.getCurrentCameraParameters(),t,!0)}_getCameraSphere(t){const e=Math.max(this._bounds.x,this._bounds.y),i=Math.max(e/10,this._zoomDistance);return new Sphere(t,i)}zoomIn(t){this._lerpEnabled=!0,this._scale*=t?Math.pow(.95,t):this._zoomSpeed,this._setCameraNear(),this._update(),this.dispatchEvent(3)}zoomOut(t){this._lerpEnabled=!0,this._scale/=t?Math.pow(.95,t):this._zoomSpeed,this._setCameraNear(),this._update(),this.dispatchEvent(4)}clear(){this._userInteraction=!1,this._initData.debug||(this._distance=-1,this._targetPosition=new Vector3(0,0,0),this._targetPositionIsPanned=!1)}async moveCamera(t){const{x:e,y:i,z:n}=this._boundingBox.getCenter(new Vector3);t.targetX=t.targetX||e,t.targetY=t.targetY||i,t.targetZ=t.targetZ||n,t.distance=t.distance||this._getIdealDistance();const s=this.getCurrentCameraParameters(),a=deepMerge(JSON.parse(JSON.stringify(s)),t);return this._tweenCameraParameter(s,a,!0)}enablePanning(){this._lerpEnabled=!1,this._panningEnabled=!0}disablePanning(){this._lerpEnabled=!1,this._panningEnabled=!1}getKernelZoomFactor(){const t=this.maxDistance;return 1-this._distance/(t-2)+.2}}class Environment{constructor(t,e){this._scene=t,e&&(e.removeFromScene(),e.cleanUp())}updateCamera(t){}reload(){this.removeFromScene(),this.addToScene()}updateBounds(t,e){this._bounds=t}cleanUp(){this._scene=null}}class BakedShadowPlane{constructor(t){this._innerSize=1,this._outerSize=100,this._plane=new Object3D,this._plane.rotation.x=-Math.PI/2;const e=MaterialCreator.createMeshStandardMaterial({});this._innerPlaneMesh=new Mesh,this._innerPlaneMesh.layers.set(2),this._innerPlaneMesh.material=e,this._innerPlaneMesh.receiveShadow=!0,this._outerPlaneMesh=new Mesh,this._outerPlaneMesh.layers.set(2),this._outerPlaneMesh.material=e,this._outerPlaneMesh.receiveShadow=!0,this._plane.add(this._innerPlaneMesh),this._plane.add(this._outerPlaneMesh),this._innerSize=1,this._outerSize=t,this._updatePlane(this._innerSize,this._outerSize)}getRootNode(){return this._plane}getInnerPlane(){return this._innerPlaneMesh}getOuterPlane(){return this._outerPlaneMesh}updateSize(t){this._innerSize=t,this._updatePlane(this._innerSize,this._outerSize)}_updatePlane(t,e){const i=new Shape;i.moveTo(-t/2,-t/2),i.lineTo(-t/2,t/2),i.lineTo(t/2,t/2),i.lineTo(t/2,-t/2),i.lineTo(-t/2,-t/2);const n=new Shape;n.moveTo(-e/2,-e/2),n.lineTo(-e/2,e/2),n.lineTo(e/2,e/2),n.lineTo(e/2,-e/2),n.lineTo(-e/2,-e/2);const s=new Path;s.moveTo(-t/2,-t/2),s.lineTo(-t/2,t/2),s.lineTo(t/2,t/2),s.lineTo(t/2,-t/2),s.lineTo(-t/2,-t/2),n.holes.push(s);const a=new ShapeGeometry(i);this._innerPlaneMesh.geometry&&this._innerPlaneMesh.geometry.dispose(),this._innerPlaneMesh.geometry=a;const o=new ShapeGeometry(n);this._outerPlaneMesh.geometry&&this._outerPlaneMesh.geometry.dispose(),this._outerPlaneMesh.geometry=o;const r=a.attributes.uv.clone();a.setAttribute("uv2",r);const h=a.attributes.uv2.array;for(let t=0;t<h.length;++t)h[t]+=.5}}class FloorEnvironment extends Environment{constructor(t,e,i){super(t,e),this._longestSide=2,this._bakedShadowPlane=new BakedShadowPlane(100),this._fog=i||!1,this._textureLoader=new TextureLoader,this.addToScene()}needsBounds(){return!0}needsCamera(){return this._fog}needsRotation(){return!1}updateBounds(t){return super.updateBounds(t),this._longestSide=Math.max(t.x,t.z),this._update(),!0}updateCamera(t){this._cameraDistance=t.position.distanceTo(new Vector3(0,0,0)),this._update()}_update(){this._fog&&this._updateFog()}_updateFog(){let t=this._longestSide/2;this._scene.fog=new Fog(16185078,this._cameraDistance+t+3,this._cameraDistance+t+3+1),this._scene.background=new Color(16185078)}_updateFloor(){if(this._floorMaterial)this._bakedShadowPlane.getOuterPlane().material=this._floorMaterial,this._bakedShadowPlane.getInnerPlane().material=this._floorMaterial;else{let t=this._width/1e3,e=this._height/1e3;this._repeatable&&(this._floorTexture.wrapS=RepeatWrapping,this._floorTexture.wrapT=RepeatWrapping,this._floorTexture.repeat.set(100/t,100/e));let i=MaterialCreator.createMeshStandardMaterial({map:this._floorTexture,side:DoubleSide});this._bakedShadowPlane.getInnerPlane().material=i,this._bakedShadowPlane.getOuterPlane().material=i}}addToScene(){this._scene&&this._scene.add(this._bakedShadowPlane.getRootNode())}removeFromScene(){this._scene.remove(this._bakedShadowPlane.getRootNode())}setFloorMaterial(t,e,i,n){return this._width=e,this._height=i,this._repeatable=n,this._floorPromise=new Promise((e,i)=>{this._textureLoader.load(t,t=>{this._floorTexture=t,e()},null,i)}),new Promise((t,e)=>{this._floorPromise.then(()=>{this._updateFloor(),this._update(),t()},e)})}changeFloorMaterial(t,e){this._floorPromise=new Promise((i,n)=>{this._floorMaterial=createMaterial(t),this._rapiAccess.getTexturesOf(t).then(t=>{if(t.length>0){let s=[];t.forEach(t=>{s.push(addTexture(this._dataSyncer.requestAsset(t.image,!0),t,this._floorMaterial,e,1,1))}),Promise.all(s).then(()=>{setTimeout(()=>i(),0)},n)}else setTimeout(()=>i(),0)})});let i=[this._floorPromise];return new Promise((t,e)=>{Promise.all(i).then(()=>{this._updateFloor(),this._update(),t()},e)})}showGUI(){this._floorMaterial?this._addGUI():this._floorPromise&&this._floorPromise.then(()=>this._addGUI())}_addGUI(){let t=getGUI();if(!t)return;let e=t.addFolder("Floor");e.add(this._floorMaterial,"roughness").min(0).max(1).step(.01),e.add(this._floorMaterial,"reflectivity").min(0).max(1).step(.01),e.add(this._floorMaterial,"clearCoat").min(0).max(1).step(.01),e.add(this._floorMaterial,"clearCoatRoughness").min(0).max(1).step(.01),e.add(this._floorMaterial,"opacity").min(0).max(1).step(.01),e.add(this._floorMaterial,"metalness").min(0).max(1).step(.01),e.add(this._floorMaterial,"bumpScale").min(0).max(1).step(.01)}}__decorate([inject],FloorEnvironment.prototype,"_rapiAccess",void 0),__decorate([inject],FloorEnvironment.prototype,"_dataSyncer",void 0);class CameraControl2D extends CameraControl{constructor(t,e,i,n){super(t,e,i),this._scale=1,this._cameraZoom=1,this._state=0,this._size=5,this._lastPosition=new Vector2,this._zoomPosition=new Vector3,this._lastZoom=0,this._zoomSpeed=Math.pow(.95,2),n?(this._camera=n,this._cameraPosition=(new Vector3).copy(this._camera.position)):this._initCamera(i||new Vector3(0,10,0))}_getCamera(){return this._camera||this._initCamera(new Vector3(0,10,0)),this._camera}_initCamera(t){let{x:e,y:i}=this._domHelper.getClientDimensions(),n=e/i*this._size,s=this._size;this._camera=new OrthographicCamera(n/-2,n/2,s/2,s/-2,1,1e3),this._camera.position.copy(t),this._cameraPosition=t,this._camera.lookAt(new Vector3(0,0,0))}updateCamera(){let{x:t,y:e}=this._domHelper.getClientDimensions(),i=t/e*this._size,n=this._size;this._camera.left=i/-2,this._camera.right=i/2,this._camera.top=n/2,this._camera.bottom=n/-2,this._camera.updateProjectionMatrix()}_initInputListener(){this._inputListeners.push({key:3,fun:t=>{this._locked||(this._state=1,this._lastPosition.set(t.positionRelative.x,t.positionRelative.y),this.dispatchEvent(0))}}),this._inputListeners.push({key:6,fun:t=>{1!==this._state||this._locked||(this._move(new Vector2(t.positionRelative.x,t.positionRelative.y),t.type),this.dispatchEvent(1))}}),this._inputListeners.push({key:4,fun:t=>{1===this._state&&this.dispatchEvent(2),this._state=0}}),this._inputListeners.push({key:7,fun:t=>{t.event&&(t.event.stopPropagation(),t.event.preventDefault()),this.dispatchEvent(3),this._scale/=this._zoomSpeed,this._zoomTo(t.positionRelative),this._update()}}),this._inputListeners.push({key:8,fun:t=>{t.event&&(t.event.stopPropagation(),t.event.preventDefault()),this.dispatchEvent(4),this._scale*=this._zoomSpeed,this._zoomTo(t.positionRelative),this._update()}})}_zoomTo(t){if(Date.now()-this._lastZoom>200){let e=new Vector3(t.x,t.y,0);e.unproject(this._camera),this._zoomPosition.copy(e)}this._lastZoom=Date.now()}_move(t,e){let i=new Vector3,n=new Vector3(this._lastPosition.x,this._lastPosition.y,0),s=new Vector3(t.x,t.y,0);n.unproject(this._camera),s.unproject(this._camera),i.subVectors(s,n),this._cameraPosition.x-=i.x*(2===e?1.1:1),this._cameraPosition.z-=i.z*(2===e?1.1:1),this._lastPosition.copy(t)}zoomToFitBounds(t,e,i){if(compareBox3Size(t,this._boundingBox)<0&&!i)return void this.setBounds(t);this.setBounds(t);const n=t.getSize(new Vector3),s=t.getCenter(new Vector3),a=n.x/-2/this._camera.left,o=n.z/-2/this._camera.bottom,r=1/Math.max(a,o);(r<this._cameraZoom||e)&&(this._scale=r,this._cameraZoom=r,this._cameraPosition.x=s.x,this._cameraPosition.z=s.z)}_update(t){this._scale=Math.min(this._scale,5),this._scale=Math.max(this._scale,.1);let e=(new Vector3).subVectors(this._zoomPosition,this._cameraPosition).multiplyScalar((this._scale-this._cameraZoom)/this._scale);this._cameraPosition.x+=e.x,this._cameraPosition.z+=e.z,this._cameraZoom!==this._scale&&this.dispatchEvent(5,new ZoomChangeEvent(.1===this._scale,5===this._scale)),this._cameraZoom=this._scale,this._camera.updateProjectionMatrix()}animateCamera(t){if(!super.animateCamera(t)&&Math.abs(this._cameraZoom-this._camera.zoom)<=.01)return!1;const e=Math.min(10*t,1);return this._camera.zoom=MathUtils.lerp(this._camera.zoom,this._cameraZoom,e),!0}getKernelZoomFactor(){const t=1e3*(this._camera.right-this._camera.left);return this._domHelper.element.clientWidth/t*this._camera.zoom}}const KEYBOARD_ROTATION_ANGLE=Math.PI/4;class CameraControlFirstPerson extends CameraControl{constructor(t,e,i,n){super(t,e,i),this._state=0,this._rotationSpeed=1,this._keyMap=new Map,this.minPolarAngle=toRadiant(-60),this.maxPolarAngle=toRadiant(60),this._camera=n||new PerspectiveCamera,this._camera.fov=70,this._camera.aspect=this._width/this._height,this._camera.near=.1,this._camera.far=100,this._camera.updateProjectionMatrix(),this._camera.layers.set(3),this._camera.layers.enable(1),this._camera.layers.enable(2),this._camera.layers.enable(6),this._camera.layers.enable(5),i?this._camera.position.set(i.x,1.5,i.z):this._camera.position.set(0,1.5,0),this._cameraPosition=new Vector3,this._cameraPosition.copy(this._camera.position),this._cameraRotation=new Quaternion,this._pitch=0,this._yaw=0;let s=new Euler(-this._pitch,this._yaw,0,"ZYX");this._cameraRotation.setFromEuler(s),window.addEventListener("gamepadconnected",this._gamepadConnected.bind(this)),window.addEventListener("gamepaddisconnected",this._gamepadDisconnected.bind(this))}_gamepadConnected(t){this.startButtonPressListener()}_gamepadDisconnected(t){window.cancelAnimationFrame(this._listenerLoopAnimationFrame)}startButtonPressListener(){this._listenerLoopAnimationFrame=window.requestAnimationFrame(()=>{this.buttonPressListener()})}buttonPressListener(){let t=navigator.getGamepads()[0];this._checkRightStick(t),this._checkLeftStick(t),this._checkButtons(t),this._processKeyMap(this._keyMap,.001),this.startButtonPressListener()}_checkRightStick(t){let e=t.axes[2],i=t.axes[3];Math.abs(e)>.2&&(this._rotateHorizontal(.01*KEYBOARD_ROTATION_ANGLE*e),this._update(),this.dispatchEvent(1)),Math.abs(i)>.2&&(this._rotateVertical(.01*KEYBOARD_ROTATION_ANGLE*i),this._update(),this.dispatchEvent(1))}_checkLeftStick(t){let e=t.axes[0],i=t.axes[1];Math.abs(i)>.2?i<0?this._keyMap.set(87,!0):this._keyMap.set(83,!0):t.buttons&&t.buttons[12]&&t.buttons[12].pressed?this._keyMap.set(87,!0):t.buttons&&t.buttons[13]&&t.buttons[13].pressed?this._keyMap.set(83,!0):(this._keyMap.set(87,!1),this._keyMap.set(83,!1)),Math.abs(e)>.2?e<0?this._keyMap.set(65,!0):this._keyMap.set(68,!0):(this._keyMap.set(65,!1),this._keyMap.set(68,!1))}_checkButtons(t){t.buttons&&t.buttons[6]&&t.buttons[6].pressed?this._keyMap.set(16,!0):this._keyMap.set(16,!1),t.buttons&&t.buttons[14]&&t.buttons[14].pressed?(this._keyMap.set(37,!0),this.dispatchEvent(1)):this._keyMap.set(37,!1),t.buttons&&t.buttons[15]&&t.buttons[15].pressed?(this._keyMap.set(39,!0),this.dispatchEvent(1)):this._keyMap.set(39,!1)}animateCamera(t){let e=this._cameraPosition,i=this._cameraRotation,n=this.getCamera(),s=position3VectorsAreEqual(e,n.position),a=rotationQuaternionsAreEqual(i,n.quaternion);if(!e||s&&a)return!1;let o=this.getCamera().position.clone(),r=Math.min(10*t,1);o.lerp(e,r),this.getCamera().position.copy(o);let h=this.getCamera().quaternion.clone(),c=Math.min(5*t,1);h.slerp(i,c),this.getCamera().setRotationFromQuaternion(h);let d=!1;return this._keyMap.forEach(t=>{t&&(d=!0)}),d&&this._processKeyMap(this._keyMap,t),!0}_getCamera(){return this._camera}_initInputListener(){window.addEventListener("keyup",this._onKeyChanged.bind(this),!1),window.addEventListener("keydown",this._onKeyChanged.bind(this),!1),this._inputListeners.push({key:3,fun:t=>{this._down(t)}}),this._inputListeners.push({key:6,fun:t=>{this._move(t)}}),this._inputListeners.push({key:4,fun:t=>{this._up(t)}})}_down(t){this._downPosition=t.position,this._position=t.position,this._state=1,2===t.type&&window.setTimeout(this._onLongDown.bind(this),350),2===t.type?this._rotationSpeed=.6:this._rotationSpeed=1}_move(t){this._position=t.position,1!==this._state||this._locked||this._orbit(new Vector2(t.position.x,t.position.y)),2!==this._state||this._locked||(this._orbit(new Vector2(t.position.x,t.position.y)),this._moveForward())}_up(t){1===this._state&&this.dispatchEvent(2),2===this._state&&this._keyMap.set(87,!1),this._state=0,this._orbitPosition=null}_onLongDown(){getDelta(this._downPosition,this._position)<MIN_MOVE_DISTANCE&&1===this._state&&(this._state=2,this._orbit(new Vector2(this._position.x,this._position.y)),this._moveForward())}_update(t){let e=new Euler(-this._pitch,this._yaw,0,"ZYX");this._cameraRotation.setFromEuler(e)}updateCamera(){let{x:t,y:e}=this._domHelper.getClientDimensions();this._camera.aspect=t/e,this._camera.updateProjectionMatrix()}_onKeyChanged(t){this._keyMap.set(t.keyCode,"keydown"===t.type),this.dispatchEvent(6),this._processKeyMap(this._keyMap,.001)&&t.preventDefault()}_processKeyMap(t,e){e=Math.min(e,.1);let i=new Vector3(0,0,0),n=!1;return this._processUpDown(t,i,e),t.get(65)&&(i.x=-1*e),t.get(68)&&(i.x=1*e),t.get(37)&&(this._rotateHorizontal(-KEYBOARD_ROTATION_ANGLE*this._rotationSpeed*e),n=!0),t.get(39)&&(this._rotateHorizontal(KEYBOARD_ROTATION_ANGLE*this._rotationSpeed*e),n=!0),t.get(16)&&(i.x*=3,i.z*=3),!(0===i.x&&0===i.y&&0===i.z&&!n||(i.applyQuaternion(this.getCamera().quaternion),this._cameraPosition.add(new Vector3(i.x,0,i.z)),this._update(),0))}_processUpDown(t,e,i){(t.get(87)||t.get(38))&&(e.z=-1*i),(t.get(83)||t.get(40))&&(e.z=1*i)}_orbit(t){this._orbitPosition||(this._orbitPosition=new Vector2(t.x,t.y),this.dispatchEvent(0));let e=t.clone().sub(this._orbitPosition),i=this._domHelper.element instanceof Document?this._domHelper.element.body:this._domHelper.element;e.multiplyScalar(-1),this._rotateHorizontal(2*Math.PI*e.x/i.clientWidth*1),this._rotateVertical(2*Math.PI*e.y/i.clientHeight*1),position2VectorsAreEqual(this._orbitPosition,t)||this.dispatchEvent(1),this._orbitPosition.copy(t),this._update()}_moveForward(){this._keyMap.set(87,!0),this._processKeyMap(this._keyMap,.001)}_rotateVertical(t){let e=this._pitch+t;e>this.maxPolarAngle||e<this.minPolarAngle||(this._pitch=e,this._pitch<-Math.PI?this._pitch+=2*Math.PI:this._pitch>Math.PI&&(this._pitch-=2*Math.PI),this._saveYawAndPitch())}getKernelZoomFactor(){return this._camera.zoom}}class BackgroundEnvironment extends Environment{constructor(t,e,i,n,s){if(super(t,e),this._color=i,this._oldBackground=t.background,n&&s){this._canvas=n,this._style=document.createElement("style");let t='background-image: url("'+s+'"); background-size: cover;';this._style.innerText=".rml-scene-background {"+t+"}",this._canvas.appendChild(this._style)}}needsBounds(){return!0}needsCamera(){return!1}needsRotation(){return!1}addToScene(){this._scene&&this._color&&(this._scene.background=this._color),this._canvas&&this._canvas.classList&&(this._scene.background=null,this._canvas.classList.add("rml-scene-background"))}removeFromScene(){this._oldBackground&&(this._scene.background=this._oldBackground),this._canvas&&this._canvas.classList.remove("rml-scene-background")}showGUI(){}}class DynamicEnvironmentSettingLoader{parse(t,e,i,n,s){let a=JSON.parse(n);return a.environment?this.load(t,e,i,a,s):null}load(t,e,i,n,s){let a,o=n.environment;if(!o)return console.warn("No environment set in scene settings"),Promise.resolve(null);switch(o.type){case"color":a=new Promise(e=>e(new BackgroundEnvironment(t,i,new Color(o.details.color))));break;case"image":a=new Promise(n=>n(new BackgroundEnvironment(t,i,null,e,o.details.imageUrl)));break;case"floor":a=new Promise(e=>{this._rapiAccess.getMaterial(o.details.material).then(n=>{let a=void 0===o.details.fog||o.details.fog,r=new FloorEnvironment(t,i,a);r.changeFloorMaterial(n,s).then(()=>{e(r)})})});break;default:console.warn("Could not load environment, return old environment"),a=new Promise(t=>t(i))}return a}}__decorate([inject],DynamicEnvironmentSettingLoader.prototype,"_rapiAccess",void 0);class LightSetting{constructor(t,e){this._scene=t,e&&e.removeFromScene()}needsBounds(){return!1}updateBounds(t){}getCameraContainer(){return this._cameraContainer||(this._cameraContainer=new Object3D),this._cameraContainer}}class DynamicLightSetting extends LightSetting{constructor(t,e){super(t,e),this._lights=[]}needsBounds(){return!0}updateBounds(t){if(this._cameraLight){const e=this._cameraLight,i=new Vector3;t.getSize(i);const n=1.5*Math.max(Math.max(i.x,i.y),i.z);this._boundingSize=n,e.shadow.camera.top=n/2,e.shadow.camera.bottom=-n/2,e.shadow.camera.left=-n/2,e.shadow.camera.right=n/2,e.shadow.camera.updateProjectionMatrix()}}loadFromJSON(t){return new Promise(e=>{this._lights=this._dynamicLightSettingLoader.parse(t),this.addToScene(),e()})}loadFromObject(t){return new Promise(e=>{(null==t?void 0:t.lights)||e(),this._lights=this._dynamicLightSettingLoader.load(t),this._lights.forEach((t,e)=>{t.userData.movesWithCamera&&(this._cameraLight=t,this._lights.splice(e,1))}),this.addToScene(),e()})}loadFromURL(t){return new Promise((e,i)=>{fetch(new Request(t,{method:"GET"})).then(handleJsonResponse).then(t=>this.loadFromObject(t).then(e,i))})}addToScene(){this._lights.forEach(t=>{this._scene.add(t)}),this._cameraLight&&this._scene.add(this._cameraLight)}update(t,e){if(!this._cameraLight)return;let i=new Vector3;t.getWorldDirection(i),i.multiplyScalar(-this._boundingSize);let n=e.clone().add(i);this._cameraLight.position.copy(n)}removeFromScene(){this._lights.forEach(t=>{this._scene.remove(t)}),this._cameraLight&&this._scene.remove(this._cameraLight)}reload(){this.removeFromScene(),this.addToScene()}showGUI(){let t=getGUI();this._cameraLight&&this._addToGUI(t,this._cameraLight),this._lights.forEach(e=>{this._addToGUI(t,e)})}_addToGUI(t,e){t&&(e instanceof SpotLight&&this._addSpotLightToGUI(t,e),e instanceof AmbientLight&&this._addAmbientLightToGUI(t,e),e instanceof DirectionalLight&&this._addDirectionalLightToGUI(t,e),e instanceof RectAreaLight&&this._addRectAreaLightToGUI(t,e))}_addRectAreaLightToGUI(t,e){let i=t.addFolder(e.name),n={name:e.name,color:"#"+e.color.getHexString(),intensity:e.intensity*(e.width*e.height)};i.add(e,"visible"),i.add(n,"intensity").min(10).max(400).step(10).onChange(t=>{e.intensity=t/(e.width*e.height)}),i.add(e,"castShadow"),i.addColor(n,"color").onChange(t=>{e.color=new Color(t)}),i.add(e.position,"x").min(-10).max(10).step(.1).onChange(()=>{e.lookAt(new Vector3(0,0,0))}),i.add(e.position,"y").min(-10).max(10).step(.1).onChange(()=>{e.lookAt(new Vector3(0,0,0))}),i.add(e.position,"z").min(-10).max(10).step(.1).onChange(()=>{e.lookAt(new Vector3(0,0,0))})}_addSpotLightToGUI(t,e){let i=t.addFolder(e.name),n={name:e.name,color:"#"+e.color.getHexString(),angle:180*e.angle/Math.PI};i.add(e,"visible"),i.add(e,"intensity").min(0).max(5).step(.1),i.add(e,"penumbra").min(0).max(1).step(.1),i.addColor(n,"color").onChange(t=>{e.color=new Color(t)}),i.add(n,"angle").min(10).max(180).step(1).onChange(t=>{e.angle=t*Math.PI/180}),i.add(e.position,"x").min(-10).max(10).step(.1).onChange(()=>{e.lookAt(new Vector3(0,0,0))}),i.add(e.position,"y").min(-10).max(10).step(.1).onChange(()=>{e.lookAt(new Vector3(0,0,0))}),i.add(e.position,"z").min(-10).max(10).step(.1).onChange(()=>{e.lookAt(new Vector3(0,0,0))})}_addAmbientLightToGUI(t,e){let i={name:e.name,color:"#"+e.color.getHexString()},n=t.addFolder(e.name);n.add(e,"visible"),n.add(e,"intensity").min(0).max(5).step(.1),n.addColor(i,"color").onChange(t=>{e.color=new Color(t)})}_addDirectionalLightToGUI(t,e){let i=t.addFolder(e.name),n={name:e.name,color:"#"+e.color.getHexString()};i.add(e,"visible"),i.add(e,"intensity").min(0).max(5).step(.1),i.addColor(n,"color").onChange(t=>{e.color=new Color(t)}),i.add(e,"castShadow"),i.add(e.position,"x").min(-10).max(10).step(.1).onChange(()=>{e.lookAt(new Vector3(0,0,0))}),i.add(e.position,"y").min(-10).max(10).step(.1).onChange(()=>{e.lookAt(new Vector3(0,0,0))}),i.add(e.position,"z").min(-10).max(10).step(.1).onChange(()=>{e.lookAt(new Vector3(0,0,0))})}}__decorate([inject],DynamicLightSetting.prototype,"_dynamicLightSettingLoader",void 0);class GroundProjectedSkybox extends Mesh{constructor(t,e={}){const i=[t.isCubeTexture?"#define ENVMAP_TYPE_CUBE":""].join("\n")+"\n\n\t\t\t\tvarying vec3 vWorldPosition;\n\n\t\t\t\tuniform float radius;\n\t\t\t\tuniform float height;\n\t\t\t\tuniform float angle;\n\n\t\t\t\t#ifdef ENVMAP_TYPE_CUBE\n\n\t\t\t\t\tuniform samplerCube map;\n\n\t\t\t\t#else\n\n\t\t\t\t\tuniform sampler2D map;\n\n\t\t\t\t#endif\n\n\t\t\t\t// From: https://www.shadertoy.com/view/4tsBD7\n\t\t\t\tfloat diskIntersectWithBackFaceCulling( vec3 ro, vec3 rd, vec3 c, vec3 n, float r ) \n\t\t\t\t{\n\n\t\t\t\t\tfloat d = dot ( rd, n );\n\n\t\t\t\t\tif( d > 0.0 ) { return 1e6; }\n\n\t\t\t\t\tvec3 o = ro - c;\n\t\t\t\t\tfloat t = - dot( n, o ) / d;\n\t\t\t\t\tvec3 q = o + rd * t;\n\n\t\t\t\t\treturn ( dot( q, q ) < r * r ) ? t : 1e6;\n\n\t\t\t\t}\n\n\t\t\t\t// From: https://www.iquilezles.org/www/articles/intersectors/intersectors.htm\n\t\t\t\tfloat sphereIntersect( vec3 ro, vec3 rd, vec3 ce, float ra ) {\n\n\t\t\t\t\tvec3 oc = ro - ce;\n\t\t\t\t\tfloat b = dot( oc, rd );\n\t\t\t\t\tfloat c = dot( oc, oc ) - ra * ra;\n\t\t\t\t\tfloat h = b * b - c;\n\n\t\t\t\t\tif( h < 0.0 ) { return -1.0; }\n\n\t\t\t\t\th = sqrt( h );\n\n\t\t\t\t\treturn - b + h;\n\n\t\t\t\t}\n\n\t\t\t\tvec3 project() {\n\n\t\t\t\t\tvec3 p = normalize( vWorldPosition );\n\t\t\t\t\tvec3 camPos = cameraPosition;\n\t\t\t\t\tcamPos.y -= height;\n\n\t\t\t\t\tfloat intersection = sphereIntersect( camPos, p, vec3( 0.0 ), radius );\n\t\t\t\t\tif( intersection > 0.0 ) {\n\n\t\t\t\t\t\tvec3 h = vec3( 0.0, - height, 0.0 );\n\t\t\t\t\t\tfloat intersection2 = diskIntersectWithBackFaceCulling( camPos, p, h, vec3( 0.0, 1.0, 0.0 ), radius );\n\t\t\t\t\t\tp = ( camPos + min( intersection, intersection2 ) * p ) / radius;\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\tp = vec3( 0.0, 1.0, 0.0 );\n\n\t\t\t\t\t}\n\n\t\t\t\t\treturn p;\n\n\t\t\t\t}\n\n\t\t\t\t#include <common>\n\n\t\t\t\tvoid main() {\n\n\t\t\t\t\tvec3 projectedWorldPosition = project();\n\n\t\t\t\t\t#ifdef ENVMAP_TYPE_CUBE\n\n\t\t\t\t\t\tvec3 outcolor = textureCube( map, projectedWorldPosition ).rgb;\n\n\t\t\t\t\t#else\n\n\t\t\t\t\t\tvec3 direction = normalize( projectedWorldPosition );\n\t\t\t\t\t\tvec2 uv = equirectUv( direction );\n\t\t\t\t\t\tvec3 outcolor = texture2D( map, uv ).rgb;\n\n\t\t\t\t\t#endif\n\n\t\t\t\t\tgl_FragColor = vec4( outcolor, 1.0 );\n\n\t\t\t\t\t#include <tonemapping_fragment>\n\t\t\t\t\t#include <colorspace_fragment>\n\n\t\t\t\t}\n\t\t\t\t",n={map:{value:t},height:{value:e.height||15},radius:{value:e.radius||100}};super(new IcosahedronGeometry(1,16),new ShaderMaterial({uniforms:n,fragmentShader:i,vertexShader:"\n\t\t\tvarying vec3 vWorldPosition;\n\n\t\t\tvoid main() {\n\n\t\t\t\tvec4 worldPosition = ( modelMatrix * vec4( position, 1.0 ) );\n\t\t\t\tvWorldPosition = worldPosition.xyz;\n\n\t\t\t\tgl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );\n\n\t\t\t}\n\t\t\t",side:DoubleSide}))}set radius(t){this.material.uniforms.radius.value=t}get radius(){return this.material.uniforms.radius.value}set height(t){this.material.uniforms.height.value=t}get height(){return this.material.uniforms.height.value}}class GroundProjectedEnvironment extends Environment{constructor(t,e,i){super(t,e),this.updateEnvironmentTexture(i)}updateEnvironmentTexture(t){t&&(this._environmentTexture=t,this._skybox=new GroundProjectedSkybox(this._environmentTexture),this._skybox.name="Ground projected skybox",this._skybox.scale.setScalar(100)),this.reload()}needsBounds(){return!1}needsCamera(){return!1}needsRotation(){return!1}addToScene(){this._scene&&this._skybox&&this._scene.add(this._skybox)}removeFromScene(){this._scene&&this._skybox&&this._scene.remove(this._skybox)}showGUI(t){let e=getGUI();if(!e)return;let i=e.addFolder("Ground Projected Environment");i.add(this._skybox,"height").min(10).max(100).step(.1).onChange(t),i.add(this._skybox,"radius").min(20).max(200).step(.1).onChange(t)}}class LightSourceDetectorDebug{constructor(t){this._lightSourceDetector=t}static createPlane(t,e){const i=new PlaneGeometry(2,1),n=null!=e?e:new MeshBasicMaterial({color:12632256,side:DoubleSide}),s=new Mesh(i,n);return s.position.z=-.1,t.add(s),s}createDebugScene(t){this._scene=t,this._createLightGraphInMap(this._lightSourceDetector.sampleUVs,this._lightSourceDetector.lightSamples,this._lightSourceDetector.lightGraph)}_createLightGraphInMap(t,e,i){let n=[],s=[];for(let t=0;t<this._lightSourceDetector.lightGraph.noOfNodes;++t)0===i.adjacent[t].length?n.push(e[t]):s.push(e[t]);const a=n.map(t=>t.uv),o=s.map(t=>t.uv),r=t.filter(t=>!a.includes(t)&&!o.includes(t));this._createSamplePointsInMap(r,.005,16711680),this._createSamplePointsInMap(a,.01,255),this._createSamplePointsInMap(o,.01,65280),this._createClusterLinesInMap(this._lightSourceDetector.lightSamples,this._lightSourceDetector.lightGraph.edges,128);const h=this._lightSourceDetector.lightSources.map(t=>t.uv);this._createSamplePointsInMap(h,.015,16776960),this._createCirclesInMap(this._lightSourceDetector.lightSources,8421376)}_createSamplePointsInMap(t,e,i){const n=new CircleGeometry(e,8,4),s=new MeshBasicMaterial({color:i});t.forEach(t=>{var e;const i=new Mesh(n,s);i.position.copy(this._uvToMapPosition(t)),i.name="samplePoint",null===(e=this._scene)||void 0===e||e.add(i)})}_createCirclesInMap(t,e){const i=new MeshBasicMaterial({color:e,transparent:!0,opacity:.5});t.forEach(t=>{var e;const n=new CircleGeometry(t.size,8,4),s=new Mesh(n,i);s.position.copy(this._uvToMapPosition(t.uv)),s.name="samplePoint",null===(e=this._scene)||void 0===e||e.add(s)})}_createClusterLinesInMap(t,e,i){var n;const s=new LineBasicMaterial({color:i}),a=[];e.forEach(e=>{for(let i=1;i<e.length;i++){const n=t[e[0]].uv,s=t[e[i]].uv;if(a.push(this._uvToMapPosition(n)),Math.abs(n.x-s.x)>.5){const t=(n.y+s.y)/2,e=n.x<s.x?0:1;a.push(this._uvToMapPosition(new Vector2(e,t))),a.push(this._uvToMapPosition(new Vector2(1-e,t)))}a.push(this._uvToMapPosition(s))}});const o=(new BufferGeometry).setFromPoints(a),r=new LineSegments(o,s);r.name="clusterLine",null===(n=this._scene)||void 0===n||n.add(r)}_uvToMapPosition(t){return new Vector3(2*t.x-1,t.y-.5,0)}}class EnvironmentPmremGenertor extends PMREMGenerator{constructor(t){super(t),this._extendedEquirectMaterial=this._createEquirectMaterial()}fromEquirectangularTexture(t,e){var i,n;const s=null!==(i=null==e?void 0:e.rotation)&&void 0!==i?i:0,a=null!==(n=null==e?void 0:e.intensity)&&void 0!==n?n:1;return this._extendedEquirectMaterial.uniforms.intensity.value=a,this._extendedEquirectMaterial.uniforms.rotationMatrix.value.set(Math.cos(s),0,-Math.sin(s),0,1,0,Math.sin(s),0,Math.cos(s)),super.fromEquirectangular(t)}_createEquirectMaterial(){const t=new ShaderMaterial({name:"EquirectangularToCubeUV",uniforms:{envMap:{value:null},intensity:{value:1},rotationMatrix:{value:new Matrix3}},vertexShader:equilateralVertexShader,fragmentShader:equilateralFragmentShader,blending:NoBlending,depthTest:!1,depthWrite:!1});return this._equirectMaterial=t,t}}const equilateralVertexShader="\nprecision mediump float;\nprecision mediump int;\nattribute float faceIndex;\nvarying vec3 vOutputDirection;\nuniform mat3 rotationMatrix;\n\n// RH coordinate system; PMREM face-indexing convention\nvec3 getDirection( vec2 uv, float face ) {\n uv = 2.0 * uv - 1.0;\n vec3 direction = vec3( uv, 1.0 );\n if ( face == 0.0 ) {\n direction = direction.zyx; // ( 1, v, u ) pos x\n } else if ( face == 1.0 ) {\n direction = direction.xzy;\n direction.xz *= -1.0; // ( -u, 1, -v ) pos y\n } else if ( face == 2.0 ) {\n direction.x *= -1.0; // ( -u, v, 1 ) pos z\n } else if ( face == 3.0 ) {\n direction = direction.zyx;\n direction.xz *= -1.0; // ( -1, v, -u ) neg x\n } else if ( face == 4.0 ) {\n direction = direction.xzy;\n direction.xy *= -1.0; // ( -u, -1, v ) neg y\n } else if ( face == 5.0 ) {\n direction.z *= -1.0; // ( u, v, -1 ) neg z\n }\n return direction;\n}\n\nvoid main() {\n vOutputDirection = rotationMatrix * getDirection(uv, faceIndex);\n gl_Position = vec4(position, 1.0);\n}\n",equilateralFragmentShader="\nprecision mediump float;\nprecision mediump int;\nvarying vec3 vOutputDirection;\nuniform sampler2D envMap;\nuniform float intensity;\n\n#include <common>\n\nvoid main() { \n vec3 outputDirection = normalize(vOutputDirection);\n vec2 uv = equirectUv(outputDirection);\n gl_FragColor = vec4(texture2D(envMap, uv).rgb * intensity, 1.0);\n}\n";class EnvironmentDefinition{get lightSources(){return this._lightSources}set rotation(t){this._rotation!==t&&(this._rotation=t,this.needsUpdate=!0)}set intensity(t){this._intensity!==t&&(this._intensity=t,this.needsUpdate=!0)}constructor(t,e){var i,n;this.needsUpdate=!0,this._lightSources=[],t instanceof Scene?this.environmentScene=t:t instanceof CubeTexture?this.cubeTexture=t:t instanceof Texture&&(this.equirectangularTexture=t),(null==e?void 0:e.textureData)&&(this.textureData=null==e?void 0:e.textureData),this._rotation=null!==(i=null==e?void 0:e.rotation)&&void 0!==i?i:0,this._intensity=null!==(n=null==e?void 0:e.intensity)&&void 0!==n?n:1}createNewEnvironment(t){const e=this._createPmremTexture(t),i=this._detectLightSources(t,e);return this._lightSources=i.lightSources,null!=e?e:null}_getTextureOffset(){const t=this._rotation/(2*Math.PI)%1;return new Vector2(t,0)}_createPmremTexture(t){const e=new EnvironmentPmremGenertor(t);let i;return this.equirectangularTexture?(this.equirectangularTexture.offset.copy(this._getTextureOffset()),i=e.fromEquirectangularTexture(this.equirectangularTexture,{rotation:this._rotation,intensity:this._intensity})):this.cubeTexture?i=e.fromCubemap(this.cubeTexture):this.environmentScene&&(i=e.fromScene(this.environmentScene,.04)),this._debugScene=void 0,this.needsUpdate=!1,null==i?void 0:i.texture}_detectLightSources(t,e){const i=new LightSourceDetector;return this.equirectangularTexture&&0===this.rotation?i.detectLightSources(t,this.equirectangularTexture,this.textureData):e&&i.detectLightSources(t,e),i}createDebugScene(t,e){if(this._debugScene)return this._debugScene;this._debugScene=new Scene;const i=new EnvironmentMapDecodeMaterial(!0,!1);i.setSourceTexture(e.environment),LightSourceDetectorDebug.createPlane(this._debugScene,i);const n=this._detectLightSources(t,e.environment);return new LightSourceDetectorDebug(n).createDebugScene(this._debugScene),this._debugScene}}class SceneManager{onBeforeRender(){}constructor(t,e,i,n=CAMERA_TYPE.CAMERA_3D){this._depthWriteMaterial=new MeshBasicMaterial({colorWrite:!1}),this._maxAnisotropy=1,this._clock=new Clock,this._delta=0,this._renderListener=null,this._stopRendering=!1,this._forceRender=!1,this._lastChange=Date.now(),this._running=!1,this._perspectiveOffsetCamera=null,this._orthographicOffsetCamera=null,this._onAfterRender=()=>{},this._creator_=t,this._canvasID=i,this.createCameraControl(sanitizedCameraMode(n),e),this._setupScene(e,!1),this._lifeCycleManager.addEventListener(this)}addEventListener(t){throw new Error("Method not implemented.")}removeEventListener(t){throw new Error("Method not implemented.")}_changeCameraControl(t){this._cameraControl&&this._cameraControl.cleanUp(),t instanceof CameraControlFirstPerson&&(this._getInputManager().removeEventListener(7,this._renderListener),this._getInputManager().removeEventListener(8,this._renderListener)),this._cameraControl instanceof CameraControlFirstPerson&&(this._getInputManager().addEventListener(7,this._renderListener,this),this._getInputManager().addEventListener(8,this._renderListener,this)),this._cameraControl=t,this.cameraControlChanged()}cameraControlChanged(){}_addCameraControlListener(){this._cameraControl.addEventListener(0,()=>{var t;null===(t=this._roomleRenderer)||void 0===t||t.movingCameraStarts(),this._requestRender()},this),this._cameraControl.addEventListener(1,this._requestRender,this),this._cameraControl.addEventListener(2,()=>{var t;null===(t=this._roomleRenderer)||void 0===t||t.movingCameraStops(),this._requestRender()},this),this._cameraControl.addEventListener(6,this._requestRender,this)}_renderEverything(){var t;this._roomleRenderer&&(this._forceRender=!0,null===(t=this._roomleRenderer)||void 0===t||t.forceShadowUpdates(!1)),this._requestRender()}_renderWithoutShadowsAndAO(){this._roomleRenderer&&(this._forceRender=!0),this._requestRender()}_requestRender(){if(!this._renderer||this._stopRendering)return;const t=()=>{var e,i;this._delta=this._clock.getDelta(),this._animateCamera(),this._cameraControl.getCamera().layers.mask=65535,this._renderLoopFunction&&(this._renderLoopFunction(),this._renderLoopFunction=null),this.onBeforeRender(),this._roomleRenderer?(null===(e=this._statsHelper)||void 0===e||e.updateRenderInfo(this._roomleRenderer.renderer.info),this._roomleRenderer.render(this._scene,this._cameraControl.getCamera()),this._forceRender=!1,this._shouldRenderUi()&&this._renderUi()):(null===(i=this._statsHelper)||void 0===i||i.updateRenderInfo(this._renderer.info),this._renderer.render(this._scene,this._cameraControl.getCamera())),this._onAfterRender(),window.TWEEN&&TWEEN.update(),this._lastChange+3e3<Date.now()||this._stopRendering?this._running=!1:(this._running=!0,requestAnimationFrame(t))};this._lastChange=Date.now(),this._running||this._stopRendering||(this._running=!0,requestAnimationFrame(t))}_shouldRenderUi(){return this._pluginSystem&&this._pluginSystem.needsUiScene()}_renderUi(){const t=this._scene.background?this._scene.background.clone():null;this._scene.overrideMaterial=this._depthWriteMaterial,this._scene.background=null,this._renderer.render(this._scene,this._cameraControl.getCamera()),this._scene.overrideMaterial=null;const e=this._renderer.autoClear;this._renderer.autoClear=!1,this._renderer.clearDepth(),this._renderer.render(this._uiScene,this._cameraControl.getCamera()),this._renderer.autoClear=e,this._scene.background=t}_animateCamera(){this._cameraControl&&(this._cameraControl.animateCamera(this._delta)||!this.shouldClearShadowsAndAO()||this._forceRender)&&this._lightSetting instanceof DynamicLightSetting&&this._cameraControl.getCamera()instanceof PerspectiveCamera&&this._lightSetting.update(this._cameraControl.getCamera(),this._cameraControl.getTargetPosition()),this._environment&&this._environment.needsCamera()&&this._cameraControl instanceof CameraControl3D&&this._environment.updateCamera(this._cameraControl.getCamera())}shouldClearShadowsAndAO(){return!1}_setupScene(t,e){var i;const{x:n,y:s}=this._domHelper.getClientDimensions();this._scene=new Scene,this._uiScene=new Scene,(e=e||!1)||(this._scene.background=getColor(this._initData.colors.DEFAULT_BACKGROUND)),this._renderer=new WebGLRenderer({antialias:!0,alpha:!0});const a=this._initData.autoQuality?Math.min(window.devicePixelRatio,1.5):window.devicePixelRatio;this._renderer.setPixelRatio(a),this._renderer.setSize(n,s),this._renderer.outputColorSpace=SRGBColorSpace,this._renderer.autoClear=!1,this._renderer.shadowMap.enabled=!0,this._renderer.shadowMap.type=PCFSoftShadowMap,this._maxAnisotropy=this._renderer.capabilities.getMaxAnisotropy(),this._roomleRenderer=new RoomleWebGLRenderer(this._renderer,n,s),this._roomleRenderer.setQualityMap(standaloneConfiguratorQualityLevels),this._roomleRenderer.setAutoQuality(this._initData.autoQuality),null===(i=this._roomleRenderer)||void 0===i||i.setSize(n,s),this._renderer.domElement.classList.add(this._canvasID),this._domHelper.element.appendChild(this._renderer.domElement),this._getInputManager().addEvents(this._renderer.domElement),this._hdrEnvironmentLoader.registerEnvironmentChangedCallback(t=>{this._setEnvMap(t)}),this._initData.legacyLight?this.loadEnvMap("static/legacy_env-d5810ec5057d4716.exr"):this.loadEnvMap(this._initData.envMapUrl),this._requestRender(),window.addEventListener("resize",this,!1),window.addEventListener("keydown",this,!1),window.addEventListener("keyup",this,!1),document.addEventListener("visibilitychange",this),this._pluginSystem.init(this._scene,this._uiScene,this._cameraControl.getCamera().position),this._addCameraControlListener(),this.sceneChanged()}async loadEnvMap(t){await this._hdrEnvironmentLoader.loadUrl(this._renderer,t)}_setEnvMap(t){const{url:e,environmentMap:i}=t;this._scene.environment=i,this._scene.userData.environmentDefinition=new EnvironmentDefinition(i,{rotation:this._initData.envMapRotation,intensity:this._initData.legacyLight?.9:this._initData.envMapIntensity}),this._scene.userData.shadowFromEnvironment=!this._initData.legacyLight,this._environment instanceof GroundProjectedEnvironment&&this._environment.updateEnvironmentTexture(i),e===ENV_HDR_256_FILE_NAME&&window.requestIdleCallback(this.loadEnvMap.bind(this,"static/default_1k-2aa6d42244d30fb1.exr")),this._requestRender()}_tabVisible(){this.updateCamera(!1)}updateCamera(t=!0){var e;const{x:i,y:n}=this._domHelper.getClientDimensions();null===(e=this._roomleRenderer)||void 0===e||e.setSize(i,n),this._cameraControl.updateCamera(),this._renderEverything()}_onWindowResize(){const t=this._getInputManager();t&&t.updateSize(),this.updateCamera(),this._requestRender()}_isPartOfScene(t){return"Object3D"===t.type||"Mesh"===t.type||"GLB"===t.type||"GLTF"===t.type||"Group"===t.type}cleanUp(){this._getInputManager().removeEventListener(7,this._renderListener),this._getInputManager().removeEventListener(8,this._renderListener),this._cameraControl&&this._cameraControl.cleanUp(),this._stopRendering=!0}clearScene(){let t=[];this._scene.children.forEach(e=>{this._isPartOfScene(e)&&t.push(e)}),t.forEach(t=>{dispose(t),this._scene.remove(t)}),this._renderer.renderLists.dispose()}enableHD(t){this._renderer.capabilities.maxTextures>8&&t&&this.loadDynamicLightSetting(t),this._requestRender()}_loadGLTF(t,e,i,n,s,a,o){return new Promise((r,h)=>{this._staticItemLoader.loadGLTF(t,e,i,n,s,a,null,o).then(t=>{this._setCamera("GLTF",t.scene),r(t.scene)},h)})}_loadGLB(t,e,i,n,s,a,o,r){return new Promise((h,c)=>{this._staticItemLoader.loadGLB(t,e,i,n,s,a,o,r).then(t=>{this._setCamera("GLB",t.scene),h(t.scene)},c)})}_setCamera(t,e){if(!e)return void console.warn("could not set camera for gltf",e);const i=new Box3;i.setFromObject(e),"GLB"===t?this._cameraControl instanceof CameraControl3D&&this._cameraControl.updateToBounds(i,!1):"GLTF"===t&&(this._cameraControl instanceof CameraControl3D&&this._cameraControl.updateAndReset(i.getSize(new Vector3),i.getCenter(new Vector3),-15,70,5,!1),this._cameraControl instanceof CameraControl2D&&this._cameraControl.zoomToFitBounds(i,!0)),this.updateCamera()}showGUI(){if(this._initData.disableDebugGUI)return;const t=document.createElement("style");t.innerText=".dg.main{position:absolute;z-index:999;top:0;left:0;}",document.head.appendChild(t);let e=getGUI(!1);e&&(this._domHelper.element.appendChild(e.domElement),this._guiLoaded())}_guiLoaded(){let t=getGUI();if(!t)return;const e=t.addFolder("Scene Parameter"),i={intensity:this._initData.envMapIntensity,rotation:this._initData.envMapRotation};e.add(i,"intensity",0,4,.01).name("env map intensity").onChange(t=>{this.changeEnvironmentMapIntensity(t),this._requestRender()}),e.add(i,"rotation",0,2*Math.PI,.01).name("env map rotation").onChange(t=>{this._scene.userData.environmentDefinition.rotation=t,this._requestRender()}),this._lightSetting&&this._lightSetting.showGUI(),this._roomleRenderer&&this._roomleRenderer.showGUI(()=>this._requestRender()),this._environment&&this._environment.showGUI(()=>this._requestRender()),this._addGUIListener(t)}_addGUIListener(t){let e=t.__folders;Object.keys(e).forEach(t=>{let i=e[t];i.__folders&&Object.keys(i.__folders).forEach(t=>{let e=i.__folders[t];this._addGUIListener(e)}),i.__controllers&&i.__controllers.forEach(t=>{t.onFinishChange(()=>{this._guiParamChanged()})})})}_guiParamChanged(){this._renderEverything()}showStats(){import("./stats-helper-6ea0ac86.js").then(t=>this._statsHelper=new t.default)}_onKeyDown(t){}_onKeyUp(t){}pause(){this._getInputManager().removeEvents(this._renderer.domElement),window.removeEventListener("resize",this,!1),window.removeEventListener("keydown",this,!1),window.removeEventListener("keyup",this,!1),document.removeEventListener("visibilitychange",this)}resume(){this._renderer.domElement.classList.add(this._canvasID),this._domHelper.element.appendChild(this._renderer.domElement),this._getInputManager().addEvents(this._renderer.domElement),window.addEventListener("resize",this,!1),window.addEventListener("keydown",this,!1),window.addEventListener("keyup",this,!1),document.addEventListener("visibilitychange",this),this.updateCamera()}destroy(){this.pause(),this.cleanUp()}handleEvent(t){switch(t.type){case"resize":this._onWindowResize();break;case"keydown":if(t.target&&(t.target instanceof HTMLInputElement||t.target instanceof HTMLTextAreaElement))break;this._onKeyDown(t);break;case"keyup":if(t.target&&(t.target instanceof HTMLInputElement||t.target instanceof HTMLTextAreaElement))break;this._onKeyUp(t);break;case"visibilitychange":this._tabVisible()}}async loadSceneSettings(t){let e,i;return e=t.environment?new Promise(e=>{(new DynamicEnvironmentSettingLoader).load(this._scene,this._renderer.domElement,this._environment,t,this._maxAnisotropy).then(t=>{this._setEnvironment(t),e()})}):Promise.resolve(),t.lights?(this._lightSetting=new DynamicLightSetting(this._scene,this._lightSetting),i=this._lightSetting.loadFromObject(t)):i=Promise.resolve(),new Promise((t,n)=>{Promise.all([e,i]).then(()=>{this._renderEverything(),t()},n)})}setBackgroundColor(t){this._setEnvironment(new BackgroundEnvironment(this._scene,this._environment,new Color(t)))}setBackgroundImage(t){this._setEnvironment(new BackgroundEnvironment(this._scene,this._environment,null,this._renderer.domElement,t))}_setEnvironment(t){this._environment=t,this._renderEverything()}async loadDynamicLightSetting(t){this._lightSetting=new DynamicLightSetting(this._scene,this._lightSetting);let e=!1;if(t.url)await this._lightSetting.loadFromURL(t.url),e=!0;else if(t.json)await this._lightSetting.loadFromJSON(t.json),e=!0;else if(t.object)await this._lightSetting.loadFromObject(t.object),e=!0;else if(t.ls){const i=DynamicLightSettingLoader.createDynamicLightSettingSource(null,t.ls);await this._lightSetting.loadFromURL(i.url),e=!0}if(!e)throw new Error("No dynamic light setting source set");this._requestRender()}getScene(){return this._scene}updateScene(){var t;this._updateBounds(this.getBounds()),null===(t=this._roomleRenderer)||void 0===t||t.forceShadowUpdates(!0),this._renderEverything()}_updateBounds(t,e=!1){var i;t&&(this.updateEnvironment(t,e),this._lightSetting&&this._lightSetting.needsBounds()&&this._lightSetting.updateBounds(t),null===(i=this._roomleRenderer)||void 0===i||i.updateBounds(t),this._requestRender(),this._pluginSystem.updateBounds(t))}setCameraOffset(t){const e=this._cameraControl.getCamera(),i=e||e;(null==i?void 0:i.offset)?(i.offset=t,this._renderEverything()):console.warn("Cannot set offset, current camera does not support it")}getCameraOffset(){const t=this._cameraControl.getCamera(),e=t||t;return(null==e?void 0:e.offset)?JSON.parse(JSON.stringify(e.offset)):{left:0,top:0,right:1,bottom:1}}getOrthographicOffsetCamera(){if(!this._orthographicOffsetCamera){const t=this.getCameraOffset(),e=this._domHelper.getClientDimensions(),i=5;let n=e.x/e.y*i,s=i;const a=RoomleComponentFactoryInitializer();this._orthographicOffsetCamera=a.createOrthographicCamera(n/-2,n/2,s/2,s/-2,1,1e3,t),this._orthographicOffsetCamera.position.set(0,10,0),this._orthographicOffsetCamera.lookAt(new Vector3(0,0,0))}return this._orthographicOffsetCamera}getPerspectiveOffsetCamera(){if(!this._perspectiveOffsetCamera){const t=this.getCameraOffset(),e=this._domHelper.getClientDimensions(),i=e.x,n=e.y,s=RoomleComponentFactoryInitializer();this._perspectiveOffsetCamera=s.createPerspectiveCamera(30,i/n,.1,20,t)}return this._perspectiveOffsetCamera}updateEnvironment(t,e=!1){var i;if(t&&this._environment&&this._environment.needsBounds()){const i=t.getSize(new Vector3);(i.x+i.y+i.z!==0||e)&&this._environment.updateBounds(t.getSize(new Vector3),e)}null===(i=this._roomleRenderer)||void 0===i||i.updateEnvironment(t,e)}_onCameraIdle(){return!0}_onCameraMove(){return!0}exportImageFromCamera(t){this._onAfterRender=()=>{const e=this._renderer.domElement.toDataURL("image/jpeg",1),{left:i,right:n,top:s,bottom:a}=this.getCameraOffset(),o=n-i,r=s-a;if(1===o&&1===r)return download(t,e),void(this._onAfterRender=()=>{});const h=new Image;h.src=e,h.onload=()=>{const{naturalWidth:e,naturalHeight:n}=h,a=document.createElement("canvas");a.width=e*o,a.height=n*r;const c=a.getContext("2d"),d=e*i*-1,_=n*(1-s)*-1;c.drawImage(h,d,_),c.save(),download(t,a.toDataURL("image/jpeg",1)),this._onAfterRender=()=>{}}},this._requestRender()}changeEnvironmentMapIntensity(t){this._scene.userData.environmentDefinition.intensity=t}lockCamera(){this._cameraControl.lock()}unlockCamera(){this._cameraControl.unlock()}setEnvironmentMap(t,e,i,n){void 0!==t&&this._hdrEnvironmentLoader.loadUrl(this._renderer,t),void 0!==e&&(this._scene.userData.environmentDefinition.intensity=e),void 0!==i&&(this._scene.userData.environmentDefinition.rotation=i),void 0!==n&&(this._roomleRenderer.screenSpaceShadowParameters.maximumNumberOfLightSources=n,this._roomleRenderer.forceShadowUpdates(!1)),this._requestRender()}}__decorate([inject],SceneManager.prototype,"_domHelper",void 0),__decorate([inject],SceneManager.prototype,"_scriptLoader",void 0),__decorate([inject],SceneManager.prototype,"_lifeCycleManager",void 0),__decorate([inject],SceneManager.prototype,"_staticItemLoader",void 0),__decorate([inject],SceneManager.prototype,"_hdrEnvironmentLoader",void 0),__decorate([inject],SceneManager.prototype,"_initData",void 0),__decorate([inject],SceneManager.prototype,"_pluginSystem",void 0),__decorate([inject],SceneManager.prototype,"_imageRenderer",void 0);export{BackgroundEnvironment as B,CameraControl3D as C,DISTANCE_FACTOR as D,FloorEnvironment as F,LightSetting as L,SceneManager as S,TWEEN_FILE_NAME as T,CameraControl as a,CameraControl2D as b,CameraControlFirstPerson as c};
2
- //# sourceMappingURL=scene-manager-296a1b7b.js.map
1
+ import{_ as __decorate,i as inject,E as EventDispatcher,t as toRadiant,Q as position3VectorsAreEqual,T as position2VectorsAreEqual,U as compareBox3Size,w as getIdealDistance,y as toDegrees,V as MaterialCreator,X as createMaterial,Y as addTexture,Z as getGUI,$ as rotationQuaternionsAreEqual,a0 as getDelta,a1 as MIN_MOVE_DISTANCE,a2 as LightSourceDetector,a3 as EnvironmentMapDecodeMaterial,a4 as sanitizedCameraMode,e as CAMERA_TYPE,a5 as RoomleWebGLRenderer,a6 as standaloneConfiguratorQualityLevels,a7 as ENV_HDR_256_FILE_NAME,s as dispose,p as DynamicLightSettingLoader,x as RoomleComponentFactoryInitializer}from"./roomle-dependency-injection-a6b6e5b9.js";import{a as Vector3,by as debounce,J as PerspectiveCamera,V as Vector2,bA as areCameraParametersEqual,ab as Sphere,aa as Box3,ae as Euler,Q as Quaternion,al as deepMerge,O as Object3D,x as Mesh,bB as Shape,bC as Path,bD as ShapeGeometry,k as TextureLoader,bE as Fog,C as Color,p as RepeatWrapping,u as DoubleSide,N as OrthographicCamera,K as MathUtils,aB as handleJsonResponse,S as SpotLight,A as AmbientLight,D as DirectionalLight,R as RectAreaLight,bF as IcosahedronGeometry,aU as ShaderMaterial,b5 as PlaneGeometry,f as MeshBasicMaterial,bG as CircleGeometry,s as LineBasicMaterial,B as BufferGeometry,y as LineSegments,bH as PMREMGenerator,aT as Matrix3,a_ as NoBlending,a$ as Scene,af as CubeTexture,a6 as Texture,bI as Clock,bz as getColor,bu as WebGLRenderer,h as SRGBColorSpace,bd as PCFSoftShadowMap,bJ as download}from"./main-thread-to-worker-d5d5841d.js";var TWEEN_FILE_NAME="static/Tween-d57ee5d181fce582.js";class CameraControl extends EventDispatcher{constructor(t,e,i){if(super(),this._tweenEnd=null,this._cameraStandingStill=!0,this._pitch=toRadiant(10),this._yaw=toRadiant(-30),this._distance=-1,this._locked=!1,this._inputListeners=[],this._lerpEnabled=!0,this._creator_=t,this._inputManager=e,this._initInputListener(),this._addInputListeners(),this._cameraPosition=new Vector3,this._targetPosition=new Vector3,i?this._cameraPosition.copy(i):this._cameraPosition=new Vector3(0,.5,3),this._initData.debug){const t=this.getDebugCameraPosition();t&&this._setCurrentCameraParameters(t)}let n=this._domHelper.getClientDimensions();this._width=n.x,this._height=n.y,this._dispatchCameraIdle=debounce(this._dispatchCameraIdle.bind(this),32)}getCamera(){return this._getCamera()}_addInputListeners(){this._inputListeners.forEach(t=>{this._inputManager.addEventListener(t.key,t.fun,this)})}_removeInputListeners(){this._inputListeners.forEach(t=>{this._inputManager.removeEventListener(t.key,t.fun)}),this._inputListeners=[]}cleanUp(){this._removeInputListeners()}animateCamera(t){let e=this._cameraPosition;if(!e||position3VectorsAreEqual(e,this.getCamera().position))return this._cameraStandingStill||(this._cameraStandingStill=!0,setTimeout(()=>this._dispatchCameraIdle(),16),this._initData.debug&&this.saveDebugCameraPosition()),!1;if(this._cameraStandingStill&&this.dispatchEvent(7,3),this._cameraStandingStill=!1,this._lerpEnabled&&!this._tweenEnd){let i=this.getCamera().position.clone();const n=Math.min(10*t,1);i.lerp(e,n),this.getCamera().position.copy(i)}else this.getCamera().position.copy(e);return!0}getDebugCameraPosition(){return JSON.parse(localStorage.getItem("debug_camera_position"))}saveDebugCameraPosition(){localStorage.setItem("debug_camera_position",JSON.stringify(this.getCurrentCameraParameters()))}_dispatchCameraIdle(){this.dispatchEvent(8,3)}_tweenCameraParameter(t,e,i=!1){return new Promise(n=>{if(e.yaw-t.yaw<=-Math.PI?t.yaw-=2*Math.PI:e.yaw-t.yaw>=Math.PI&&(t.yaw+=2*Math.PI),window.TWEEN){if(null!==this._tweenEnd&&this._tweenEnd.blockOtherTweens)return;this._tweenEnd=e,new TWEEN.Tween(t).to(e,400).easing(TWEEN.Easing.Sinusoidal.In).onUpdate(()=>{this.dispatchEvent(1,3),this._yaw=t.yaw,this._pitch=t.pitch,this._distance=t.distance,this._setCameraNear(),this._update(new Vector3(t.targetX,t.targetY,t.targetZ),i)}).onComplete(()=>{this.dispatchEvent(2,3),this._dispatchCameraIdle(),this._tweenEnd=null,n()}).start(),this.dispatchEvent(0,3)}})}_setCameraNear(){const t=this.getCamera();if(t instanceof PerspectiveCamera){const e=Math.max(.1,this._distance/6);t.near=e}}getCurrentCameraParameters(){const t=this._targetPosition.clone();return{yaw:this._yaw,pitch:this._pitch,distance:this._distance,targetX:t.x,targetY:t.y,targetZ:t.z}}_setCurrentCameraParameters(t){this._yaw=t.yaw,this._pitch=t.pitch,this._distance=t.distance,this._targetPosition.copy(new Vector3(t.targetX,t.targetY,t.targetZ))}_rotateHorizontal(t){this._yaw-=t,this._yaw<-Math.PI?this._yaw+=2*Math.PI:this._yaw>Math.PI&&(this._yaw-=2*Math.PI)}_rotateVertical(t){this._pitch+=t,this._pitch<-Math.PI?this._pitch+=2*Math.PI:this._pitch>Math.PI&&(this._pitch-=2*Math.PI)}saveState(t){if(t||!this._stateSaved){let t=this._yaw,e=this._pitch,i=this._distance,n=this._targetPosition.clone();if(this._stateSaved={yaw:t,pitch:e,distance:i,targetX:n.x,targetY:n.y,targetZ:n.z,blockOtherTweens:!0},this._getCamera().fov){let t=this._getCamera();this._stateSaved.fov=t.fov,this._stateSaved.near=t.near,this._stateSaved.far=t.far}return this._stateSaved}return null}resetToState(){if(this._stateSaved){this._stateSaved.blockOtherTweens=!1;let t=this._targetPosition.clone();this._tweenCameraParameter({yaw:this._yaw,pitch:this._pitch,distance:this._distance,targetX:t.x,targetY:t.y,targetZ:t.z},this._stateSaved,!0)}this._stateSaved=null}setToState(t,e){this._tweenCameraParameter(t,e,!0)}hasSavedState(){return null!=this._stateSaved}lock(){this._locked=!0}unlock(){this._locked=!1}isLocked(){return this._locked}getTargetPosition(){return this._targetPosition}_saveYawAndPitch(){this._getCamera().userData.yaw=this._yaw,this._getCamera().userData.pitch=this._pitch}getInputPosition(t){const{x:e,y:i}=this._domHelper.getClientDimensions();return new Vector3(t.x/e*2-1,-t.y/i*2+1,.5)}addLightContainer(t){t.name="lights";const e=this._getCamera(),i=e.children.find(t=>"lights"===t.name);i&&e.remove(i),e.add(t)}checkNearFarDistance(t){if(!t)return;const e=this._cameraPosition.distanceTo(t),i=this._getCamera();i instanceof PerspectiveCamera&&e>i.far&&(i.far=e+1)}setBounds(t){this._boundingBox=t}}__decorate([inject],CameraControl.prototype,"_domHelper",void 0),__decorate([inject],CameraControl.prototype,"_initData",void 0);class ZoomChangeEvent{constructor(t,e){this.minZoom=!1,this.maxZoom=!1,this.minZoom=t,this.maxZoom=e}}const DISTANCE_FACTOR=2.725;class CameraControl3D extends CameraControl{constructor(t,e,i,n){super(t,e,i),this._bounds=new Vector3,this._scale=1,this._state=0,this._zoomSpeed=Math.pow(.95,3),this.minDistance=0,this.maxDistance=5,this.minPolarAngle=toRadiant(0),this.maxPolarAngle=toRadiant(85),this._objectRotation=0,this.minAzimuthAngle=Number.NEGATIVE_INFINITY,this.maxAzimuthAngle=Number.POSITIVE_INFINITY,this._zoomDistance=.1,this._userInteraction=!1,this._currentZoomHash="",this._maxZoomedIn=!1,this._maxZoomedOut=!1,this._panningEnabled=!1,this._targetPositionIsPanned=!1,n?this._camera=n:this._initCamera(),this._targetPosition||(this._targetPosition=new Vector3(0,0,0),this._targetPositionIsPanned=!1);const{cameraRestriction:s,zoomDistance:a,minVerticalCameraAngle:o,maxVerticalCameraAngle:r,minHorizontalCameraAngle:h,maxHorizontalCameraAngle:c}=this._initData;if(a&&(this._zoomDistance=a/100),void 0!==o&&(this.minPolarAngle=toRadiant(o<0?o:-1*o)),void 0!==r&&(this.maxPolarAngle=toRadiant(r)),void 0!==h&&(this.minAzimuthAngle=toRadiant(h<0?h:-1*h)),void 0!==c&&(this.maxAzimuthAngle=toRadiant(c)),void 0!==s){let t=Math.abs(toRadiant(s));this.minAzimuthAngle=-t,this.maxAzimuthAngle=t,this.maxPolarAngle=Math.min(t,toRadiant(85))}this._update()}_getCamera(){return this._camera||this._initCamera(),this._camera}getCamera(){return super.getCamera()}_initCamera(){this._camera=new PerspectiveCamera,this._camera.fov=30,this._camera.aspect=this._width/this._height,this._camera.near=.1,this._camera.far=100,this._camera.updateProjectionMatrix(),this._camera.layers.set(3),this._camera.layers.enable(1),this._camera.layers.enable(2),this._camera.layers.enable(6),this._camera.layers.enable(5)}setObjectRotation(t){this._objectRotation=t}getObjectRotation(){return this._objectRotation}updateCamera(){let{x:t,y:e}=this._domHelper.getClientDimensions();this._camera.aspect=t/e,this._camera.updateProjectionMatrix()}animateCamera(t){if(!super.animateCamera(t))return!1;let e=this._targetPosition;return!!e&&(this.getCamera().lookAt(e),!0)}_initInputListener(){this._inputListeners.push({key:3,fun:()=>{this._state=1}}),this._inputListeners.push({key:6,fun:t=>{var e,i;1!==this._state||this._locked||(this._userInteraction=!0,!(void 0!==(null===(e=t.event)||void 0===e?void 0:e.shiftKey)&&(null===(i=t.event)||void 0===i?void 0:i.shiftKey))&&this._panningEnabled&&this.disablePanning(),this._move(new Vector2(t.position.x,t.position.y),t.type))}}),this._inputListeners.push({key:11,fun:t=>{1===this._state||this._locked||(this._userInteraction=!0,this._pan(new Vector2(t.position.x,t.position.y),t.type))}}),this._inputListeners.push({key:4,fun:t=>{1===this._state&&this.dispatchEvent(2,t.type),this._state=0,this._orbitPosition=null,this._lerpEnabled=!0}}),this._inputListeners.push({key:7,fun:({event:t})=>{this._maxZoomedIn||(t&&(t.preventDefault(),t.stopPropagation()),this.zoomIn())}}),this._inputListeners.push({key:8,fun:({event:t})=>{this._maxZoomedOut||(t&&(t.preventDefault(),t.stopPropagation()),this.zoomOut())}})}_panTargetPosition(t){const e=t.clone().sub(this._orbitPosition),i=this._domHelper.element,n=this._targetPosition.project(this._camera),s=Math.max(2,4*(1-this._distance/this.maxDistance));n.x=n.x-e.x/i.clientHeight*s,n.y=n.y+e.y/i.clientHeight*s,this._targetPositionIsPanned=!0,this._targetPosition.copy(n.unproject(this._camera))}_pan(t,e){this._lerpEnabled=!1,this._orbitPosition||(this._orbitPosition=new Vector2(t.x,t.y),this.dispatchEvent(0,e)),this._panTargetPosition(t),position2VectorsAreEqual(this._orbitPosition,t)||this.dispatchEvent(1,e),this._orbitPosition.copy(t),this._update()}_move(t,e){this._orbitPosition||(this._orbitPosition=new Vector2(t.x,t.y),this.dispatchEvent(0,e));const i=t.clone().sub(this._orbitPosition),n=this._domHelper.element;this._panningEnabled?this._panTargetPosition(t):(this._rotateHorizontal(2*Math.PI*i.x/n.clientWidth*1),this._rotateVertical(2*Math.PI*i.y/n.clientHeight*1)),position2VectorsAreEqual(this._orbitPosition,t)||this.dispatchEvent(1,e),this._orbitPosition.copy(t),this._update()}checkBoundsAndPlaceCamera(t,e=!0){this._boundingBox&&compareBox3Size(t,this._boundingBox)<=0?this.setBounds(t):this.zoomToFitBounds(t,e)}zoomToFitBounds(t,e=!0){this.setBounds(t);const i=t.getSize(new Vector3);if(this._initData.debug||i.x+i.y+i.z===0)return;const n=this.getCurrentCameraParameters(),s=t.getCenter(new Vector3),a=this._setDistanceAndRangesBasedOnBounds(i);this._checkZoomDistance(t,a);const o={yaw:e?this._yaw:n.yaw,pitch:e?this._pitch:n.pitch,distance:a,targetX:s.x,targetY:s.y,targetZ:s.z};areCameraParametersEqual(n,o)||this._tweenCameraParameter(n,o,!1)}updateToBounds(t,e,i=!0,n){if(this.setBounds(t),this._initData.debug)return;const s=t.getCenter(new Vector3);n?(this._targetPosition=n.clone(),this._targetPositionIsPanned=!1):this._targetPositionIsPanned||(this._targetPosition=new Vector3(s.x,s.y,s.z));const a=this.getCurrentCameraParameters(),o=t.getSize(new Vector3);if(i){const i=this._setDistanceAndRangesBasedOnBounds(o);this._distance=i,this._checkZoomDistance(t,i),this._userInteraction?this._tweenCameraParameter(a,{yaw:this._yaw,pitch:this._pitch,distance:this._distance,targetX:this._targetPosition.x,targetY:this._targetPosition.y,targetZ:this._targetPosition.z},e):this._update()}else this._setDistanceAndRangesBasedOnBounds(o,!1);this._update()}_checkZoomDistance(t,e){const i=t.getBoundingSphere(new Sphere);e-i.radius<this._zoomDistance&&(console.warn("the initial camera position is closer than the zoomDistance param, zoomDistance is set to initial camera position."),this._zoomDistance=e-i.radius)}_setDistanceAndRangesBasedOnBounds(t,e=!0){const{offsetWidth:i,offsetHeight:n}=this._getOffset();this._bounds.copy(t);const{cameraSpacing:s}=this._initData;t.addScalar(s/100),this.minDistance=Math.sqrt(t.x*t.x+t.y*t.y+t.z*t.z);const a=Math.max(t.x,t.y),{x:o,y:r}=this._getMargin(i,n),h=getIdealDistance(t.x+o,t.y+r,t.z,this._camera.fov,i,n);return this._distance<h&&e&&(this._distance=h),this.maxDistance=h+a,this.maxDistance<2&&(this.maxDistance=2),this._camera.far=5*this.maxDistance,this._setCameraNear(),h}_getIdealDistance(){const{offsetWidth:t,offsetHeight:e}=this._getOffset(),{x:i,y:n}=this._getMargin(t,e);return getIdealDistance(this._bounds.x+i,this._bounds.y+n,this._bounds.z,this._camera.fov,t,e)}_getOffset(){const t=this._domHelper.getClientDimensions(),e=t.x,i=t.y;return{offsetWidth:this._camera.offset?e-e*this._camera.offset.left-e*(1-this._camera.offset.right):e,offsetHeight:this._camera.offset?i-i*this._camera.offset.bottom-i*(1-this._camera.offset.top):i}}_getMargin(t,e){let i=this._bounds.x/2,n=this._bounds.y/2;return t>1080&&(i+=this._bounds.x<.3?.2:0,i+=this._bounds.x*(t/1080-1)),e>1080&&(i+=this._bounds.y<.3?.2:0,n+=this._bounds.y*(e/1080-1)),{x:i,y:n}}reset(t,e,i,n,s=!0){const a=t.getSize(new Vector3);if(a){if(e)this._targetPosition.copy(e);else{const e=t.getCenter(new Vector3);this._targetPosition.copy(e)}const o=this.getCurrentCameraParameters();if(i||(i=-30),n||(n=10),i+=toDegrees(this._objectRotation),this._initData.debug)return this._distance=this._setDistanceAndRangesBasedOnBounds(a),this._update(this._targetPosition),void this._setDistanceAndRangesBasedOnBounds(a);const r=this._setDistanceAndRangesBasedOnBounds(a),h=toRadiant(n),c=toRadiant(i);let d=this._targetPosition.clone();s?this._tweenCameraParameter(o,{yaw:c,pitch:h,distance:r,targetX:d.x,targetY:d.y,targetZ:d.z},!0):(this._pitch=h,this._yaw=c,this._distance=r,this._update(this._targetPosition))}else console.warn("you cant reset without bounds!")}updateAndReset(t,e,i,n,s,a=!0){const o=new Vector3(-t.x/2,0,-t.z/2),r=new Vector3(t.x/2,t.y,t.z/2);if(this._boundingBox=new Box3(o,r),s&&t.addScalar(s),e?this._targetPosition.copy(e):(this._targetPosition=new Vector3(0,t.y/2,0),this._targetPositionIsPanned=!1),-1===this._distance){const e=this._setDistanceAndRangesBasedOnBounds(t);this._distance=Math.max(2,e)}const h=this.getCurrentCameraParameters();i||(i=-30),n||(n=10),i+=toDegrees(this._objectRotation),this._pitch=toRadiant(n),this._yaw=toRadiant(i),this._setDistanceAndRangesBasedOnBounds(t);let c=this._targetPosition.clone();a?this._tweenCameraParameter(h,{yaw:this._yaw,pitch:this._pitch,distance:this.maxDistance,targetX:c.x,targetY:c.y,targetZ:c.z},!0):this._update(this._targetPosition)}_update(t,e){this._initData.debug?this._pitch=Math.max(toRadiant(-89),Math.min(toRadiant(89),this._pitch)):(this._yaw=Math.max(this.minAzimuthAngle,Math.min(this.maxAzimuthAngle,this._yaw)),this._pitch=Math.max(this.minPolarAngle,Math.min(this.maxPolarAngle,this._pitch))),this._saveYawAndPitch();const i=new Euler(-this._pitch,this._yaw,0,"ZYX"),n=(new Quaternion).setFromEuler(i),s=new Vector3(0,0,-1);s.applyQuaternion(n),this._distance*=this._scale,this._initData.debug||(this._distance=Math.min(this.maxDistance,this._distance)),t&&this._targetPosition.copy(t);const a=this._targetPosition.clone().sub(s.multiplyScalar(this._distance));if(this._initData.debug)this._cameraPosition.copy(a),this._zoomChanged(!1,!1);else if(e)this._cameraPosition.copy(a);else{const t=this._getCameraSphere(a);null!=this._boundingBox&&this._boundingBox.intersectsSphere(t)&&this._scale>=1?this._distance+=.1:null==this._boundingBox||this._boundingBox.intersectsSphere(t)?this._zoomChanged(!1,!0):(this._cameraPosition.copy(a),this._distance===this.maxDistance?this._zoomChanged(!0,!1):this._zoomChanged(!1,!1))}this._scale=1}_zoomChanged(t,e){let i=t+""+e;0===this._currentZoomHash.length||this._currentZoomHash!==i?(this.dispatchEvent(5,new ZoomChangeEvent(t,e)),this._currentZoomHash=i):t||e||this.dispatchEvent(5,new ZoomChangeEvent(t,e)),this._maxZoomedIn=e,this._maxZoomedOut=t}zoomTo(t){return this._tweenCameraParameter(this.getCurrentCameraParameters(),t,!0)}_getCameraSphere(t){const e=Math.max(this._bounds.x,this._bounds.y),i=Math.max(e/10,this._zoomDistance);return new Sphere(t,i)}zoomIn(t){this._lerpEnabled=!0,this._scale*=t?Math.pow(.95,t):this._zoomSpeed,this._setCameraNear(),this._update(),this.dispatchEvent(3)}zoomOut(t){this._lerpEnabled=!0,this._scale/=t?Math.pow(.95,t):this._zoomSpeed,this._setCameraNear(),this._update(),this.dispatchEvent(4)}clear(){this._userInteraction=!1,this._initData.debug||(this._distance=-1,this._targetPosition=new Vector3(0,0,0),this._targetPositionIsPanned=!1)}async moveCamera(t){const{x:e,y:i,z:n}=this._boundingBox.getCenter(new Vector3);t.targetX=t.targetX||e,t.targetY=t.targetY||i,t.targetZ=t.targetZ||n,t.distance=t.distance||this._getIdealDistance();const s=this.getCurrentCameraParameters(),a=deepMerge(JSON.parse(JSON.stringify(s)),t);return this._tweenCameraParameter(s,a,!0)}enablePanning(){this._lerpEnabled=!1,this._panningEnabled=!0}disablePanning(){this._lerpEnabled=!1,this._panningEnabled=!1}getKernelZoomFactor(){const t=this.maxDistance;return 1-this._distance/(t-2)+.2}}class Environment{constructor(t,e){this._scene=t,e&&(e.removeFromScene(),e.cleanUp())}updateCamera(t){}reload(){this.removeFromScene(),this.addToScene()}updateBounds(t,e){this._bounds=t}cleanUp(){this._scene=null}}class BakedShadowPlane{constructor(t){this._innerSize=1,this._outerSize=100,this._plane=new Object3D,this._plane.rotation.x=-Math.PI/2;const e=MaterialCreator.createMeshStandardMaterial({});this._innerPlaneMesh=new Mesh,this._innerPlaneMesh.layers.set(2),this._innerPlaneMesh.material=e,this._innerPlaneMesh.receiveShadow=!0,this._outerPlaneMesh=new Mesh,this._outerPlaneMesh.layers.set(2),this._outerPlaneMesh.material=e,this._outerPlaneMesh.receiveShadow=!0,this._plane.add(this._innerPlaneMesh),this._plane.add(this._outerPlaneMesh),this._innerSize=1,this._outerSize=t,this._updatePlane(this._innerSize,this._outerSize)}getRootNode(){return this._plane}getInnerPlane(){return this._innerPlaneMesh}getOuterPlane(){return this._outerPlaneMesh}updateSize(t){this._innerSize=t,this._updatePlane(this._innerSize,this._outerSize)}_updatePlane(t,e){const i=new Shape;i.moveTo(-t/2,-t/2),i.lineTo(-t/2,t/2),i.lineTo(t/2,t/2),i.lineTo(t/2,-t/2),i.lineTo(-t/2,-t/2);const n=new Shape;n.moveTo(-e/2,-e/2),n.lineTo(-e/2,e/2),n.lineTo(e/2,e/2),n.lineTo(e/2,-e/2),n.lineTo(-e/2,-e/2);const s=new Path;s.moveTo(-t/2,-t/2),s.lineTo(-t/2,t/2),s.lineTo(t/2,t/2),s.lineTo(t/2,-t/2),s.lineTo(-t/2,-t/2),n.holes.push(s);const a=new ShapeGeometry(i);this._innerPlaneMesh.geometry&&this._innerPlaneMesh.geometry.dispose(),this._innerPlaneMesh.geometry=a;const o=new ShapeGeometry(n);this._outerPlaneMesh.geometry&&this._outerPlaneMesh.geometry.dispose(),this._outerPlaneMesh.geometry=o;const r=a.attributes.uv.clone();a.setAttribute("uv2",r);const h=a.attributes.uv2.array;for(let t=0;t<h.length;++t)h[t]+=.5}}class FloorEnvironment extends Environment{constructor(t,e,i){super(t,e),this._longestSide=2,this._bakedShadowPlane=new BakedShadowPlane(100),this._fog=i||!1,this._textureLoader=new TextureLoader,this.addToScene()}needsBounds(){return!0}needsCamera(){return this._fog}needsRotation(){return!1}updateBounds(t){return super.updateBounds(t),this._longestSide=Math.max(t.x,t.z),this._update(),!0}updateCamera(t){this._cameraDistance=t.position.distanceTo(new Vector3(0,0,0)),this._update()}_update(){this._fog&&this._updateFog()}_updateFog(){let t=this._longestSide/2;this._scene.fog=new Fog(16185078,this._cameraDistance+t+3,this._cameraDistance+t+3+1),this._scene.background=new Color(16185078)}_updateFloor(){if(this._floorMaterial)this._bakedShadowPlane.getOuterPlane().material=this._floorMaterial,this._bakedShadowPlane.getInnerPlane().material=this._floorMaterial;else{let t=this._width/1e3,e=this._height/1e3;this._repeatable&&(this._floorTexture.wrapS=RepeatWrapping,this._floorTexture.wrapT=RepeatWrapping,this._floorTexture.repeat.set(100/t,100/e));let i=MaterialCreator.createMeshStandardMaterial({map:this._floorTexture,side:DoubleSide});this._bakedShadowPlane.getInnerPlane().material=i,this._bakedShadowPlane.getOuterPlane().material=i}}addToScene(){this._scene&&this._scene.add(this._bakedShadowPlane.getRootNode())}removeFromScene(){this._scene.remove(this._bakedShadowPlane.getRootNode())}setFloorMaterial(t,e,i,n){return this._width=e,this._height=i,this._repeatable=n,this._floorPromise=new Promise((e,i)=>{this._textureLoader.load(t,t=>{this._floorTexture=t,e()},null,i)}),new Promise((t,e)=>{this._floorPromise.then(()=>{this._updateFloor(),this._update(),t()},e)})}changeFloorMaterial(t,e){this._floorPromise=new Promise((i,n)=>{this._floorMaterial=createMaterial(t),this._rapiAccess.getTexturesOf(t).then(t=>{if(t.length>0){let s=[];t.forEach(t=>{s.push(addTexture(this._dataSyncer.requestAsset(t.image,!0),t,this._floorMaterial,e,1,1))}),Promise.all(s).then(()=>{setTimeout(()=>i(),0)},n)}else setTimeout(()=>i(),0)})});let i=[this._floorPromise];return new Promise((t,e)=>{Promise.all(i).then(()=>{this._updateFloor(),this._update(),t()},e)})}showGUI(){this._floorMaterial?this._addGUI():this._floorPromise&&this._floorPromise.then(()=>this._addGUI())}_addGUI(){let t=getGUI();if(!t)return;let e=t.addFolder("Floor");e.add(this._floorMaterial,"roughness").min(0).max(1).step(.01),e.add(this._floorMaterial,"reflectivity").min(0).max(1).step(.01),e.add(this._floorMaterial,"clearCoat").min(0).max(1).step(.01),e.add(this._floorMaterial,"clearCoatRoughness").min(0).max(1).step(.01),e.add(this._floorMaterial,"opacity").min(0).max(1).step(.01),e.add(this._floorMaterial,"metalness").min(0).max(1).step(.01),e.add(this._floorMaterial,"bumpScale").min(0).max(1).step(.01)}}__decorate([inject],FloorEnvironment.prototype,"_rapiAccess",void 0),__decorate([inject],FloorEnvironment.prototype,"_dataSyncer",void 0);class CameraControl2D extends CameraControl{constructor(t,e,i,n){super(t,e,i),this._scale=1,this._cameraZoom=1,this._state=0,this._size=5,this._lastPosition=new Vector2,this._zoomPosition=new Vector3,this._lastZoom=0,this._zoomSpeed=Math.pow(.95,2),n?(this._camera=n,this._cameraPosition=(new Vector3).copy(this._camera.position)):this._initCamera(i||new Vector3(0,10,0))}_getCamera(){return this._camera||this._initCamera(new Vector3(0,10,0)),this._camera}_initCamera(t){let{x:e,y:i}=this._domHelper.getClientDimensions(),n=e/i*this._size,s=this._size;this._camera=new OrthographicCamera(n/-2,n/2,s/2,s/-2,1,1e3),this._camera.position.copy(t),this._cameraPosition=t,this._camera.lookAt(new Vector3(0,0,0))}updateCamera(){let{x:t,y:e}=this._domHelper.getClientDimensions(),i=t/e*this._size,n=this._size;this._camera.left=i/-2,this._camera.right=i/2,this._camera.top=n/2,this._camera.bottom=n/-2,this._camera.updateProjectionMatrix()}_initInputListener(){this._inputListeners.push({key:3,fun:t=>{this._locked||(this._state=1,this._lastPosition.set(t.positionRelative.x,t.positionRelative.y),this.dispatchEvent(0))}}),this._inputListeners.push({key:6,fun:t=>{1!==this._state||this._locked||(this._move(new Vector2(t.positionRelative.x,t.positionRelative.y),t.type),this.dispatchEvent(1))}}),this._inputListeners.push({key:4,fun:t=>{1===this._state&&this.dispatchEvent(2),this._state=0}}),this._inputListeners.push({key:7,fun:t=>{t.event&&(t.event.stopPropagation(),t.event.preventDefault()),this.dispatchEvent(3),this._scale/=this._zoomSpeed,this._zoomTo(t.positionRelative),this._update()}}),this._inputListeners.push({key:8,fun:t=>{t.event&&(t.event.stopPropagation(),t.event.preventDefault()),this.dispatchEvent(4),this._scale*=this._zoomSpeed,this._zoomTo(t.positionRelative),this._update()}})}_zoomTo(t){if(Date.now()-this._lastZoom>200){let e=new Vector3(t.x,t.y,0);e.unproject(this._camera),this._zoomPosition.copy(e)}this._lastZoom=Date.now()}_move(t,e){let i=new Vector3,n=new Vector3(this._lastPosition.x,this._lastPosition.y,0),s=new Vector3(t.x,t.y,0);n.unproject(this._camera),s.unproject(this._camera),i.subVectors(s,n),this._cameraPosition.x-=i.x*(2===e?1.1:1),this._cameraPosition.z-=i.z*(2===e?1.1:1),this._lastPosition.copy(t)}zoomToFitBounds(t,e,i){if(compareBox3Size(t,this._boundingBox)<0&&!i)return void this.setBounds(t);this.setBounds(t);const n=t.getSize(new Vector3),s=t.getCenter(new Vector3),a=n.x/-2/this._camera.left,o=n.z/-2/this._camera.bottom,r=1/Math.max(a,o);(r<this._cameraZoom||e)&&(this._scale=r,this._cameraZoom=r,this._cameraPosition.x=s.x,this._cameraPosition.z=s.z)}_update(t){this._scale=Math.min(this._scale,5),this._scale=Math.max(this._scale,.1);let e=(new Vector3).subVectors(this._zoomPosition,this._cameraPosition).multiplyScalar((this._scale-this._cameraZoom)/this._scale);this._cameraPosition.x+=e.x,this._cameraPosition.z+=e.z,this._cameraZoom!==this._scale&&this.dispatchEvent(5,new ZoomChangeEvent(.1===this._scale,5===this._scale)),this._cameraZoom=this._scale,this._camera.updateProjectionMatrix()}animateCamera(t){if(!super.animateCamera(t)&&Math.abs(this._cameraZoom-this._camera.zoom)<=.01)return!1;const e=Math.min(10*t,1);return this._camera.zoom=MathUtils.lerp(this._camera.zoom,this._cameraZoom,e),!0}getKernelZoomFactor(){const t=1e3*(this._camera.right-this._camera.left);return this._domHelper.element.clientWidth/t*this._camera.zoom}}const KEYBOARD_ROTATION_ANGLE=Math.PI/4;class CameraControlFirstPerson extends CameraControl{constructor(t,e,i,n){super(t,e,i),this._state=0,this._rotationSpeed=1,this._keyMap=new Map,this.minPolarAngle=toRadiant(-60),this.maxPolarAngle=toRadiant(60),this._camera=n||new PerspectiveCamera,this._camera.fov=70,this._camera.aspect=this._width/this._height,this._camera.near=.1,this._camera.far=100,this._camera.updateProjectionMatrix(),this._camera.layers.set(3),this._camera.layers.enable(1),this._camera.layers.enable(2),this._camera.layers.enable(6),this._camera.layers.enable(5),i?this._camera.position.set(i.x,1.5,i.z):this._camera.position.set(0,1.5,0),this._cameraPosition=new Vector3,this._cameraPosition.copy(this._camera.position),this._cameraRotation=new Quaternion,this._pitch=0,this._yaw=0;let s=new Euler(-this._pitch,this._yaw,0,"ZYX");this._cameraRotation.setFromEuler(s),window.addEventListener("gamepadconnected",this._gamepadConnected.bind(this)),window.addEventListener("gamepaddisconnected",this._gamepadDisconnected.bind(this))}_gamepadConnected(t){this.startButtonPressListener()}_gamepadDisconnected(t){window.cancelAnimationFrame(this._listenerLoopAnimationFrame)}startButtonPressListener(){this._listenerLoopAnimationFrame=window.requestAnimationFrame(()=>{this.buttonPressListener()})}buttonPressListener(){let t=navigator.getGamepads()[0];this._checkRightStick(t),this._checkLeftStick(t),this._checkButtons(t),this._processKeyMap(this._keyMap,.001),this.startButtonPressListener()}_checkRightStick(t){let e=t.axes[2],i=t.axes[3];Math.abs(e)>.2&&(this._rotateHorizontal(.01*KEYBOARD_ROTATION_ANGLE*e),this._update(),this.dispatchEvent(1)),Math.abs(i)>.2&&(this._rotateVertical(.01*KEYBOARD_ROTATION_ANGLE*i),this._update(),this.dispatchEvent(1))}_checkLeftStick(t){let e=t.axes[0],i=t.axes[1];Math.abs(i)>.2?i<0?this._keyMap.set(87,!0):this._keyMap.set(83,!0):t.buttons&&t.buttons[12]&&t.buttons[12].pressed?this._keyMap.set(87,!0):t.buttons&&t.buttons[13]&&t.buttons[13].pressed?this._keyMap.set(83,!0):(this._keyMap.set(87,!1),this._keyMap.set(83,!1)),Math.abs(e)>.2?e<0?this._keyMap.set(65,!0):this._keyMap.set(68,!0):(this._keyMap.set(65,!1),this._keyMap.set(68,!1))}_checkButtons(t){t.buttons&&t.buttons[6]&&t.buttons[6].pressed?this._keyMap.set(16,!0):this._keyMap.set(16,!1),t.buttons&&t.buttons[14]&&t.buttons[14].pressed?(this._keyMap.set(37,!0),this.dispatchEvent(1)):this._keyMap.set(37,!1),t.buttons&&t.buttons[15]&&t.buttons[15].pressed?(this._keyMap.set(39,!0),this.dispatchEvent(1)):this._keyMap.set(39,!1)}animateCamera(t){let e=this._cameraPosition,i=this._cameraRotation,n=this.getCamera(),s=position3VectorsAreEqual(e,n.position),a=rotationQuaternionsAreEqual(i,n.quaternion);if(!e||s&&a)return!1;let o=this.getCamera().position.clone(),r=Math.min(10*t,1);o.lerp(e,r),this.getCamera().position.copy(o);let h=this.getCamera().quaternion.clone(),c=Math.min(5*t,1);h.slerp(i,c),this.getCamera().setRotationFromQuaternion(h);let d=!1;return this._keyMap.forEach(t=>{t&&(d=!0)}),d&&this._processKeyMap(this._keyMap,t),!0}_getCamera(){return this._camera}_initInputListener(){window.addEventListener("keyup",this._onKeyChanged.bind(this),!1),window.addEventListener("keydown",this._onKeyChanged.bind(this),!1),this._inputListeners.push({key:3,fun:t=>{this._down(t)}}),this._inputListeners.push({key:6,fun:t=>{this._move(t)}}),this._inputListeners.push({key:4,fun:t=>{this._up(t)}})}_down(t){this._downPosition=t.position,this._position=t.position,this._state=1,2===t.type&&window.setTimeout(this._onLongDown.bind(this),350),2===t.type?this._rotationSpeed=.6:this._rotationSpeed=1}_move(t){this._position=t.position,1!==this._state||this._locked||this._orbit(new Vector2(t.position.x,t.position.y)),2!==this._state||this._locked||(this._orbit(new Vector2(t.position.x,t.position.y)),this._moveForward())}_up(t){1===this._state&&this.dispatchEvent(2),2===this._state&&this._keyMap.set(87,!1),this._state=0,this._orbitPosition=null}_onLongDown(){getDelta(this._downPosition,this._position)<MIN_MOVE_DISTANCE&&1===this._state&&(this._state=2,this._orbit(new Vector2(this._position.x,this._position.y)),this._moveForward())}_update(t){let e=new Euler(-this._pitch,this._yaw,0,"ZYX");this._cameraRotation.setFromEuler(e)}updateCamera(){let{x:t,y:e}=this._domHelper.getClientDimensions();this._camera.aspect=t/e,this._camera.updateProjectionMatrix()}_onKeyChanged(t){this._keyMap.set(t.keyCode,"keydown"===t.type),this.dispatchEvent(6),this._processKeyMap(this._keyMap,.001)&&t.preventDefault()}_processKeyMap(t,e){e=Math.min(e,.1);let i=new Vector3(0,0,0),n=!1;return this._processUpDown(t,i,e),t.get(65)&&(i.x=-1*e),t.get(68)&&(i.x=1*e),t.get(37)&&(this._rotateHorizontal(-KEYBOARD_ROTATION_ANGLE*this._rotationSpeed*e),n=!0),t.get(39)&&(this._rotateHorizontal(KEYBOARD_ROTATION_ANGLE*this._rotationSpeed*e),n=!0),t.get(16)&&(i.x*=3,i.z*=3),!(0===i.x&&0===i.y&&0===i.z&&!n||(i.applyQuaternion(this.getCamera().quaternion),this._cameraPosition.add(new Vector3(i.x,0,i.z)),this._update(),0))}_processUpDown(t,e,i){(t.get(87)||t.get(38))&&(e.z=-1*i),(t.get(83)||t.get(40))&&(e.z=1*i)}_orbit(t){this._orbitPosition||(this._orbitPosition=new Vector2(t.x,t.y),this.dispatchEvent(0));let e=t.clone().sub(this._orbitPosition),i=this._domHelper.element instanceof Document?this._domHelper.element.body:this._domHelper.element;e.multiplyScalar(-1),this._rotateHorizontal(2*Math.PI*e.x/i.clientWidth*1),this._rotateVertical(2*Math.PI*e.y/i.clientHeight*1),position2VectorsAreEqual(this._orbitPosition,t)||this.dispatchEvent(1),this._orbitPosition.copy(t),this._update()}_moveForward(){this._keyMap.set(87,!0),this._processKeyMap(this._keyMap,.001)}_rotateVertical(t){let e=this._pitch+t;e>this.maxPolarAngle||e<this.minPolarAngle||(this._pitch=e,this._pitch<-Math.PI?this._pitch+=2*Math.PI:this._pitch>Math.PI&&(this._pitch-=2*Math.PI),this._saveYawAndPitch())}getKernelZoomFactor(){return this._camera.zoom}}class BackgroundEnvironment extends Environment{constructor(t,e,i,n,s){if(super(t,e),this._color=i,this._oldBackground=t.background,n&&s){this._canvas=n,this._style=document.createElement("style");let t='background-image: url("'+s+'"); background-size: cover;';this._style.innerText=".rml-scene-background {"+t+"}",this._canvas.appendChild(this._style)}}needsBounds(){return!0}needsCamera(){return!1}needsRotation(){return!1}addToScene(){this._scene&&this._color&&(this._scene.background=this._color),this._canvas&&this._canvas.classList&&(this._scene.background=null,this._canvas.classList.add("rml-scene-background"))}removeFromScene(){this._oldBackground&&(this._scene.background=this._oldBackground),this._canvas&&this._canvas.classList.remove("rml-scene-background")}showGUI(){}}class DynamicEnvironmentSettingLoader{parse(t,e,i,n,s){let a=JSON.parse(n);return a.environment?this.load(t,e,i,a,s):null}load(t,e,i,n,s){let a,o=n.environment;if(!o)return console.warn("No environment set in scene settings"),Promise.resolve(null);switch(o.type){case"color":a=new Promise(e=>e(new BackgroundEnvironment(t,i,new Color(o.details.color))));break;case"image":a=new Promise(n=>n(new BackgroundEnvironment(t,i,null,e,o.details.imageUrl)));break;case"floor":a=new Promise(e=>{this._rapiAccess.getMaterial(o.details.material).then(n=>{let a=void 0===o.details.fog||o.details.fog,r=new FloorEnvironment(t,i,a);r.changeFloorMaterial(n,s).then(()=>{e(r)})})});break;default:console.warn("Could not load environment, return old environment"),a=new Promise(t=>t(i))}return a}}__decorate([inject],DynamicEnvironmentSettingLoader.prototype,"_rapiAccess",void 0);class LightSetting{constructor(t,e){this._scene=t,e&&e.removeFromScene()}needsBounds(){return!1}updateBounds(t){}getCameraContainer(){return this._cameraContainer||(this._cameraContainer=new Object3D),this._cameraContainer}}class DynamicLightSetting extends LightSetting{constructor(t,e){super(t,e),this._lights=[]}needsBounds(){return!0}updateBounds(t){if(this._cameraLight){const e=this._cameraLight,i=new Vector3;t.getSize(i);const n=1.5*Math.max(Math.max(i.x,i.y),i.z);this._boundingSize=n,e.shadow.camera.top=n/2,e.shadow.camera.bottom=-n/2,e.shadow.camera.left=-n/2,e.shadow.camera.right=n/2,e.shadow.camera.updateProjectionMatrix()}}loadFromJSON(t){return new Promise(e=>{this._lights=this._dynamicLightSettingLoader.parse(t),this.addToScene(),e()})}loadFromObject(t){return new Promise(e=>{(null==t?void 0:t.lights)||e(),this._lights=this._dynamicLightSettingLoader.load(t),this._lights.forEach((t,e)=>{t.userData.movesWithCamera&&(this._cameraLight=t,this._lights.splice(e,1))}),this.addToScene(),e()})}loadFromURL(t){return new Promise((e,i)=>{fetch(new Request(t,{method:"GET"})).then(handleJsonResponse).then(t=>this.loadFromObject(t).then(e,i))})}addToScene(){this._lights.forEach(t=>{this._scene.add(t)}),this._cameraLight&&this._scene.add(this._cameraLight)}update(t,e){if(!this._cameraLight)return;let i=new Vector3;t.getWorldDirection(i),i.multiplyScalar(-this._boundingSize);let n=e.clone().add(i);this._cameraLight.position.copy(n)}removeFromScene(){this._lights.forEach(t=>{this._scene.remove(t)}),this._cameraLight&&this._scene.remove(this._cameraLight)}reload(){this.removeFromScene(),this.addToScene()}showGUI(){let t=getGUI();this._cameraLight&&this._addToGUI(t,this._cameraLight),this._lights.forEach(e=>{this._addToGUI(t,e)})}_addToGUI(t,e){t&&(e instanceof SpotLight&&this._addSpotLightToGUI(t,e),e instanceof AmbientLight&&this._addAmbientLightToGUI(t,e),e instanceof DirectionalLight&&this._addDirectionalLightToGUI(t,e),e instanceof RectAreaLight&&this._addRectAreaLightToGUI(t,e))}_addRectAreaLightToGUI(t,e){let i=t.addFolder(e.name),n={name:e.name,color:"#"+e.color.getHexString(),intensity:e.intensity*(e.width*e.height)};i.add(e,"visible"),i.add(n,"intensity").min(10).max(400).step(10).onChange(t=>{e.intensity=t/(e.width*e.height)}),i.add(e,"castShadow"),i.addColor(n,"color").onChange(t=>{e.color=new Color(t)}),i.add(e.position,"x").min(-10).max(10).step(.1).onChange(()=>{e.lookAt(new Vector3(0,0,0))}),i.add(e.position,"y").min(-10).max(10).step(.1).onChange(()=>{e.lookAt(new Vector3(0,0,0))}),i.add(e.position,"z").min(-10).max(10).step(.1).onChange(()=>{e.lookAt(new Vector3(0,0,0))})}_addSpotLightToGUI(t,e){let i=t.addFolder(e.name),n={name:e.name,color:"#"+e.color.getHexString(),angle:180*e.angle/Math.PI};i.add(e,"visible"),i.add(e,"intensity").min(0).max(5).step(.1),i.add(e,"penumbra").min(0).max(1).step(.1),i.addColor(n,"color").onChange(t=>{e.color=new Color(t)}),i.add(n,"angle").min(10).max(180).step(1).onChange(t=>{e.angle=t*Math.PI/180}),i.add(e.position,"x").min(-10).max(10).step(.1).onChange(()=>{e.lookAt(new Vector3(0,0,0))}),i.add(e.position,"y").min(-10).max(10).step(.1).onChange(()=>{e.lookAt(new Vector3(0,0,0))}),i.add(e.position,"z").min(-10).max(10).step(.1).onChange(()=>{e.lookAt(new Vector3(0,0,0))})}_addAmbientLightToGUI(t,e){let i={name:e.name,color:"#"+e.color.getHexString()},n=t.addFolder(e.name);n.add(e,"visible"),n.add(e,"intensity").min(0).max(5).step(.1),n.addColor(i,"color").onChange(t=>{e.color=new Color(t)})}_addDirectionalLightToGUI(t,e){let i=t.addFolder(e.name),n={name:e.name,color:"#"+e.color.getHexString()};i.add(e,"visible"),i.add(e,"intensity").min(0).max(5).step(.1),i.addColor(n,"color").onChange(t=>{e.color=new Color(t)}),i.add(e,"castShadow"),i.add(e.position,"x").min(-10).max(10).step(.1).onChange(()=>{e.lookAt(new Vector3(0,0,0))}),i.add(e.position,"y").min(-10).max(10).step(.1).onChange(()=>{e.lookAt(new Vector3(0,0,0))}),i.add(e.position,"z").min(-10).max(10).step(.1).onChange(()=>{e.lookAt(new Vector3(0,0,0))})}}__decorate([inject],DynamicLightSetting.prototype,"_dynamicLightSettingLoader",void 0);class GroundProjectedSkybox extends Mesh{constructor(t,e={}){const i=[t.isCubeTexture?"#define ENVMAP_TYPE_CUBE":""].join("\n")+"\n\n\t\t\t\tvarying vec3 vWorldPosition;\n\n\t\t\t\tuniform float radius;\n\t\t\t\tuniform float height;\n\t\t\t\tuniform float angle;\n\n\t\t\t\t#ifdef ENVMAP_TYPE_CUBE\n\n\t\t\t\t\tuniform samplerCube map;\n\n\t\t\t\t#else\n\n\t\t\t\t\tuniform sampler2D map;\n\n\t\t\t\t#endif\n\n\t\t\t\t// From: https://www.shadertoy.com/view/4tsBD7\n\t\t\t\tfloat diskIntersectWithBackFaceCulling( vec3 ro, vec3 rd, vec3 c, vec3 n, float r ) \n\t\t\t\t{\n\n\t\t\t\t\tfloat d = dot ( rd, n );\n\n\t\t\t\t\tif( d > 0.0 ) { return 1e6; }\n\n\t\t\t\t\tvec3 o = ro - c;\n\t\t\t\t\tfloat t = - dot( n, o ) / d;\n\t\t\t\t\tvec3 q = o + rd * t;\n\n\t\t\t\t\treturn ( dot( q, q ) < r * r ) ? t : 1e6;\n\n\t\t\t\t}\n\n\t\t\t\t// From: https://www.iquilezles.org/www/articles/intersectors/intersectors.htm\n\t\t\t\tfloat sphereIntersect( vec3 ro, vec3 rd, vec3 ce, float ra ) {\n\n\t\t\t\t\tvec3 oc = ro - ce;\n\t\t\t\t\tfloat b = dot( oc, rd );\n\t\t\t\t\tfloat c = dot( oc, oc ) - ra * ra;\n\t\t\t\t\tfloat h = b * b - c;\n\n\t\t\t\t\tif( h < 0.0 ) { return -1.0; }\n\n\t\t\t\t\th = sqrt( h );\n\n\t\t\t\t\treturn - b + h;\n\n\t\t\t\t}\n\n\t\t\t\tvec3 project() {\n\n\t\t\t\t\tvec3 p = normalize( vWorldPosition );\n\t\t\t\t\tvec3 camPos = cameraPosition;\n\t\t\t\t\tcamPos.y -= height;\n\n\t\t\t\t\tfloat intersection = sphereIntersect( camPos, p, vec3( 0.0 ), radius );\n\t\t\t\t\tif( intersection > 0.0 ) {\n\n\t\t\t\t\t\tvec3 h = vec3( 0.0, - height, 0.0 );\n\t\t\t\t\t\tfloat intersection2 = diskIntersectWithBackFaceCulling( camPos, p, h, vec3( 0.0, 1.0, 0.0 ), radius );\n\t\t\t\t\t\tp = ( camPos + min( intersection, intersection2 ) * p ) / radius;\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\tp = vec3( 0.0, 1.0, 0.0 );\n\n\t\t\t\t\t}\n\n\t\t\t\t\treturn p;\n\n\t\t\t\t}\n\n\t\t\t\t#include <common>\n\n\t\t\t\tvoid main() {\n\n\t\t\t\t\tvec3 projectedWorldPosition = project();\n\n\t\t\t\t\t#ifdef ENVMAP_TYPE_CUBE\n\n\t\t\t\t\t\tvec3 outcolor = textureCube( map, projectedWorldPosition ).rgb;\n\n\t\t\t\t\t#else\n\n\t\t\t\t\t\tvec3 direction = normalize( projectedWorldPosition );\n\t\t\t\t\t\tvec2 uv = equirectUv( direction );\n\t\t\t\t\t\tvec3 outcolor = texture2D( map, uv ).rgb;\n\n\t\t\t\t\t#endif\n\n\t\t\t\t\tgl_FragColor = vec4( outcolor, 1.0 );\n\n\t\t\t\t\t#include <tonemapping_fragment>\n\t\t\t\t\t#include <colorspace_fragment>\n\n\t\t\t\t}\n\t\t\t\t",n={map:{value:t},height:{value:e.height||15},radius:{value:e.radius||100}};super(new IcosahedronGeometry(1,16),new ShaderMaterial({uniforms:n,fragmentShader:i,vertexShader:"\n\t\t\tvarying vec3 vWorldPosition;\n\n\t\t\tvoid main() {\n\n\t\t\t\tvec4 worldPosition = ( modelMatrix * vec4( position, 1.0 ) );\n\t\t\t\tvWorldPosition = worldPosition.xyz;\n\n\t\t\t\tgl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );\n\n\t\t\t}\n\t\t\t",side:DoubleSide}))}set radius(t){this.material.uniforms.radius.value=t}get radius(){return this.material.uniforms.radius.value}set height(t){this.material.uniforms.height.value=t}get height(){return this.material.uniforms.height.value}}class GroundProjectedEnvironment extends Environment{constructor(t,e,i){super(t,e),this.updateEnvironmentTexture(i)}updateEnvironmentTexture(t){t&&(this._environmentTexture=t,this._skybox=new GroundProjectedSkybox(this._environmentTexture),this._skybox.name="Ground projected skybox",this._skybox.scale.setScalar(100)),this.reload()}needsBounds(){return!1}needsCamera(){return!1}needsRotation(){return!1}addToScene(){this._scene&&this._skybox&&this._scene.add(this._skybox)}removeFromScene(){this._scene&&this._skybox&&this._scene.remove(this._skybox)}showGUI(t){let e=getGUI();if(!e)return;let i=e.addFolder("Ground Projected Environment");i.add(this._skybox,"height").min(10).max(100).step(.1).onChange(t),i.add(this._skybox,"radius").min(20).max(200).step(.1).onChange(t)}}class LightSourceDetectorDebug{constructor(t){this._lightSourceDetector=t}static createPlane(t,e){const i=new PlaneGeometry(2,1),n=null!=e?e:new MeshBasicMaterial({color:12632256,side:DoubleSide}),s=new Mesh(i,n);return s.position.z=-.1,t.add(s),s}createDebugScene(t){this._scene=t,this._createLightGraphInMap(this._lightSourceDetector.sampleUVs,this._lightSourceDetector.lightSamples,this._lightSourceDetector.lightGraph)}_createLightGraphInMap(t,e,i){let n=[],s=[];for(let t=0;t<this._lightSourceDetector.lightGraph.noOfNodes;++t)0===i.adjacent[t].length?n.push(e[t]):s.push(e[t]);const a=n.map(t=>t.uv),o=s.map(t=>t.uv),r=t.filter(t=>!a.includes(t)&&!o.includes(t));this._createSamplePointsInMap(r,.005,16711680),this._createSamplePointsInMap(a,.01,255),this._createSamplePointsInMap(o,.01,65280),this._createClusterLinesInMap(this._lightSourceDetector.lightSamples,this._lightSourceDetector.lightGraph.edges,128);const h=this._lightSourceDetector.lightSources.map(t=>t.uv);this._createSamplePointsInMap(h,.015,16776960),this._createCirclesInMap(this._lightSourceDetector.lightSources,8421376)}_createSamplePointsInMap(t,e,i){const n=new CircleGeometry(e,8,4),s=new MeshBasicMaterial({color:i});t.forEach(t=>{var e;const i=new Mesh(n,s);i.position.copy(this._uvToMapPosition(t)),i.name="samplePoint",null===(e=this._scene)||void 0===e||e.add(i)})}_createCirclesInMap(t,e){const i=new MeshBasicMaterial({color:e,transparent:!0,opacity:.5});t.forEach(t=>{var e;const n=new CircleGeometry(t.size,8,4),s=new Mesh(n,i);s.position.copy(this._uvToMapPosition(t.uv)),s.name="samplePoint",null===(e=this._scene)||void 0===e||e.add(s)})}_createClusterLinesInMap(t,e,i){var n;const s=new LineBasicMaterial({color:i}),a=[];e.forEach(e=>{for(let i=1;i<e.length;i++){const n=t[e[0]].uv,s=t[e[i]].uv;if(a.push(this._uvToMapPosition(n)),Math.abs(n.x-s.x)>.5){const t=(n.y+s.y)/2,e=n.x<s.x?0:1;a.push(this._uvToMapPosition(new Vector2(e,t))),a.push(this._uvToMapPosition(new Vector2(1-e,t)))}a.push(this._uvToMapPosition(s))}});const o=(new BufferGeometry).setFromPoints(a),r=new LineSegments(o,s);r.name="clusterLine",null===(n=this._scene)||void 0===n||n.add(r)}_uvToMapPosition(t){return new Vector3(2*t.x-1,t.y-.5,0)}}class EnvironmentPmremGenertor extends PMREMGenerator{constructor(t){super(t),this._extendedEquirectMaterial=this._createEquirectMaterial()}fromEquirectangularTexture(t,e){var i,n;const s=null!==(i=null==e?void 0:e.rotation)&&void 0!==i?i:0,a=null!==(n=null==e?void 0:e.intensity)&&void 0!==n?n:1;return this._extendedEquirectMaterial.uniforms.intensity.value=a,this._extendedEquirectMaterial.uniforms.rotationMatrix.value.set(Math.cos(s),0,-Math.sin(s),0,1,0,Math.sin(s),0,Math.cos(s)),super.fromEquirectangular(t)}_createEquirectMaterial(){const t=new ShaderMaterial({name:"EquirectangularToCubeUV",uniforms:{envMap:{value:null},intensity:{value:1},rotationMatrix:{value:new Matrix3}},vertexShader:equilateralVertexShader,fragmentShader:equilateralFragmentShader,blending:NoBlending,depthTest:!1,depthWrite:!1});return this._equirectMaterial=t,t}}const equilateralVertexShader="\nprecision mediump float;\nprecision mediump int;\nattribute float faceIndex;\nvarying vec3 vOutputDirection;\nuniform mat3 rotationMatrix;\n\n// RH coordinate system; PMREM face-indexing convention\nvec3 getDirection( vec2 uv, float face ) {\n uv = 2.0 * uv - 1.0;\n vec3 direction = vec3( uv, 1.0 );\n if ( face == 0.0 ) {\n direction = direction.zyx; // ( 1, v, u ) pos x\n } else if ( face == 1.0 ) {\n direction = direction.xzy;\n direction.xz *= -1.0; // ( -u, 1, -v ) pos y\n } else if ( face == 2.0 ) {\n direction.x *= -1.0; // ( -u, v, 1 ) pos z\n } else if ( face == 3.0 ) {\n direction = direction.zyx;\n direction.xz *= -1.0; // ( -1, v, -u ) neg x\n } else if ( face == 4.0 ) {\n direction = direction.xzy;\n direction.xy *= -1.0; // ( -u, -1, v ) neg y\n } else if ( face == 5.0 ) {\n direction.z *= -1.0; // ( u, v, -1 ) neg z\n }\n return direction;\n}\n\nvoid main() {\n vOutputDirection = rotationMatrix * getDirection(uv, faceIndex);\n gl_Position = vec4(position, 1.0);\n}\n",equilateralFragmentShader="\nprecision mediump float;\nprecision mediump int;\nvarying vec3 vOutputDirection;\nuniform sampler2D envMap;\nuniform float intensity;\n\n#include <common>\n\nvoid main() { \n vec3 outputDirection = normalize(vOutputDirection);\n vec2 uv = equirectUv(outputDirection);\n gl_FragColor = vec4(texture2D(envMap, uv).rgb * intensity, 1.0);\n}\n";class EnvironmentDefinition{get lightSources(){return this._lightSources}set rotation(t){this._rotation!==t&&(this._rotation=t,this.needsUpdate=!0)}set intensity(t){this._intensity!==t&&(this._intensity=t,this.needsUpdate=!0)}constructor(t,e){var i,n;this.needsUpdate=!0,this._lightSources=[],t instanceof Scene?this.environmentScene=t:t instanceof CubeTexture?this.cubeTexture=t:t instanceof Texture&&(this.equirectangularTexture=t),(null==e?void 0:e.textureData)&&(this.textureData=null==e?void 0:e.textureData),this._rotation=null!==(i=null==e?void 0:e.rotation)&&void 0!==i?i:0,this._intensity=null!==(n=null==e?void 0:e.intensity)&&void 0!==n?n:1}createNewEnvironment(t){const e=this._createPmremTexture(t),i=this._detectLightSources(t,e);return this._lightSources=i.lightSources,null!=e?e:null}_getTextureOffset(){const t=this._rotation/(2*Math.PI)%1;return new Vector2(t,0)}_createPmremTexture(t){const e=new EnvironmentPmremGenertor(t);let i;return this.equirectangularTexture?(this.equirectangularTexture.offset.copy(this._getTextureOffset()),i=e.fromEquirectangularTexture(this.equirectangularTexture,{rotation:this._rotation,intensity:this._intensity})):this.cubeTexture?i=e.fromCubemap(this.cubeTexture):this.environmentScene&&(i=e.fromScene(this.environmentScene,.04)),this._debugScene=void 0,this.needsUpdate=!1,null==i?void 0:i.texture}_detectLightSources(t,e){const i=new LightSourceDetector;return this.equirectangularTexture&&0===this.rotation?i.detectLightSources(t,this.equirectangularTexture,this.textureData):e&&i.detectLightSources(t,e),i}createDebugScene(t,e){if(this._debugScene)return this._debugScene;this._debugScene=new Scene;const i=new EnvironmentMapDecodeMaterial(!0,!1);i.setSourceTexture(e.environment),LightSourceDetectorDebug.createPlane(this._debugScene,i);const n=this._detectLightSources(t,e.environment);return new LightSourceDetectorDebug(n).createDebugScene(this._debugScene),this._debugScene}}class SceneManager{onBeforeRender(){}constructor(t,e,i,n=CAMERA_TYPE.CAMERA_3D){this._depthWriteMaterial=new MeshBasicMaterial({colorWrite:!1}),this._maxAnisotropy=1,this._clock=new Clock,this._delta=0,this._renderListener=null,this._stopRendering=!1,this._forceRender=!1,this._lastChange=Date.now(),this._running=!1,this._perspectiveOffsetCamera=null,this._orthographicOffsetCamera=null,this._onAfterRender=()=>{},this._creator_=t,this._canvasID=i,this.createCameraControl(sanitizedCameraMode(n),e),this._setupScene(e,!1),this._lifeCycleManager.addEventListener(this)}addEventListener(t){throw new Error("Method not implemented.")}removeEventListener(t){throw new Error("Method not implemented.")}_changeCameraControl(t){this._cameraControl&&this._cameraControl.cleanUp(),t instanceof CameraControlFirstPerson&&(this._getInputManager().removeEventListener(7,this._renderListener),this._getInputManager().removeEventListener(8,this._renderListener)),this._cameraControl instanceof CameraControlFirstPerson&&(this._getInputManager().addEventListener(7,this._renderListener,this),this._getInputManager().addEventListener(8,this._renderListener,this)),this._cameraControl=t,this.cameraControlChanged()}cameraControlChanged(){}_addCameraControlListener(){this._cameraControl.addEventListener(0,()=>{var t;null===(t=this._roomleRenderer)||void 0===t||t.movingCameraStarts(),this._requestRender()},this),this._cameraControl.addEventListener(1,this._requestRender,this),this._cameraControl.addEventListener(2,()=>{var t;null===(t=this._roomleRenderer)||void 0===t||t.movingCameraStops(),this._requestRender()},this),this._cameraControl.addEventListener(6,this._requestRender,this)}_renderEverything(){var t;this._roomleRenderer&&(this._forceRender=!0,null===(t=this._roomleRenderer)||void 0===t||t.forceShadowUpdates(!1)),this._requestRender()}_renderWithoutShadowsAndAO(){this._roomleRenderer&&(this._forceRender=!0),this._requestRender()}_requestRender(){if(!this._renderer||this._stopRendering)return;const t=()=>{var e,i;this._delta=this._clock.getDelta(),this._animateCamera(),this._cameraControl.getCamera().layers.mask=65535,this._renderLoopFunction&&(this._renderLoopFunction(),this._renderLoopFunction=null),this.onBeforeRender(),this._roomleRenderer?(null===(e=this._statsHelper)||void 0===e||e.updateRenderInfo(this._roomleRenderer.renderer.info),this._roomleRenderer.render(this._scene,this._cameraControl.getCamera()),this._forceRender=!1,this._shouldRenderUi()&&this._renderUi()):(null===(i=this._statsHelper)||void 0===i||i.updateRenderInfo(this._renderer.info),this._renderer.render(this._scene,this._cameraControl.getCamera())),this._onAfterRender(),window.TWEEN&&TWEEN.update(),this._lastChange+3e3<Date.now()||this._stopRendering?this._running=!1:(this._running=!0,requestAnimationFrame(t))};this._lastChange=Date.now(),this._running||this._stopRendering||(this._running=!0,requestAnimationFrame(t))}_shouldRenderUi(){return this._pluginSystem&&this._pluginSystem.needsUiScene()}_renderUi(){const t=this._scene.background?this._scene.background.clone():null;this._scene.overrideMaterial=this._depthWriteMaterial,this._scene.background=null,this._renderer.render(this._scene,this._cameraControl.getCamera()),this._scene.overrideMaterial=null;const e=this._renderer.autoClear;this._renderer.autoClear=!1,this._renderer.clearDepth(),this._renderer.render(this._uiScene,this._cameraControl.getCamera()),this._renderer.autoClear=e,this._scene.background=t}_animateCamera(){this._cameraControl&&(this._cameraControl.animateCamera(this._delta)||!this.shouldClearShadowsAndAO()||this._forceRender)&&this._lightSetting instanceof DynamicLightSetting&&this._cameraControl.getCamera()instanceof PerspectiveCamera&&this._lightSetting.update(this._cameraControl.getCamera(),this._cameraControl.getTargetPosition()),this._environment&&this._environment.needsCamera()&&this._cameraControl instanceof CameraControl3D&&this._environment.updateCamera(this._cameraControl.getCamera())}shouldClearShadowsAndAO(){return!1}_setupScene(t,e){var i;const{x:n,y:s}=this._domHelper.getClientDimensions();this._scene=new Scene,this._uiScene=new Scene,(e=e||!1)||(this._scene.background=getColor(this._initData.colors.DEFAULT_BACKGROUND)),this._renderer=new WebGLRenderer({antialias:!this._initData.e2e,alpha:!0});const a=this._initData.autoQuality?Math.min(window.devicePixelRatio,1.5):window.devicePixelRatio;this._renderer.setPixelRatio(a),this._renderer.setSize(n,s),this._renderer.outputColorSpace=SRGBColorSpace,this._renderer.autoClear=!1,this._renderer.shadowMap.enabled=!0,this._renderer.shadowMap.type=PCFSoftShadowMap,this._maxAnisotropy=this._renderer.capabilities.getMaxAnisotropy(),this._initData.e2e||(this._roomleRenderer=new RoomleWebGLRenderer(this._renderer,n,s),this._roomleRenderer.setQualityMap(standaloneConfiguratorQualityLevels),this._roomleRenderer.setAutoQuality(this._initData.autoQuality),null===(i=this._roomleRenderer)||void 0===i||i.setSize(n,s)),this._renderer.domElement.classList.add(this._canvasID),this._domHelper.element.appendChild(this._renderer.domElement),this._getInputManager().addEvents(this._renderer.domElement),this._hdrEnvironmentLoader.registerEnvironmentChangedCallback(t=>{this._setEnvMap(t)}),this._initData.legacyLight?this.loadEnvMap("static/legacy_env-d5810ec5057d4716.exr"):this.loadEnvMap(this._initData.envMapUrl),this._requestRender(),window.addEventListener("resize",this,!1),window.addEventListener("keydown",this,!1),window.addEventListener("keyup",this,!1),document.addEventListener("visibilitychange",this),this._pluginSystem.init(this._scene,this._uiScene,this._cameraControl.getCamera().position),this._addCameraControlListener(),this.sceneChanged()}async loadEnvMap(t){await this._hdrEnvironmentLoader.loadUrl(this._renderer,t)}_setEnvMap(t){const{url:e,environmentMap:i}=t;this._scene.environment=i,this._scene.userData.environmentDefinition=new EnvironmentDefinition(i,{rotation:this._initData.envMapRotation,intensity:this._initData.legacyLight?.9:this._initData.envMapIntensity}),this._scene.userData.shadowFromEnvironment=!this._initData.legacyLight,this._environment instanceof GroundProjectedEnvironment&&this._environment.updateEnvironmentTexture(i),e===ENV_HDR_256_FILE_NAME&&window.requestIdleCallback(this.loadEnvMap.bind(this,"static/default_1k-2aa6d42244d30fb1.exr")),this._requestRender()}_tabVisible(){this.updateCamera(!1)}updateCamera(t=!0){var e;const{x:i,y:n}=this._domHelper.getClientDimensions();null===(e=this._roomleRenderer)||void 0===e||e.setSize(i,n),this._cameraControl.updateCamera(),this._renderEverything()}_onWindowResize(){const t=this._getInputManager();t&&t.updateSize(),this.updateCamera(),this._requestRender()}_isPartOfScene(t){return"Object3D"===t.type||"Mesh"===t.type||"GLB"===t.type||"GLTF"===t.type||"Group"===t.type}cleanUp(){this._getInputManager().removeEventListener(7,this._renderListener),this._getInputManager().removeEventListener(8,this._renderListener),this._cameraControl&&this._cameraControl.cleanUp(),this._stopRendering=!0}clearScene(){let t=[];this._scene.children.forEach(e=>{this._isPartOfScene(e)&&t.push(e)}),t.forEach(t=>{dispose(t),this._scene.remove(t)}),this._renderer.renderLists.dispose()}enableHD(t){this._renderer.capabilities.maxTextures>8&&t&&this.loadDynamicLightSetting(t),this._requestRender()}_loadGLTF(t,e,i,n,s,a,o){return new Promise((r,h)=>{this._staticItemLoader.loadGLTF(t,e,i,n,s,a,null,o).then(t=>{this._setCamera("GLTF",t.scene),r(t.scene)},h)})}_loadGLB(t,e,i,n,s,a,o,r){return new Promise((h,c)=>{this._staticItemLoader.loadGLB(t,e,i,n,s,a,o,r).then(t=>{this._setCamera("GLB",t.scene),h(t.scene)},c)})}_setCamera(t,e){if(!e)return void console.warn("could not set camera for gltf",e);const i=new Box3;i.setFromObject(e),"GLB"===t?this._cameraControl instanceof CameraControl3D&&this._cameraControl.updateToBounds(i,!1):"GLTF"===t&&(this._cameraControl instanceof CameraControl3D&&this._cameraControl.updateAndReset(i.getSize(new Vector3),i.getCenter(new Vector3),-15,70,5,!1),this._cameraControl instanceof CameraControl2D&&this._cameraControl.zoomToFitBounds(i,!0)),this.updateCamera()}showGUI(){if(this._initData.disableDebugGUI)return;const t=document.createElement("style");t.innerText=".dg.main{position:absolute;z-index:999;top:0;left:0;}",document.head.appendChild(t);let e=getGUI(!1);e&&(this._domHelper.element.appendChild(e.domElement),this._guiLoaded())}_guiLoaded(){let t=getGUI();if(!t)return;const e=t.addFolder("Scene Parameter"),i={intensity:this._initData.envMapIntensity,rotation:this._initData.envMapRotation};e.add(i,"intensity",0,4,.01).name("env map intensity").onChange(t=>{this.changeEnvironmentMapIntensity(t),this._requestRender()}),e.add(i,"rotation",0,2*Math.PI,.01).name("env map rotation").onChange(t=>{this._scene.userData.environmentDefinition.rotation=t,this._requestRender()}),this._lightSetting&&this._lightSetting.showGUI(),this._roomleRenderer&&this._roomleRenderer.showGUI(()=>this._requestRender()),this._environment&&this._environment.showGUI(()=>this._requestRender()),this._addGUIListener(t)}_addGUIListener(t){let e=t.__folders;Object.keys(e).forEach(t=>{let i=e[t];i.__folders&&Object.keys(i.__folders).forEach(t=>{let e=i.__folders[t];this._addGUIListener(e)}),i.__controllers&&i.__controllers.forEach(t=>{t.onFinishChange(()=>{this._guiParamChanged()})})})}_guiParamChanged(){this._renderEverything()}showStats(){import("./stats-helper-f6f1b022.js").then(t=>this._statsHelper=new t.default)}_onKeyDown(t){}_onKeyUp(t){}pause(){this._getInputManager().removeEvents(this._renderer.domElement),window.removeEventListener("resize",this,!1),window.removeEventListener("keydown",this,!1),window.removeEventListener("keyup",this,!1),document.removeEventListener("visibilitychange",this)}resume(){this._renderer.domElement.classList.add(this._canvasID),this._domHelper.element.appendChild(this._renderer.domElement),this._getInputManager().addEvents(this._renderer.domElement),window.addEventListener("resize",this,!1),window.addEventListener("keydown",this,!1),window.addEventListener("keyup",this,!1),document.addEventListener("visibilitychange",this),this.updateCamera()}destroy(){this.pause(),this.cleanUp()}handleEvent(t){switch(t.type){case"resize":this._onWindowResize();break;case"keydown":if(t.target&&(t.target instanceof HTMLInputElement||t.target instanceof HTMLTextAreaElement))break;this._onKeyDown(t);break;case"keyup":if(t.target&&(t.target instanceof HTMLInputElement||t.target instanceof HTMLTextAreaElement))break;this._onKeyUp(t);break;case"visibilitychange":this._tabVisible()}}async loadSceneSettings(t){let e,i;return e=t.environment?new Promise(e=>{(new DynamicEnvironmentSettingLoader).load(this._scene,this._renderer.domElement,this._environment,t,this._maxAnisotropy).then(t=>{this._setEnvironment(t),e()})}):Promise.resolve(),t.lights?(this._lightSetting=new DynamicLightSetting(this._scene,this._lightSetting),i=this._lightSetting.loadFromObject(t)):i=Promise.resolve(),new Promise((t,n)=>{Promise.all([e,i]).then(()=>{this._renderEverything(),t()},n)})}setBackgroundColor(t){this._setEnvironment(new BackgroundEnvironment(this._scene,this._environment,new Color(t)))}setBackgroundImage(t){this._setEnvironment(new BackgroundEnvironment(this._scene,this._environment,null,this._renderer.domElement,t))}_setEnvironment(t){this._environment=t,this._renderEverything()}async loadDynamicLightSetting(t){this._lightSetting=new DynamicLightSetting(this._scene,this._lightSetting);let e=!1;if(t.url)await this._lightSetting.loadFromURL(t.url),e=!0;else if(t.json)await this._lightSetting.loadFromJSON(t.json),e=!0;else if(t.object)await this._lightSetting.loadFromObject(t.object),e=!0;else if(t.ls){const i=DynamicLightSettingLoader.createDynamicLightSettingSource(null,t.ls);await this._lightSetting.loadFromURL(i.url),e=!0}if(!e)throw new Error("No dynamic light setting source set");this._requestRender()}getScene(){return this._scene}updateScene(){var t;this._updateBounds(this.getBounds()),null===(t=this._roomleRenderer)||void 0===t||t.forceShadowUpdates(!0),this._renderEverything()}_updateBounds(t,e=!1){var i;t&&(this.updateEnvironment(t,e),this._lightSetting&&this._lightSetting.needsBounds()&&this._lightSetting.updateBounds(t),null===(i=this._roomleRenderer)||void 0===i||i.updateBounds(t),this._requestRender(),this._pluginSystem.updateBounds(t))}setCameraOffset(t){const e=this._cameraControl.getCamera(),i=e||e;(null==i?void 0:i.offset)?(i.offset=t,this._renderEverything()):console.warn("Cannot set offset, current camera does not support it")}getCameraOffset(){const t=this._cameraControl.getCamera(),e=t||t;return(null==e?void 0:e.offset)?JSON.parse(JSON.stringify(e.offset)):{left:0,top:0,right:1,bottom:1}}getOrthographicOffsetCamera(){if(!this._orthographicOffsetCamera){const t=this.getCameraOffset(),e=this._domHelper.getClientDimensions(),i=5;let n=e.x/e.y*i,s=i;const a=RoomleComponentFactoryInitializer();this._orthographicOffsetCamera=a.createOrthographicCamera(n/-2,n/2,s/2,s/-2,1,1e3,t),this._orthographicOffsetCamera.position.set(0,10,0),this._orthographicOffsetCamera.lookAt(new Vector3(0,0,0))}return this._orthographicOffsetCamera}getPerspectiveOffsetCamera(){if(!this._perspectiveOffsetCamera){const t=this.getCameraOffset(),e=this._domHelper.getClientDimensions(),i=e.x,n=e.y,s=RoomleComponentFactoryInitializer();this._perspectiveOffsetCamera=s.createPerspectiveCamera(30,i/n,.1,20,t)}return this._perspectiveOffsetCamera}updateEnvironment(t,e=!1){var i;if(t&&this._environment&&this._environment.needsBounds()){const i=t.getSize(new Vector3);(i.x+i.y+i.z!==0||e)&&this._environment.updateBounds(t.getSize(new Vector3),e)}null===(i=this._roomleRenderer)||void 0===i||i.updateEnvironment(t,e)}_onCameraIdle(){return!0}_onCameraMove(){return!0}exportImageFromCamera(t){this._onAfterRender=()=>{const e=this._renderer.domElement.toDataURL("image/jpeg",1),{left:i,right:n,top:s,bottom:a}=this.getCameraOffset(),o=n-i,r=s-a;if(1===o&&1===r)return download(t,e),void(this._onAfterRender=()=>{});const h=new Image;h.src=e,h.onload=()=>{const{naturalWidth:e,naturalHeight:n}=h,a=document.createElement("canvas");a.width=e*o,a.height=n*r;const c=a.getContext("2d"),d=e*i*-1,_=n*(1-s)*-1;c.drawImage(h,d,_),c.save(),download(t,a.toDataURL("image/jpeg",1)),this._onAfterRender=()=>{}}},this._requestRender()}changeEnvironmentMapIntensity(t){this._scene.userData.environmentDefinition.intensity=t}lockCamera(){this._cameraControl.lock()}unlockCamera(){this._cameraControl.unlock()}setEnvironmentMap(t,e,i,n){void 0!==t&&this._hdrEnvironmentLoader.loadUrl(this._renderer,t),void 0!==e&&(this._scene.userData.environmentDefinition.intensity=e),void 0!==i&&(this._scene.userData.environmentDefinition.rotation=i),void 0!==n&&(this._roomleRenderer.screenSpaceShadowParameters.maximumNumberOfLightSources=n,this._roomleRenderer.forceShadowUpdates(!1)),this._requestRender()}}__decorate([inject],SceneManager.prototype,"_domHelper",void 0),__decorate([inject],SceneManager.prototype,"_scriptLoader",void 0),__decorate([inject],SceneManager.prototype,"_lifeCycleManager",void 0),__decorate([inject],SceneManager.prototype,"_staticItemLoader",void 0),__decorate([inject],SceneManager.prototype,"_hdrEnvironmentLoader",void 0),__decorate([inject],SceneManager.prototype,"_initData",void 0),__decorate([inject],SceneManager.prototype,"_pluginSystem",void 0),__decorate([inject],SceneManager.prototype,"_imageRenderer",void 0);export{BackgroundEnvironment as B,CameraControl3D as C,DISTANCE_FACTOR as D,FloorEnvironment as F,LightSetting as L,SceneManager as S,TWEEN_FILE_NAME as T,CameraControl as a,CameraControl2D as b,CameraControlFirstPerson as c};
2
+ //# sourceMappingURL=scene-manager-d62ae8cb.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"scene-manager-296a1b7b.js","sources":["../../packages/common-core/public/textures/env/default_1k.exr","../../packages/three-build/src/Tween.js","../../node_modules/three/examples/jsm/objects/GroundProjectedSkybox.js","../../packages/common-core/public/textures/env/legacy_env.exr"],"sourcesContent":["export default \"static/default_1k-2aa6d42244d30fb1.exr\"","export default \"static/Tween-d57ee5d181fce582.js\"","import { Mesh, IcosahedronGeometry, ShaderMaterial, DoubleSide } from 'three';\n\n/**\n * Ground projected env map adapted from @react-three/drei.\n * https://github.com/pmndrs/drei/blob/master/src/core/Environment.tsx\n */\nclass GroundProjectedSkybox extends Mesh {\n\n\tconstructor( texture, options = {} ) {\n\n\t\tconst isCubeMap = texture.isCubeTexture;\n\n\t\tconst defines = [\n\t\t\tisCubeMap ? '#define ENVMAP_TYPE_CUBE' : ''\n\t\t];\n\n\t\tconst vertexShader = /* glsl */ `\n\t\t\tvarying vec3 vWorldPosition;\n\n\t\t\tvoid main() {\n\n\t\t\t\tvec4 worldPosition = ( modelMatrix * vec4( position, 1.0 ) );\n\t\t\t\tvWorldPosition = worldPosition.xyz;\n\n\t\t\t\tgl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );\n\n\t\t\t}\n\t\t\t`;\n\t\tconst fragmentShader = defines.join( '\\n' ) + /* glsl */ `\n\n\t\t\t\tvarying vec3 vWorldPosition;\n\n\t\t\t\tuniform float radius;\n\t\t\t\tuniform float height;\n\t\t\t\tuniform float angle;\n\n\t\t\t\t#ifdef ENVMAP_TYPE_CUBE\n\n\t\t\t\t\tuniform samplerCube map;\n\n\t\t\t\t#else\n\n\t\t\t\t\tuniform sampler2D map;\n\n\t\t\t\t#endif\n\n\t\t\t\t// From: https://www.shadertoy.com/view/4tsBD7\n\t\t\t\tfloat diskIntersectWithBackFaceCulling( vec3 ro, vec3 rd, vec3 c, vec3 n, float r ) \n\t\t\t\t{\n\n\t\t\t\t\tfloat d = dot ( rd, n );\n\n\t\t\t\t\tif( d > 0.0 ) { return 1e6; }\n\n\t\t\t\t\tvec3 o = ro - c;\n\t\t\t\t\tfloat t = - dot( n, o ) / d;\n\t\t\t\t\tvec3 q = o + rd * t;\n\n\t\t\t\t\treturn ( dot( q, q ) < r * r ) ? t : 1e6;\n\n\t\t\t\t}\n\n\t\t\t\t// From: https://www.iquilezles.org/www/articles/intersectors/intersectors.htm\n\t\t\t\tfloat sphereIntersect( vec3 ro, vec3 rd, vec3 ce, float ra ) {\n\n\t\t\t\t\tvec3 oc = ro - ce;\n\t\t\t\t\tfloat b = dot( oc, rd );\n\t\t\t\t\tfloat c = dot( oc, oc ) - ra * ra;\n\t\t\t\t\tfloat h = b * b - c;\n\n\t\t\t\t\tif( h < 0.0 ) { return -1.0; }\n\n\t\t\t\t\th = sqrt( h );\n\n\t\t\t\t\treturn - b + h;\n\n\t\t\t\t}\n\n\t\t\t\tvec3 project() {\n\n\t\t\t\t\tvec3 p = normalize( vWorldPosition );\n\t\t\t\t\tvec3 camPos = cameraPosition;\n\t\t\t\t\tcamPos.y -= height;\n\n\t\t\t\t\tfloat intersection = sphereIntersect( camPos, p, vec3( 0.0 ), radius );\n\t\t\t\t\tif( intersection > 0.0 ) {\n\n\t\t\t\t\t\tvec3 h = vec3( 0.0, - height, 0.0 );\n\t\t\t\t\t\tfloat intersection2 = diskIntersectWithBackFaceCulling( camPos, p, h, vec3( 0.0, 1.0, 0.0 ), radius );\n\t\t\t\t\t\tp = ( camPos + min( intersection, intersection2 ) * p ) / radius;\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\tp = vec3( 0.0, 1.0, 0.0 );\n\n\t\t\t\t\t}\n\n\t\t\t\t\treturn p;\n\n\t\t\t\t}\n\n\t\t\t\t#include <common>\n\n\t\t\t\tvoid main() {\n\n\t\t\t\t\tvec3 projectedWorldPosition = project();\n\n\t\t\t\t\t#ifdef ENVMAP_TYPE_CUBE\n\n\t\t\t\t\t\tvec3 outcolor = textureCube( map, projectedWorldPosition ).rgb;\n\n\t\t\t\t\t#else\n\n\t\t\t\t\t\tvec3 direction = normalize( projectedWorldPosition );\n\t\t\t\t\t\tvec2 uv = equirectUv( direction );\n\t\t\t\t\t\tvec3 outcolor = texture2D( map, uv ).rgb;\n\n\t\t\t\t\t#endif\n\n\t\t\t\t\tgl_FragColor = vec4( outcolor, 1.0 );\n\n\t\t\t\t\t#include <tonemapping_fragment>\n\t\t\t\t\t#include <colorspace_fragment>\n\n\t\t\t\t}\n\t\t\t\t`;\n\n\t\tconst uniforms = {\n\t\t\tmap: { value: texture },\n\t\t\theight: { value: options.height || 15 },\n\t\t\tradius: { value: options.radius || 100 },\n\t\t};\n\n\t\tconst geometry = new IcosahedronGeometry( 1, 16 );\n\t\tconst material = new ShaderMaterial( {\n\t\t\tuniforms,\n\t\t\tfragmentShader,\n\t\t\tvertexShader,\n\t\t\tside: DoubleSide,\n\t\t} );\n\n\t\tsuper( geometry, material );\n\n\t}\n\n\tset radius( radius ) {\n\n\t\tthis.material.uniforms.radius.value = radius;\n\n\t}\n\n\tget radius() {\n\n\t\treturn this.material.uniforms.radius.value;\n\n\t}\n\n\tset height( height ) {\n\n\t\tthis.material.uniforms.height.value = height;\n\n\t}\n\n\tget height() {\n\n\t\treturn this.material.uniforms.height.value;\n\n\t}\n\n}\n\nexport { GroundProjectedSkybox };\n","export default \"static/legacy_env-d5810ec5057d4716.exr\""],"names":["TWEEN_FILE_NAME","GroundProjectedSkybox","Mesh","[object Object]","texture","options","fragmentShader","isCubeTexture","join","uniforms","map","value","height","radius","super","IcosahedronGeometry","ShaderMaterial","vertexShader","side","DoubleSide","this","material"],"mappings":"u/CAAA,ICAeA,gBAAA,oslCCMf,MAAMC,8BAA8BC,KAEnCC,YAAaC,EAASC,EAAU,IAE/B,MAkBMC,EAhBU,CAFEF,EAAQG,cAGb,2BAA6B,IAeXC,KAAM,MAAoB,6yEAmGnDC,EAAW,CAChBC,IAAK,CAAEC,MAAOP,GACdQ,OAAQ,CAAED,MAAON,EAAQO,QAAU,IACnCC,OAAQ,CAAEF,MAAON,EAAQQ,QAAU,MAWpCC,MARiB,IAAIC,oBAAqB,EAAG,IAC5B,IAAIC,eAAgB,CACpCP,SAAAA,EACAH,eAAAA,EACAW,aAzH+B,4RA0H/BC,KAAMC,cAORN,WAAYA,GAEXO,KAAKC,SAASZ,SAASI,OAAOF,MAAQE,EAIvCA,aAEC,OAAOO,KAAKC,SAASZ,SAASI,OAAOF,MAItCC,WAAYA,GAEXQ,KAAKC,SAASZ,SAASG,OAAOD,MAAQC,EAIvCA,aAEC,OAAOQ,KAAKC,SAASZ,SAASG,OAAOD,uuYCrKxB,y/BHAA"}
1
+ {"version":3,"file":"scene-manager-d62ae8cb.js","sources":["../../packages/common-core/public/textures/env/default_1k.exr","../../packages/three-build/src/Tween.js","../../node_modules/three/examples/jsm/objects/GroundProjectedSkybox.js","../../packages/common-core/public/textures/env/legacy_env.exr"],"sourcesContent":["export default \"static/default_1k-2aa6d42244d30fb1.exr\"","export default \"static/Tween-d57ee5d181fce582.js\"","import { Mesh, IcosahedronGeometry, ShaderMaterial, DoubleSide } from 'three';\n\n/**\n * Ground projected env map adapted from @react-three/drei.\n * https://github.com/pmndrs/drei/blob/master/src/core/Environment.tsx\n */\nclass GroundProjectedSkybox extends Mesh {\n\n\tconstructor( texture, options = {} ) {\n\n\t\tconst isCubeMap = texture.isCubeTexture;\n\n\t\tconst defines = [\n\t\t\tisCubeMap ? '#define ENVMAP_TYPE_CUBE' : ''\n\t\t];\n\n\t\tconst vertexShader = /* glsl */ `\n\t\t\tvarying vec3 vWorldPosition;\n\n\t\t\tvoid main() {\n\n\t\t\t\tvec4 worldPosition = ( modelMatrix * vec4( position, 1.0 ) );\n\t\t\t\tvWorldPosition = worldPosition.xyz;\n\n\t\t\t\tgl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );\n\n\t\t\t}\n\t\t\t`;\n\t\tconst fragmentShader = defines.join( '\\n' ) + /* glsl */ `\n\n\t\t\t\tvarying vec3 vWorldPosition;\n\n\t\t\t\tuniform float radius;\n\t\t\t\tuniform float height;\n\t\t\t\tuniform float angle;\n\n\t\t\t\t#ifdef ENVMAP_TYPE_CUBE\n\n\t\t\t\t\tuniform samplerCube map;\n\n\t\t\t\t#else\n\n\t\t\t\t\tuniform sampler2D map;\n\n\t\t\t\t#endif\n\n\t\t\t\t// From: https://www.shadertoy.com/view/4tsBD7\n\t\t\t\tfloat diskIntersectWithBackFaceCulling( vec3 ro, vec3 rd, vec3 c, vec3 n, float r ) \n\t\t\t\t{\n\n\t\t\t\t\tfloat d = dot ( rd, n );\n\n\t\t\t\t\tif( d > 0.0 ) { return 1e6; }\n\n\t\t\t\t\tvec3 o = ro - c;\n\t\t\t\t\tfloat t = - dot( n, o ) / d;\n\t\t\t\t\tvec3 q = o + rd * t;\n\n\t\t\t\t\treturn ( dot( q, q ) < r * r ) ? t : 1e6;\n\n\t\t\t\t}\n\n\t\t\t\t// From: https://www.iquilezles.org/www/articles/intersectors/intersectors.htm\n\t\t\t\tfloat sphereIntersect( vec3 ro, vec3 rd, vec3 ce, float ra ) {\n\n\t\t\t\t\tvec3 oc = ro - ce;\n\t\t\t\t\tfloat b = dot( oc, rd );\n\t\t\t\t\tfloat c = dot( oc, oc ) - ra * ra;\n\t\t\t\t\tfloat h = b * b - c;\n\n\t\t\t\t\tif( h < 0.0 ) { return -1.0; }\n\n\t\t\t\t\th = sqrt( h );\n\n\t\t\t\t\treturn - b + h;\n\n\t\t\t\t}\n\n\t\t\t\tvec3 project() {\n\n\t\t\t\t\tvec3 p = normalize( vWorldPosition );\n\t\t\t\t\tvec3 camPos = cameraPosition;\n\t\t\t\t\tcamPos.y -= height;\n\n\t\t\t\t\tfloat intersection = sphereIntersect( camPos, p, vec3( 0.0 ), radius );\n\t\t\t\t\tif( intersection > 0.0 ) {\n\n\t\t\t\t\t\tvec3 h = vec3( 0.0, - height, 0.0 );\n\t\t\t\t\t\tfloat intersection2 = diskIntersectWithBackFaceCulling( camPos, p, h, vec3( 0.0, 1.0, 0.0 ), radius );\n\t\t\t\t\t\tp = ( camPos + min( intersection, intersection2 ) * p ) / radius;\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\tp = vec3( 0.0, 1.0, 0.0 );\n\n\t\t\t\t\t}\n\n\t\t\t\t\treturn p;\n\n\t\t\t\t}\n\n\t\t\t\t#include <common>\n\n\t\t\t\tvoid main() {\n\n\t\t\t\t\tvec3 projectedWorldPosition = project();\n\n\t\t\t\t\t#ifdef ENVMAP_TYPE_CUBE\n\n\t\t\t\t\t\tvec3 outcolor = textureCube( map, projectedWorldPosition ).rgb;\n\n\t\t\t\t\t#else\n\n\t\t\t\t\t\tvec3 direction = normalize( projectedWorldPosition );\n\t\t\t\t\t\tvec2 uv = equirectUv( direction );\n\t\t\t\t\t\tvec3 outcolor = texture2D( map, uv ).rgb;\n\n\t\t\t\t\t#endif\n\n\t\t\t\t\tgl_FragColor = vec4( outcolor, 1.0 );\n\n\t\t\t\t\t#include <tonemapping_fragment>\n\t\t\t\t\t#include <colorspace_fragment>\n\n\t\t\t\t}\n\t\t\t\t`;\n\n\t\tconst uniforms = {\n\t\t\tmap: { value: texture },\n\t\t\theight: { value: options.height || 15 },\n\t\t\tradius: { value: options.radius || 100 },\n\t\t};\n\n\t\tconst geometry = new IcosahedronGeometry( 1, 16 );\n\t\tconst material = new ShaderMaterial( {\n\t\t\tuniforms,\n\t\t\tfragmentShader,\n\t\t\tvertexShader,\n\t\t\tside: DoubleSide,\n\t\t} );\n\n\t\tsuper( geometry, material );\n\n\t}\n\n\tset radius( radius ) {\n\n\t\tthis.material.uniforms.radius.value = radius;\n\n\t}\n\n\tget radius() {\n\n\t\treturn this.material.uniforms.radius.value;\n\n\t}\n\n\tset height( height ) {\n\n\t\tthis.material.uniforms.height.value = height;\n\n\t}\n\n\tget height() {\n\n\t\treturn this.material.uniforms.height.value;\n\n\t}\n\n}\n\nexport { GroundProjectedSkybox };\n","export default \"static/legacy_env-d5810ec5057d4716.exr\""],"names":["TWEEN_FILE_NAME","GroundProjectedSkybox","Mesh","[object Object]","texture","options","fragmentShader","isCubeTexture","join","uniforms","map","value","height","radius","super","IcosahedronGeometry","ShaderMaterial","vertexShader","side","DoubleSide","this","material"],"mappings":"u/CAAA,ICAeA,gBAAA,oslCCMf,MAAMC,8BAA8BC,KAEnCC,YAAaC,EAASC,EAAU,IAE/B,MAkBMC,EAhBU,CAFEF,EAAQG,cAGb,2BAA6B,IAeXC,KAAM,MAAoB,6yEAmGnDC,EAAW,CAChBC,IAAK,CAAEC,MAAOP,GACdQ,OAAQ,CAAED,MAAON,EAAQO,QAAU,IACnCC,OAAQ,CAAEF,MAAON,EAAQQ,QAAU,MAWpCC,MARiB,IAAIC,oBAAqB,EAAG,IAC5B,IAAIC,eAAgB,CACpCP,SAAAA,EACAH,eAAAA,EACAW,aAzH+B,4RA0H/BC,KAAMC,cAORN,WAAYA,GAEXO,KAAKC,SAASZ,SAASI,OAAOF,MAAQE,EAIvCA,aAEC,OAAOO,KAAKC,SAASZ,SAASI,OAAOF,MAItCC,WAAYA,GAEXQ,KAAKC,SAASZ,SAASG,OAAOD,MAAQC,EAIvCA,aAEC,OAAOQ,KAAKC,SAASZ,SAASG,OAAOD,8wYCrKxB,y/BHAA"}
@@ -1,2 +1,2 @@
1
- import{g as getAllParameters}from"./query-params-helper-a271f9dc.js";import{b as RoomleDependencyInjection,B as Benchmark,I as INJECTABLES,_ as __decorate,i as inject}from"./roomle-dependency-injection-074ecade.js";import{g as getAssetPath}from"./main-thread-to-worker-d5d5841d.js";class Main{constructor(e){this._context=e||RoomleDependencyInjection.getContext(this.getContextName()),Benchmark.start("loadingTime")}_setupCommonGlobals(){window.__RML__DEBUG__||(window.__RML__DEBUG__={}),window.__RML__ENV__||(window.__RML__ENV__={},window.__RML__ENV__.assetPath||(window.__RML__ENV__.assetPath=""))}_setupCommonDependencies(){RoomleDependencyInjection.setup(INJECTABLES);const e=getAllParameters();this.lookup("global-init-data").setOverrides(e),this.lookup("init-data",this._context).setOverrides(e)}_cleanUpCommonGlobals(){window.__RML__DEBUG__&&(window.__RML__DEBUG__.Kernel&&window.__RML__DEBUG__.Kernel.clearAll&&window.__RML__DEBUG__.Kernel.clearAll(),delete window.__RML__DEBUG__),delete window.__RML__ENV__;for(const e in window.THREE)if(window.hasOwnProperty(e))try{delete window.THREE[e]}catch(e){console.error(e)}window.THREE=void 0}_cleanUpCommonDependencies(){}boot(e){this._setupCommonGlobals(),this._setupCommonDependencies(),this.setupGlobals(e),this.setupDependencies(),this.bootFinished()}lookup(e,t){return window.__RML__DI__.lookup(e,t)}teardown(){this.cleanUpDependencies(),this._cleanUpCommonDependencies(),this.cleanUpGlobals(),this._cleanUpCommonGlobals(),window.__RML__DI__&&delete window.__RML__DI__}pause(){this.lookup("life-cycle-manager",this._context).pause(),window.TWEEN&&TWEEN.removeAll()}resume(e){e&&this.lookup("dom-helper",this._context).setDomElement(e),this.lookup("life-cycle-manager",this._context).resume()}destroy(){this.pause(),this.lookup("life-cycle-manager",this._context).destroy(),RoomleDependencyInjection.cleanUp(this._context)}getRapiAccess(){return this.lookup("rapi-access",this._context)}}let _scriptCache={},_idCache={};class ScriptLoader{constructor(e){this._creator_=e}fetch(e,t){return this._singlePromiseFactory.create(5,e,(o,n)=>{!function(e,t,o,n){if(-1===e.indexOf("http")&&(e=getAssetPath()+e),_scriptCache[e])return o();if(t.id&&_idCache[t.id])return n(new Error('There is already a script with ID "'+t.id+'"'));Benchmark.start("load_"+t.id.replace(/-/g,"_"));const i=document.createElement("script");i.async=!1,i.src=e,i.id=t.id,i.onload=()=>{_scriptCache[e]=!0,_idCache[t.id]=!0,Object.defineProperty(o,"name",{value:"resolve-"+t.id}),o()},i.onerror=e=>{n(e)},document.body.appendChild(i)}(e,t,o,n)})}loadScripts(e){const t=[];return e.forEach(e=>{let o=this.fetch(e.name,{id:e.id});t.push(o)}),Promise.all(t)}cleanUp(){for(let e in _idCache)if(_idCache.hasOwnProperty(e)){const t=document.getElementById(e);t&&t.parentElement.removeChild(t)}_scriptCache={},_idCache={}}}__decorate([inject],ScriptLoader.prototype,"_singlePromiseFactory",void 0);export{Main as M,ScriptLoader as S};
2
- //# sourceMappingURL=script-loader-99a1d192.js.map
1
+ import{g as getAllParameters}from"./query-params-helper-a271f9dc.js";import{b as RoomleDependencyInjection,B as Benchmark,I as INJECTABLES,_ as __decorate,i as inject}from"./roomle-dependency-injection-a6b6e5b9.js";import{g as getAssetPath}from"./main-thread-to-worker-d5d5841d.js";class Main{constructor(e){this._context=e||RoomleDependencyInjection.getContext(this.getContextName()),Benchmark.start("loadingTime")}_setupCommonGlobals(){window.__RML__DEBUG__||(window.__RML__DEBUG__={}),window.__RML__ENV__||(window.__RML__ENV__={},window.__RML__ENV__.assetPath||(window.__RML__ENV__.assetPath=""))}_setupCommonDependencies(){RoomleDependencyInjection.setup(INJECTABLES);const e=getAllParameters();this.lookup("global-init-data").setOverrides(e),this.lookup("init-data",this._context).setOverrides(e)}_cleanUpCommonGlobals(){window.__RML__DEBUG__&&(window.__RML__DEBUG__.Kernel&&window.__RML__DEBUG__.Kernel.clearAll&&window.__RML__DEBUG__.Kernel.clearAll(),delete window.__RML__DEBUG__),delete window.__RML__ENV__;for(const e in window.THREE)if(window.hasOwnProperty(e))try{delete window.THREE[e]}catch(e){console.error(e)}window.THREE=void 0}_cleanUpCommonDependencies(){}boot(e){this._setupCommonGlobals(),this._setupCommonDependencies(),this.setupGlobals(e),this.setupDependencies(),this.bootFinished()}lookup(e,t){return window.__RML__DI__.lookup(e,t)}teardown(){this.cleanUpDependencies(),this._cleanUpCommonDependencies(),this.cleanUpGlobals(),this._cleanUpCommonGlobals(),window.__RML__DI__&&delete window.__RML__DI__}pause(){this.lookup("life-cycle-manager",this._context).pause(),window.TWEEN&&TWEEN.removeAll()}resume(e){e&&this.lookup("dom-helper",this._context).setDomElement(e),this.lookup("life-cycle-manager",this._context).resume()}destroy(){this.pause(),this.lookup("life-cycle-manager",this._context).destroy(),RoomleDependencyInjection.cleanUp(this._context)}getRapiAccess(){return this.lookup("rapi-access",this._context)}}let _scriptCache={},_idCache={};class ScriptLoader{constructor(e){this._creator_=e}fetch(e,t){return this._singlePromiseFactory.create(5,e,(o,n)=>{!function(e,t,o,n){if(-1===e.indexOf("http")&&(e=getAssetPath()+e),_scriptCache[e])return o();if(t.id&&_idCache[t.id])return n(new Error('There is already a script with ID "'+t.id+'"'));Benchmark.start("load_"+t.id.replace(/-/g,"_"));const i=document.createElement("script");i.async=!1,i.src=e,i.id=t.id,i.onload=()=>{_scriptCache[e]=!0,_idCache[t.id]=!0,Object.defineProperty(o,"name",{value:"resolve-"+t.id}),o()},i.onerror=e=>{n(e)},document.body.appendChild(i)}(e,t,o,n)})}loadScripts(e){const t=[];return e.forEach(e=>{let o=this.fetch(e.name,{id:e.id});t.push(o)}),Promise.all(t)}cleanUp(){for(let e in _idCache)if(_idCache.hasOwnProperty(e)){const t=document.getElementById(e);t&&t.parentElement.removeChild(t)}_scriptCache={},_idCache={}}}__decorate([inject],ScriptLoader.prototype,"_singlePromiseFactory",void 0);export{Main as M,ScriptLoader as S};
2
+ //# sourceMappingURL=script-loader-91c2a731.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"script-loader-91c2a731.js","sources":[],"sourcesContent":[],"names":[],"mappings":""}
@@ -1,2 +1,2 @@
1
- System.register(["./query-params-helper-c231e1b8.nomodule.js","./roomle-dependency-injection-a00c310a.nomodule.js","./main-thread-to-worker-cce716d1.nomodule.js"],(function(e){var t,o,n,i,_,s,r;return{setters:[function(e){t=e.g},function(e){o=e.b,n=e.B,i=e.I,_=e._,s=e.i},function(e){r=e.g}],execute:function(){e("M",class{constructor(e){this._context=e||o.getContext(this.getContextName()),n.start("loadingTime")}_setupCommonGlobals(){window.__RML__DEBUG__||(window.__RML__DEBUG__={}),window.__RML__ENV__||(window.__RML__ENV__={},window.__RML__ENV__.assetPath||(window.__RML__ENV__.assetPath=""))}_setupCommonDependencies(){o.setup(i);const e=t();this.lookup("global-init-data").setOverrides(e),this.lookup("init-data",this._context).setOverrides(e)}_cleanUpCommonGlobals(){window.__RML__DEBUG__&&(window.__RML__DEBUG__.Kernel&&window.__RML__DEBUG__.Kernel.clearAll&&window.__RML__DEBUG__.Kernel.clearAll(),delete window.__RML__DEBUG__),delete window.__RML__ENV__;for(const e in window.THREE)if(window.hasOwnProperty(e))try{delete window.THREE[e]}catch(e){console.error(e)}window.THREE=void 0}_cleanUpCommonDependencies(){}boot(e){this._setupCommonGlobals(),this._setupCommonDependencies(),this.setupGlobals(e),this.setupDependencies(),this.bootFinished()}lookup(e,t){return window.__RML__DI__.lookup(e,t)}teardown(){this.cleanUpDependencies(),this._cleanUpCommonDependencies(),this.cleanUpGlobals(),this._cleanUpCommonGlobals(),window.__RML__DI__&&delete window.__RML__DI__}pause(){this.lookup("life-cycle-manager",this._context).pause(),window.TWEEN&&TWEEN.removeAll()}resume(e){e&&this.lookup("dom-helper",this._context).setDomElement(e),this.lookup("life-cycle-manager",this._context).resume()}destroy(){this.pause(),this.lookup("life-cycle-manager",this._context).destroy(),o.cleanUp(this._context)}getRapiAccess(){return this.lookup("rapi-access",this._context)}});let l={},c={};class a{constructor(e){this._creator_=e}fetch(e,t){return this._singlePromiseFactory.create(5,e,(o,i)=>{!function(e,t,o,i){if(-1===e.indexOf("http")&&(e=r()+e),l[e])return o();if(t.id&&c[t.id])return i(new Error('There is already a script with ID "'+t.id+'"'));n.start("load_"+t.id.replace(/-/g,"_"));const _=document.createElement("script");_.async=!1,_.src=e,_.id=t.id,_.onload=()=>{l[e]=!0,c[t.id]=!0,Object.defineProperty(o,"name",{value:"resolve-"+t.id}),o()},_.onerror=e=>{i(e)},document.body.appendChild(_)}(e,t,o,i)})}loadScripts(e){const t=[];return e.forEach(e=>{let o=this.fetch(e.name,{id:e.id});t.push(o)}),Promise.all(t)}cleanUp(){for(let e in c)if(c.hasOwnProperty(e)){const t=document.getElementById(e);t&&t.parentElement.removeChild(t)}l={},c={}}}e("S",a),_([s],a.prototype,"_singlePromiseFactory",void 0)}}}));
2
- //# sourceMappingURL=script-loader-4b5257fa.nomodule.js.map
1
+ System.register(["./query-params-helper-c231e1b8.nomodule.js","./roomle-dependency-injection-e730f5db.nomodule.js","./main-thread-to-worker-cce716d1.nomodule.js"],(function(e){var t,o,n,i,_,s,r;return{setters:[function(e){t=e.g},function(e){o=e.b,n=e.B,i=e.I,_=e._,s=e.i},function(e){r=e.g}],execute:function(){e("M",class{constructor(e){this._context=e||o.getContext(this.getContextName()),n.start("loadingTime")}_setupCommonGlobals(){window.__RML__DEBUG__||(window.__RML__DEBUG__={}),window.__RML__ENV__||(window.__RML__ENV__={},window.__RML__ENV__.assetPath||(window.__RML__ENV__.assetPath=""))}_setupCommonDependencies(){o.setup(i);const e=t();this.lookup("global-init-data").setOverrides(e),this.lookup("init-data",this._context).setOverrides(e)}_cleanUpCommonGlobals(){window.__RML__DEBUG__&&(window.__RML__DEBUG__.Kernel&&window.__RML__DEBUG__.Kernel.clearAll&&window.__RML__DEBUG__.Kernel.clearAll(),delete window.__RML__DEBUG__),delete window.__RML__ENV__;for(const e in window.THREE)if(window.hasOwnProperty(e))try{delete window.THREE[e]}catch(e){console.error(e)}window.THREE=void 0}_cleanUpCommonDependencies(){}boot(e){this._setupCommonGlobals(),this._setupCommonDependencies(),this.setupGlobals(e),this.setupDependencies(),this.bootFinished()}lookup(e,t){return window.__RML__DI__.lookup(e,t)}teardown(){this.cleanUpDependencies(),this._cleanUpCommonDependencies(),this.cleanUpGlobals(),this._cleanUpCommonGlobals(),window.__RML__DI__&&delete window.__RML__DI__}pause(){this.lookup("life-cycle-manager",this._context).pause(),window.TWEEN&&TWEEN.removeAll()}resume(e){e&&this.lookup("dom-helper",this._context).setDomElement(e),this.lookup("life-cycle-manager",this._context).resume()}destroy(){this.pause(),this.lookup("life-cycle-manager",this._context).destroy(),o.cleanUp(this._context)}getRapiAccess(){return this.lookup("rapi-access",this._context)}});let l={},c={};class d{constructor(e){this._creator_=e}fetch(e,t){return this._singlePromiseFactory.create(5,e,(o,i)=>{!function(e,t,o,i){if(-1===e.indexOf("http")&&(e=r()+e),l[e])return o();if(t.id&&c[t.id])return i(new Error('There is already a script with ID "'+t.id+'"'));n.start("load_"+t.id.replace(/-/g,"_"));const _=document.createElement("script");_.async=!1,_.src=e,_.id=t.id,_.onload=()=>{l[e]=!0,c[t.id]=!0,Object.defineProperty(o,"name",{value:"resolve-"+t.id}),o()},_.onerror=e=>{i(e)},document.body.appendChild(_)}(e,t,o,i)})}loadScripts(e){const t=[];return e.forEach(e=>{let o=this.fetch(e.name,{id:e.id});t.push(o)}),Promise.all(t)}cleanUp(){for(let e in c)if(c.hasOwnProperty(e)){const t=document.getElementById(e);t&&t.parentElement.removeChild(t)}l={},c={}}}e("S",d),_([s],d.prototype,"_singlePromiseFactory",void 0)}}}));
2
+ //# sourceMappingURL=script-loader-d6f3f6fd.nomodule.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"script-loader-d6f3f6fd.nomodule.js","sources":[],"sourcesContent":[],"names":[],"mappings":""}
@@ -144763,7 +144763,7 @@ function asmFunc(imports) {
144763
144763
  }
144764
144764
  HEAP32[43281] = 0;
144765
144765
  $0_1 = $1 + 12 | 0;
144766
- fimport$52(2, $0_1 | 0, 28127) | 0;
144766
+ fimport$52(2, $0_1 | 0, 28136) | 0;
144767
144767
  $2_1 = HEAP32[43281];
144768
144768
  HEAP32[43281] = 0;
144769
144769
  label$12 : {
@@ -148184,7 +148184,7 @@ function asmFunc(imports) {
148184
148184
  }
148185
148185
  }
148186
148186
  HEAP32[43281] = 0;
148187
- $2_1 = fimport$52(2, $4_1 + 300 | 0, 28127) | 0;
148187
+ $2_1 = fimport$52(2, $4_1 + 300 | 0, 28136) | 0;
148188
148188
  $1 = HEAP32[43281];
148189
148189
  HEAP32[43281] = 0;
148190
148190
  if (($1 | 0) == 1) {
@@ -149736,7 +149736,7 @@ function asmFunc(imports) {
149736
149736
  }
149737
149737
  }
149738
149738
  HEAP32[43281] = 0;
149739
- $2_1 = fimport$52(2, $4_1 + 252 | 0, 28127) | 0;
149739
+ $2_1 = fimport$52(2, $4_1 + 252 | 0, 28136) | 0;
149740
149740
  $1 = HEAP32[43281];
149741
149741
  HEAP32[43281] = 0;
149742
149742
  if (($1 | 0) == 1) {
@@ -151270,7 +151270,7 @@ function asmFunc(imports) {
151270
151270
  }
151271
151271
  }
151272
151272
  HEAP32[43281] = 0;
151273
- $2_1 = fimport$52(2, $5_1 + 348 | 0, 28127) | 0;
151273
+ $2_1 = fimport$52(2, $5_1 + 348 | 0, 28136) | 0;
151274
151274
  $1 = HEAP32[43281];
151275
151275
  HEAP32[43281] = 0;
151276
151276
  if (($1 | 0) == 1) {
@@ -154653,7 +154653,7 @@ function asmFunc(imports) {
154653
154653
  }
154654
154654
  }
154655
154655
  HEAP32[43281] = 0;
154656
- $2_1 = fimport$52(2, $3_1 + 124 | 0, 28127) | 0;
154656
+ $2_1 = fimport$52(2, $3_1 + 124 | 0, 28136) | 0;
154657
154657
  $1 = HEAP32[43281];
154658
154658
  HEAP32[43281] = 0;
154659
154659
  if (($1 | 0) == 1) {
@@ -156346,7 +156346,7 @@ function asmFunc(imports) {
156346
156346
  }
156347
156347
  }
156348
156348
  HEAP32[43281] = 0;
156349
- $2_1 = fimport$52(2, $4_1 + 76 | 0, 28127) | 0;
156349
+ $2_1 = fimport$52(2, $4_1 + 76 | 0, 28136) | 0;
156350
156350
  $1 = HEAP32[43281];
156351
156351
  HEAP32[43281] = 0;
156352
156352
  if (($1 | 0) == 1) {
@@ -157401,7 +157401,7 @@ function asmFunc(imports) {
157401
157401
  }
157402
157402
  }
157403
157403
  HEAP32[43281] = 0;
157404
- $2_1 = fimport$52(2, $5_1 + 316 | 0, 28127) | 0;
157404
+ $2_1 = fimport$52(2, $5_1 + 316 | 0, 28136) | 0;
157405
157405
  $1 = HEAP32[43281];
157406
157406
  HEAP32[43281] = 0;
157407
157407
  if (($1 | 0) == 1) {
@@ -159051,7 +159051,7 @@ function asmFunc(imports) {
159051
159051
  }
159052
159052
  }
159053
159053
  HEAP32[43281] = 0;
159054
- $2_1 = fimport$52(2, $4_1 + 252 | 0, 28127) | 0;
159054
+ $2_1 = fimport$52(2, $4_1 + 252 | 0, 28136) | 0;
159055
159055
  $1 = HEAP32[43281];
159056
159056
  HEAP32[43281] = 0;
159057
159057
  if (($1 | 0) == 1) {
@@ -160455,7 +160455,7 @@ function asmFunc(imports) {
160455
160455
  }
160456
160456
  }
160457
160457
  HEAP32[43281] = 0;
160458
- $2_1 = fimport$52(2, $4_1 + 252 | 0, 28127) | 0;
160458
+ $2_1 = fimport$52(2, $4_1 + 252 | 0, 28136) | 0;
160459
160459
  $1 = HEAP32[43281];
160460
160460
  HEAP32[43281] = 0;
160461
160461
  if (($1 | 0) == 1) {
@@ -161735,7 +161735,7 @@ function asmFunc(imports) {
161735
161735
  }
161736
161736
  }
161737
161737
  HEAP32[43281] = 0;
161738
- $2_1 = fimport$52(2, $4_1 + 44 | 0, 28127) | 0;
161738
+ $2_1 = fimport$52(2, $4_1 + 44 | 0, 28136) | 0;
161739
161739
  $1 = HEAP32[43281];
161740
161740
  HEAP32[43281] = 0;
161741
161741
  if (($1 | 0) == 1) {
@@ -162218,7 +162218,7 @@ function asmFunc(imports) {
162218
162218
  break label$1;
162219
162219
  }
162220
162220
  HEAP32[43281] = 0;
162221
- fimport$52(2, $3_1 + 24 | 0, 28127) | 0;
162221
+ fimport$52(2, $3_1 + 24 | 0, 28136) | 0;
162222
162222
  $1 = HEAP32[43281];
162223
162223
  HEAP32[43281] = 0;
162224
162224
  label$5 : {
@@ -162642,7 +162642,7 @@ function asmFunc(imports) {
162642
162642
  }
162643
162643
  }
162644
162644
  HEAP32[43281] = 0;
162645
- $2_1 = fimport$52(2, $4_1 + 44 | 0, 28127) | 0;
162645
+ $2_1 = fimport$52(2, $4_1 + 44 | 0, 28136) | 0;
162646
162646
  $1 = HEAP32[43281];
162647
162647
  HEAP32[43281] = 0;
162648
162648
  if (($1 | 0) == 1) {
@@ -163514,7 +163514,7 @@ function asmFunc(imports) {
163514
163514
  break label$1;
163515
163515
  }
163516
163516
  HEAP32[43281] = 0;
163517
- fimport$52(2, $3_1 + 40 | 0, 28122) | 0;
163517
+ fimport$52(2, $3_1 + 40 | 0, 28131) | 0;
163518
163518
  $1 = HEAP32[43281];
163519
163519
  HEAP32[43281] = 0;
163520
163520
  label$5 : {
@@ -163639,7 +163639,7 @@ function asmFunc(imports) {
163639
163639
  }
163640
163640
  }
163641
163641
  HEAP32[43281] = 0;
163642
- $2_1 = fimport$52(2, $3_1 + 28 | 0, 28127) | 0;
163642
+ $2_1 = fimport$52(2, $3_1 + 28 | 0, 28136) | 0;
163643
163643
  $1 = HEAP32[43281];
163644
163644
  HEAP32[43281] = 0;
163645
163645
  if (($1 | 0) == 1) {
@@ -167811,7 +167811,7 @@ function asmFunc(imports) {
167811
167811
  }
167812
167812
  }
167813
167813
  HEAP32[43281] = 0;
167814
- $3_1 = fimport$52(2, $2_1 + 44 | 0, 28127) | 0;
167814
+ $3_1 = fimport$52(2, $2_1 + 44 | 0, 28136) | 0;
167815
167815
  $1 = HEAP32[43281];
167816
167816
  HEAP32[43281] = 0;
167817
167817
  if (($1 | 0) == 1) {
@@ -168861,7 +168861,7 @@ function asmFunc(imports) {
168861
168861
  break label$2;
168862
168862
  }
168863
168863
  HEAP32[43281] = 0;
168864
- fimport$52(2, $2_1 + 88 | 0, 28122) | 0;
168864
+ fimport$52(2, $2_1 + 88 | 0, 28131) | 0;
168865
168865
  $1 = HEAP32[43281];
168866
168866
  HEAP32[43281] = 0;
168867
168867
  label$5 : {
@@ -169012,7 +169012,7 @@ function asmFunc(imports) {
169012
169012
  break label$2;
169013
169013
  }
169014
169014
  HEAP32[43281] = 0;
169015
- $3_1 = fimport$52(2, $2_1 + 12 | 0, 28127) | 0;
169015
+ $3_1 = fimport$52(2, $2_1 + 12 | 0, 28136) | 0;
169016
169016
  $1 = HEAP32[43281];
169017
169017
  HEAP32[43281] = 0;
169018
169018
  if (($1 | 0) == 1) {
@@ -169240,7 +169240,7 @@ function asmFunc(imports) {
169240
169240
  break label$3;
169241
169241
  }
169242
169242
  HEAP32[43281] = 0;
169243
- fimport$52(2, $2_1 + 40 | 0, 28127) | 0;
169243
+ fimport$52(2, $2_1 + 40 | 0, 28136) | 0;
169244
169244
  $0_1 = HEAP32[43281];
169245
169245
  HEAP32[43281] = 0;
169246
169246
  if (($0_1 | 0) == 1) {
@@ -169388,7 +169388,7 @@ function asmFunc(imports) {
169388
169388
  }
169389
169389
  }
169390
169390
  HEAP32[43281] = 0;
169391
- $3_1 = fimport$52(2, $2_1 + 28 | 0, 28127) | 0;
169391
+ $3_1 = fimport$52(2, $2_1 + 28 | 0, 28136) | 0;
169392
169392
  $0_1 = HEAP32[43281];
169393
169393
  HEAP32[43281] = 0;
169394
169394
  if (($0_1 | 0) == 1) {
@@ -170053,7 +170053,7 @@ function asmFunc(imports) {
170053
170053
  break label$2;
170054
170054
  }
170055
170055
  HEAP32[43281] = 0;
170056
- fimport$52(2, $2_1 + 40 | 0, 28127) | 0;
170056
+ fimport$52(2, $2_1 + 40 | 0, 28136) | 0;
170057
170057
  $1 = HEAP32[43281];
170058
170058
  HEAP32[43281] = 0;
170059
170059
  label$5 : {
@@ -170196,7 +170196,7 @@ function asmFunc(imports) {
170196
170196
  }
170197
170197
  }
170198
170198
  HEAP32[43281] = 0;
170199
- $3_1 = fimport$52(2, $2_1 + 28 | 0, 28127) | 0;
170199
+ $3_1 = fimport$52(2, $2_1 + 28 | 0, 28136) | 0;
170200
170200
  $1 = HEAP32[43281];
170201
170201
  HEAP32[43281] = 0;
170202
170202
  if (($1 | 0) == 1) {
@@ -183350,7 +183350,7 @@ function asmFunc(imports) {
183350
183350
  }
183351
183351
  HEAP32[43281] = 0;
183352
183352
  $0_1 = $3_1 + 12 | 0;
183353
- fimport$52(2, $0_1 | 0, 28129) | 0;
183353
+ fimport$52(2, $0_1 | 0, 28138) | 0;
183354
183354
  $1 = HEAP32[43281];
183355
183355
  HEAP32[43281] = 0;
183356
183356
  label$3 : {
@@ -183442,7 +183442,7 @@ function asmFunc(imports) {
183442
183442
  }
183443
183443
  HEAP32[43281] = 0;
183444
183444
  $0_1 = $3_1 + 132 | 0;
183445
- fimport$52(2, $0_1 | 0, 28134) | 0;
183445
+ fimport$52(2, $0_1 | 0, 28143) | 0;
183446
183446
  $1 = HEAP32[43281];
183447
183447
  HEAP32[43281] = 0;
183448
183448
  if (($1 | 0) == 1) {
@@ -251652,7 +251652,7 @@ function asmFunc(imports) {
251652
251652
 
251653
251653
  function $5557($0_1) {
251654
251654
  $0_1 = $0_1 | 0;
251655
- $92($0_1, 28140);
251655
+ $92($0_1, 28122);
251656
251656
  }
251657
251657
 
251658
251658
  function $5558($0_1, $1) {