@babylonjs/core 5.0.0-alpha.48 → 5.0.0-alpha.51

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 (1305) hide show
  1. package/Actions/action.js +5 -5
  2. package/Actions/action.js.map +1 -1
  3. package/Actions/actionManager.js +11 -11
  4. package/Actions/actionManager.js.map +1 -1
  5. package/Actions/condition.js +5 -5
  6. package/Actions/condition.js.map +1 -1
  7. package/Actions/directActions.js +13 -13
  8. package/Actions/directActions.js.map +1 -1
  9. package/Actions/directAudioActions.js +4 -4
  10. package/Actions/directAudioActions.js.map +1 -1
  11. package/Actions/index.js +8 -8
  12. package/Actions/interpolateValueAction.js +8 -8
  13. package/Actions/interpolateValueAction.js.map +1 -1
  14. package/Animations/animatable.js +12 -7
  15. package/Animations/animatable.js.map +1 -1
  16. package/Animations/animation.js +11 -11
  17. package/Animations/animation.js.map +1 -1
  18. package/Animations/animationGroup.js +4 -14
  19. package/Animations/animationGroup.js.map +1 -1
  20. package/Animations/animationPropertiesOverride.js +1 -1
  21. package/Animations/easing.js +1 -1
  22. package/Animations/index.js +12 -12
  23. package/Animations/pathCursor.js +1 -1
  24. package/Animations/runtimeAnimation.js +12 -7
  25. package/Animations/runtimeAnimation.js.map +1 -1
  26. package/Audio/analyser.js +2 -2
  27. package/Audio/audioEngine.js +5 -5
  28. package/Audio/audioEngine.js.map +1 -1
  29. package/Audio/audioSceneComponent.js +9 -9
  30. package/Audio/index.js +8 -8
  31. package/Audio/sound.js +7 -7
  32. package/Audio/sound.js.map +1 -1
  33. package/Audio/soundTrack.js +1 -1
  34. package/Audio/weightedsound.js +1 -1
  35. package/Behaviors/Cameras/autoRotationBehavior.js +2 -2
  36. package/Behaviors/Cameras/bouncingBehavior.js +2 -2
  37. package/Behaviors/Cameras/framingBehavior.js +5 -5
  38. package/Behaviors/Cameras/index.js +3 -3
  39. package/Behaviors/Meshes/attachToBoxBehavior.js +1 -1
  40. package/Behaviors/Meshes/baseSixDofDragBehavior.d.ts +9 -1
  41. package/Behaviors/Meshes/baseSixDofDragBehavior.js +119 -62
  42. package/Behaviors/Meshes/baseSixDofDragBehavior.js.map +1 -1
  43. package/Behaviors/Meshes/followBehavior.js +3 -3
  44. package/Behaviors/Meshes/handConstraintBehavior.js +2 -2
  45. package/Behaviors/Meshes/index.js +9 -9
  46. package/Behaviors/Meshes/multiPointerScaleBehavior.js +2 -2
  47. package/Behaviors/Meshes/pointerDragBehavior.js +10 -9
  48. package/Behaviors/Meshes/pointerDragBehavior.js.map +1 -1
  49. package/Behaviors/Meshes/sixDofDragBehavior.d.ts +4 -0
  50. package/Behaviors/Meshes/sixDofDragBehavior.js +24 -13
  51. package/Behaviors/Meshes/sixDofDragBehavior.js.map +1 -1
  52. package/Behaviors/Meshes/surfaceMagnetismBehavior.js +2 -2
  53. package/Behaviors/index.js +3 -3
  54. package/Bones/bone.js +4 -4
  55. package/Bones/boneIKController.js +2 -2
  56. package/Bones/boneLookController.js +3 -3
  57. package/Bones/index.js +4 -4
  58. package/Bones/skeleton.js +9 -9
  59. package/Buffers/buffer.js +2 -5
  60. package/Buffers/buffer.js.map +1 -1
  61. package/Buffers/index.js +3 -3
  62. package/Cameras/Inputs/BaseCameraMouseWheelInput.js +5 -5
  63. package/Cameras/Inputs/BaseCameraPointersInput.js +3 -3
  64. package/Cameras/Inputs/arcRotateCameraGamepadInput.js +3 -3
  65. package/Cameras/Inputs/arcRotateCameraKeyboardMoveInput.js +4 -4
  66. package/Cameras/Inputs/arcRotateCameraMouseWheelInput.js +9 -9
  67. package/Cameras/Inputs/arcRotateCameraPointersInput.js +3 -3
  68. package/Cameras/Inputs/arcRotateCameraVRDeviceOrientationInput.js +3 -3
  69. package/Cameras/Inputs/flyCameraKeyboardInput.js +5 -5
  70. package/Cameras/Inputs/flyCameraMouseInput.js +6 -6
  71. package/Cameras/Inputs/followCameraKeyboardMoveInput.js +4 -4
  72. package/Cameras/Inputs/followCameraMouseWheelInput.js +4 -4
  73. package/Cameras/Inputs/followCameraPointersInput.js +3 -3
  74. package/Cameras/Inputs/freeCameraDeviceOrientationInput.js +5 -5
  75. package/Cameras/Inputs/freeCameraGamepadInput.js +4 -4
  76. package/Cameras/Inputs/freeCameraKeyboardMoveInput.js +5 -5
  77. package/Cameras/Inputs/freeCameraMouseInput.js +5 -5
  78. package/Cameras/Inputs/freeCameraMouseWheelInput.js +5 -5
  79. package/Cameras/Inputs/freeCameraTouchInput.js +5 -5
  80. package/Cameras/Inputs/freeCameraVirtualJoystickInput.js +4 -4
  81. package/Cameras/Inputs/index.js +19 -19
  82. package/Cameras/RigModes/index.js +4 -4
  83. package/Cameras/RigModes/stereoscopicAnaglyphRigMode.js +2 -2
  84. package/Cameras/RigModes/stereoscopicRigMode.js +4 -4
  85. package/Cameras/RigModes/vrRigMode.js +6 -6
  86. package/Cameras/RigModes/webVRRigMode.js +2 -2
  87. package/Cameras/Stereoscopic/anaglyphArcRotateCamera.js +5 -5
  88. package/Cameras/Stereoscopic/anaglyphFreeCamera.js +5 -5
  89. package/Cameras/Stereoscopic/anaglyphGamepadCamera.js +5 -5
  90. package/Cameras/Stereoscopic/anaglyphUniversalCamera.js +5 -5
  91. package/Cameras/Stereoscopic/index.js +9 -9
  92. package/Cameras/Stereoscopic/stereoscopicArcRotateCamera.js +5 -5
  93. package/Cameras/Stereoscopic/stereoscopicFreeCamera.js +5 -5
  94. package/Cameras/Stereoscopic/stereoscopicGamepadCamera.js +5 -5
  95. package/Cameras/Stereoscopic/stereoscopicScreenUniversalCamera.d.ts +3 -3
  96. package/Cameras/Stereoscopic/stereoscopicScreenUniversalCamera.js +29 -16
  97. package/Cameras/Stereoscopic/stereoscopicScreenUniversalCamera.js.map +1 -1
  98. package/Cameras/Stereoscopic/stereoscopicUniversalCamera.js +5 -5
  99. package/Cameras/VR/index.js +6 -6
  100. package/Cameras/VR/vrCameraMetrics.js +1 -1
  101. package/Cameras/VR/vrDeviceOrientationArcRotateCamera.js +7 -7
  102. package/Cameras/VR/vrDeviceOrientationFreeCamera.js +6 -6
  103. package/Cameras/VR/vrDeviceOrientationGamepadCamera.js +6 -6
  104. package/Cameras/VR/vrExperienceHelper.d.ts +0 -3
  105. package/Cameras/VR/vrExperienceHelper.js +52 -39
  106. package/Cameras/VR/vrExperienceHelper.js.map +1 -1
  107. package/Cameras/VR/webVRCamera.js +13 -13
  108. package/Cameras/arcRotateCamera.d.ts +10 -0
  109. package/Cameras/arcRotateCamera.js +40 -13
  110. package/Cameras/arcRotateCamera.js.map +1 -1
  111. package/Cameras/arcRotateCameraInputsManager.js +4 -4
  112. package/Cameras/camera.js +15 -15
  113. package/Cameras/camera.js.map +1 -1
  114. package/Cameras/cameraInputsManager.js +3 -3
  115. package/Cameras/deviceOrientationCamera.js +5 -5
  116. package/Cameras/flyCamera.js +6 -6
  117. package/Cameras/flyCameraInputsManager.js +3 -3
  118. package/Cameras/followCamera.js +6 -6
  119. package/Cameras/followCameraInputsManager.js +4 -4
  120. package/Cameras/freeCamera.js +6 -6
  121. package/Cameras/freeCameraInputsManager.js +5 -5
  122. package/Cameras/gamepadCamera.js +3 -3
  123. package/Cameras/index.js +20 -20
  124. package/Cameras/targetCamera.js +5 -5
  125. package/Cameras/touchCamera.js +3 -3
  126. package/Cameras/universalCamera.js +5 -5
  127. package/Cameras/virtualJoysticksCamera.js +4 -4
  128. package/Collisions/collider.js +2 -2
  129. package/Collisions/collisionCoordinator.js +4 -4
  130. package/Collisions/index.js +5 -5
  131. package/Collisions/meshCollisionData.js +1 -1
  132. package/Collisions/pickingInfo.d.ts +12 -2
  133. package/Collisions/pickingInfo.js +13 -4
  134. package/Collisions/pickingInfo.js.map +1 -1
  135. package/Compute/computeEffect.js +8 -8
  136. package/Compute/computeEffect.js.map +1 -1
  137. package/Compute/computeShader.js +8 -8
  138. package/Compute/computeShader.js.map +1 -1
  139. package/Compute/index.js +2 -2
  140. package/Culling/Octrees/index.js +3 -3
  141. package/Culling/Octrees/octree.js +2 -2
  142. package/Culling/Octrees/octreeBlock.js +2 -2
  143. package/Culling/Octrees/octreeSceneComponent.js +6 -6
  144. package/Culling/boundingBox.js +3 -3
  145. package/Culling/boundingInfo.js +4 -4
  146. package/Culling/boundingSphere.js +2 -2
  147. package/Culling/index.js +5 -5
  148. package/Culling/ray.js +6 -6
  149. package/Debug/axesViewer.js +4 -4
  150. package/Debug/boneAxesViewer.js +3 -3
  151. package/Debug/debugLayer.js +4 -4
  152. package/Debug/directionalLightFrustumViewer.js +19 -19
  153. package/Debug/directionalLightFrustumViewer.js.map +1 -1
  154. package/Debug/index.js +8 -8
  155. package/Debug/physicsViewer.js +15 -15
  156. package/Debug/physicsViewer.js.map +1 -1
  157. package/Debug/rayHelper.js +5 -5
  158. package/Debug/rayHelper.js.map +1 -1
  159. package/Debug/skeletonViewer.js +17 -17
  160. package/Debug/skeletonViewer.js.map +1 -1
  161. package/DeviceInput/Helpers/eventFactory.js +2 -2
  162. package/DeviceInput/Implementations/nativeDeviceInputWrapper.js +3 -3
  163. package/DeviceInput/Implementations/webDeviceInputSystem.js +5 -5
  164. package/DeviceInput/Implementations/webDeviceInputSystem.js.map +1 -1
  165. package/DeviceInput/InputDevices/deviceSourceManager.js +3 -3
  166. package/DeviceInput/deviceInputSystem.js +2 -2
  167. package/DeviceInput/index.js +8 -8
  168. package/Engines/Extensions/engine.alpha.js +1 -1
  169. package/Engines/Extensions/engine.computeShader.js +1 -1
  170. package/Engines/Extensions/engine.cubeTexture.js +7 -7
  171. package/Engines/Extensions/engine.cubeTexture.js.map +1 -1
  172. package/Engines/Extensions/engine.debugging.js +1 -1
  173. package/Engines/Extensions/engine.dynamicBuffer.js +1 -1
  174. package/Engines/Extensions/engine.dynamicTexture.js +2 -2
  175. package/Engines/Extensions/engine.externalTexture.js +1 -1
  176. package/Engines/Extensions/engine.multiRender.js +3 -3
  177. package/Engines/Extensions/engine.multiview.js +8 -8
  178. package/Engines/Extensions/engine.query.js +4 -4
  179. package/Engines/Extensions/engine.rawTexture.js +4 -4
  180. package/Engines/Extensions/engine.readTexture.js +1 -1
  181. package/Engines/Extensions/engine.renderTarget.js +5 -5
  182. package/Engines/Extensions/engine.renderTargetCube.js +3 -3
  183. package/Engines/Extensions/engine.storageBuffer.js +1 -1
  184. package/Engines/Extensions/engine.textureSampler.js +1 -1
  185. package/Engines/Extensions/engine.textureSelector.js +1 -1
  186. package/Engines/Extensions/engine.transformFeedback.js +1 -1
  187. package/Engines/Extensions/engine.uniformBuffer.js +2 -2
  188. package/Engines/Extensions/engine.videoTexture.js +1 -1
  189. package/Engines/Extensions/engine.views.js +1 -1
  190. package/Engines/Extensions/engine.webVR.js +7 -7
  191. package/Engines/Extensions/engine.webVR.js.map +1 -1
  192. package/Engines/Extensions/index.js +23 -23
  193. package/Engines/Processors/Expressions/Operators/index.js +4 -4
  194. package/Engines/Processors/Expressions/Operators/shaderDefineAndOperator.js +1 -1
  195. package/Engines/Processors/Expressions/Operators/shaderDefineArithmeticOperator.js +1 -1
  196. package/Engines/Processors/Expressions/Operators/shaderDefineIsDefinedOperator.js +1 -1
  197. package/Engines/Processors/Expressions/Operators/shaderDefineOrOperator.js +1 -1
  198. package/Engines/Processors/Expressions/index.js +2 -2
  199. package/Engines/Processors/index.js +9 -9
  200. package/Engines/Processors/shaderCodeConditionNode.js +1 -1
  201. package/Engines/Processors/shaderCodeInliner.js +13 -13
  202. package/Engines/Processors/shaderCodeInliner.js.map +1 -1
  203. package/Engines/Processors/shaderCodeNode.js +4 -4
  204. package/Engines/Processors/shaderCodeNode.js.map +1 -1
  205. package/Engines/Processors/shaderCodeTestNode.js +1 -1
  206. package/Engines/Processors/shaderProcessor.js +12 -12
  207. package/Engines/Processors/shaderProcessor.js.map +1 -1
  208. package/Engines/WebGL/webGL2ShaderProcessors.js +1 -1
  209. package/Engines/WebGL/webGLRenderTargetWrapper.js +1 -1
  210. package/Engines/WebGL/webGLShaderProcessors.js +1 -1
  211. package/Engines/WebGPU/Extensions/engine.alpha.js +2 -2
  212. package/Engines/WebGPU/Extensions/engine.computeShader.js +4 -4
  213. package/Engines/WebGPU/Extensions/engine.cubeTexture.js +2 -2
  214. package/Engines/WebGPU/Extensions/engine.debugging.js +1 -1
  215. package/Engines/WebGPU/Extensions/engine.dynamicBuffer.js +1 -1
  216. package/Engines/WebGPU/Extensions/engine.dynamicTexture.js +1 -1
  217. package/Engines/WebGPU/Extensions/engine.externalTexture.js +3 -3
  218. package/Engines/WebGPU/Extensions/engine.multiRender.js +3 -3
  219. package/Engines/WebGPU/Extensions/engine.query.js +1 -1
  220. package/Engines/WebGPU/Extensions/engine.rawTexture.js +3 -3
  221. package/Engines/WebGPU/Extensions/engine.readTexture.js +1 -1
  222. package/Engines/WebGPU/Extensions/engine.renderTarget.js +4 -4
  223. package/Engines/WebGPU/Extensions/engine.renderTargetCube.js +2 -2
  224. package/Engines/WebGPU/Extensions/engine.storageBuffer.js +3 -3
  225. package/Engines/WebGPU/Extensions/engine.textureSampler.js +2 -2
  226. package/Engines/WebGPU/Extensions/engine.uniformBuffer.js +2 -2
  227. package/Engines/WebGPU/Extensions/engine.videoTexture.js +1 -1
  228. package/Engines/WebGPU/Extensions/index.js +17 -17
  229. package/Engines/WebGPU/webgpuBufferManager.js +5 -5
  230. package/Engines/WebGPU/webgpuBufferManager.js.map +1 -1
  231. package/Engines/WebGPU/webgpuCacheBindGroups.js +1 -1
  232. package/Engines/WebGPU/webgpuCacheRenderPipeline.js +3 -3
  233. package/Engines/WebGPU/webgpuCacheRenderPipelineString.js +1 -1
  234. package/Engines/WebGPU/webgpuCacheRenderPipelineTree.js +1 -1
  235. package/Engines/WebGPU/webgpuCacheSampler.js +2 -2
  236. package/Engines/WebGPU/webgpuClearQuad.js +4 -4
  237. package/Engines/WebGPU/webgpuComputeContext.js +3 -3
  238. package/Engines/WebGPU/webgpuDepthCullingState.js +1 -1
  239. package/Engines/WebGPU/webgpuExternalTexture.js +1 -1
  240. package/Engines/WebGPU/webgpuHardwareTexture.js +3 -3
  241. package/Engines/WebGPU/webgpuMaterialContext.js +2 -2
  242. package/Engines/WebGPU/webgpuOcclusionQuery.js +2 -2
  243. package/Engines/WebGPU/webgpuPipelineContext.js +2 -2
  244. package/Engines/WebGPU/webgpuQuerySet.js +1 -1
  245. package/Engines/WebGPU/webgpuShaderProcessor.js +2 -2
  246. package/Engines/WebGPU/webgpuShaderProcessorsGLSL.js +5 -5
  247. package/Engines/WebGPU/webgpuShaderProcessorsWGSL.js +17 -17
  248. package/Engines/WebGPU/webgpuShaderProcessorsWGSL.js.map +1 -1
  249. package/Engines/WebGPU/webgpuStencilStateComposer.js +1 -1
  250. package/Engines/WebGPU/webgpuTextureHelper.js +5 -5
  251. package/Engines/WebGPU/webgpuTimestampQuery.js +3 -3
  252. package/Engines/WebGPU/webgpuTintWASM.js +3 -3
  253. package/Engines/WebGPU/webgpuTintWASM.js.map +1 -1
  254. package/Engines/engine.js +21 -20
  255. package/Engines/engine.js.map +1 -1
  256. package/Engines/engineFactory.js +3 -3
  257. package/Engines/index.js +30 -30
  258. package/Engines/nativeEngine.d.ts +4 -12
  259. package/Engines/nativeEngine.js +32 -42
  260. package/Engines/nativeEngine.js.map +1 -1
  261. package/Engines/nullEngine.d.ts +25 -0
  262. package/Engines/nullEngine.js +62 -8
  263. package/Engines/nullEngine.js.map +1 -1
  264. package/Engines/renderTargetWrapper.js +2 -2
  265. package/Engines/shaderStore.js +1 -1
  266. package/Engines/thinEngine.js +40 -37
  267. package/Engines/thinEngine.js.map +1 -1
  268. package/Engines/webgpuEngine.js +37 -37
  269. package/Engines/webgpuEngine.js.map +1 -1
  270. package/Events/index.js +4 -4
  271. package/Events/pointerEvents.js +1 -1
  272. package/Gamepads/Controllers/daydreamController.js +4 -4
  273. package/Gamepads/Controllers/gearVRController.js +5 -5
  274. package/Gamepads/Controllers/genericController.js +3 -3
  275. package/Gamepads/Controllers/index.js +8 -8
  276. package/Gamepads/Controllers/oculusTouchController.js +5 -5
  277. package/Gamepads/Controllers/poseEnabledController.js +5 -5
  278. package/Gamepads/Controllers/viveController.js +3 -3
  279. package/Gamepads/Controllers/webVRController.js +2 -2
  280. package/Gamepads/Controllers/windowsMotionController.js +9 -9
  281. package/Gamepads/dualShockGamepad.js +2 -2
  282. package/Gamepads/gamepad.js +1 -1
  283. package/Gamepads/gamepadManager.js +9 -9
  284. package/Gamepads/gamepadManager.js.map +1 -1
  285. package/Gamepads/gamepadSceneComponent.js +7 -7
  286. package/Gamepads/index.js +6 -6
  287. package/Gamepads/xboxGamepad.js +2 -2
  288. package/Gizmos/axisDragGizmo.js +36 -22
  289. package/Gizmos/axisDragGizmo.js.map +1 -1
  290. package/Gizmos/axisScaleGizmo.js +12 -12
  291. package/Gizmos/axisScaleGizmo.js.map +1 -1
  292. package/Gizmos/boundingBoxGizmo.js +31 -32
  293. package/Gizmos/boundingBoxGizmo.js.map +1 -1
  294. package/Gizmos/cameraGizmo.js +19 -19
  295. package/Gizmos/cameraGizmo.js.map +1 -1
  296. package/Gizmos/gizmo.js +5 -5
  297. package/Gizmos/gizmoManager.js +11 -11
  298. package/Gizmos/index.js +12 -12
  299. package/Gizmos/lightGizmo.js +45 -23
  300. package/Gizmos/lightGizmo.js.map +1 -1
  301. package/Gizmos/planeDragGizmo.js +10 -10
  302. package/Gizmos/planeDragGizmo.js.map +1 -1
  303. package/Gizmos/planeRotationGizmo.js +24 -14
  304. package/Gizmos/planeRotationGizmo.js.map +1 -1
  305. package/Gizmos/positionGizmo.js +8 -8
  306. package/Gizmos/rotationGizmo.js +7 -7
  307. package/Gizmos/scaleGizmo.js +11 -11
  308. package/Gizmos/scaleGizmo.js.map +1 -1
  309. package/Helpers/environmentHelper.js +17 -15
  310. package/Helpers/environmentHelper.js.map +1 -1
  311. package/Helpers/index.js +4 -4
  312. package/Helpers/photoDome.js +2 -2
  313. package/Helpers/sceneHelpers.js +18 -18
  314. package/Helpers/sceneHelpers.js.map +1 -1
  315. package/Helpers/textureDome.js +11 -11
  316. package/Helpers/textureDome.js.map +1 -1
  317. package/Helpers/videoDome.js +3 -3
  318. package/Inputs/scene.inputManager.js +8 -8
  319. package/Inputs/scene.inputManager.js.map +1 -1
  320. package/Instrumentation/engineInstrumentation.js +1 -1
  321. package/Instrumentation/index.js +3 -3
  322. package/Instrumentation/sceneInstrumentation.js +2 -2
  323. package/Layers/effectLayer.js +17 -17
  324. package/Layers/effectLayer.js.map +1 -1
  325. package/Layers/effectLayerSceneComponent.js +4 -4
  326. package/Layers/glowLayer.js +19 -16
  327. package/Layers/glowLayer.js.map +1 -1
  328. package/Layers/highlightLayer.js +20 -20
  329. package/Layers/highlightLayer.js.map +1 -1
  330. package/Layers/index.js +6 -6
  331. package/Layers/layer.js +12 -12
  332. package/Layers/layerSceneComponent.js +1 -1
  333. package/Legacy/legacy.js +3 -3
  334. package/LensFlares/index.js +3 -3
  335. package/LensFlares/lensFlare.js +2 -2
  336. package/LensFlares/lensFlareSystem.js +14 -14
  337. package/LensFlares/lensFlareSystem.js.map +1 -1
  338. package/LensFlares/lensFlareSystemSceneComponent.js +4 -4
  339. package/Lights/Shadows/cascadedShadowGenerator.js +12 -12
  340. package/Lights/Shadows/cascadedShadowGenerator.js.map +1 -1
  341. package/Lights/Shadows/index.js +3 -3
  342. package/Lights/Shadows/shadowGenerator.js +19 -19
  343. package/Lights/Shadows/shadowGenerator.js.map +1 -1
  344. package/Lights/Shadows/shadowGeneratorSceneComponent.js +4 -4
  345. package/Lights/directionalLight.js +5 -5
  346. package/Lights/hemisphericLight.js +5 -5
  347. package/Lights/index.js +7 -7
  348. package/Lights/light.js +8 -8
  349. package/Lights/light.js.map +1 -1
  350. package/Lights/pointLight.js +5 -5
  351. package/Lights/shadowLight.js +4 -4
  352. package/Lights/spotLight.js +6 -6
  353. package/Loading/Plugins/babylonFileLoader.js +30 -30
  354. package/Loading/Plugins/babylonFileLoader.js.map +1 -1
  355. package/Loading/Plugins/index.js +1 -1
  356. package/Loading/index.js +4 -4
  357. package/Loading/loadingScreen.js +1 -1
  358. package/Loading/sceneLoader.js +11 -11
  359. package/Loading/sceneLoader.js.map +1 -1
  360. package/Materials/Background/backgroundMaterial.js +17 -17
  361. package/Materials/Background/backgroundMaterial.js.map +1 -1
  362. package/Materials/Background/index.js +1 -1
  363. package/Materials/Node/Blocks/Dual/currentScreenBlock.js +6 -6
  364. package/Materials/Node/Blocks/Dual/currentScreenBlock.js.map +1 -1
  365. package/Materials/Node/Blocks/Dual/fogBlock.js +9 -9
  366. package/Materials/Node/Blocks/Dual/fogBlock.js.map +1 -1
  367. package/Materials/Node/Blocks/Dual/imageSourceBlock.js +10 -10
  368. package/Materials/Node/Blocks/Dual/imageSourceBlock.js.map +1 -1
  369. package/Materials/Node/Blocks/Dual/index.js +7 -7
  370. package/Materials/Node/Blocks/Dual/lightBlock.js +17 -17
  371. package/Materials/Node/Blocks/Dual/lightBlock.js.map +1 -1
  372. package/Materials/Node/Blocks/Dual/reflectionTextureBaseBlock.js +10 -10
  373. package/Materials/Node/Blocks/Dual/reflectionTextureBaseBlock.js.map +1 -1
  374. package/Materials/Node/Blocks/Dual/reflectionTextureBlock.js +7 -7
  375. package/Materials/Node/Blocks/Dual/reflectionTextureBlock.js.map +1 -1
  376. package/Materials/Node/Blocks/Dual/sceneDepthBlock.js +6 -6
  377. package/Materials/Node/Blocks/Dual/sceneDepthBlock.js.map +1 -1
  378. package/Materials/Node/Blocks/Dual/textureBlock.js +14 -14
  379. package/Materials/Node/Blocks/Dual/textureBlock.js.map +1 -1
  380. package/Materials/Node/Blocks/Fragment/derivativeBlock.js +5 -5
  381. package/Materials/Node/Blocks/Fragment/derivativeBlock.js.map +1 -1
  382. package/Materials/Node/Blocks/Fragment/discardBlock.js +5 -5
  383. package/Materials/Node/Blocks/Fragment/discardBlock.js.map +1 -1
  384. package/Materials/Node/Blocks/Fragment/fragCoordBlock.js +5 -5
  385. package/Materials/Node/Blocks/Fragment/fragCoordBlock.js.map +1 -1
  386. package/Materials/Node/Blocks/Fragment/fragmentOutputBlock.js +6 -6
  387. package/Materials/Node/Blocks/Fragment/fragmentOutputBlock.js.map +1 -1
  388. package/Materials/Node/Blocks/Fragment/frontFacingBlock.js +5 -5
  389. package/Materials/Node/Blocks/Fragment/frontFacingBlock.js.map +1 -1
  390. package/Materials/Node/Blocks/Fragment/imageProcessingBlock.js +9 -9
  391. package/Materials/Node/Blocks/Fragment/imageProcessingBlock.js.map +1 -1
  392. package/Materials/Node/Blocks/Fragment/index.js +8 -8
  393. package/Materials/Node/Blocks/Fragment/perturbNormalBlock.js +10 -10
  394. package/Materials/Node/Blocks/Fragment/perturbNormalBlock.js.map +1 -1
  395. package/Materials/Node/Blocks/Fragment/screenSizeBlock.js +5 -5
  396. package/Materials/Node/Blocks/Fragment/screenSizeBlock.js.map +1 -1
  397. package/Materials/Node/Blocks/Input/index.js +2 -2
  398. package/Materials/Node/Blocks/Input/inputBlock.js +12 -12
  399. package/Materials/Node/Blocks/Input/inputBlock.js.map +1 -1
  400. package/Materials/Node/Blocks/PBR/anisotropyBlock.js +7 -7
  401. package/Materials/Node/Blocks/PBR/anisotropyBlock.js.map +1 -1
  402. package/Materials/Node/Blocks/PBR/clearCoatBlock.js +10 -10
  403. package/Materials/Node/Blocks/PBR/clearCoatBlock.js.map +1 -1
  404. package/Materials/Node/Blocks/PBR/index.js +7 -7
  405. package/Materials/Node/Blocks/PBR/pbrMetallicRoughnessBlock.js +21 -21
  406. package/Materials/Node/Blocks/PBR/pbrMetallicRoughnessBlock.js.map +1 -1
  407. package/Materials/Node/Blocks/PBR/reflectionBlock.js +10 -10
  408. package/Materials/Node/Blocks/PBR/reflectionBlock.js.map +1 -1
  409. package/Materials/Node/Blocks/PBR/refractionBlock.js +13 -13
  410. package/Materials/Node/Blocks/PBR/refractionBlock.js.map +1 -1
  411. package/Materials/Node/Blocks/PBR/sheenBlock.js +8 -8
  412. package/Materials/Node/Blocks/PBR/sheenBlock.js.map +1 -1
  413. package/Materials/Node/Blocks/PBR/subSurfaceBlock.js +9 -9
  414. package/Materials/Node/Blocks/PBR/subSurfaceBlock.js.map +1 -1
  415. package/Materials/Node/Blocks/Particle/index.js +3 -3
  416. package/Materials/Node/Blocks/Particle/particleBlendMultiplyBlock.js +5 -5
  417. package/Materials/Node/Blocks/Particle/particleBlendMultiplyBlock.js.map +1 -1
  418. package/Materials/Node/Blocks/Particle/particleRampGradientBlock.js +5 -5
  419. package/Materials/Node/Blocks/Particle/particleRampGradientBlock.js.map +1 -1
  420. package/Materials/Node/Blocks/Particle/particleTextureBlock.js +7 -7
  421. package/Materials/Node/Blocks/Particle/particleTextureBlock.js.map +1 -1
  422. package/Materials/Node/Blocks/Vertex/bonesBlock.js +10 -10
  423. package/Materials/Node/Blocks/Vertex/bonesBlock.js.map +1 -1
  424. package/Materials/Node/Blocks/Vertex/index.js +5 -5
  425. package/Materials/Node/Blocks/Vertex/instancesBlock.js +7 -7
  426. package/Materials/Node/Blocks/Vertex/instancesBlock.js.map +1 -1
  427. package/Materials/Node/Blocks/Vertex/lightInformationBlock.js +6 -6
  428. package/Materials/Node/Blocks/Vertex/lightInformationBlock.js.map +1 -1
  429. package/Materials/Node/Blocks/Vertex/morphTargetsBlock.js +10 -10
  430. package/Materials/Node/Blocks/Vertex/morphTargetsBlock.js.map +1 -1
  431. package/Materials/Node/Blocks/Vertex/vertexOutputBlock.js +5 -5
  432. package/Materials/Node/Blocks/Vertex/vertexOutputBlock.js.map +1 -1
  433. package/Materials/Node/Blocks/addBlock.js +5 -5
  434. package/Materials/Node/Blocks/addBlock.js.map +1 -1
  435. package/Materials/Node/Blocks/arcTan2Block.js +5 -5
  436. package/Materials/Node/Blocks/arcTan2Block.js.map +1 -1
  437. package/Materials/Node/Blocks/clampBlock.js +6 -6
  438. package/Materials/Node/Blocks/clampBlock.js.map +1 -1
  439. package/Materials/Node/Blocks/colorMergerBlock.js +5 -5
  440. package/Materials/Node/Blocks/colorMergerBlock.js.map +1 -1
  441. package/Materials/Node/Blocks/colorSplitterBlock.js +5 -5
  442. package/Materials/Node/Blocks/colorSplitterBlock.js.map +1 -1
  443. package/Materials/Node/Blocks/conditionalBlock.js +5 -5
  444. package/Materials/Node/Blocks/conditionalBlock.js.map +1 -1
  445. package/Materials/Node/Blocks/crossBlock.js +5 -5
  446. package/Materials/Node/Blocks/crossBlock.js.map +1 -1
  447. package/Materials/Node/Blocks/desaturateBlock.js +5 -5
  448. package/Materials/Node/Blocks/desaturateBlock.js.map +1 -1
  449. package/Materials/Node/Blocks/distanceBlock.js +5 -5
  450. package/Materials/Node/Blocks/distanceBlock.js.map +1 -1
  451. package/Materials/Node/Blocks/divideBlock.js +5 -5
  452. package/Materials/Node/Blocks/divideBlock.js.map +1 -1
  453. package/Materials/Node/Blocks/dotBlock.js +5 -5
  454. package/Materials/Node/Blocks/dotBlock.js.map +1 -1
  455. package/Materials/Node/Blocks/fresnelBlock.js +8 -8
  456. package/Materials/Node/Blocks/fresnelBlock.js.map +1 -1
  457. package/Materials/Node/Blocks/gradientBlock.js +7 -7
  458. package/Materials/Node/Blocks/gradientBlock.js.map +1 -1
  459. package/Materials/Node/Blocks/index.js +52 -52
  460. package/Materials/Node/Blocks/lengthBlock.js +5 -5
  461. package/Materials/Node/Blocks/lengthBlock.js.map +1 -1
  462. package/Materials/Node/Blocks/lerpBlock.js +5 -5
  463. package/Materials/Node/Blocks/lerpBlock.js.map +1 -1
  464. package/Materials/Node/Blocks/matrixBuilderBlock.js +7 -7
  465. package/Materials/Node/Blocks/matrixBuilderBlock.js.map +1 -1
  466. package/Materials/Node/Blocks/maxBlock.js +5 -5
  467. package/Materials/Node/Blocks/maxBlock.js.map +1 -1
  468. package/Materials/Node/Blocks/minBlock.js +5 -5
  469. package/Materials/Node/Blocks/minBlock.js.map +1 -1
  470. package/Materials/Node/Blocks/modBlock.js +5 -5
  471. package/Materials/Node/Blocks/modBlock.js.map +1 -1
  472. package/Materials/Node/Blocks/multiplyBlock.js +5 -5
  473. package/Materials/Node/Blocks/multiplyBlock.js.map +1 -1
  474. package/Materials/Node/Blocks/nLerpBlock.js +5 -5
  475. package/Materials/Node/Blocks/nLerpBlock.js.map +1 -1
  476. package/Materials/Node/Blocks/negateBlock.js +5 -5
  477. package/Materials/Node/Blocks/negateBlock.js.map +1 -1
  478. package/Materials/Node/Blocks/normalBlendBlock.js +5 -5
  479. package/Materials/Node/Blocks/normalBlendBlock.js.map +1 -1
  480. package/Materials/Node/Blocks/normalizeBlock.js +5 -5
  481. package/Materials/Node/Blocks/normalizeBlock.js.map +1 -1
  482. package/Materials/Node/Blocks/oneMinusBlock.js +6 -6
  483. package/Materials/Node/Blocks/oneMinusBlock.js.map +1 -1
  484. package/Materials/Node/Blocks/posterizeBlock.js +5 -5
  485. package/Materials/Node/Blocks/posterizeBlock.js.map +1 -1
  486. package/Materials/Node/Blocks/powBlock.js +5 -5
  487. package/Materials/Node/Blocks/powBlock.js.map +1 -1
  488. package/Materials/Node/Blocks/randomNumberBlock.js +6 -6
  489. package/Materials/Node/Blocks/randomNumberBlock.js.map +1 -1
  490. package/Materials/Node/Blocks/reciprocalBlock.js +5 -5
  491. package/Materials/Node/Blocks/reciprocalBlock.js.map +1 -1
  492. package/Materials/Node/Blocks/reflectBlock.js +5 -5
  493. package/Materials/Node/Blocks/reflectBlock.js.map +1 -1
  494. package/Materials/Node/Blocks/refractBlock.js +5 -5
  495. package/Materials/Node/Blocks/refractBlock.js.map +1 -1
  496. package/Materials/Node/Blocks/remapBlock.js +7 -7
  497. package/Materials/Node/Blocks/remapBlock.js.map +1 -1
  498. package/Materials/Node/Blocks/replaceColorBlock.js +5 -5
  499. package/Materials/Node/Blocks/replaceColorBlock.js.map +1 -1
  500. package/Materials/Node/Blocks/rotate2dBlock.js +6 -6
  501. package/Materials/Node/Blocks/rotate2dBlock.js.map +1 -1
  502. package/Materials/Node/Blocks/scaleBlock.js +5 -5
  503. package/Materials/Node/Blocks/scaleBlock.js.map +1 -1
  504. package/Materials/Node/Blocks/simplexPerlin3DBlock.js +5 -5
  505. package/Materials/Node/Blocks/simplexPerlin3DBlock.js.map +1 -1
  506. package/Materials/Node/Blocks/smoothStepBlock.js +5 -5
  507. package/Materials/Node/Blocks/smoothStepBlock.js.map +1 -1
  508. package/Materials/Node/Blocks/stepBlock.js +5 -5
  509. package/Materials/Node/Blocks/stepBlock.js.map +1 -1
  510. package/Materials/Node/Blocks/subtractBlock.js +5 -5
  511. package/Materials/Node/Blocks/subtractBlock.js.map +1 -1
  512. package/Materials/Node/Blocks/transformBlock.js +5 -5
  513. package/Materials/Node/Blocks/transformBlock.js.map +1 -1
  514. package/Materials/Node/Blocks/trigonometryBlock.js +5 -5
  515. package/Materials/Node/Blocks/trigonometryBlock.js.map +1 -1
  516. package/Materials/Node/Blocks/vectorMergerBlock.js +5 -5
  517. package/Materials/Node/Blocks/vectorMergerBlock.js.map +1 -1
  518. package/Materials/Node/Blocks/vectorSplitterBlock.js +5 -5
  519. package/Materials/Node/Blocks/vectorSplitterBlock.js.map +1 -1
  520. package/Materials/Node/Blocks/viewDirectionBlock.js +7 -7
  521. package/Materials/Node/Blocks/viewDirectionBlock.js.map +1 -1
  522. package/Materials/Node/Blocks/waveBlock.js +5 -5
  523. package/Materials/Node/Blocks/waveBlock.js.map +1 -1
  524. package/Materials/Node/Blocks/worleyNoise3DBlock.js +6 -6
  525. package/Materials/Node/Blocks/worleyNoise3DBlock.js.map +1 -1
  526. package/Materials/Node/Enums/index.js +5 -5
  527. package/Materials/Node/Optimizers/index.js +1 -1
  528. package/Materials/Node/index.js +7 -7
  529. package/Materials/Node/nodeMaterial.js +40 -40
  530. package/Materials/Node/nodeMaterial.js.map +1 -1
  531. package/Materials/Node/nodeMaterialBlock.js +6 -6
  532. package/Materials/Node/nodeMaterialBlock.js.map +1 -1
  533. package/Materials/Node/nodeMaterialBlockConnectionPoint.js +3 -3
  534. package/Materials/Node/nodeMaterialBuildState.js +6 -6
  535. package/Materials/Node/nodeMaterialBuildState.js.map +1 -1
  536. package/Materials/Node/nodeMaterialConnectionPointCustomObject.js +1 -1
  537. package/Materials/Occlusion/index.js +1 -1
  538. package/Materials/Occlusion/occlusionMaterial.js +4 -4
  539. package/Materials/PBR/index.js +5 -5
  540. package/Materials/PBR/pbrAnisotropicConfiguration.js +11 -5
  541. package/Materials/PBR/pbrAnisotropicConfiguration.js.map +1 -1
  542. package/Materials/PBR/pbrBRDFConfiguration.js +1 -1
  543. package/Materials/PBR/pbrBaseMaterial.js +28 -28
  544. package/Materials/PBR/pbrBaseMaterial.js.map +1 -1
  545. package/Materials/PBR/pbrBaseSimpleMaterial.js +3 -3
  546. package/Materials/PBR/pbrClearCoatConfiguration.js +10 -4
  547. package/Materials/PBR/pbrClearCoatConfiguration.js.map +1 -1
  548. package/Materials/PBR/pbrMaterial.js +7 -7
  549. package/Materials/PBR/pbrMaterial.js.map +1 -1
  550. package/Materials/PBR/pbrMetallicRoughnessMaterial.js +4 -4
  551. package/Materials/PBR/pbrMetallicRoughnessMaterial.js.map +1 -1
  552. package/Materials/PBR/pbrSheenConfiguration.js +10 -4
  553. package/Materials/PBR/pbrSheenConfiguration.js.map +1 -1
  554. package/Materials/PBR/pbrSpecularGlossinessMaterial.js +4 -4
  555. package/Materials/PBR/pbrSpecularGlossinessMaterial.js.map +1 -1
  556. package/Materials/PBR/pbrSubSurfaceConfiguration.js +19 -6
  557. package/Materials/PBR/pbrSubSurfaceConfiguration.js.map +1 -1
  558. package/Materials/Textures/Filtering/hdrFiltering.js +6 -6
  559. package/Materials/Textures/Loaders/basisTextureLoader.js +9 -9
  560. package/Materials/Textures/Loaders/basisTextureLoader.js.map +1 -1
  561. package/Materials/Textures/Loaders/ddsTextureLoader.js +5 -5
  562. package/Materials/Textures/Loaders/ddsTextureLoader.js.map +1 -1
  563. package/Materials/Textures/Loaders/envTextureLoader.js +7 -7
  564. package/Materials/Textures/Loaders/envTextureLoader.js.map +1 -1
  565. package/Materials/Textures/Loaders/hdrTextureLoader.js +4 -4
  566. package/Materials/Textures/Loaders/hdrTextureLoader.js.map +1 -1
  567. package/Materials/Textures/Loaders/index.js +6 -6
  568. package/Materials/Textures/Loaders/ktxTextureLoader.js +6 -6
  569. package/Materials/Textures/Loaders/ktxTextureLoader.js.map +1 -1
  570. package/Materials/Textures/Loaders/tgaTextureLoader.js +6 -6
  571. package/Materials/Textures/Loaders/tgaTextureLoader.js.map +1 -1
  572. package/Materials/Textures/MultiviewRenderTarget.js +1 -1
  573. package/Materials/Textures/Packer/index.js +2 -2
  574. package/Materials/Textures/Packer/packer.js +9 -9
  575. package/Materials/Textures/Procedurals/customProceduralTexture.js +6 -6
  576. package/Materials/Textures/Procedurals/index.js +4 -4
  577. package/Materials/Textures/Procedurals/noiseProceduralTexture.js +5 -5
  578. package/Materials/Textures/Procedurals/noiseProceduralTexture.js.map +1 -1
  579. package/Materials/Textures/Procedurals/proceduralTexture.js +15 -15
  580. package/Materials/Textures/Procedurals/proceduralTexture.js.map +1 -1
  581. package/Materials/Textures/Procedurals/proceduralTextureSceneComponent.js +2 -2
  582. package/Materials/Textures/baseTexture.js +8 -8
  583. package/Materials/Textures/baseTexture.js.map +1 -1
  584. package/Materials/Textures/baseTexture.polynomial.js +2 -2
  585. package/Materials/Textures/colorGradingTexture.js +5 -5
  586. package/Materials/Textures/colorGradingTexture.js.map +1 -1
  587. package/Materials/Textures/cubeTexture.js +12 -12
  588. package/Materials/Textures/cubeTexture.js.map +1 -1
  589. package/Materials/Textures/dynamicTexture.js +3 -3
  590. package/Materials/Textures/equiRectangularCubeTexture.js +10 -12
  591. package/Materials/Textures/equiRectangularCubeTexture.js.map +1 -1
  592. package/Materials/Textures/externalTexture.js +1 -1
  593. package/Materials/Textures/hdrCubeTexture.js +16 -16
  594. package/Materials/Textures/hdrCubeTexture.js.map +1 -1
  595. package/Materials/Textures/htmlElementTexture.js +4 -4
  596. package/Materials/Textures/index.js +27 -27
  597. package/Materials/Textures/internalTexture.d.ts +15 -2
  598. package/Materials/Textures/internalTexture.js +29 -13
  599. package/Materials/Textures/internalTexture.js.map +1 -1
  600. package/Materials/Textures/mirrorTexture.js +5 -5
  601. package/Materials/Textures/multiRenderTarget.js +3 -3
  602. package/Materials/Textures/prePassRenderTarget.js +2 -2
  603. package/Materials/Textures/rawCubeTexture.d.ts +0 -3
  604. package/Materials/Textures/rawCubeTexture.js +6 -17
  605. package/Materials/Textures/rawCubeTexture.js.map +1 -1
  606. package/Materials/Textures/rawTexture.js +2 -2
  607. package/Materials/Textures/rawTexture2DArray.js +2 -2
  608. package/Materials/Textures/rawTexture3D.js +2 -2
  609. package/Materials/Textures/refractionTexture.js +2 -2
  610. package/Materials/Textures/renderTargetTexture.js +9 -9
  611. package/Materials/Textures/texture.js +30 -25
  612. package/Materials/Textures/texture.js.map +1 -1
  613. package/Materials/Textures/thinTexture.js +1 -1
  614. package/Materials/Textures/videoTexture.js +6 -6
  615. package/Materials/colorCurves.js +2 -2
  616. package/Materials/effect.js +8 -8
  617. package/Materials/effect.js.map +1 -1
  618. package/Materials/effectRenderer.js +6 -6
  619. package/Materials/fresnelParameters.js +4 -4
  620. package/Materials/imageProcessingConfiguration.js +6 -6
  621. package/Materials/index.js +25 -25
  622. package/Materials/material.detailMapConfiguration.js +7 -4
  623. package/Materials/material.detailMapConfiguration.js.map +1 -1
  624. package/Materials/material.js +11 -11
  625. package/Materials/materialFlags.js +1 -1
  626. package/Materials/materialHelper.js +7 -7
  627. package/Materials/materialStencilState.js +1 -1
  628. package/Materials/multiMaterial.js +4 -4
  629. package/Materials/multiMaterial.js.map +1 -1
  630. package/Materials/prePassConfiguration.d.ts +1 -0
  631. package/Materials/prePassConfiguration.js +8 -2
  632. package/Materials/prePassConfiguration.js.map +1 -1
  633. package/Materials/pushMaterial.js +2 -2
  634. package/Materials/shaderMaterial.d.ts +0 -2
  635. package/Materials/shaderMaterial.js +12 -30
  636. package/Materials/shaderMaterial.js.map +1 -1
  637. package/Materials/shadowDepthWrapper.js +6 -5
  638. package/Materials/shadowDepthWrapper.js.map +1 -1
  639. package/Materials/standardMaterial.js +20 -20
  640. package/Materials/standardMaterial.js.map +1 -1
  641. package/Materials/uniformBuffer.js +3 -3
  642. package/Maths/index.js +4 -4
  643. package/Maths/math.axis.js +1 -1
  644. package/Maths/math.color.js +6 -6
  645. package/Maths/math.color.js.map +1 -1
  646. package/Maths/math.frustum.js +1 -1
  647. package/Maths/math.functions.js +2 -2
  648. package/Maths/math.isovector.js +2 -2
  649. package/Maths/math.js +10 -10
  650. package/Maths/math.path.js +3 -3
  651. package/Maths/math.plane.js +1 -1
  652. package/Maths/math.vector.js +9 -9
  653. package/Maths/math.vector.js.map +1 -1
  654. package/Maths/math.vertexFormat.js +1 -1
  655. package/Maths/sphericalPolynomial.js +2 -2
  656. package/Meshes/Builders/boxBuilder.d.ts +63 -32
  657. package/Meshes/Builders/boxBuilder.js +53 -39
  658. package/Meshes/Builders/boxBuilder.js.map +1 -1
  659. package/Meshes/Builders/capsuleBuilder.d.ts +20 -10
  660. package/Meshes/Builders/capsuleBuilder.js +36 -37
  661. package/Meshes/Builders/capsuleBuilder.js.map +1 -1
  662. package/Meshes/Builders/cylinderBuilder.d.ts +87 -48
  663. package/Meshes/Builders/cylinderBuilder.js +71 -53
  664. package/Meshes/Builders/cylinderBuilder.js.map +1 -1
  665. package/Meshes/Builders/decalBuilder.d.ts +26 -24
  666. package/Meshes/Builders/decalBuilder.js +211 -213
  667. package/Meshes/Builders/decalBuilder.js.map +1 -1
  668. package/Meshes/Builders/discBuilder.d.ts +27 -25
  669. package/Meshes/Builders/discBuilder.js +46 -36
  670. package/Meshes/Builders/discBuilder.js.map +1 -1
  671. package/Meshes/Builders/geodesicBuilder.d.ts +34 -39
  672. package/Meshes/Builders/geodesicBuilder.js +58 -67
  673. package/Meshes/Builders/geodesicBuilder.js.map +1 -1
  674. package/Meshes/Builders/goldbergBuilder.d.ts +56 -29
  675. package/Meshes/Builders/goldbergBuilder.js +97 -84
  676. package/Meshes/Builders/goldbergBuilder.js.map +1 -1
  677. package/Meshes/Builders/groundBuilder.d.ts +151 -79
  678. package/Meshes/Builders/groundBuilder.js +174 -137
  679. package/Meshes/Builders/groundBuilder.js.map +1 -1
  680. package/Meshes/Builders/hemisphereBuilder.d.ts +16 -14
  681. package/Meshes/Builders/hemisphereBuilder.js +33 -34
  682. package/Meshes/Builders/hemisphereBuilder.js.map +1 -1
  683. package/Meshes/Builders/icoSphereBuilder.d.ts +57 -29
  684. package/Meshes/Builders/icoSphereBuilder.js +51 -38
  685. package/Meshes/Builders/icoSphereBuilder.js.map +1 -1
  686. package/Meshes/Builders/index.js +23 -23
  687. package/Meshes/Builders/latheBuilder.d.ts +38 -36
  688. package/Meshes/Builders/latheBuilder.js +70 -72
  689. package/Meshes/Builders/latheBuilder.js.map +1 -1
  690. package/Meshes/Builders/linesBuilder.d.ts +113 -82
  691. package/Meshes/Builders/linesBuilder.js +202 -184
  692. package/Meshes/Builders/linesBuilder.js.map +1 -1
  693. package/Meshes/Builders/planeBuilder.d.ts +48 -26
  694. package/Meshes/Builders/planeBuilder.js +50 -40
  695. package/Meshes/Builders/planeBuilder.js.map +1 -1
  696. package/Meshes/Builders/polygonBuilder.d.ts +68 -51
  697. package/Meshes/Builders/polygonBuilder.js +91 -79
  698. package/Meshes/Builders/polygonBuilder.js.map +1 -1
  699. package/Meshes/Builders/polyhedronBuilder.d.ts +73 -36
  700. package/Meshes/Builders/polyhedronBuilder.js +63 -43
  701. package/Meshes/Builders/polyhedronBuilder.js.map +1 -1
  702. package/Meshes/Builders/ribbonBuilder.d.ts +69 -39
  703. package/Meshes/Builders/ribbonBuilder.js +166 -152
  704. package/Meshes/Builders/ribbonBuilder.js.map +1 -1
  705. package/Meshes/Builders/shapeBuilder.d.ts +83 -81
  706. package/Meshes/Builders/shapeBuilder.js +185 -186
  707. package/Meshes/Builders/shapeBuilder.js.map +1 -1
  708. package/Meshes/Builders/sphereBuilder.d.ts +62 -31
  709. package/Meshes/Builders/sphereBuilder.js +53 -39
  710. package/Meshes/Builders/sphereBuilder.js.map +1 -1
  711. package/Meshes/Builders/tiledBoxBuilder.d.ts +56 -29
  712. package/Meshes/Builders/tiledBoxBuilder.js +45 -36
  713. package/Meshes/Builders/tiledBoxBuilder.js.map +1 -1
  714. package/Meshes/Builders/tiledPlaneBuilder.d.ts +67 -38
  715. package/Meshes/Builders/tiledPlaneBuilder.js +51 -40
  716. package/Meshes/Builders/tiledPlaneBuilder.js.map +1 -1
  717. package/Meshes/Builders/torusBuilder.d.ts +47 -25
  718. package/Meshes/Builders/torusBuilder.js +46 -36
  719. package/Meshes/Builders/torusBuilder.js.map +1 -1
  720. package/Meshes/Builders/torusKnotBuilder.d.ts +57 -29
  721. package/Meshes/Builders/torusKnotBuilder.js +51 -37
  722. package/Meshes/Builders/torusKnotBuilder.js.map +1 -1
  723. package/Meshes/Builders/tubeBuilder.d.ts +42 -40
  724. package/Meshes/Builders/tubeBuilder.js +140 -142
  725. package/Meshes/Builders/tubeBuilder.js.map +1 -1
  726. package/Meshes/Compression/dracoCompression.js +3 -3
  727. package/Meshes/Compression/index.js +2 -2
  728. package/Meshes/Compression/meshoptCompression.js +1 -1
  729. package/Meshes/WebGL/webGLDataBuffer.js +1 -1
  730. package/Meshes/WebGPU/webgpuDataBuffer.js +1 -1
  731. package/Meshes/abstractMesh.js +20 -20
  732. package/Meshes/abstractMesh.js.map +1 -1
  733. package/Meshes/csg.js +5 -5
  734. package/Meshes/geodesicMesh.js +4 -4
  735. package/Meshes/geometry.js +13 -17
  736. package/Meshes/geometry.js.map +1 -1
  737. package/Meshes/groundMesh.js +3 -3
  738. package/Meshes/index.d.ts +1 -0
  739. package/Meshes/index.js +25 -24
  740. package/Meshes/index.js.map +1 -1
  741. package/Meshes/instancedMesh.js +8 -8
  742. package/Meshes/linesMesh.js +9 -9
  743. package/Meshes/mesh.d.ts +2 -383
  744. package/Meshes/mesh.js +32 -439
  745. package/Meshes/mesh.js.map +1 -1
  746. package/Meshes/mesh.lts.d.ts +417 -0
  747. package/Meshes/mesh.lts.js +25 -0
  748. package/Meshes/mesh.lts.js.map +1 -0
  749. package/Meshes/mesh.vertexData.d.ts +21 -64
  750. package/Meshes/mesh.vertexData.js +46 -71
  751. package/Meshes/mesh.vertexData.js.map +1 -1
  752. package/Meshes/meshBuilder.d.ts +52 -799
  753. package/Meshes/meshBuilder.js +52 -609
  754. package/Meshes/meshBuilder.js.map +1 -1
  755. package/Meshes/meshSimplification.js +6 -6
  756. package/Meshes/meshSimplificationSceneComponent.js +4 -4
  757. package/Meshes/polygonMesh.js +8 -8
  758. package/Meshes/subMesh.js +5 -5
  759. package/Meshes/subMesh.project.js +2 -2
  760. package/Meshes/thinInstanceMesh.js +3 -3
  761. package/Meshes/trailMesh.js +5 -5
  762. package/Meshes/transformNode.js +5 -5
  763. package/Misc/HighDynamicRange/cubemapToSphericalPolynomial.js +5 -5
  764. package/Misc/HighDynamicRange/hdr.js +1 -1
  765. package/Misc/HighDynamicRange/index.js +3 -3
  766. package/Misc/HighDynamicRange/panoramaToCubemap.js +1 -1
  767. package/Misc/PerformanceViewer/index.js +4 -4
  768. package/Misc/PerformanceViewer/performanceViewerCollectionStrategies.js +2 -2
  769. package/Misc/PerformanceViewer/performanceViewerCollector.js +4 -4
  770. package/Misc/PerformanceViewer/performanceViewerSceneExtension.js +2 -2
  771. package/Misc/assetsManager.js +8 -8
  772. package/Misc/basis.d.ts +40 -12
  773. package/Misc/basis.js +172 -145
  774. package/Misc/basis.js.map +1 -1
  775. package/Misc/brdfTextureTools.d.ts +9 -8
  776. package/Misc/brdfTextureTools.js +49 -50
  777. package/Misc/brdfTextureTools.js.map +1 -1
  778. package/Misc/codeStringParsingTools.d.ts +40 -45
  779. package/Misc/codeStringParsingTools.js +154 -163
  780. package/Misc/codeStringParsingTools.js.map +1 -1
  781. package/Misc/computePressure.js +2 -2
  782. package/Misc/computePressure.js.map +1 -1
  783. package/Misc/copyTools.d.ts +30 -5
  784. package/Misc/copyTools.js +108 -87
  785. package/Misc/copyTools.js.map +1 -1
  786. package/Misc/dataReader.js +2 -2
  787. package/Misc/dataReader.js.map +1 -1
  788. package/Misc/dds.js +23 -23
  789. package/Misc/dds.js.map +1 -1
  790. package/Misc/decorators.js +8 -8
  791. package/Misc/decorators.js.map +1 -1
  792. package/Misc/deepCopier.js +3 -3
  793. package/Misc/deepCopier.js.map +1 -1
  794. package/Misc/depthReducer.js +2 -2
  795. package/Misc/devTools.d.ts +1 -3
  796. package/Misc/devTools.js +3 -9
  797. package/Misc/devTools.js.map +1 -1
  798. package/Misc/domManagement.d.ts +27 -6
  799. package/Misc/domManagement.js +43 -26
  800. package/Misc/domManagement.js.map +1 -1
  801. package/Misc/environmentTextureTools.d.ts +61 -28
  802. package/Misc/environmentTextureTools.js +550 -503
  803. package/Misc/environmentTextureTools.js.map +1 -1
  804. package/Misc/fileTools.d.ts +91 -101
  805. package/Misc/fileTools.js +414 -396
  806. package/Misc/fileTools.js.map +1 -1
  807. package/Misc/fileTools.lts.d.ts +9 -0
  808. package/Misc/fileTools.lts.js +64 -0
  809. package/Misc/fileTools.lts.js.map +1 -0
  810. package/Misc/filesInput.d.ts +1 -1
  811. package/Misc/filesInput.js +4 -4
  812. package/Misc/filesInput.js.map +1 -1
  813. package/Misc/gradients.js +1 -1
  814. package/Misc/guid.d.ts +10 -3
  815. package/Misc/guid.js +15 -12
  816. package/Misc/guid.js.map +1 -1
  817. package/Misc/index.d.ts +1 -0
  818. package/Misc/index.js +61 -60
  819. package/Misc/index.js.map +1 -1
  820. package/Misc/instantiationTools.js +3 -3
  821. package/Misc/instantiationTools.js.map +1 -1
  822. package/Misc/khronosTextureContainer.js +1 -1
  823. package/Misc/khronosTextureContainer2.js +2 -2
  824. package/Misc/meshExploder.js +1 -1
  825. package/Misc/minMaxReducer.js +4 -4
  826. package/Misc/observable.d.ts +7 -0
  827. package/Misc/observable.js +22 -0
  828. package/Misc/observable.js.map +1 -1
  829. package/Misc/observableCoroutine.js +1 -1
  830. package/Misc/perfCounter.js +1 -1
  831. package/Misc/performanceMonitor.js +1 -1
  832. package/Misc/pivotTools.js +1 -1
  833. package/Misc/precisionDate.js +1 -1
  834. package/Misc/reflector.js +4 -4
  835. package/Misc/reflector.js.map +1 -1
  836. package/Misc/rgbdTextureTools.js +5 -5
  837. package/Misc/rgbdTextureTools.js.map +1 -1
  838. package/Misc/sceneOptimizer.js +3 -3
  839. package/Misc/sceneRecorder.js +14 -14
  840. package/Misc/sceneSerializer.js +4 -4
  841. package/Misc/screenshotTools.d.ts +96 -12
  842. package/Misc/screenshotTools.js +302 -207
  843. package/Misc/screenshotTools.js.map +1 -1
  844. package/Misc/stringTools.d.ts +54 -47
  845. package/Misc/stringTools.js +108 -105
  846. package/Misc/stringTools.js.map +1 -1
  847. package/Misc/tags.js +1 -1
  848. package/Misc/textureTools.d.ts +38 -8
  849. package/Misc/textureTools.js +169 -138
  850. package/Misc/textureTools.js.map +1 -1
  851. package/Misc/tga.d.ts +34 -22
  852. package/Misc/tga.js +279 -260
  853. package/Misc/tga.js.map +1 -1
  854. package/Misc/timer.js +1 -1
  855. package/Misc/timingTools.js +2 -2
  856. package/Misc/timingTools.js.map +1 -1
  857. package/Misc/tools.d.ts +5 -5
  858. package/Misc/tools.js +42 -42
  859. package/Misc/tools.js.map +1 -1
  860. package/Misc/trajectoryClassifier.js +1 -1
  861. package/Misc/typeStore.d.ts +3 -8
  862. package/Misc/typeStore.js +9 -15
  863. package/Misc/typeStore.js.map +1 -1
  864. package/Misc/videoRecorder.js +1 -1
  865. package/Misc/virtualJoystick.js +2 -2
  866. package/Morph/index.js +2 -2
  867. package/Morph/morphTarget.js +6 -6
  868. package/Morph/morphTarget.js.map +1 -1
  869. package/Morph/morphTargetManager.d.ts +1 -1
  870. package/Morph/morphTargetManager.js +11 -10
  871. package/Morph/morphTargetManager.js.map +1 -1
  872. package/Navigation/Plugins/index.js +1 -1
  873. package/Navigation/Plugins/recastJSPlugin.js +6 -6
  874. package/Navigation/index.js +2 -2
  875. package/Offline/database.js +6 -6
  876. package/Offline/database.js.map +1 -1
  877. package/Offline/index.js +2 -2
  878. package/Particles/EmitterTypes/boxParticleEmitter.js +3 -3
  879. package/Particles/EmitterTypes/coneParticleEmitter.js +3 -3
  880. package/Particles/EmitterTypes/customParticleEmitter.js +2 -2
  881. package/Particles/EmitterTypes/cylinderParticleEmitter.js +3 -3
  882. package/Particles/EmitterTypes/hemisphericParticleEmitter.js +3 -3
  883. package/Particles/EmitterTypes/index.js +9 -9
  884. package/Particles/EmitterTypes/meshParticleEmitter.js +4 -4
  885. package/Particles/EmitterTypes/pointParticleEmitter.js +3 -3
  886. package/Particles/EmitterTypes/sphereParticleEmitter.js +3 -3
  887. package/Particles/baseParticleSystem.js +5 -5
  888. package/Particles/cloudPoint.js +1 -1
  889. package/Particles/computeShaderParticleSystem.js +7 -7
  890. package/Particles/computeShaderParticleSystem.js.map +1 -1
  891. package/Particles/gpuParticleSystem.js +24 -24
  892. package/Particles/gpuParticleSystem.js.map +1 -1
  893. package/Particles/index.js +17 -17
  894. package/Particles/particle.js +3 -3
  895. package/Particles/particleHelper.js +8 -8
  896. package/Particles/particleSystem.js +26 -26
  897. package/Particles/particleSystem.js.map +1 -1
  898. package/Particles/particleSystemComponent.js +7 -7
  899. package/Particles/particleSystemSet.js +7 -7
  900. package/Particles/particleSystemSet.js.map +1 -1
  901. package/Particles/pointsCloudSystem.js +12 -12
  902. package/Particles/solidParticle.js +5 -5
  903. package/Particles/solidParticleSystem.js +15 -15
  904. package/Particles/solidParticleSystem.js.map +1 -1
  905. package/Particles/subEmitter.d.ts +2 -1
  906. package/Particles/subEmitter.js +10 -8
  907. package/Particles/subEmitter.js.map +1 -1
  908. package/Particles/webgl2ParticleSystem.js +7 -7
  909. package/Particles/webgl2ParticleSystem.js.map +1 -1
  910. package/Physics/Plugins/ammoJSPlugin.js +35 -27
  911. package/Physics/Plugins/ammoJSPlugin.js.map +1 -1
  912. package/Physics/Plugins/cannonJSPlugin.js +7 -7
  913. package/Physics/Plugins/index.js +3 -3
  914. package/Physics/Plugins/oimoJSPlugin.js +6 -6
  915. package/Physics/index.js +7 -7
  916. package/Physics/physicsEngine.js +3 -3
  917. package/Physics/physicsEngine.js.map +1 -1
  918. package/Physics/physicsEngineComponent.js +7 -7
  919. package/Physics/physicsHelper.js +8 -8
  920. package/Physics/physicsHelper.js.map +1 -1
  921. package/Physics/physicsImpostor.js +7 -7
  922. package/Physics/physicsRaycastResult.js +1 -1
  923. package/PostProcesses/RenderPipeline/Pipelines/defaultRenderingPipeline.js +18 -18
  924. package/PostProcesses/RenderPipeline/Pipelines/defaultRenderingPipeline.js.map +1 -1
  925. package/PostProcesses/RenderPipeline/Pipelines/index.js +5 -5
  926. package/PostProcesses/RenderPipeline/Pipelines/lensRenderingPipeline.js +9 -9
  927. package/PostProcesses/RenderPipeline/Pipelines/ssao2RenderingPipeline.js +17 -17
  928. package/PostProcesses/RenderPipeline/Pipelines/ssao2RenderingPipeline.js.map +1 -1
  929. package/PostProcesses/RenderPipeline/Pipelines/ssaoRenderingPipeline.js +12 -12
  930. package/PostProcesses/RenderPipeline/Pipelines/standardRenderingPipeline.js +16 -16
  931. package/PostProcesses/RenderPipeline/Pipelines/standardRenderingPipeline.js.map +1 -1
  932. package/PostProcesses/RenderPipeline/index.js +5 -5
  933. package/PostProcesses/RenderPipeline/postProcessRenderEffect.js +1 -1
  934. package/PostProcesses/RenderPipeline/postProcessRenderPipeline.js +2 -2
  935. package/PostProcesses/RenderPipeline/postProcessRenderPipelineManagerSceneComponent.js +3 -3
  936. package/PostProcesses/anaglyphPostProcess.js +4 -4
  937. package/PostProcesses/anaglyphPostProcess.js.map +1 -1
  938. package/PostProcesses/blackAndWhitePostProcess.js +5 -5
  939. package/PostProcesses/blackAndWhitePostProcess.js.map +1 -1
  940. package/PostProcesses/bloomEffect.js +6 -6
  941. package/PostProcesses/bloomMergePostProcess.js +5 -5
  942. package/PostProcesses/bloomMergePostProcess.js.map +1 -1
  943. package/PostProcesses/blurPostProcess.js +7 -7
  944. package/PostProcesses/blurPostProcess.js.map +1 -1
  945. package/PostProcesses/chromaticAberrationPostProcess.js +6 -6
  946. package/PostProcesses/chromaticAberrationPostProcess.js.map +1 -1
  947. package/PostProcesses/circleOfConfusionPostProcess.js +6 -6
  948. package/PostProcesses/circleOfConfusionPostProcess.js.map +1 -1
  949. package/PostProcesses/colorCorrectionPostProcess.js +6 -6
  950. package/PostProcesses/colorCorrectionPostProcess.js.map +1 -1
  951. package/PostProcesses/convolutionPostProcess.js +5 -5
  952. package/PostProcesses/convolutionPostProcess.js.map +1 -1
  953. package/PostProcesses/depthOfFieldBlurPostProcess.js +5 -5
  954. package/PostProcesses/depthOfFieldBlurPostProcess.js.map +1 -1
  955. package/PostProcesses/depthOfFieldEffect.js +6 -6
  956. package/PostProcesses/depthOfFieldMergePostProcess.js +2 -2
  957. package/PostProcesses/displayPassPostProcess.js +5 -5
  958. package/PostProcesses/displayPassPostProcess.js.map +1 -1
  959. package/PostProcesses/extractHighlightsPostProcess.js +6 -6
  960. package/PostProcesses/extractHighlightsPostProcess.js.map +1 -1
  961. package/PostProcesses/filterPostProcess.js +5 -5
  962. package/PostProcesses/filterPostProcess.js.map +1 -1
  963. package/PostProcesses/fxaaPostProcess.js +7 -7
  964. package/PostProcesses/fxaaPostProcess.js.map +1 -1
  965. package/PostProcesses/grainPostProcess.js +5 -5
  966. package/PostProcesses/grainPostProcess.js.map +1 -1
  967. package/PostProcesses/highlightsPostProcess.js +2 -2
  968. package/PostProcesses/imageProcessingPostProcess.js +6 -6
  969. package/PostProcesses/index.js +33 -33
  970. package/PostProcesses/motionBlurPostProcess.js +11 -11
  971. package/PostProcesses/motionBlurPostProcess.js.map +1 -1
  972. package/PostProcesses/passPostProcess.js +7 -7
  973. package/PostProcesses/passPostProcess.js.map +1 -1
  974. package/PostProcesses/postProcess.js +11 -11
  975. package/PostProcesses/postProcess.js.map +1 -1
  976. package/PostProcesses/postProcessManager.js +1 -1
  977. package/PostProcesses/refractionPostProcess.js +6 -6
  978. package/PostProcesses/refractionPostProcess.js.map +1 -1
  979. package/PostProcesses/screenSpaceCurvaturePostProcess.js +8 -8
  980. package/PostProcesses/screenSpaceCurvaturePostProcess.js.map +1 -1
  981. package/PostProcesses/screenSpaceReflectionPostProcess.js +7 -7
  982. package/PostProcesses/screenSpaceReflectionPostProcess.js.map +1 -1
  983. package/PostProcesses/sharpenPostProcess.js +5 -5
  984. package/PostProcesses/sharpenPostProcess.js.map +1 -1
  985. package/PostProcesses/stereoscopicInterlacePostProcess.js +3 -3
  986. package/PostProcesses/subSurfaceScatteringPostProcess.js +6 -6
  987. package/PostProcesses/tonemapPostProcess.js +2 -2
  988. package/PostProcesses/volumetricLightScatteringPostProcess.js +23 -23
  989. package/PostProcesses/volumetricLightScatteringPostProcess.js.map +1 -1
  990. package/PostProcesses/vrDistortionCorrectionPostProcess.js +4 -4
  991. package/PostProcesses/vrMultiviewToSingleviewPostProcess.js +4 -4
  992. package/Probes/index.js +1 -1
  993. package/Probes/reflectionProbe.js +4 -4
  994. package/Rendering/boundingBoxRenderer.js +15 -15
  995. package/Rendering/boundingBoxRenderer.js.map +1 -1
  996. package/Rendering/depthRenderer.js +11 -11
  997. package/Rendering/depthRenderer.js.map +1 -1
  998. package/Rendering/depthRendererSceneComponent.js +3 -3
  999. package/Rendering/edgesRenderer.js +11 -11
  1000. package/Rendering/geometryBufferRenderer.js +13 -13
  1001. package/Rendering/geometryBufferRenderer.js.map +1 -1
  1002. package/Rendering/geometryBufferRendererSceneComponent.js +3 -3
  1003. package/Rendering/index.js +13 -13
  1004. package/Rendering/motionBlurConfiguration.js.map +1 -1
  1005. package/Rendering/outlineRenderer.js +8 -8
  1006. package/Rendering/prePassRenderer.js +6 -6
  1007. package/Rendering/prePassRenderer.js.map +1 -1
  1008. package/Rendering/prePassRendererSceneComponent.js +4 -4
  1009. package/Rendering/renderingGroup.js +2 -2
  1010. package/Rendering/renderingManager.js +1 -1
  1011. package/Rendering/screenSpaceReflectionsConfiguration.js.map +1 -1
  1012. package/Rendering/ssao2Configuration.js.map +1 -1
  1013. package/Rendering/subSurfaceConfiguration.js +6 -6
  1014. package/Rendering/subSurfaceConfiguration.js.map +1 -1
  1015. package/Rendering/subSurfaceSceneComponent.js +5 -5
  1016. package/Rendering/utilityLayerRenderer.js +8 -8
  1017. package/Shaders/ShadersInclude/backgroundFragmentDeclaration.js +1 -1
  1018. package/Shaders/ShadersInclude/backgroundUboDeclaration.js +2 -2
  1019. package/Shaders/ShadersInclude/backgroundVertexDeclaration.js +1 -1
  1020. package/Shaders/ShadersInclude/bayerDitherFunctions.js +1 -1
  1021. package/Shaders/ShadersInclude/bonesDeclaration.js +1 -1
  1022. package/Shaders/ShadersInclude/bonesVertex.js +1 -1
  1023. package/Shaders/ShadersInclude/bumpFragment.js +1 -1
  1024. package/Shaders/ShadersInclude/bumpFragmentFunctions.js +2 -2
  1025. package/Shaders/ShadersInclude/bumpFragmentMainFunctions.js +1 -1
  1026. package/Shaders/ShadersInclude/bumpVertex.js +1 -1
  1027. package/Shaders/ShadersInclude/bumpVertexDeclaration.js +1 -1
  1028. package/Shaders/ShadersInclude/clipPlaneFragment.js +1 -1
  1029. package/Shaders/ShadersInclude/clipPlaneFragmentDeclaration.js +1 -1
  1030. package/Shaders/ShadersInclude/clipPlaneFragmentDeclaration2.js +1 -1
  1031. package/Shaders/ShadersInclude/clipPlaneVertex.js +1 -1
  1032. package/Shaders/ShadersInclude/clipPlaneVertexDeclaration.js +1 -1
  1033. package/Shaders/ShadersInclude/clipPlaneVertexDeclaration2.js +1 -1
  1034. package/Shaders/ShadersInclude/defaultFragmentDeclaration.js +1 -1
  1035. package/Shaders/ShadersInclude/defaultUboDeclaration.js +3 -3
  1036. package/Shaders/ShadersInclude/defaultVertexDeclaration.js +1 -1
  1037. package/Shaders/ShadersInclude/depthPrePass.js +1 -1
  1038. package/Shaders/ShadersInclude/diffusionProfile.js +1 -1
  1039. package/Shaders/ShadersInclude/fibonacci.js +1 -1
  1040. package/Shaders/ShadersInclude/fogFragment.js +2 -2
  1041. package/Shaders/ShadersInclude/fogFragment.js.map +1 -1
  1042. package/Shaders/ShadersInclude/fogFragmentDeclaration.js +1 -1
  1043. package/Shaders/ShadersInclude/fogVertex.js +1 -1
  1044. package/Shaders/ShadersInclude/fogVertexDeclaration.js +1 -1
  1045. package/Shaders/ShadersInclude/fresnelFunction.js +1 -1
  1046. package/Shaders/ShadersInclude/geometryUboDeclaration.js +2 -2
  1047. package/Shaders/ShadersInclude/geometryVertexDeclaration.js +1 -1
  1048. package/Shaders/ShadersInclude/harmonicsFunctions.js +1 -1
  1049. package/Shaders/ShadersInclude/hdrFilteringFunctions.js +1 -1
  1050. package/Shaders/ShadersInclude/helperFunctions.js +1 -1
  1051. package/Shaders/ShadersInclude/imageProcessingCompatibility.js +1 -1
  1052. package/Shaders/ShadersInclude/imageProcessingDeclaration.js +1 -1
  1053. package/Shaders/ShadersInclude/imageProcessingFunctions.js +1 -1
  1054. package/Shaders/ShadersInclude/importanceSampling.js +1 -1
  1055. package/Shaders/ShadersInclude/instancesDeclaration.js +1 -1
  1056. package/Shaders/ShadersInclude/instancesVertex.js +1 -1
  1057. package/Shaders/ShadersInclude/kernelBlurFragment.js +1 -1
  1058. package/Shaders/ShadersInclude/kernelBlurFragment2.js +1 -1
  1059. package/Shaders/ShadersInclude/kernelBlurVaryingDeclaration.js +1 -1
  1060. package/Shaders/ShadersInclude/kernelBlurVertex.js +1 -1
  1061. package/Shaders/ShadersInclude/lightFragment.js +1 -1
  1062. package/Shaders/ShadersInclude/lightFragmentDeclaration.js +1 -1
  1063. package/Shaders/ShadersInclude/lightUboDeclaration.js +1 -1
  1064. package/Shaders/ShadersInclude/lightVxFragmentDeclaration.js +1 -1
  1065. package/Shaders/ShadersInclude/lightVxUboDeclaration.js +1 -1
  1066. package/Shaders/ShadersInclude/lightsFragmentFunctions.js +1 -1
  1067. package/Shaders/ShadersInclude/logDepthDeclaration.js +1 -1
  1068. package/Shaders/ShadersInclude/logDepthFragment.js +1 -1
  1069. package/Shaders/ShadersInclude/logDepthVertex.js +1 -1
  1070. package/Shaders/ShadersInclude/mainUVVaryingDeclaration.js +1 -1
  1071. package/Shaders/ShadersInclude/meshFragmentDeclaration.js +1 -1
  1072. package/Shaders/ShadersInclude/meshUboDeclaration.js +1 -1
  1073. package/Shaders/ShadersInclude/meshVertexDeclaration.js +1 -1
  1074. package/Shaders/ShadersInclude/morphTargetsVertex.js +1 -1
  1075. package/Shaders/ShadersInclude/morphTargetsVertexDeclaration.js +1 -1
  1076. package/Shaders/ShadersInclude/morphTargetsVertexGlobal.js +1 -1
  1077. package/Shaders/ShadersInclude/morphTargetsVertexGlobalDeclaration.js +1 -1
  1078. package/Shaders/ShadersInclude/mrtFragmentDeclaration.js +1 -1
  1079. package/Shaders/ShadersInclude/packingFunctions.js +1 -1
  1080. package/Shaders/ShadersInclude/pbrBRDFFunctions.js +1 -1
  1081. package/Shaders/ShadersInclude/pbrBlockAlbedoOpacity.js +1 -1
  1082. package/Shaders/ShadersInclude/pbrBlockAlphaFresnel.js +1 -1
  1083. package/Shaders/ShadersInclude/pbrBlockAmbientOcclusion.js +1 -1
  1084. package/Shaders/ShadersInclude/pbrBlockAnisotropic.js +1 -1
  1085. package/Shaders/ShadersInclude/pbrBlockClearcoat.js +1 -1
  1086. package/Shaders/ShadersInclude/pbrBlockDirectLighting.js +1 -1
  1087. package/Shaders/ShadersInclude/pbrBlockFinalColorComposition.js +1 -1
  1088. package/Shaders/ShadersInclude/pbrBlockFinalLitComponents.js +1 -1
  1089. package/Shaders/ShadersInclude/pbrBlockFinalUnlitComponents.js +1 -1
  1090. package/Shaders/ShadersInclude/pbrBlockGeometryInfo.js +1 -1
  1091. package/Shaders/ShadersInclude/pbrBlockImageProcessing.js +1 -1
  1092. package/Shaders/ShadersInclude/pbrBlockLightmapInit.js +1 -1
  1093. package/Shaders/ShadersInclude/pbrBlockNormalFinal.js +1 -1
  1094. package/Shaders/ShadersInclude/pbrBlockNormalGeometric.js +1 -1
  1095. package/Shaders/ShadersInclude/pbrBlockReflectance.js +1 -1
  1096. package/Shaders/ShadersInclude/pbrBlockReflectance0.js +1 -1
  1097. package/Shaders/ShadersInclude/pbrBlockReflection.js +1 -1
  1098. package/Shaders/ShadersInclude/pbrBlockReflectivity.js +1 -1
  1099. package/Shaders/ShadersInclude/pbrBlockSheen.js +1 -1
  1100. package/Shaders/ShadersInclude/pbrBlockSubSurface.js +1 -1
  1101. package/Shaders/ShadersInclude/pbrDebug.js +1 -1
  1102. package/Shaders/ShadersInclude/pbrDirectLightingFalloffFunctions.js +1 -1
  1103. package/Shaders/ShadersInclude/pbrDirectLightingFunctions.js +1 -1
  1104. package/Shaders/ShadersInclude/pbrDirectLightingSetupFunctions.js +1 -1
  1105. package/Shaders/ShadersInclude/pbrFragmentDeclaration.js +1 -1
  1106. package/Shaders/ShadersInclude/pbrFragmentExtraDeclaration.js +2 -2
  1107. package/Shaders/ShadersInclude/pbrFragmentSamplersDeclaration.js +3 -3
  1108. package/Shaders/ShadersInclude/pbrHelperFunctions.js +1 -1
  1109. package/Shaders/ShadersInclude/pbrIBLFunctions.js +1 -1
  1110. package/Shaders/ShadersInclude/pbrUboDeclaration.js +3 -3
  1111. package/Shaders/ShadersInclude/pbrVertexDeclaration.js +1 -1
  1112. package/Shaders/ShadersInclude/pointCloudVertex.js +1 -1
  1113. package/Shaders/ShadersInclude/pointCloudVertexDeclaration.js +1 -1
  1114. package/Shaders/ShadersInclude/prePassDeclaration.js +1 -1
  1115. package/Shaders/ShadersInclude/prePassVertex.js +1 -1
  1116. package/Shaders/ShadersInclude/prePassVertexDeclaration.js +1 -1
  1117. package/Shaders/ShadersInclude/reflectionFunction.js +1 -1
  1118. package/Shaders/ShadersInclude/samplerFragmentAlternateDeclaration.js +1 -1
  1119. package/Shaders/ShadersInclude/samplerFragmentDeclaration.js +1 -1
  1120. package/Shaders/ShadersInclude/samplerVertexDeclaration.js +1 -1
  1121. package/Shaders/ShadersInclude/samplerVertexImplementation.js +1 -1
  1122. package/Shaders/ShadersInclude/sceneFragmentDeclaration.js +1 -1
  1123. package/Shaders/ShadersInclude/sceneUboDeclaration.js +1 -1
  1124. package/Shaders/ShadersInclude/sceneVertexDeclaration.js +1 -1
  1125. package/Shaders/ShadersInclude/shadowMapFragment.js +1 -1
  1126. package/Shaders/ShadersInclude/shadowMapFragmentExtraDeclaration.js +3 -3
  1127. package/Shaders/ShadersInclude/shadowMapFragmentSoftTransparentShadow.js +1 -1
  1128. package/Shaders/ShadersInclude/shadowMapUboDeclaration.js +3 -3
  1129. package/Shaders/ShadersInclude/shadowMapVertexDeclaration.js +3 -3
  1130. package/Shaders/ShadersInclude/shadowMapVertexExtraDeclaration.js +1 -1
  1131. package/Shaders/ShadersInclude/shadowMapVertexMetric.js +1 -1
  1132. package/Shaders/ShadersInclude/shadowMapVertexNormalBias.js +1 -1
  1133. package/Shaders/ShadersInclude/shadowsFragmentFunctions.js +1 -1
  1134. package/Shaders/ShadersInclude/shadowsVertex.js +1 -1
  1135. package/Shaders/ShadersInclude/subSurfaceScatteringFunctions.js +1 -1
  1136. package/Shaders/ShadersInclude/uvAttributeDeclaration.js +1 -1
  1137. package/Shaders/ShadersInclude/uvVariableDeclaration.js +1 -1
  1138. package/Shaders/anaglyph.fragment.js +1 -1
  1139. package/Shaders/background.fragment.js +16 -16
  1140. package/Shaders/background.vertex.js +15 -15
  1141. package/Shaders/blackAndWhite.fragment.js +1 -1
  1142. package/Shaders/bloomMerge.fragment.js +1 -1
  1143. package/Shaders/blur.fragment.js +1 -1
  1144. package/Shaders/chromaticAberration.fragment.js +1 -1
  1145. package/Shaders/circleOfConfusion.fragment.js +1 -1
  1146. package/Shaders/clearQuad.fragment.js +1 -1
  1147. package/Shaders/clearQuad.vertex.js +1 -1
  1148. package/Shaders/color.fragment.js +3 -3
  1149. package/Shaders/color.vertex.js +7 -7
  1150. package/Shaders/colorCorrection.fragment.js +1 -1
  1151. package/Shaders/convolution.fragment.js +1 -1
  1152. package/Shaders/default.fragment.js +26 -26
  1153. package/Shaders/default.vertex.js +31 -31
  1154. package/Shaders/depth.fragment.js +2 -2
  1155. package/Shaders/depth.vertex.js +9 -9
  1156. package/Shaders/depthBoxBlur.fragment.js +1 -1
  1157. package/Shaders/depthOfField.fragment.js +1 -1
  1158. package/Shaders/depthOfFieldMerge.fragment.js +1 -1
  1159. package/Shaders/displayPass.fragment.js +1 -1
  1160. package/Shaders/extractHighlights.fragment.js +2 -2
  1161. package/Shaders/filter.fragment.js +1 -1
  1162. package/Shaders/fxaa.fragment.js +1 -1
  1163. package/Shaders/fxaa.vertex.js +1 -1
  1164. package/Shaders/geometry.fragment.js +5 -5
  1165. package/Shaders/geometry.vertex.js +12 -12
  1166. package/Shaders/glowBlurPostProcess.fragment.js +1 -1
  1167. package/Shaders/glowMapGeneration.fragment.js +2 -2
  1168. package/Shaders/glowMapGeneration.vertex.js +9 -9
  1169. package/Shaders/glowMapMerge.fragment.js +1 -1
  1170. package/Shaders/glowMapMerge.vertex.js +1 -1
  1171. package/Shaders/gpuRenderParticles.fragment.js +6 -6
  1172. package/Shaders/gpuRenderParticles.vertex.js +3 -3
  1173. package/Shaders/gpuUpdateParticles.fragment.js +1 -1
  1174. package/Shaders/gpuUpdateParticles.vertex.js +1 -1
  1175. package/Shaders/grain.fragment.js +2 -2
  1176. package/Shaders/hdrFiltering.fragment.js +5 -5
  1177. package/Shaders/hdrFiltering.vertex.js +1 -1
  1178. package/Shaders/highlights.fragment.js +1 -1
  1179. package/Shaders/imageProcessing.fragment.js +4 -4
  1180. package/Shaders/kernelBlur.fragment.js +5 -5
  1181. package/Shaders/kernelBlur.vertex.js +3 -3
  1182. package/Shaders/layer.fragment.js +2 -2
  1183. package/Shaders/layer.vertex.js +1 -1
  1184. package/Shaders/lensFlare.fragment.js +1 -1
  1185. package/Shaders/lensFlare.vertex.js +1 -1
  1186. package/Shaders/lensHighlights.fragment.js +1 -1
  1187. package/Shaders/line.fragment.js +3 -3
  1188. package/Shaders/line.vertex.js +5 -5
  1189. package/Shaders/minmaxRedux.fragment.js +1 -1
  1190. package/Shaders/motionBlur.fragment.js +1 -1
  1191. package/Shaders/noise.fragment.js +1 -1
  1192. package/Shaders/outline.fragment.js +3 -3
  1193. package/Shaders/outline.vertex.js +11 -11
  1194. package/Shaders/particles.fragment.js +6 -6
  1195. package/Shaders/particles.vertex.js +3 -3
  1196. package/Shaders/pass.fragment.js +1 -1
  1197. package/Shaders/passCube.fragment.js +1 -1
  1198. package/Shaders/pbr.fragment.js +55 -55
  1199. package/Shaders/pbr.vertex.js +31 -31
  1200. package/Shaders/postprocess.vertex.js +1 -1
  1201. package/Shaders/procedural.vertex.js +1 -1
  1202. package/Shaders/refraction.fragment.js +1 -1
  1203. package/Shaders/rgbdDecode.fragment.js +2 -2
  1204. package/Shaders/rgbdEncode.fragment.js +2 -2
  1205. package/Shaders/screenSpaceCurvature.fragment.js +1 -1
  1206. package/Shaders/screenSpaceReflection.fragment.js +1 -1
  1207. package/Shaders/shadowMap.fragment.js +5 -5
  1208. package/Shaders/shadowMap.vertex.js +16 -16
  1209. package/Shaders/sharpen.fragment.js +1 -1
  1210. package/Shaders/spriteMap.fragment.js +1 -1
  1211. package/Shaders/spriteMap.vertex.js +1 -1
  1212. package/Shaders/sprites.fragment.js +4 -4
  1213. package/Shaders/sprites.vertex.js +2 -2
  1214. package/Shaders/ssao.fragment.js +1 -1
  1215. package/Shaders/ssao2.fragment.js +1 -1
  1216. package/Shaders/ssaoCombine.fragment.js +1 -1
  1217. package/Shaders/standard.fragment.js +2 -2
  1218. package/Shaders/stereoscopicInterlace.fragment.js +1 -1
  1219. package/Shaders/subSurfaceScattering.fragment.js +5 -5
  1220. package/Shaders/tonemap.fragment.js +1 -1
  1221. package/Shaders/volumetricLightScattering.fragment.js +1 -1
  1222. package/Shaders/volumetricLightScatteringPass.fragment.js +1 -1
  1223. package/Shaders/volumetricLightScatteringPass.vertex.js +9 -9
  1224. package/Shaders/vrDistortionCorrection.fragment.js +1 -1
  1225. package/Shaders/vrMultiviewToSingleview.fragment.js +1 -1
  1226. package/ShadersWGSL/ShadersInclude/bonesDeclaration.js +1 -1
  1227. package/ShadersWGSL/ShadersInclude/bonesVertex.js +1 -1
  1228. package/ShadersWGSL/ShadersInclude/instancesDeclaration.js +1 -1
  1229. package/ShadersWGSL/ShadersInclude/instancesVertex.js +1 -1
  1230. package/ShadersWGSL/ShadersInclude/meshUboDeclaration.js +1 -1
  1231. package/ShadersWGSL/ShadersInclude/morphTargetsVertex.js +1 -1
  1232. package/ShadersWGSL/ShadersInclude/morphTargetsVertexDeclaration.js +1 -1
  1233. package/ShadersWGSL/ShadersInclude/morphTargetsVertexGlobal.js +1 -1
  1234. package/ShadersWGSL/ShadersInclude/morphTargetsVertexGlobalDeclaration.js +1 -1
  1235. package/ShadersWGSL/ShadersInclude/sceneUboDeclaration.js +1 -1
  1236. package/ShadersWGSL/gpuUpdateParticles.compute.js +1 -1
  1237. package/Sprites/index.js +6 -6
  1238. package/Sprites/sprite.js +4 -4
  1239. package/Sprites/spriteManager.js +11 -11
  1240. package/Sprites/spriteMap.js +11 -11
  1241. package/Sprites/spriteMap.js.map +1 -1
  1242. package/Sprites/spritePackedManager.js +2 -2
  1243. package/Sprites/spriteRenderer.js +6 -6
  1244. package/Sprites/spriteSceneComponent.js +6 -6
  1245. package/States/index.js +4 -4
  1246. package/XR/features/WebXRAnchorSystem.js +5 -5
  1247. package/XR/features/WebXRBackgroundRemover.js +3 -3
  1248. package/XR/features/WebXRControllerMovement.js +5 -5
  1249. package/XR/features/WebXRControllerPhysics.js +8 -8
  1250. package/XR/features/WebXRControllerPhysics.js.map +1 -1
  1251. package/XR/features/WebXRControllerPointerSelection.js +19 -15
  1252. package/XR/features/WebXRControllerPointerSelection.js.map +1 -1
  1253. package/XR/features/WebXRControllerTeleportation.js +24 -24
  1254. package/XR/features/WebXRControllerTeleportation.js.map +1 -1
  1255. package/XR/features/WebXRDOMOverlay.js +3 -3
  1256. package/XR/features/WebXREyeTracking.js +5 -5
  1257. package/XR/features/WebXRFeaturePointSystem.js +4 -4
  1258. package/XR/features/WebXRHandTracking.js +15 -15
  1259. package/XR/features/WebXRHandTracking.js.map +1 -1
  1260. package/XR/features/WebXRHitTest.js +5 -5
  1261. package/XR/features/WebXRHitTestLegacy.js +5 -5
  1262. package/XR/features/WebXRImageTracking.js +5 -5
  1263. package/XR/features/WebXRLightEstimation.js +12 -12
  1264. package/XR/features/WebXRMeshDetector.js +4 -4
  1265. package/XR/features/WebXRNearInteraction.js +14 -12
  1266. package/XR/features/WebXRNearInteraction.js.map +1 -1
  1267. package/XR/features/WebXRPlaneDetector.js +4 -4
  1268. package/XR/features/WebXRWalkingLocomotion.js +5 -5
  1269. package/XR/features/index.js +19 -19
  1270. package/XR/index.js +12 -12
  1271. package/XR/motionController/index.js +9 -9
  1272. package/XR/motionController/webXRAbstractMotionController.js +6 -6
  1273. package/XR/motionController/webXRControllerComponent.js +1 -1
  1274. package/XR/motionController/webXRGenericHandController.js +2 -2
  1275. package/XR/motionController/webXRGenericMotionController.js +3 -3
  1276. package/XR/motionController/webXRHTCViveMotionController.js +4 -4
  1277. package/XR/motionController/webXRMicrosoftMixedRealityController.js +6 -6
  1278. package/XR/motionController/webXRMotionControllerManager.js +3 -3
  1279. package/XR/motionController/webXROculusTouchMotionController.js +4 -4
  1280. package/XR/motionController/webXRProfiledMotionController.js +10 -10
  1281. package/XR/motionController/webXRProfiledMotionController.js.map +1 -1
  1282. package/XR/webXRCamera.js +7 -7
  1283. package/XR/webXRDefaultExperience.js +7 -7
  1284. package/XR/webXREnterExitUI.js +3 -3
  1285. package/XR/webXRExperienceHelper.js +8 -8
  1286. package/XR/webXRFeaturesManager.js +1 -1
  1287. package/XR/webXRInput.js +3 -3
  1288. package/XR/webXRInputSource.js +5 -5
  1289. package/XR/webXRManagedOutputCanvas.js +2 -2
  1290. package/XR/webXRSessionManager.js +5 -5
  1291. package/assetContainer.js +4 -4
  1292. package/index.d.ts +1 -0
  1293. package/index.js +44 -43
  1294. package/index.js.map +1 -1
  1295. package/license.md +12 -13
  1296. package/node.js +6 -6
  1297. package/node.js.map +1 -1
  1298. package/package.json +10 -1
  1299. package/readme.md +12 -13
  1300. package/scene.d.ts +5 -147
  1301. package/scene.js +46 -229
  1302. package/scene.js.map +1 -1
  1303. package/scene.lts.d.ts +165 -0
  1304. package/scene.lts.js +68 -0
  1305. package/scene.lts.js.map +1 -0
@@ -1 +1 @@
1
- {"version":3,"file":"vrExperienceHelper.js","sourceRoot":"","sources":["../../../../sourceES6/core/Cameras/VR/vrExperienceHelper.ts"],"names":[],"mappings":"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","sourcesContent":["import { Logger } from \"../../Misc/logger\";\r\nimport { Observer, Observable } from \"../../Misc/observable\";\r\nimport { Nullable } from \"../../types\";\r\nimport { Camera } from \"../../Cameras/camera\";\r\nimport { FreeCamera } from \"../../Cameras/freeCamera\";\r\nimport { TargetCamera } from \"../../Cameras/targetCamera\";\r\nimport { DeviceOrientationCamera } from \"../../Cameras/deviceOrientationCamera\";\r\nimport { VRDeviceOrientationFreeCamera } from \"../../Cameras/VR/vrDeviceOrientationFreeCamera\";\r\nimport { WebVROptions, WebVRFreeCamera } from \"../../Cameras/VR/webVRCamera\";\r\nimport { PointerEventTypes } from \"../../Events/pointerEvents\";\r\nimport { Scene, IDisposable } from \"../../scene\";\r\nimport { Quaternion, Matrix, Vector3 } from \"../../Maths/math.vector\";\r\nimport { Color3, Color4 } from '../../Maths/math.color';\r\nimport { Gamepad, StickValues } from \"../../Gamepads/gamepad\";\r\nimport { PoseEnabledController, PoseEnabledControllerType } from \"../../Gamepads/Controllers/poseEnabledController\";\r\nimport { WebVRController } from \"../../Gamepads/Controllers/webVRController\";\r\nimport { Xbox360Pad, Xbox360Button } from \"../../Gamepads/xboxGamepad\";\r\nimport { IDisplayChangedEventArgs } from \"../../Engines/engine\";\r\nimport { AbstractMesh } from \"../../Meshes/abstractMesh\";\r\nimport { TransformNode } from \"../../Meshes/transformNode\";\r\nimport { Mesh } from \"../../Meshes/mesh\";\r\nimport { PickingInfo } from \"../../Collisions/pickingInfo\";\r\nimport { Ray } from \"../../Culling/ray\";\r\nimport { ImageProcessingConfiguration } from \"../../Materials/imageProcessingConfiguration\";\r\nimport { StandardMaterial } from \"../../Materials/standardMaterial\";\r\nimport { DynamicTexture } from \"../../Materials/Textures/dynamicTexture\";\r\nimport { ImageProcessingPostProcess } from \"../../PostProcesses/imageProcessingPostProcess\";\r\nimport { SineEase, EasingFunction, CircleEase } from \"../../Animations/easing\";\r\nimport { Animation } from \"../../Animations/animation\";\r\nimport { VRCameraMetrics } from '../../Cameras/VR/vrCameraMetrics';\r\n\r\nimport \"../../Meshes/Builders/groundBuilder\";\r\nimport \"../../Meshes/Builders/torusBuilder\";\r\nimport \"../../Meshes/Builders/cylinderBuilder\";\r\n\r\nimport \"../../Gamepads/gamepadSceneComponent\";\r\nimport \"../../Animations/animatable\";\r\nimport { Axis } from '../../Maths/math.axis';\r\nimport { WebXRSessionManager } from '../../XR/webXRSessionManager';\r\nimport { WebXRDefaultExperience } from '../../XR/webXRDefaultExperience';\r\nimport { WebXRState } from '../../XR/webXRTypes';\r\n\r\n/**\r\n * Options to modify the vr teleportation behavior.\r\n */\r\nexport interface VRTeleportationOptions {\r\n /**\r\n * The name of the mesh which should be used as the teleportation floor. (default: null)\r\n */\r\n floorMeshName?: string;\r\n /**\r\n * A list of meshes to be used as the teleportation floor. (default: empty)\r\n */\r\n floorMeshes?: Mesh[];\r\n /**\r\n * The teleportation mode. (default: TELEPORTATIONMODE_CONSTANTTIME)\r\n */\r\n teleportationMode?: number;\r\n /**\r\n * The duration of the animation in ms, apply when animationMode is TELEPORTATIONMODE_CONSTANTTIME. (default 122ms)\r\n */\r\n teleportationTime?: number;\r\n /**\r\n * The speed of the animation in distance/sec, apply when animationMode is TELEPORTATIONMODE_CONSTANTSPEED. (default 20 units / sec)\r\n */\r\n teleportationSpeed?: number;\r\n /**\r\n * The easing function used in the animation or null for Linear. (default CircleEase)\r\n */\r\n easingFunction?: EasingFunction;\r\n}\r\n\r\n/**\r\n * Options to modify the vr experience helper's behavior.\r\n */\r\nexport interface VRExperienceHelperOptions extends WebVROptions {\r\n /**\r\n * Create a DeviceOrientationCamera to be used as your out of vr camera. (default: true)\r\n */\r\n createDeviceOrientationCamera?: boolean;\r\n /**\r\n * Create a VRDeviceOrientationFreeCamera to be used for VR when no external HMD is found. (default: true)\r\n */\r\n createFallbackVRDeviceOrientationFreeCamera?: boolean;\r\n /**\r\n * Uses the main button on the controller to toggle the laser casted. (default: true)\r\n */\r\n laserToggle?: boolean;\r\n /**\r\n * A list of meshes to be used as the teleportation floor. If specified, teleportation will be enabled (default: undefined)\r\n */\r\n floorMeshes?: Mesh[];\r\n /**\r\n * Distortion metrics for the fallback vrDeviceOrientationCamera (default: VRCameraMetrics.Default)\r\n */\r\n vrDeviceOrientationCameraMetrics?: VRCameraMetrics;\r\n /**\r\n * Defines if WebXR should be used instead of WebVR (if available)\r\n */\r\n useXR?: boolean;\r\n}\r\n\r\nclass VRExperienceHelperGazer implements IDisposable {\r\n /** @hidden */\r\n public _gazeTracker: Mesh;\r\n\r\n /** @hidden */\r\n public _currentMeshSelected: Nullable<AbstractMesh>;\r\n /** @hidden */\r\n public _currentHit: Nullable<PickingInfo>;\r\n\r\n public static _idCounter = 0;\r\n /** @hidden */\r\n public _id: number;\r\n\r\n /** @hidden */\r\n public _pointerDownOnMeshAsked: boolean = false;\r\n /** @hidden */\r\n public _isActionableMesh: boolean = false;\r\n\r\n /** @hidden */\r\n public _interactionsEnabled: boolean;\r\n /** @hidden */\r\n public _teleportationEnabled: boolean;\r\n /** @hidden */\r\n public _teleportationRequestInitiated = false;\r\n /** @hidden */\r\n public _teleportationBackRequestInitiated = false;\r\n /** @hidden */\r\n public _rotationRightAsked = false;\r\n /** @hidden */\r\n public _rotationLeftAsked = false;\r\n /** @hidden */\r\n public _dpadPressed = true;\r\n\r\n /** @hidden */\r\n public _activePointer = false;\r\n\r\n constructor(public scene: Scene, gazeTrackerToClone: Nullable<Mesh> = null) {\r\n this._id = VRExperienceHelperGazer._idCounter++;\r\n\r\n // Gaze tracker\r\n if (!gazeTrackerToClone) {\r\n this._gazeTracker = Mesh.CreateTorus(\"gazeTracker\", 0.0035, 0.0025, 20, scene, false);\r\n this._gazeTracker.bakeCurrentTransformIntoVertices();\r\n this._gazeTracker.isPickable = false;\r\n this._gazeTracker.isVisible = false;\r\n var targetMat = new StandardMaterial(\"targetMat\", scene);\r\n targetMat.specularColor = Color3.Black();\r\n targetMat.emissiveColor = new Color3(0.7, 0.7, 0.7);\r\n targetMat.backFaceCulling = false;\r\n this._gazeTracker.material = targetMat;\r\n } else {\r\n this._gazeTracker = gazeTrackerToClone.clone(\"gazeTracker\") as Mesh;\r\n }\r\n\r\n }\r\n\r\n /** @hidden */\r\n public _getForwardRay(length: number): Ray {\r\n return new Ray(Vector3.Zero(), new Vector3(0, 0, length));\r\n }\r\n\r\n /** @hidden */\r\n public _selectionPointerDown() {\r\n this._pointerDownOnMeshAsked = true;\r\n if (this._currentHit) {\r\n this.scene.simulatePointerDown(this._currentHit, { pointerId: this._id });\r\n }\r\n }\r\n\r\n /** @hidden */\r\n public _selectionPointerUp() {\r\n if (this._currentHit) {\r\n this.scene.simulatePointerUp(this._currentHit, { pointerId: this._id });\r\n }\r\n this._pointerDownOnMeshAsked = false;\r\n }\r\n\r\n /** @hidden */\r\n public _activatePointer() {\r\n this._activePointer = true;\r\n }\r\n\r\n /** @hidden */\r\n public _deactivatePointer() {\r\n this._activePointer = false;\r\n }\r\n\r\n /** @hidden */\r\n public _updatePointerDistance(distance: number = 100) {\r\n }\r\n\r\n public dispose() {\r\n this._interactionsEnabled = false;\r\n this._teleportationEnabled = false;\r\n if (this._gazeTracker) {\r\n this._gazeTracker.dispose();\r\n }\r\n }\r\n}\r\n\r\nclass VRExperienceHelperControllerGazer extends VRExperienceHelperGazer {\r\n private _laserPointer: Mesh;\r\n private _meshAttachedObserver: Nullable<Observer<AbstractMesh>>;\r\n constructor(public webVRController: WebVRController, scene: Scene, gazeTrackerToClone: Mesh) {\r\n super(scene, gazeTrackerToClone);\r\n // Laser pointer\r\n this._laserPointer = Mesh.CreateCylinder(\"laserPointer\", 1, 0.004, 0.0002, 20, 1, scene, false);\r\n var laserPointerMaterial = new StandardMaterial(\"laserPointerMat\", scene);\r\n laserPointerMaterial.emissiveColor = new Color3(0.7, 0.7, 0.7);\r\n laserPointerMaterial.alpha = 0.6;\r\n this._laserPointer.material = laserPointerMaterial;\r\n this._laserPointer.rotation.x = Math.PI / 2;\r\n this._laserPointer.position.z = -0.5;\r\n this._laserPointer.isVisible = false;\r\n this._laserPointer.isPickable = false;\r\n\r\n if (!webVRController.mesh) {\r\n // Create an empty mesh that is used prior to loading the high quality model\r\n var preloadMesh = new Mesh(\"preloadControllerMesh\", scene);\r\n var preloadPointerPose = new Mesh(PoseEnabledController.POINTING_POSE, scene);\r\n preloadPointerPose.rotation.x = -0.7;\r\n preloadMesh.addChild(preloadPointerPose);\r\n webVRController.attachToMesh(preloadMesh);\r\n }\r\n\r\n this._setLaserPointerParent(webVRController.mesh!);\r\n\r\n this._meshAttachedObserver = webVRController._meshAttachedObservable.add((mesh) => {\r\n this._setLaserPointerParent(mesh);\r\n });\r\n }\r\n\r\n _getForwardRay(length: number): Ray {\r\n return this.webVRController.getForwardRay(length);\r\n }\r\n\r\n /** @hidden */\r\n public _activatePointer() {\r\n super._activatePointer();\r\n this._laserPointer.isVisible = true;\r\n }\r\n\r\n /** @hidden */\r\n public _deactivatePointer() {\r\n super._deactivatePointer();\r\n this._laserPointer.isVisible = false;\r\n }\r\n\r\n /** @hidden */\r\n public _setLaserPointerColor(color: Color3) {\r\n (<StandardMaterial>this._laserPointer.material).emissiveColor = color;\r\n }\r\n\r\n /** @hidden */\r\n public _setLaserPointerLightingDisabled(disabled: boolean) {\r\n (<StandardMaterial>this._laserPointer.material).disableLighting = disabled;\r\n }\r\n\r\n /** @hidden */\r\n public _setLaserPointerParent(mesh: AbstractMesh) {\r\n var makeNotPick = (root: AbstractMesh) => {\r\n root.isPickable = false;\r\n root.getChildMeshes().forEach((c) => {\r\n makeNotPick(c);\r\n });\r\n };\r\n makeNotPick(mesh);\r\n var meshChildren = mesh.getChildren(undefined, false);\r\n\r\n let laserParent: TransformNode = mesh;\r\n this.webVRController._pointingPoseNode = null;\r\n for (var i = 0; i < meshChildren.length; i++) {\r\n if (meshChildren[i].name && meshChildren[i].name.indexOf(PoseEnabledController.POINTING_POSE) >= 0) {\r\n laserParent = <TransformNode>meshChildren[i];\r\n this.webVRController._pointingPoseNode = laserParent;\r\n break;\r\n }\r\n }\r\n this._laserPointer.parent = laserParent;\r\n }\r\n\r\n public _updatePointerDistance(distance: number = 100) {\r\n this._laserPointer.scaling.y = distance;\r\n this._laserPointer.position.z = -distance / 2;\r\n }\r\n\r\n dispose() {\r\n super.dispose();\r\n this._laserPointer.dispose();\r\n if (this._meshAttachedObserver) {\r\n this.webVRController._meshAttachedObservable.remove(this._meshAttachedObserver);\r\n }\r\n }\r\n}\r\n\r\nclass VRExperienceHelperCameraGazer extends VRExperienceHelperGazer {\r\n constructor(private getCamera: () => Nullable<Camera>, scene: Scene) {\r\n super(scene);\r\n }\r\n\r\n _getForwardRay(length: number): Ray {\r\n var camera = this.getCamera();\r\n if (camera) {\r\n return camera.getForwardRay(length);\r\n } else {\r\n return new Ray(Vector3.Zero(), Vector3.Forward());\r\n }\r\n }\r\n}\r\n\r\n/**\r\n * Event containing information after VR has been entered\r\n */\r\nexport class OnAfterEnteringVRObservableEvent {\r\n /**\r\n * If entering vr was successful\r\n */\r\n public success: boolean;\r\n}\r\n\r\n/**\r\n * Helps to quickly add VR support to an existing scene.\r\n * See https://doc.babylonjs.com/how_to/webvr_helper\r\n */\r\nexport class VRExperienceHelper {\r\n private _scene: Scene;\r\n private _position: Vector3;\r\n private _btnVR: Nullable<HTMLButtonElement>;\r\n private _btnVRDisplayed: boolean;\r\n\r\n // Can the system support WebVR, even if a headset isn't plugged in?\r\n private _webVRsupported = false;\r\n // If WebVR is supported, is a headset plugged in and are we ready to present?\r\n private _webVRready = false;\r\n // Are we waiting for the requestPresent callback to complete?\r\n private _webVRrequesting = false;\r\n // Are we presenting to the headset right now? (this is the vrDevice state)\r\n private _webVRpresenting = false;\r\n // Have we entered VR? (this is the VRExperienceHelper state)\r\n private _hasEnteredVR: boolean;\r\n\r\n // Are we presenting in the fullscreen fallback?\r\n private _fullscreenVRpresenting = false;\r\n\r\n private _inputElement: Nullable<HTMLElement>;\r\n private _webVRCamera: WebVRFreeCamera;\r\n private _vrDeviceOrientationCamera: Nullable<VRDeviceOrientationFreeCamera>;\r\n private _deviceOrientationCamera: Nullable<DeviceOrientationCamera>;\r\n private _existingCamera: Camera;\r\n\r\n private _onKeyDown: (event: KeyboardEvent) => void;\r\n private _onVrDisplayPresentChange: any;\r\n private _onVRDisplayChanged: (eventArgs: IDisplayChangedEventArgs) => void;\r\n private _onVRRequestPresentStart: () => void;\r\n private _onVRRequestPresentComplete: (success: boolean) => void;\r\n\r\n /**\r\n * Gets or sets a boolean indicating that gaze can be enabled even if pointer lock is not engage (useful on iOS where fullscreen mode and pointer lock are not supported)\r\n */\r\n public enableGazeEvenWhenNoPointerLock = false;\r\n\r\n /**\r\n * Gets or sets a boolean indicating that the VREXperienceHelper will exit VR if double tap is detected\r\n */\r\n public exitVROnDoubleTap = true;\r\n\r\n /**\r\n * Observable raised right before entering VR.\r\n */\r\n public onEnteringVRObservable = new Observable<VRExperienceHelper>();\r\n\r\n /**\r\n * Observable raised when entering VR has completed.\r\n */\r\n public onAfterEnteringVRObservable = new Observable<OnAfterEnteringVRObservableEvent>();\r\n\r\n /**\r\n * Observable raised when exiting VR.\r\n */\r\n public onExitingVRObservable = new Observable<VRExperienceHelper>();\r\n\r\n /**\r\n * Observable raised when controller mesh is loaded.\r\n */\r\n public onControllerMeshLoadedObservable = new Observable<WebVRController>();\r\n\r\n /** Return this.onEnteringVRObservable\r\n * Note: This one is for backward compatibility. Please use onEnteringVRObservable directly\r\n */\r\n public get onEnteringVR(): Observable<VRExperienceHelper> {\r\n return this.onEnteringVRObservable;\r\n }\r\n\r\n /** Return this.onExitingVRObservable\r\n * Note: This one is for backward compatibility. Please use onExitingVRObservable directly\r\n */\r\n public get onExitingVR(): Observable<VRExperienceHelper> {\r\n return this.onExitingVRObservable;\r\n }\r\n\r\n /** Return this.onControllerMeshLoadedObservable\r\n * Note: This one is for backward compatibility. Please use onControllerMeshLoadedObservable directly\r\n */\r\n public get onControllerMeshLoaded(): Observable<WebVRController> {\r\n return this.onControllerMeshLoadedObservable;\r\n }\r\n\r\n private _rayLength: number;\r\n private _useCustomVRButton: boolean = false;\r\n private _teleportationRequested: boolean = false;\r\n private _teleportActive = false;\r\n private _floorMeshName: string;\r\n private _floorMeshesCollection: Mesh[] = [];\r\n private _teleportationMode: number = VRExperienceHelper.TELEPORTATIONMODE_CONSTANTTIME;\r\n private _teleportationTime: number = 122;\r\n private _teleportationSpeed: number = 20;\r\n private _teleportationEasing: EasingFunction;\r\n private _rotationAllowed: boolean = true;\r\n private _teleportBackwardsVector = new Vector3(0, -1, -1);\r\n private _teleportationTarget: Mesh;\r\n private _isDefaultTeleportationTarget = true;\r\n private _postProcessMove: ImageProcessingPostProcess;\r\n private _teleportationFillColor: string = \"#444444\";\r\n private _teleportationBorderColor: string = \"#FFFFFF\";\r\n private _rotationAngle: number = 0;\r\n private _haloCenter = new Vector3(0, 0, 0);\r\n private _cameraGazer: VRExperienceHelperCameraGazer;\r\n private _padSensibilityUp = 0.65;\r\n private _padSensibilityDown = 0.35;\r\n\r\n private _leftController: Nullable<VRExperienceHelperControllerGazer> = null;\r\n private _rightController: Nullable<VRExperienceHelperControllerGazer> = null;\r\n\r\n private _gazeColor: Color3 = new Color3(0.7, 0.7, 0.7);\r\n private _laserColor: Color3 = new Color3(0.7, 0.7, 0.7);\r\n private _pickedLaserColor: Color3 = new Color3(0.2, 0.2, 1);\r\n private _pickedGazeColor: Color3 = new Color3(0, 0, 1);\r\n\r\n /**\r\n * Observable raised when a new mesh is selected based on meshSelectionPredicate\r\n */\r\n public onNewMeshSelected = new Observable<AbstractMesh>();\r\n\r\n /**\r\n * Observable raised when a new mesh is selected based on meshSelectionPredicate.\r\n * This observable will provide the mesh and the controller used to select the mesh\r\n */\r\n public onMeshSelectedWithController = new Observable<{ mesh: AbstractMesh, controller: WebVRController }>();\r\n\r\n /**\r\n * Observable raised when a new mesh is picked based on meshSelectionPredicate\r\n */\r\n public onNewMeshPicked = new Observable<PickingInfo>();\r\n\r\n private _circleEase: CircleEase;\r\n\r\n /**\r\n * Observable raised before camera teleportation\r\n */\r\n public onBeforeCameraTeleport = new Observable<Vector3>();\r\n\r\n /**\r\n * Observable raised after camera teleportation\r\n */\r\n public onAfterCameraTeleport = new Observable<Vector3>();\r\n\r\n /**\r\n * Observable raised when current selected mesh gets unselected\r\n */\r\n public onSelectedMeshUnselected = new Observable<AbstractMesh>();\r\n\r\n private _raySelectionPredicate: (mesh: AbstractMesh) => boolean;\r\n\r\n /**\r\n * To be optionally changed by user to define custom ray selection\r\n */\r\n public raySelectionPredicate: (mesh: AbstractMesh) => boolean;\r\n\r\n /**\r\n * To be optionally changed by user to define custom selection logic (after ray selection)\r\n */\r\n public meshSelectionPredicate: (mesh: AbstractMesh) => boolean;\r\n\r\n /**\r\n * Set teleportation enabled. If set to false camera teleportation will be disabled but camera rotation will be kept.\r\n */\r\n public teleportationEnabled: boolean = true;\r\n\r\n private _defaultHeight: number;\r\n private _teleportationInitialized = false;\r\n private _interactionsEnabled = false;\r\n private _interactionsRequested = false;\r\n private _displayGaze = true;\r\n private _displayLaserPointer = true;\r\n\r\n /**\r\n * The mesh used to display where the user is going to teleport.\r\n */\r\n public get teleportationTarget(): Mesh {\r\n return this._teleportationTarget;\r\n }\r\n\r\n /**\r\n * Sets the mesh to be used to display where the user is going to teleport.\r\n */\r\n public set teleportationTarget(value: Mesh) {\r\n if (value) {\r\n value.name = \"teleportationTarget\";\r\n this._isDefaultTeleportationTarget = false;\r\n this._teleportationTarget = value;\r\n }\r\n }\r\n\r\n /**\r\n * The mesh used to display where the user is selecting, this mesh will be cloned and set as the gazeTracker for the left and right controller\r\n * when set bakeCurrentTransformIntoVertices will be called on the mesh.\r\n * See https://doc.babylonjs.com/resources/baking_transformations\r\n */\r\n public get gazeTrackerMesh(): Mesh {\r\n return this._cameraGazer._gazeTracker;\r\n }\r\n\r\n public set gazeTrackerMesh(value: Mesh) {\r\n if (value) {\r\n // Dispose of existing meshes\r\n if (this._cameraGazer._gazeTracker) {\r\n this._cameraGazer._gazeTracker.dispose();\r\n }\r\n if (this._leftController && this._leftController._gazeTracker) {\r\n this._leftController._gazeTracker.dispose();\r\n }\r\n if (this._rightController && this._rightController._gazeTracker) {\r\n this._rightController._gazeTracker.dispose();\r\n }\r\n\r\n // Set and create gaze trackers on head and controllers\r\n this._cameraGazer._gazeTracker = value;\r\n this._cameraGazer._gazeTracker.bakeCurrentTransformIntoVertices();\r\n this._cameraGazer._gazeTracker.isPickable = false;\r\n this._cameraGazer._gazeTracker.isVisible = false;\r\n this._cameraGazer._gazeTracker.name = \"gazeTracker\";\r\n if (this._leftController) {\r\n this._leftController._gazeTracker = this._cameraGazer._gazeTracker.clone(\"gazeTracker\") as Mesh;\r\n }\r\n\r\n if (this._rightController) {\r\n this._rightController._gazeTracker = this._cameraGazer._gazeTracker.clone(\"gazeTracker\") as Mesh;\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * If the gaze trackers scale should be updated to be constant size when pointing at near/far meshes\r\n */\r\n public updateGazeTrackerScale = true;\r\n /**\r\n * If the gaze trackers color should be updated when selecting meshes\r\n */\r\n public updateGazeTrackerColor = true;\r\n /**\r\n * If the controller laser color should be updated when selecting meshes\r\n */\r\n public updateControllerLaserColor = true;\r\n\r\n /**\r\n * The gaze tracking mesh corresponding to the left controller\r\n */\r\n public get leftControllerGazeTrackerMesh(): Nullable<Mesh> {\r\n if (this._leftController) {\r\n return this._leftController._gazeTracker;\r\n }\r\n return null;\r\n }\r\n\r\n /**\r\n * The gaze tracking mesh corresponding to the right controller\r\n */\r\n public get rightControllerGazeTrackerMesh(): Nullable<Mesh> {\r\n if (this._rightController) {\r\n return this._rightController._gazeTracker;\r\n }\r\n return null;\r\n }\r\n\r\n /**\r\n * If the ray of the gaze should be displayed.\r\n */\r\n public get displayGaze(): boolean {\r\n return this._displayGaze;\r\n }\r\n\r\n /**\r\n * Sets if the ray of the gaze should be displayed.\r\n */\r\n public set displayGaze(value: boolean) {\r\n this._displayGaze = value;\r\n if (!value) {\r\n this._cameraGazer._gazeTracker.isVisible = false;\r\n\r\n if (this._leftController) {\r\n this._leftController._gazeTracker.isVisible = false;\r\n }\r\n\r\n if (this._rightController) {\r\n this._rightController._gazeTracker.isVisible = false;\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * If the ray of the LaserPointer should be displayed.\r\n */\r\n public get displayLaserPointer(): boolean {\r\n return this._displayLaserPointer;\r\n }\r\n\r\n /**\r\n * Sets if the ray of the LaserPointer should be displayed.\r\n */\r\n public set displayLaserPointer(value: boolean) {\r\n this._displayLaserPointer = value;\r\n if (!value) {\r\n if (this._rightController) {\r\n this._rightController._deactivatePointer();\r\n this._rightController._gazeTracker.isVisible = false;\r\n }\r\n if (this._leftController) {\r\n this._leftController._deactivatePointer();\r\n this._leftController._gazeTracker.isVisible = false;\r\n }\r\n }\r\n else {\r\n if (this._rightController) {\r\n this._rightController._activatePointer();\r\n }\r\n if (this._leftController) {\r\n this._leftController._activatePointer();\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * The deviceOrientationCamera used as the camera when not in VR.\r\n */\r\n public get deviceOrientationCamera(): Nullable<DeviceOrientationCamera> {\r\n return this._deviceOrientationCamera;\r\n }\r\n\r\n /**\r\n * Based on the current WebVR support, returns the current VR camera used.\r\n */\r\n public get currentVRCamera(): Nullable<Camera> {\r\n if (this._webVRready) {\r\n return this._webVRCamera;\r\n }\r\n else {\r\n return this._scene.activeCamera;\r\n }\r\n }\r\n\r\n /**\r\n * The webVRCamera which is used when in VR.\r\n */\r\n public get webVRCamera(): WebVRFreeCamera {\r\n return this._webVRCamera;\r\n }\r\n\r\n /**\r\n * The deviceOrientationCamera that is used as a fallback when vr device is not connected.\r\n */\r\n public get vrDeviceOrientationCamera(): Nullable<VRDeviceOrientationFreeCamera> {\r\n return this._vrDeviceOrientationCamera;\r\n }\r\n\r\n /**\r\n * The html button that is used to trigger entering into VR.\r\n */\r\n public get vrButton(): Nullable<HTMLButtonElement> {\r\n return this._btnVR;\r\n }\r\n\r\n private get _teleportationRequestInitiated(): boolean {\r\n var result = this._cameraGazer._teleportationRequestInitiated\r\n || (this._leftController !== null && this._leftController._teleportationRequestInitiated)\r\n || (this._rightController !== null && this._rightController._teleportationRequestInitiated);\r\n return result;\r\n }\r\n\r\n /**\r\n * Defines whether or not Pointer lock should be requested when switching to\r\n * full screen.\r\n */\r\n public requestPointerLockOnFullScreen = true;\r\n\r\n // XR\r\n\r\n /**\r\n * If asking to force XR, this will be populated with the default xr experience\r\n */\r\n public xr: WebXRDefaultExperience;\r\n\r\n /**\r\n * Was the XR test done already. If this is true AND this.xr exists, xr is initialized.\r\n * If this is true and no this.xr, xr exists but is not supported, using WebVR.\r\n */\r\n public xrTestDone: boolean = false;\r\n\r\n /**\r\n * Instantiates a VRExperienceHelper.\r\n * Helps to quickly add VR support to an existing scene.\r\n * @param scene The scene the VRExperienceHelper belongs to.\r\n * @param webVROptions Options to modify the vr experience helper's behavior.\r\n */\r\n constructor(scene: Scene,\r\n /** Options to modify the vr experience helper's behavior. */\r\n public webVROptions: VRExperienceHelperOptions = {}) {\r\n Logger.Warn('WebVR is deprecated. Please avoid using this experience helper and use the WebXR experience helper instead');\r\n this._scene = scene;\r\n this._inputElement = scene.getEngine().getInputElement();\r\n\r\n // check for VR support:\r\n\r\n const vrSupported = 'getVRDisplays' in navigator;\r\n // no VR support? force XR but only when it is not set because web vr can work without the getVRDisplays\r\n if (!vrSupported && webVROptions.useXR === undefined) {\r\n webVROptions.useXR = true;\r\n }\r\n\r\n // Parse options\r\n if (webVROptions.createFallbackVRDeviceOrientationFreeCamera === undefined) {\r\n webVROptions.createFallbackVRDeviceOrientationFreeCamera = true;\r\n }\r\n if (webVROptions.createDeviceOrientationCamera === undefined) {\r\n webVROptions.createDeviceOrientationCamera = true;\r\n }\r\n if (webVROptions.laserToggle === undefined) {\r\n webVROptions.laserToggle = true;\r\n }\r\n if (webVROptions.defaultHeight === undefined) {\r\n webVROptions.defaultHeight = 1.7;\r\n }\r\n if (webVROptions.useCustomVRButton) {\r\n this._useCustomVRButton = true;\r\n if (webVROptions.customVRButton) {\r\n this._btnVR = webVROptions.customVRButton;\r\n }\r\n }\r\n if (webVROptions.rayLength) {\r\n this._rayLength = webVROptions.rayLength;\r\n }\r\n this._defaultHeight = webVROptions.defaultHeight;\r\n\r\n if (webVROptions.positionScale) {\r\n this._rayLength *= webVROptions.positionScale;\r\n this._defaultHeight *= webVROptions.positionScale;\r\n }\r\n\r\n this._hasEnteredVR = false;\r\n\r\n // Set position\r\n if (this._scene.activeCamera) {\r\n this._position = this._scene.activeCamera.position.clone();\r\n } else {\r\n this._position = new Vector3(0, this._defaultHeight, 0);\r\n }\r\n\r\n // Set non-vr camera\r\n if (webVROptions.createDeviceOrientationCamera || !this._scene.activeCamera) {\r\n this._deviceOrientationCamera = new DeviceOrientationCamera(\"deviceOrientationVRHelper\", this._position.clone(), scene);\r\n\r\n // Copy data from existing camera\r\n if (this._scene.activeCamera) {\r\n this._deviceOrientationCamera.minZ = this._scene.activeCamera.minZ;\r\n this._deviceOrientationCamera.maxZ = this._scene.activeCamera.maxZ;\r\n // Set rotation from previous camera\r\n if (this._scene.activeCamera instanceof TargetCamera && this._scene.activeCamera.rotation) {\r\n var targetCamera = this._scene.activeCamera;\r\n if (targetCamera.rotationQuaternion) {\r\n this._deviceOrientationCamera.rotationQuaternion.copyFrom(targetCamera.rotationQuaternion);\r\n } else {\r\n this._deviceOrientationCamera.rotationQuaternion.copyFrom(Quaternion.RotationYawPitchRoll(targetCamera.rotation.y, targetCamera.rotation.x, targetCamera.rotation.z));\r\n }\r\n this._deviceOrientationCamera.rotation = targetCamera.rotation.clone();\r\n }\r\n }\r\n\r\n this._scene.activeCamera = this._deviceOrientationCamera;\r\n if (this._inputElement) {\r\n this._scene.activeCamera.attachControl();\r\n }\r\n } else {\r\n this._existingCamera = this._scene.activeCamera;\r\n }\r\n\r\n if (this.webVROptions.useXR && (navigator as any).xr) {\r\n // force-check XR session support\r\n WebXRSessionManager.IsSessionSupportedAsync(\"immersive-vr\").then((supported) => {\r\n if (supported) {\r\n Logger.Log(\"Using WebXR. It is recommended to use the WebXRDefaultExperience directly\");\r\n // it is possible to use XR, let's do it!\r\n scene.createDefaultXRExperienceAsync({\r\n floorMeshes: webVROptions.floorMeshes || []\r\n }).then((xr) => {\r\n this.xr = xr;\r\n // connect observables\r\n this.xrTestDone = true;\r\n\r\n this._cameraGazer = new VRExperienceHelperCameraGazer(() => { return this.xr.baseExperience.camera; }, scene);\r\n\r\n this.xr.baseExperience.onStateChangedObservable.add((state) => {\r\n // support for entering / exiting\r\n switch (state) {\r\n case WebXRState.ENTERING_XR:\r\n this.onEnteringVRObservable.notifyObservers(this);\r\n if (!this._interactionsEnabled) {\r\n this.xr.pointerSelection.detach();\r\n }\r\n this.xr.pointerSelection.displayLaserPointer = this._displayLaserPointer;\r\n break;\r\n case WebXRState.EXITING_XR:\r\n this.onExitingVRObservable.notifyObservers(this);\r\n\r\n // resize to update width and height when exiting vr exits fullscreen\r\n this._scene.getEngine().resize();\r\n break;\r\n case WebXRState.IN_XR:\r\n this._hasEnteredVR = true;\r\n break;\r\n case WebXRState.NOT_IN_XR:\r\n this._hasEnteredVR = false;\r\n break;\r\n }\r\n });\r\n });\r\n } else {\r\n // XR not supported (thou exists), continue WebVR init\r\n this.completeVRInit(scene, webVROptions);\r\n }\r\n });\r\n } else {\r\n // no XR, continue init synchronous\r\n this.completeVRInit(scene, webVROptions);\r\n }\r\n\r\n }\r\n\r\n private completeVRInit(scene: Scene,\r\n webVROptions: VRExperienceHelperOptions): void {\r\n this.xrTestDone = true;\r\n // Create VR cameras\r\n if (webVROptions.createFallbackVRDeviceOrientationFreeCamera) {\r\n if (webVROptions.useMultiview) {\r\n if (!webVROptions.vrDeviceOrientationCameraMetrics) {\r\n webVROptions.vrDeviceOrientationCameraMetrics = VRCameraMetrics.GetDefault();\r\n }\r\n webVROptions.vrDeviceOrientationCameraMetrics.multiviewEnabled = true;\r\n }\r\n this._vrDeviceOrientationCamera = new VRDeviceOrientationFreeCamera(\"VRDeviceOrientationVRHelper\", this._position, this._scene, true, webVROptions.vrDeviceOrientationCameraMetrics);\r\n this._vrDeviceOrientationCamera.angularSensibility = Number.MAX_VALUE;\r\n }\r\n this._webVRCamera = new WebVRFreeCamera(\"WebVRHelper\", this._position, this._scene, webVROptions);\r\n this._webVRCamera.useStandingMatrix();\r\n\r\n this._cameraGazer = new VRExperienceHelperCameraGazer(() => { return this.currentVRCamera; }, scene);\r\n // Create default button\r\n if (!this._useCustomVRButton) {\r\n this._btnVR = <HTMLButtonElement>document.createElement(\"BUTTON\");\r\n this._btnVR.className = \"babylonVRicon\";\r\n this._btnVR.id = \"babylonVRiconbtn\";\r\n this._btnVR.title = \"Click to switch to VR\";\r\n const url = !window.SVGSVGElement ? \"https://cdn.babylonjs.com/Assets/vrButton.png\" : \"data:image/svg+xml;charset=UTF-8,%3Csvg%20xmlns%3D%22http%3A//www.w3.org/2000/svg%22%20width%3D%222048%22%20height%3D%221152%22%20viewBox%3D%220%200%202048%201152%22%20version%3D%221.1%22%3E%3Cpath%20transform%3D%22rotate%28180%201024%2C576.0000000000001%29%22%20d%3D%22m1109%2C896q17%2C0%2030%2C-12t13%2C-30t-12.5%2C-30.5t-30.5%2C-12.5l-170%2C0q-18%2C0%20-30.5%2C12.5t-12.5%2C30.5t13%2C30t30%2C12l170%2C0zm-85%2C256q59%2C0%20132.5%2C-1.5t154.5%2C-5.5t164.5%2C-11.5t163%2C-20t150%2C-30t124.5%2C-41.5q23%2C-11%2042%2C-24t38%2C-30q27%2C-25%2041%2C-61.5t14%2C-72.5l0%2C-257q0%2C-123%20-47%2C-232t-128%2C-190t-190%2C-128t-232%2C-47l-81%2C0q-37%2C0%20-68.5%2C14t-60.5%2C34.5t-55.5%2C45t-53%2C45t-53%2C34.5t-55.5%2C14t-55.5%2C-14t-53%2C-34.5t-53%2C-45t-55.5%2C-45t-60.5%2C-34.5t-68.5%2C-14l-81%2C0q-123%2C0%20-232%2C47t-190%2C128t-128%2C190t-47%2C232l0%2C257q0%2C68%2038%2C115t97%2C73q54%2C24%20124.5%2C41.5t150%2C30t163%2C20t164.5%2C11.5t154.5%2C5.5t132.5%2C1.5zm939%2C-298q0%2C39%20-24.5%2C67t-58.5%2C42q-54%2C23%20-122%2C39.5t-143.5%2C28t-155.5%2C19t-157%2C11t-148.5%2C5t-129.5%2C1.5q-59%2C0%20-130%2C-1.5t-148%2C-5t-157%2C-11t-155.5%2C-19t-143.5%2C-28t-122%2C-39.5q-34%2C-14%20-58.5%2C-42t-24.5%2C-67l0%2C-257q0%2C-106%2040.5%2C-199t110%2C-162.5t162.5%2C-109.5t199%2C-40l81%2C0q27%2C0%2052%2C14t50%2C34.5t51%2C44.5t55.5%2C44.5t63.5%2C34.5t74%2C14t74%2C-14t63.5%2C-34.5t55.5%2C-44.5t51%2C-44.5t50%2C-34.5t52%2C-14l14%2C0q37%2C0%2070%2C0.5t64.5%2C4.5t63.5%2C12t68%2C23q71%2C30%20128.5%2C78.5t98.5%2C110t63.5%2C133.5t22.5%2C149l0%2C257z%22%20fill%3D%22white%22%20/%3E%3C/svg%3E%0A\";\r\n var css = \".babylonVRicon { position: absolute; right: 20px; height: 50px; width: 80px; background-color: rgba(51,51,51,0.7); background-image: url(\" + url + \"); background-size: 80%; background-repeat:no-repeat; background-position: center; border: none; outline: none; transition: transform 0.125s ease-out } .babylonVRicon:hover { transform: scale(1.05) } .babylonVRicon:active {background-color: rgba(51,51,51,1) } .babylonVRicon:focus {background-color: rgba(51,51,51,1) }\";\r\n css += \".babylonVRicon.vrdisplaypresenting { display: none; }\";\r\n // TODO: Add user feedback so that they know what state the VRDisplay is in (disconnected, connected, entering-VR)\r\n // css += \".babylonVRicon.vrdisplaysupported { }\";\r\n // css += \".babylonVRicon.vrdisplayready { }\";\r\n // css += \".babylonVRicon.vrdisplayrequesting { }\";\r\n\r\n var style = document.createElement('style');\r\n style.appendChild(document.createTextNode(css));\r\n document.getElementsByTagName('head')[0].appendChild(style);\r\n\r\n this.moveButtonToBottomRight();\r\n }\r\n\r\n // VR button click event\r\n if (this._btnVR) {\r\n this._btnVR.addEventListener(\"click\", () => {\r\n if (!this.isInVRMode) {\r\n this.enterVR();\r\n } else {\r\n this._scene.getEngine().disableVR();\r\n }\r\n });\r\n }\r\n\r\n // Window events\r\n\r\n let hostWindow = this._scene.getEngine().getHostWindow();\r\n if (!hostWindow) {\r\n return;\r\n }\r\n\r\n hostWindow.addEventListener(\"resize\", this._onResize);\r\n document.addEventListener(\"fullscreenchange\", this._onFullscreenChange, false);\r\n document.addEventListener(\"mozfullscreenchange\", this._onFullscreenChange, false);\r\n document.addEventListener(\"webkitfullscreenchange\", this._onFullscreenChange, false);\r\n document.addEventListener(\"msfullscreenchange\", this._onFullscreenChange, false);\r\n (<any>document).onmsfullscreenchange = this._onFullscreenChange;\r\n\r\n // Display vr button when headset is connected\r\n if (webVROptions.createFallbackVRDeviceOrientationFreeCamera) {\r\n this.displayVRButton();\r\n } else {\r\n this._scene.getEngine().onVRDisplayChangedObservable.add((e) => {\r\n if (e.vrDisplay) {\r\n this.displayVRButton();\r\n }\r\n });\r\n }\r\n\r\n // Exiting VR mode using 'ESC' key on desktop\r\n this._onKeyDown = (event: KeyboardEvent) => {\r\n if (event.keyCode === 27 && this.isInVRMode) {\r\n this.exitVR();\r\n }\r\n };\r\n document.addEventListener(\"keydown\", this._onKeyDown);\r\n\r\n // Exiting VR mode double tapping the touch screen\r\n this._scene.onPrePointerObservable.add(() => {\r\n if (this._hasEnteredVR && this.exitVROnDoubleTap) {\r\n this.exitVR();\r\n if (this._fullscreenVRpresenting) {\r\n this._scene.getEngine().exitFullscreen();\r\n }\r\n }\r\n }, PointerEventTypes.POINTERDOUBLETAP, false);\r\n\r\n // Listen for WebVR display changes\r\n this._onVRDisplayChanged = (eventArgs: IDisplayChangedEventArgs) => this.onVRDisplayChanged(eventArgs);\r\n this._onVrDisplayPresentChange = () => this.onVrDisplayPresentChange();\r\n this._onVRRequestPresentStart = () => {\r\n this._webVRrequesting = true;\r\n this.updateButtonVisibility();\r\n };\r\n this._onVRRequestPresentComplete = () => {\r\n this._webVRrequesting = false;\r\n this.updateButtonVisibility();\r\n };\r\n scene.getEngine().onVRDisplayChangedObservable.add(this._onVRDisplayChanged);\r\n scene.getEngine().onVRRequestPresentStart.add(this._onVRRequestPresentStart);\r\n scene.getEngine().onVRRequestPresentComplete.add(this._onVRRequestPresentComplete);\r\n hostWindow.addEventListener('vrdisplaypresentchange', this._onVrDisplayPresentChange);\r\n\r\n scene.onDisposeObservable.add(() => {\r\n this.dispose();\r\n });\r\n\r\n // Gamepad connection events\r\n this._webVRCamera.onControllerMeshLoadedObservable.add((webVRController) => this._onDefaultMeshLoaded(webVRController));\r\n this._scene.gamepadManager.onGamepadConnectedObservable.add(this._onNewGamepadConnected);\r\n this._scene.gamepadManager.onGamepadDisconnectedObservable.add(this._onNewGamepadDisconnected);\r\n\r\n this.updateButtonVisibility();\r\n\r\n //create easing functions\r\n this._circleEase = new CircleEase();\r\n this._circleEase.setEasingMode(EasingFunction.EASINGMODE_EASEINOUT);\r\n this._teleportationEasing = this._circleEase;\r\n\r\n // Allow clicking in the vrDeviceOrientationCamera\r\n scene.onPointerObservable.add((e) => {\r\n if (this._interactionsEnabled) {\r\n if (scene.activeCamera === this.vrDeviceOrientationCamera && (e.event as PointerEvent).pointerType === \"mouse\") {\r\n if (e.type === PointerEventTypes.POINTERDOWN) {\r\n this._cameraGazer._selectionPointerDown();\r\n } else if (e.type === PointerEventTypes.POINTERUP) {\r\n this._cameraGazer._selectionPointerUp();\r\n }\r\n }\r\n }\r\n });\r\n\r\n if (this.webVROptions.floorMeshes) {\r\n this.enableTeleportation({ floorMeshes: this.webVROptions.floorMeshes });\r\n }\r\n }\r\n\r\n // Raised when one of the controller has loaded successfully its associated default mesh\r\n private _onDefaultMeshLoaded(webVRController: WebVRController) {\r\n if (this._leftController && this._leftController.webVRController == webVRController) {\r\n if (webVRController.mesh) {\r\n this._leftController._setLaserPointerParent(webVRController.mesh);\r\n }\r\n }\r\n if (this._rightController && this._rightController.webVRController == webVRController) {\r\n if (webVRController.mesh) {\r\n this._rightController._setLaserPointerParent(webVRController.mesh);\r\n }\r\n }\r\n\r\n try {\r\n this.onControllerMeshLoadedObservable.notifyObservers(webVRController);\r\n }\r\n catch (err) {\r\n Logger.Warn(\"Error in your custom logic onControllerMeshLoaded: \" + err);\r\n }\r\n }\r\n\r\n private _onResize = () => {\r\n this.moveButtonToBottomRight();\r\n if (this._fullscreenVRpresenting && this._webVRready) {\r\n this.exitVR();\r\n }\r\n }\r\n\r\n private _onFullscreenChange = () => {\r\n let anyDoc = document as any;\r\n if (anyDoc.fullscreen !== undefined) {\r\n this._fullscreenVRpresenting = (<any>document).fullscreen;\r\n } else if (anyDoc.mozFullScreen !== undefined) {\r\n this._fullscreenVRpresenting = anyDoc.mozFullScreen;\r\n } else if (anyDoc.webkitIsFullScreen !== undefined) {\r\n this._fullscreenVRpresenting = anyDoc.webkitIsFullScreen;\r\n } else if (anyDoc.msIsFullScreen !== undefined) {\r\n this._fullscreenVRpresenting = anyDoc.msIsFullScreen;\r\n } else if ((<any>document).msFullscreenElement !== undefined) {\r\n this._fullscreenVRpresenting = (<any>document).msFullscreenElement;\r\n }\r\n if (!this._fullscreenVRpresenting && this._inputElement) {\r\n this.exitVR();\r\n if (!this._useCustomVRButton && this._btnVR) {\r\n this._btnVR.style.top = this._inputElement.offsetTop + this._inputElement.offsetHeight - 70 + \"px\";\r\n this._btnVR.style.left = this._inputElement.offsetLeft + this._inputElement.offsetWidth - 100 + \"px\";\r\n // make sure the button is visible after setting its position\r\n this.updateButtonVisibility();\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * Gets a value indicating if we are currently in VR mode.\r\n */\r\n public get isInVRMode(): boolean {\r\n return (this.xr && this.webVROptions.useXR && this.xr.baseExperience.state === WebXRState.IN_XR) || (this._webVRpresenting || this._fullscreenVRpresenting);\r\n }\r\n\r\n private onVrDisplayPresentChange() {\r\n var vrDisplay = this._scene.getEngine().getVRDevice();\r\n if (vrDisplay) {\r\n var wasPresenting = this._webVRpresenting;\r\n this._webVRpresenting = vrDisplay.isPresenting;\r\n\r\n if (wasPresenting && !this._webVRpresenting) {\r\n this.exitVR();\r\n }\r\n } else {\r\n Logger.Warn('Detected VRDisplayPresentChange on an unknown VRDisplay. Did you can enterVR on the vrExperienceHelper?');\r\n }\r\n\r\n this.updateButtonVisibility();\r\n }\r\n\r\n private onVRDisplayChanged(eventArgs: IDisplayChangedEventArgs) {\r\n this._webVRsupported = eventArgs.vrSupported;\r\n this._webVRready = !!eventArgs.vrDisplay;\r\n this._webVRpresenting = eventArgs.vrDisplay && eventArgs.vrDisplay.isPresenting;\r\n\r\n this.updateButtonVisibility();\r\n }\r\n\r\n private moveButtonToBottomRight() {\r\n if (this._inputElement && !this._useCustomVRButton && this._btnVR) {\r\n const rect: ClientRect = this._inputElement.getBoundingClientRect();\r\n this._btnVR.style.top = rect.top + rect.height - 70 + \"px\";\r\n this._btnVR.style.left = rect.left + rect.width - 100 + \"px\";\r\n }\r\n }\r\n\r\n private displayVRButton() {\r\n if (!this._useCustomVRButton && !this._btnVRDisplayed && this._btnVR) {\r\n document.body.appendChild(this._btnVR);\r\n this._btnVRDisplayed = true;\r\n }\r\n }\r\n\r\n private updateButtonVisibility() {\r\n if (!this._btnVR || this._useCustomVRButton) {\r\n return;\r\n }\r\n this._btnVR.className = \"babylonVRicon\";\r\n if (this.isInVRMode) {\r\n this._btnVR.className += \" vrdisplaypresenting\";\r\n } else {\r\n if (this._webVRready) { this._btnVR.className += \" vrdisplayready\"; }\r\n if (this._webVRsupported) { this._btnVR.className += \" vrdisplaysupported\"; }\r\n if (this._webVRrequesting) { this._btnVR.className += \" vrdisplayrequesting\"; }\r\n }\r\n }\r\n\r\n private _cachedAngularSensibility = { angularSensibilityX: null, angularSensibilityY: null, angularSensibility: null };\r\n /**\r\n * Attempt to enter VR. If a headset is connected and ready, will request present on that.\r\n * Otherwise, will use the fullscreen API.\r\n */\r\n public enterVR() {\r\n if (this.xr) {\r\n this.xr.baseExperience.enterXRAsync(\"immersive-vr\", \"local-floor\", this.xr.renderTarget);\r\n return;\r\n }\r\n if (this.onEnteringVRObservable) {\r\n try {\r\n this.onEnteringVRObservable.notifyObservers(this);\r\n }\r\n catch (err) {\r\n Logger.Warn(\"Error in your custom logic onEnteringVR: \" + err);\r\n }\r\n }\r\n\r\n if (this._scene.activeCamera) {\r\n this._position = this._scene.activeCamera.position.clone();\r\n\r\n if (this.vrDeviceOrientationCamera) {\r\n this.vrDeviceOrientationCamera.rotation = Quaternion.FromRotationMatrix(this._scene.activeCamera.getWorldMatrix().getRotationMatrix()).toEulerAngles();\r\n this.vrDeviceOrientationCamera.angularSensibility = 2000;\r\n }\r\n if (this.webVRCamera) {\r\n var currentYRotation = this.webVRCamera.deviceRotationQuaternion.toEulerAngles().y;\r\n var desiredYRotation = Quaternion.FromRotationMatrix(this._scene.activeCamera.getWorldMatrix().getRotationMatrix()).toEulerAngles().y;\r\n var delta = desiredYRotation - currentYRotation;\r\n var currentGlobalRotation = this.webVRCamera.rotationQuaternion.toEulerAngles().y;\r\n this.webVRCamera.rotationQuaternion = Quaternion.FromEulerAngles(0, currentGlobalRotation + delta, 0);\r\n }\r\n\r\n // make sure that we return to the last active camera\r\n this._existingCamera = this._scene.activeCamera;\r\n\r\n // Remove and cache angular sensability to avoid camera rotation when in VR\r\n if ((<any>this._existingCamera).angularSensibilityX) {\r\n this._cachedAngularSensibility.angularSensibilityX = (<any>this._existingCamera).angularSensibilityX;\r\n (<any>this._existingCamera).angularSensibilityX = Number.MAX_VALUE;\r\n }\r\n if ((<any>this._existingCamera).angularSensibilityY) {\r\n this._cachedAngularSensibility.angularSensibilityY = (<any>this._existingCamera).angularSensibilityY;\r\n (<any>this._existingCamera).angularSensibilityY = Number.MAX_VALUE;\r\n }\r\n if ((<any>this._existingCamera).angularSensibility) {\r\n this._cachedAngularSensibility.angularSensibility = (<any>this._existingCamera).angularSensibility;\r\n (<any>this._existingCamera).angularSensibility = Number.MAX_VALUE;\r\n }\r\n }\r\n\r\n if (this._webVRrequesting) {\r\n return;\r\n }\r\n\r\n // If WebVR is supported and a headset is connected\r\n if (this._webVRready) {\r\n if (!this._webVRpresenting) {\r\n this._scene.getEngine().onVRRequestPresentComplete.addOnce((result) => {\r\n this.onAfterEnteringVRObservable.notifyObservers({ success: result });\r\n });\r\n this._webVRCamera.position = this._position;\r\n this._scene.activeCamera = this._webVRCamera;\r\n }\r\n }\r\n else if (this._vrDeviceOrientationCamera) {\r\n this._vrDeviceOrientationCamera.position = this._position;\r\n if (this._scene.activeCamera) {\r\n this._vrDeviceOrientationCamera.minZ = this._scene.activeCamera.minZ;\r\n }\r\n this._scene.activeCamera = this._vrDeviceOrientationCamera;\r\n this._scene.getEngine().enterFullscreen(this.requestPointerLockOnFullScreen);\r\n this.updateButtonVisibility();\r\n this._vrDeviceOrientationCamera.onViewMatrixChangedObservable.addOnce(() => {\r\n this.onAfterEnteringVRObservable.notifyObservers({ success: true });\r\n });\r\n }\r\n\r\n if (this._scene.activeCamera && this._inputElement) {\r\n this._scene.activeCamera.attachControl();\r\n }\r\n\r\n if (this._interactionsEnabled) {\r\n this._scene.registerBeforeRender(this.beforeRender);\r\n }\r\n\r\n if (this._displayLaserPointer) {\r\n [this._leftController, this._rightController].forEach((controller) => {\r\n if (controller) {\r\n controller._activatePointer();\r\n }\r\n });\r\n }\r\n\r\n this._hasEnteredVR = true;\r\n }\r\n\r\n /**\r\n * Attempt to exit VR, or fullscreen.\r\n */\r\n public exitVR() {\r\n if (this.xr) {\r\n this.xr.baseExperience.exitXRAsync();\r\n return;\r\n }\r\n if (this._hasEnteredVR) {\r\n if (this.onExitingVRObservable) {\r\n try {\r\n this.onExitingVRObservable.notifyObservers(this);\r\n }\r\n catch (err) {\r\n Logger.Warn(\"Error in your custom logic onExitingVR: \" + err);\r\n }\r\n }\r\n if (this._webVRpresenting) {\r\n this._scene.getEngine().disableVR();\r\n }\r\n if (this._scene.activeCamera) {\r\n this._position = this._scene.activeCamera.position.clone();\r\n\r\n }\r\n\r\n if (this.vrDeviceOrientationCamera) {\r\n this.vrDeviceOrientationCamera.angularSensibility = Number.MAX_VALUE;\r\n }\r\n\r\n if (this._deviceOrientationCamera) {\r\n this._deviceOrientationCamera.position = this._position;\r\n this._scene.activeCamera = this._deviceOrientationCamera;\r\n\r\n // Restore angular sensibility\r\n if (this._cachedAngularSensibility.angularSensibilityX) {\r\n (<any>this._deviceOrientationCamera).angularSensibilityX = this._cachedAngularSensibility.angularSensibilityX;\r\n this._cachedAngularSensibility.angularSensibilityX = null;\r\n }\r\n if (this._cachedAngularSensibility.angularSensibilityY) {\r\n (<any>this._deviceOrientationCamera).angularSensibilityY = this._cachedAngularSensibility.angularSensibilityY;\r\n this._cachedAngularSensibility.angularSensibilityY = null;\r\n }\r\n if (this._cachedAngularSensibility.angularSensibility) {\r\n (<any>this._deviceOrientationCamera).angularSensibility = this._cachedAngularSensibility.angularSensibility;\r\n this._cachedAngularSensibility.angularSensibility = null;\r\n }\r\n } else if (this._existingCamera) {\r\n this._existingCamera.position = this._position;\r\n this._scene.activeCamera = this._existingCamera;\r\n if (this._inputElement) {\r\n this._scene.activeCamera.attachControl();\r\n }\r\n\r\n // Restore angular sensibility\r\n if (this._cachedAngularSensibility.angularSensibilityX) {\r\n (<any>this._existingCamera).angularSensibilityX = this._cachedAngularSensibility.angularSensibilityX;\r\n this._cachedAngularSensibility.angularSensibilityX = null;\r\n }\r\n if (this._cachedAngularSensibility.angularSensibilityY) {\r\n (<any>this._existingCamera).angularSensibilityY = this._cachedAngularSensibility.angularSensibilityY;\r\n this._cachedAngularSensibility.angularSensibilityY = null;\r\n }\r\n if (this._cachedAngularSensibility.angularSensibility) {\r\n (<any>this._existingCamera).angularSensibility = this._cachedAngularSensibility.angularSensibility;\r\n this._cachedAngularSensibility.angularSensibility = null;\r\n }\r\n }\r\n\r\n this.updateButtonVisibility();\r\n\r\n if (this._interactionsEnabled) {\r\n this._scene.unregisterBeforeRender(this.beforeRender);\r\n this._cameraGazer._gazeTracker.isVisible = false;\r\n if (this._leftController) {\r\n this._leftController._gazeTracker.isVisible = false;\r\n }\r\n if (this._rightController) {\r\n this._rightController._gazeTracker.isVisible = false;\r\n }\r\n }\r\n\r\n // resize to update width and height when exiting vr exits fullscreen\r\n this._scene.getEngine().resize();\r\n\r\n [this._leftController, this._rightController].forEach((controller) => {\r\n if (controller) {\r\n controller._deactivatePointer();\r\n }\r\n });\r\n\r\n this._hasEnteredVR = false;\r\n\r\n // Update engine state to re enable non-vr camera input\r\n var engine = this._scene.getEngine();\r\n if (engine._onVrDisplayPresentChange) {\r\n engine._onVrDisplayPresentChange();\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * The position of the vr experience helper.\r\n */\r\n public get position(): Vector3 {\r\n return this._position;\r\n }\r\n\r\n /**\r\n * Sets the position of the vr experience helper.\r\n */\r\n public set position(value: Vector3) {\r\n this._position = value;\r\n\r\n if (this._scene.activeCamera) {\r\n this._scene.activeCamera.position = value;\r\n }\r\n }\r\n\r\n /**\r\n * Enables controllers and user interactions such as selecting and object or clicking on an object.\r\n */\r\n public enableInteractions() {\r\n if (!this._interactionsEnabled) {\r\n this._interactionsRequested = true;\r\n\r\n // in XR it is enabled by default, but just to make sure, re-attach\r\n if (this.xr) {\r\n if (this.xr.baseExperience.state === WebXRState.IN_XR) {\r\n this.xr.pointerSelection.attach();\r\n }\r\n return;\r\n }\r\n\r\n if (this._leftController) {\r\n this._enableInteractionOnController(this._leftController);\r\n }\r\n\r\n if (this._rightController) {\r\n this._enableInteractionOnController(this._rightController);\r\n }\r\n\r\n this.raySelectionPredicate = (mesh) => {\r\n return mesh.isVisible && (mesh.isPickable || mesh.name === this._floorMeshName);\r\n };\r\n\r\n this.meshSelectionPredicate = () => {\r\n return true;\r\n };\r\n\r\n this._raySelectionPredicate = (mesh) => {\r\n if (this._isTeleportationFloor(mesh) || (mesh.name.indexOf(\"gazeTracker\") === -1\r\n && mesh.name.indexOf(\"teleportationTarget\") === -1\r\n && mesh.name.indexOf(\"torusTeleportation\") === -1)) {\r\n return this.raySelectionPredicate(mesh);\r\n }\r\n return false;\r\n };\r\n\r\n this._interactionsEnabled = true;\r\n }\r\n }\r\n\r\n private get _noControllerIsActive() {\r\n return !(this._leftController && this._leftController._activePointer) && !(this._rightController && this._rightController._activePointer);\r\n }\r\n\r\n private beforeRender = () => {\r\n if (this._leftController && this._leftController._activePointer) {\r\n this._castRayAndSelectObject(this._leftController);\r\n }\r\n\r\n if (this._rightController && this._rightController._activePointer) {\r\n this._castRayAndSelectObject(this._rightController);\r\n }\r\n\r\n if (this._noControllerIsActive && (this._scene.getEngine().isPointerLock || this.enableGazeEvenWhenNoPointerLock)) {\r\n this._castRayAndSelectObject(this._cameraGazer);\r\n } else {\r\n this._cameraGazer._gazeTracker.isVisible = false;\r\n }\r\n\r\n }\r\n\r\n private _isTeleportationFloor(mesh: AbstractMesh): boolean {\r\n for (var i = 0; i < this._floorMeshesCollection.length; i++) {\r\n if (this._floorMeshesCollection[i].id === mesh.id) {\r\n return true;\r\n }\r\n }\r\n if (this._floorMeshName && mesh.name === this._floorMeshName) {\r\n return true;\r\n }\r\n return false;\r\n }\r\n\r\n /**\r\n * Adds a floor mesh to be used for teleportation.\r\n * @param floorMesh the mesh to be used for teleportation.\r\n */\r\n public addFloorMesh(floorMesh: Mesh): void {\r\n if (!this._floorMeshesCollection) {\r\n return;\r\n }\r\n\r\n if (this._floorMeshesCollection.indexOf(floorMesh) > -1) {\r\n return;\r\n }\r\n\r\n this._floorMeshesCollection.push(floorMesh);\r\n }\r\n\r\n /**\r\n * Removes a floor mesh from being used for teleportation.\r\n * @param floorMesh the mesh to be removed.\r\n */\r\n public removeFloorMesh(floorMesh: Mesh): void {\r\n if (!this._floorMeshesCollection) {\r\n return;\r\n }\r\n\r\n const meshIndex = this._floorMeshesCollection.indexOf(floorMesh);\r\n if (meshIndex !== -1) {\r\n this._floorMeshesCollection.splice(meshIndex, 1);\r\n }\r\n }\r\n\r\n /**\r\n * Enables interactions and teleportation using the VR controllers and gaze.\r\n * @param vrTeleportationOptions options to modify teleportation behavior.\r\n */\r\n public enableTeleportation(vrTeleportationOptions: VRTeleportationOptions = {}) {\r\n if (!this._teleportationInitialized) {\r\n this._teleportationRequested = true;\r\n\r\n this.enableInteractions();\r\n\r\n if (this.webVROptions.useXR && (vrTeleportationOptions.floorMeshes || vrTeleportationOptions.floorMeshName)) {\r\n const floorMeshes: AbstractMesh[] = vrTeleportationOptions.floorMeshes || [];\r\n if (!floorMeshes.length) {\r\n const floorMesh = this._scene.getMeshByName(vrTeleportationOptions.floorMeshName!);\r\n if (floorMesh) {\r\n floorMeshes.push(floorMesh);\r\n }\r\n }\r\n if (this.xr) {\r\n floorMeshes.forEach((mesh) => {\r\n this.xr.teleportation.addFloorMesh(mesh);\r\n });\r\n if (!this.xr.teleportation.attached) {\r\n this.xr.teleportation.attach();\r\n }\r\n return;\r\n } else if (!this.xrTestDone) {\r\n const waitForXr = () => {\r\n if (this.xrTestDone) {\r\n this._scene.unregisterBeforeRender(waitForXr);\r\n if (this.xr) {\r\n if (!this.xr.teleportation.attached) {\r\n this.xr.teleportation.attach();\r\n }\r\n } else {\r\n this.enableTeleportation(vrTeleportationOptions);\r\n }\r\n }\r\n };\r\n this._scene.registerBeforeRender(waitForXr);\r\n return;\r\n }\r\n }\r\n\r\n if (vrTeleportationOptions.floorMeshName) {\r\n this._floorMeshName = vrTeleportationOptions.floorMeshName;\r\n }\r\n if (vrTeleportationOptions.floorMeshes) {\r\n this._floorMeshesCollection = vrTeleportationOptions.floorMeshes;\r\n }\r\n\r\n if (vrTeleportationOptions.teleportationMode) {\r\n this._teleportationMode = vrTeleportationOptions.teleportationMode;\r\n }\r\n if (vrTeleportationOptions.teleportationTime && vrTeleportationOptions.teleportationTime > 0) {\r\n this._teleportationTime = vrTeleportationOptions.teleportationTime;\r\n }\r\n if (vrTeleportationOptions.teleportationSpeed && vrTeleportationOptions.teleportationSpeed > 0) {\r\n this._teleportationSpeed = vrTeleportationOptions.teleportationSpeed;\r\n }\r\n if (vrTeleportationOptions.easingFunction !== undefined) {\r\n this._teleportationEasing = vrTeleportationOptions.easingFunction;\r\n }\r\n\r\n if (this._leftController != null) {\r\n this._enableTeleportationOnController(this._leftController);\r\n }\r\n if (this._rightController != null) {\r\n this._enableTeleportationOnController(this._rightController);\r\n }\r\n\r\n // Creates an image processing post process for the vignette not relying\r\n // on the main scene configuration for image processing to reduce setup and spaces\r\n // (gamma/linear) conflicts.\r\n const imageProcessingConfiguration = new ImageProcessingConfiguration();\r\n imageProcessingConfiguration.vignetteColor = new Color4(0, 0, 0, 0);\r\n imageProcessingConfiguration.vignetteEnabled = true;\r\n this._postProcessMove = new ImageProcessingPostProcess(\"postProcessMove\",\r\n 1.0,\r\n this._webVRCamera,\r\n undefined,\r\n undefined,\r\n undefined,\r\n undefined,\r\n imageProcessingConfiguration);\r\n\r\n this._webVRCamera.detachPostProcess(this._postProcessMove);\r\n this._teleportationInitialized = true;\r\n if (this._isDefaultTeleportationTarget) {\r\n this._createTeleportationCircles();\r\n this._teleportationTarget.scaling.scaleInPlace(this._webVRCamera.deviceScaleFactor);\r\n }\r\n }\r\n }\r\n\r\n private _onNewGamepadConnected = (gamepad: Gamepad) => {\r\n if (gamepad.type !== Gamepad.POSE_ENABLED) {\r\n if (gamepad.leftStick) {\r\n gamepad.onleftstickchanged((stickValues) => {\r\n if (this._teleportationInitialized && this.teleportationEnabled) {\r\n // Listening to classic/xbox gamepad only if no VR controller is active\r\n if ((!this._leftController && !this._rightController) ||\r\n ((this._leftController && !this._leftController._activePointer) &&\r\n (this._rightController && !this._rightController._activePointer))) {\r\n this._checkTeleportWithRay(stickValues, this._cameraGazer);\r\n this._checkTeleportBackwards(stickValues, this._cameraGazer);\r\n }\r\n }\r\n });\r\n }\r\n if (gamepad.rightStick) {\r\n gamepad.onrightstickchanged((stickValues) => {\r\n if (this._teleportationInitialized) {\r\n this._checkRotate(stickValues, this._cameraGazer);\r\n }\r\n });\r\n }\r\n if (gamepad.type === Gamepad.XBOX) {\r\n (<Xbox360Pad>gamepad).onbuttondown((buttonPressed: Xbox360Button) => {\r\n if (this._interactionsEnabled && buttonPressed === Xbox360Button.A) {\r\n this._cameraGazer._selectionPointerDown();\r\n }\r\n });\r\n (<Xbox360Pad>gamepad).onbuttonup((buttonPressed: Xbox360Button) => {\r\n if (this._interactionsEnabled && buttonPressed === Xbox360Button.A) {\r\n this._cameraGazer._selectionPointerUp();\r\n }\r\n });\r\n }\r\n } else {\r\n var webVRController = <WebVRController>gamepad;\r\n var controller = new VRExperienceHelperControllerGazer(webVRController, this._scene, this._cameraGazer._gazeTracker);\r\n\r\n if (webVRController.hand === \"right\" || (this._leftController && this._leftController.webVRController != webVRController)) {\r\n this._rightController = controller;\r\n } else {\r\n this._leftController = controller;\r\n }\r\n\r\n this._tryEnableInteractionOnController(controller);\r\n }\r\n }\r\n\r\n // This only succeeds if the controller's mesh exists for the controller so this must be called whenever new controller is connected or when mesh is loaded\r\n private _tryEnableInteractionOnController = (controller: VRExperienceHelperControllerGazer) => {\r\n if (this._interactionsRequested && !controller._interactionsEnabled) {\r\n this._enableInteractionOnController(controller);\r\n }\r\n if (this._teleportationRequested && !controller._teleportationEnabled) {\r\n this._enableTeleportationOnController(controller);\r\n }\r\n }\r\n\r\n private _onNewGamepadDisconnected = (gamepad: Gamepad) => {\r\n if (gamepad instanceof WebVRController) {\r\n\r\n if (gamepad.hand === \"left\" && this._leftController != null) {\r\n this._leftController.dispose();\r\n this._leftController = null;\r\n }\r\n if (gamepad.hand === \"right\" && this._rightController != null) {\r\n this._rightController.dispose();\r\n this._rightController = null;\r\n }\r\n }\r\n }\r\n\r\n private _enableInteractionOnController(controller: VRExperienceHelperControllerGazer) {\r\n var controllerMesh = controller.webVRController.mesh;\r\n if (controllerMesh) {\r\n\r\n controller._interactionsEnabled = true;\r\n if (this.isInVRMode && this._displayLaserPointer) {\r\n controller._activatePointer();\r\n }\r\n if (this.webVROptions.laserToggle) {\r\n controller.webVRController.onMainButtonStateChangedObservable.add((stateObject) => {\r\n // Enabling / disabling laserPointer\r\n if (this._displayLaserPointer && stateObject.value === 1) {\r\n if (controller._activePointer) {\r\n controller._deactivatePointer();\r\n } else {\r\n controller._activatePointer();\r\n }\r\n if (this.displayGaze) {\r\n controller._gazeTracker.isVisible = controller._activePointer;\r\n }\r\n }\r\n });\r\n }\r\n controller.webVRController.onTriggerStateChangedObservable.add((stateObject) => {\r\n var gazer: VRExperienceHelperGazer = controller;\r\n if (this._noControllerIsActive) {\r\n gazer = this._cameraGazer;\r\n }\r\n if (!gazer._pointerDownOnMeshAsked) {\r\n if (stateObject.value > this._padSensibilityUp) {\r\n gazer._selectionPointerDown();\r\n }\r\n } else if (stateObject.value < this._padSensibilityDown) {\r\n gazer._selectionPointerUp();\r\n }\r\n });\r\n }\r\n }\r\n\r\n private _checkTeleportWithRay(stateObject: StickValues, gazer: VRExperienceHelperGazer) {\r\n // Dont teleport if another gaze already requested teleportation\r\n if (this._teleportationRequestInitiated && !gazer._teleportationRequestInitiated) {\r\n return;\r\n }\r\n if (!gazer._teleportationRequestInitiated) {\r\n if (stateObject.y < -this._padSensibilityUp && gazer._dpadPressed) {\r\n gazer._activatePointer();\r\n gazer._teleportationRequestInitiated = true;\r\n }\r\n } else {\r\n // Listening to the proper controller values changes to confirm teleportation\r\n if (Math.sqrt(stateObject.y * stateObject.y + stateObject.x * stateObject.x) < this._padSensibilityDown) {\r\n if (this._teleportActive) {\r\n this.teleportCamera(this._haloCenter);\r\n }\r\n\r\n gazer._teleportationRequestInitiated = false;\r\n }\r\n }\r\n }\r\n private _checkRotate(stateObject: StickValues, gazer: VRExperienceHelperGazer) {\r\n // Only rotate when user is not currently selecting a teleportation location\r\n if (gazer._teleportationRequestInitiated) {\r\n return;\r\n }\r\n\r\n if (!gazer._rotationLeftAsked) {\r\n if (stateObject.x < -this._padSensibilityUp && gazer._dpadPressed) {\r\n gazer._rotationLeftAsked = true;\r\n if (this._rotationAllowed) {\r\n this._rotateCamera(false);\r\n }\r\n }\r\n } else {\r\n if (stateObject.x > -this._padSensibilityDown) {\r\n gazer._rotationLeftAsked = false;\r\n }\r\n }\r\n\r\n if (!gazer._rotationRightAsked) {\r\n if (stateObject.x > this._padSensibilityUp && gazer._dpadPressed) {\r\n gazer._rotationRightAsked = true;\r\n if (this._rotationAllowed) {\r\n this._rotateCamera(true);\r\n }\r\n }\r\n } else {\r\n if (stateObject.x < this._padSensibilityDown) {\r\n gazer._rotationRightAsked = false;\r\n }\r\n }\r\n }\r\n private _checkTeleportBackwards(stateObject: StickValues, gazer: VRExperienceHelperGazer) {\r\n // Only teleport backwards when user is not currently selecting a teleportation location\r\n if (gazer._teleportationRequestInitiated) {\r\n return;\r\n }\r\n // Teleport backwards\r\n if (stateObject.y > this._padSensibilityUp && gazer._dpadPressed) {\r\n if (!gazer._teleportationBackRequestInitiated) {\r\n if (!this.currentVRCamera) {\r\n return;\r\n }\r\n\r\n // Get rotation and position of the current camera\r\n var rotation = Quaternion.FromRotationMatrix(this.currentVRCamera.getWorldMatrix().getRotationMatrix());\r\n var position = this.currentVRCamera.position;\r\n\r\n // If the camera has device position, use that instead\r\n if ((<WebVRFreeCamera>this.currentVRCamera).devicePosition && (<WebVRFreeCamera>this.currentVRCamera).deviceRotationQuaternion) {\r\n rotation = (<WebVRFreeCamera>this.currentVRCamera).deviceRotationQuaternion;\r\n position = (<WebVRFreeCamera>this.currentVRCamera).devicePosition;\r\n }\r\n\r\n // Get matrix with only the y rotation of the device rotation\r\n rotation.toEulerAnglesToRef(this._workingVector);\r\n this._workingVector.z = 0;\r\n this._workingVector.x = 0;\r\n Quaternion.RotationYawPitchRollToRef(this._workingVector.y, this._workingVector.x, this._workingVector.z, this._workingQuaternion);\r\n this._workingQuaternion.toRotationMatrix(this._workingMatrix);\r\n\r\n // Rotate backwards ray by device rotation to cast at the ground behind the user\r\n Vector3.TransformCoordinatesToRef(this._teleportBackwardsVector, this._workingMatrix, this._workingVector);\r\n\r\n // Teleport if ray hit the ground and is not to far away eg. backwards off a cliff\r\n var ray = new Ray(position, this._workingVector);\r\n var hit = this._scene.pickWithRay(ray, this._raySelectionPredicate);\r\n if (hit && hit.pickedPoint && hit.pickedMesh && this._isTeleportationFloor(hit.pickedMesh) && hit.distance < 5) {\r\n this.teleportCamera(hit.pickedPoint);\r\n }\r\n\r\n gazer._teleportationBackRequestInitiated = true;\r\n }\r\n } else {\r\n gazer._teleportationBackRequestInitiated = false;\r\n }\r\n\r\n }\r\n\r\n private _enableTeleportationOnController(controller: VRExperienceHelperControllerGazer) {\r\n var controllerMesh = controller.webVRController.mesh;\r\n if (controllerMesh) {\r\n if (!controller._interactionsEnabled) {\r\n this._enableInteractionOnController(controller);\r\n }\r\n controller._interactionsEnabled = true;\r\n controller._teleportationEnabled = true;\r\n if (controller.webVRController.controllerType === PoseEnabledControllerType.VIVE) {\r\n controller._dpadPressed = false;\r\n controller.webVRController.onPadStateChangedObservable.add((stateObject) => {\r\n controller._dpadPressed = stateObject.pressed;\r\n if (!controller._dpadPressed) {\r\n controller._rotationLeftAsked = false;\r\n controller._rotationRightAsked = false;\r\n controller._teleportationBackRequestInitiated = false;\r\n }\r\n });\r\n }\r\n controller.webVRController.onPadValuesChangedObservable.add((stateObject) => {\r\n if (this.teleportationEnabled) {\r\n this._checkTeleportBackwards(stateObject, controller);\r\n this._checkTeleportWithRay(stateObject, controller);\r\n }\r\n this._checkRotate(stateObject, controller);\r\n });\r\n }\r\n }\r\n\r\n private _createTeleportationCircles() {\r\n this._teleportationTarget = Mesh.CreateGround(\"teleportationTarget\", 2, 2, 2, this._scene);\r\n this._teleportationTarget.isPickable = false;\r\n\r\n var length = 512;\r\n var dynamicTexture = new DynamicTexture(\"DynamicTexture\", length, this._scene, true);\r\n dynamicTexture.hasAlpha = true;\r\n var context = dynamicTexture.getContext();\r\n\r\n var centerX = length / 2;\r\n var centerY = length / 2;\r\n var radius = 200;\r\n\r\n context.beginPath();\r\n context.arc(centerX, centerY, radius, 0, 2 * Math.PI, false);\r\n context.fillStyle = this._teleportationFillColor;\r\n context.fill();\r\n context.lineWidth = 10;\r\n context.strokeStyle = this._teleportationBorderColor;\r\n context.stroke();\r\n context.closePath();\r\n dynamicTexture.update();\r\n\r\n var teleportationCircleMaterial = new StandardMaterial(\"TextPlaneMaterial\", this._scene);\r\n teleportationCircleMaterial.diffuseTexture = dynamicTexture;\r\n this._teleportationTarget.material = teleportationCircleMaterial;\r\n\r\n var torus = Mesh.CreateTorus(\"torusTeleportation\", 0.75, 0.1, 25, this._scene, false);\r\n torus.isPickable = false;\r\n torus.parent = this._teleportationTarget;\r\n\r\n var animationInnerCircle = new Animation(\"animationInnerCircle\", \"position.y\", 30, Animation.ANIMATIONTYPE_FLOAT, Animation.ANIMATIONLOOPMODE_CYCLE);\r\n\r\n var keys = [];\r\n keys.push({\r\n frame: 0,\r\n value: 0\r\n });\r\n keys.push({\r\n frame: 30,\r\n value: 0.4\r\n });\r\n keys.push({\r\n frame: 60,\r\n value: 0\r\n });\r\n\r\n animationInnerCircle.setKeys(keys);\r\n\r\n var easingFunction = new SineEase();\r\n easingFunction.setEasingMode(EasingFunction.EASINGMODE_EASEINOUT);\r\n animationInnerCircle.setEasingFunction(easingFunction);\r\n\r\n torus.animations = [];\r\n torus.animations.push(animationInnerCircle);\r\n\r\n this._scene.beginAnimation(torus, 0, 60, true);\r\n\r\n this._hideTeleportationTarget();\r\n }\r\n\r\n private _displayTeleportationTarget() {\r\n this._teleportActive = true;\r\n if (this._teleportationInitialized) {\r\n this._teleportationTarget.isVisible = true;\r\n if (this._isDefaultTeleportationTarget) {\r\n (<Mesh>this._teleportationTarget.getChildren()[0]).isVisible = true;\r\n }\r\n }\r\n }\r\n\r\n private _hideTeleportationTarget() {\r\n this._teleportActive = false;\r\n if (this._teleportationInitialized) {\r\n this._teleportationTarget.isVisible = false;\r\n if (this._isDefaultTeleportationTarget) {\r\n (<Mesh>this._teleportationTarget.getChildren()[0]).isVisible = false;\r\n }\r\n }\r\n }\r\n\r\n private _rotateCamera(right: boolean) {\r\n if (!(this.currentVRCamera instanceof FreeCamera)) {\r\n return;\r\n }\r\n\r\n if (right) {\r\n this._rotationAngle++;\r\n }\r\n else {\r\n this._rotationAngle--;\r\n }\r\n\r\n this.currentVRCamera.animations = [];\r\n\r\n var target = Quaternion.FromRotationMatrix(Matrix.RotationY(Math.PI / 4 * this._rotationAngle));\r\n\r\n var animationRotation = new Animation(\"animationRotation\", \"rotationQuaternion\", 90, Animation.ANIMATIONTYPE_QUATERNION,\r\n Animation.ANIMATIONLOOPMODE_CONSTANT);\r\n\r\n var animationRotationKeys = [];\r\n animationRotationKeys.push({\r\n frame: 0,\r\n value: this.currentVRCamera.rotationQuaternion\r\n });\r\n animationRotationKeys.push({\r\n frame: 6,\r\n value: target\r\n });\r\n\r\n animationRotation.setKeys(animationRotationKeys);\r\n\r\n animationRotation.setEasingFunction(this._circleEase);\r\n\r\n this.currentVRCamera.animations.push(animationRotation);\r\n\r\n this._postProcessMove.animations = [];\r\n\r\n var animationPP = new Animation(\"animationPP\", \"vignetteWeight\", 90, Animation.ANIMATIONTYPE_FLOAT,\r\n Animation.ANIMATIONLOOPMODE_CONSTANT);\r\n\r\n var vignetteWeightKeys = [];\r\n vignetteWeightKeys.push({\r\n frame: 0,\r\n value: 0\r\n });\r\n vignetteWeightKeys.push({\r\n frame: 3,\r\n value: 4\r\n });\r\n vignetteWeightKeys.push({\r\n frame: 6,\r\n value: 0\r\n });\r\n\r\n animationPP.setKeys(vignetteWeightKeys);\r\n animationPP.setEasingFunction(this._circleEase);\r\n this._postProcessMove.animations.push(animationPP);\r\n\r\n var animationPP2 = new Animation(\"animationPP2\", \"vignetteStretch\", 90, Animation.ANIMATIONTYPE_FLOAT,\r\n Animation.ANIMATIONLOOPMODE_CONSTANT);\r\n\r\n var vignetteStretchKeys = [];\r\n vignetteStretchKeys.push({\r\n frame: 0,\r\n value: 0\r\n });\r\n vignetteStretchKeys.push({\r\n frame: 3,\r\n value: 10\r\n });\r\n vignetteStretchKeys.push({\r\n frame: 6,\r\n value: 0\r\n });\r\n\r\n animationPP2.setKeys(vignetteStretchKeys);\r\n animationPP2.setEasingFunction(this._circleEase);\r\n this._postProcessMove.animations.push(animationPP2);\r\n\r\n this._postProcessMove.imageProcessingConfiguration.vignetteWeight = 0;\r\n this._postProcessMove.imageProcessingConfiguration.vignetteStretch = 0;\r\n this._postProcessMove.samples = 4;\r\n this._webVRCamera.attachPostProcess(this._postProcessMove);\r\n this._scene.beginAnimation(this._postProcessMove, 0, 6, false, 1, () => {\r\n this._webVRCamera.detachPostProcess(this._postProcessMove);\r\n });\r\n this._scene.beginAnimation(this.currentVRCamera, 0, 6, false, 1);\r\n }\r\n\r\n private _moveTeleportationSelectorTo(hit: PickingInfo, gazer: VRExperienceHelperGazer, ray: Ray) {\r\n if (hit.pickedPoint) {\r\n if (gazer._teleportationRequestInitiated) {\r\n this._displayTeleportationTarget();\r\n this._haloCenter.copyFrom(hit.pickedPoint);\r\n this._teleportationTarget.position.copyFrom(hit.pickedPoint);\r\n }\r\n\r\n var pickNormal = this._convertNormalToDirectionOfRay(hit.getNormal(true, false), ray);\r\n if (pickNormal) {\r\n var axis1 = Vector3.Cross(Axis.Y, pickNormal);\r\n var axis2 = Vector3.Cross(pickNormal, axis1);\r\n Vector3.RotationFromAxisToRef(axis2, pickNormal, axis1, this._teleportationTarget.rotation);\r\n }\r\n this._teleportationTarget.position.y += 0.1;\r\n }\r\n }\r\n private _workingVector = Vector3.Zero();\r\n private _workingQuaternion = Quaternion.Identity();\r\n private _workingMatrix = Matrix.Identity();\r\n\r\n /**\r\n * Time Constant Teleportation Mode\r\n */\r\n public static readonly TELEPORTATIONMODE_CONSTANTTIME = 0;\r\n /**\r\n * Speed Constant Teleportation Mode\r\n */\r\n public static readonly TELEPORTATIONMODE_CONSTANTSPEED = 1;\r\n\r\n /**\r\n * Teleports the users feet to the desired location\r\n * @param location The location where the user's feet should be placed\r\n */\r\n public teleportCamera(location: Vector3) {\r\n if (!(this.currentVRCamera instanceof FreeCamera)) {\r\n return;\r\n }\r\n // Teleport the hmd to where the user is looking by moving the anchor to where they are looking minus the\r\n // offset of the headset from the anchor.\r\n if (this.webVRCamera.leftCamera) {\r\n this._workingVector.copyFrom(this.webVRCamera.leftCamera.globalPosition);\r\n this._workingVector.subtractInPlace(this.webVRCamera.position);\r\n location.subtractToRef(this._workingVector, this._workingVector);\r\n } else {\r\n this._workingVector.copyFrom(location);\r\n }\r\n // Add height to account for user's height offset\r\n if (this.isInVRMode) {\r\n this._workingVector.y += this.webVRCamera.deviceDistanceToRoomGround() * this._webVRCamera.deviceScaleFactor;\r\n } else {\r\n this._workingVector.y += this._defaultHeight;\r\n }\r\n\r\n this.onBeforeCameraTeleport.notifyObservers(this._workingVector);\r\n\r\n // Animations FPS\r\n const FPS = 90;\r\n var speedRatio, lastFrame;\r\n if (this._teleportationMode == VRExperienceHelper.TELEPORTATIONMODE_CONSTANTSPEED) {\r\n lastFrame = FPS;\r\n var dist = Vector3.Distance(this.currentVRCamera.position, this._workingVector);\r\n speedRatio = this._teleportationSpeed / dist;\r\n } else {\r\n // teleportationMode is TELEPORTATIONMODE_CONSTANTTIME\r\n lastFrame = Math.round(this._teleportationTime * FPS / 1000);\r\n speedRatio = 1;\r\n }\r\n\r\n // Create animation from the camera's position to the new location\r\n this.currentVRCamera.animations = [];\r\n var animationCameraTeleportation = new Animation(\"animationCameraTeleportation\", \"position\", FPS, Animation.ANIMATIONTYPE_VECTOR3, Animation.ANIMATIONLOOPMODE_CONSTANT);\r\n var animationCameraTeleportationKeys = [{\r\n frame: 0,\r\n value: this.currentVRCamera.position\r\n },\r\n {\r\n frame: lastFrame,\r\n value: this._workingVector\r\n }\r\n ];\r\n\r\n animationCameraTeleportation.setKeys(animationCameraTeleportationKeys);\r\n animationCameraTeleportation.setEasingFunction(this._teleportationEasing);\r\n this.currentVRCamera.animations.push(animationCameraTeleportation);\r\n\r\n this._postProcessMove.animations = [];\r\n\r\n // Calculate the mid frame for vignette animations\r\n var midFrame = Math.round(lastFrame / 2);\r\n\r\n var animationPP = new Animation(\"animationPP\", \"vignetteWeight\", FPS, Animation.ANIMATIONTYPE_FLOAT,\r\n Animation.ANIMATIONLOOPMODE_CONSTANT);\r\n\r\n var vignetteWeightKeys = [];\r\n vignetteWeightKeys.push({\r\n frame: 0,\r\n value: 0\r\n });\r\n vignetteWeightKeys.push({\r\n frame: midFrame,\r\n value: 8\r\n });\r\n vignetteWeightKeys.push({\r\n frame: lastFrame,\r\n value: 0\r\n });\r\n\r\n animationPP.setKeys(vignetteWeightKeys);\r\n this._postProcessMove.animations.push(animationPP);\r\n\r\n var animationPP2 = new Animation(\"animationPP2\", \"vignetteStretch\", FPS, Animation.ANIMATIONTYPE_FLOAT,\r\n Animation.ANIMATIONLOOPMODE_CONSTANT);\r\n\r\n var vignetteStretchKeys = [];\r\n vignetteStretchKeys.push({\r\n frame: 0,\r\n value: 0\r\n });\r\n vignetteStretchKeys.push({\r\n frame: midFrame,\r\n value: 10\r\n });\r\n vignetteStretchKeys.push({\r\n frame: lastFrame,\r\n value: 0\r\n });\r\n\r\n animationPP2.setKeys(vignetteStretchKeys);\r\n this._postProcessMove.animations.push(animationPP2);\r\n\r\n this._postProcessMove.imageProcessingConfiguration.vignetteWeight = 0;\r\n this._postProcessMove.imageProcessingConfiguration.vignetteStretch = 0;\r\n\r\n this._webVRCamera.attachPostProcess(this._postProcessMove);\r\n this._scene.beginAnimation(this._postProcessMove, 0, lastFrame, false, speedRatio, () => {\r\n this._webVRCamera.detachPostProcess(this._postProcessMove);\r\n });\r\n this._scene.beginAnimation(this.currentVRCamera, 0, lastFrame, false, speedRatio, () => {\r\n this.onAfterCameraTeleport.notifyObservers(this._workingVector);\r\n });\r\n\r\n this._hideTeleportationTarget();\r\n }\r\n\r\n private _convertNormalToDirectionOfRay(normal: Nullable<Vector3>, ray: Ray) {\r\n if (normal) {\r\n var angle = Math.acos(Vector3.Dot(normal, ray.direction));\r\n if (angle < Math.PI / 2) {\r\n normal.scaleInPlace(-1);\r\n }\r\n }\r\n return normal;\r\n }\r\n\r\n private _castRayAndSelectObject(gazer: VRExperienceHelperGazer) {\r\n if (!(this.currentVRCamera instanceof FreeCamera)) {\r\n return;\r\n }\r\n\r\n var ray = gazer._getForwardRay(this._rayLength);\r\n var hit = this._scene.pickWithRay(ray, this._raySelectionPredicate);\r\n\r\n if (hit) {\r\n // Populate the controllers mesh that can be used for drag/drop\r\n if ((<any>gazer)._laserPointer) {\r\n hit.originMesh = (<any>gazer)._laserPointer.parent;\r\n }\r\n this._scene.simulatePointerMove(hit, { pointerId: gazer._id });\r\n }\r\n gazer._currentHit = hit;\r\n\r\n // Moving the gazeTracker on the mesh face targetted\r\n if (hit && hit.pickedPoint) {\r\n if (this._displayGaze) {\r\n let multiplier = 1;\r\n\r\n gazer._gazeTracker.isVisible = true;\r\n\r\n if (gazer._isActionableMesh) {\r\n multiplier = 3;\r\n }\r\n if (this.updateGazeTrackerScale) {\r\n gazer._gazeTracker.scaling.x = hit.distance * multiplier;\r\n gazer._gazeTracker.scaling.y = hit.distance * multiplier;\r\n gazer._gazeTracker.scaling.z = hit.distance * multiplier;\r\n }\r\n\r\n var pickNormal = this._convertNormalToDirectionOfRay(hit.getNormal(), ray);\r\n // To avoid z-fighting\r\n let deltaFighting = 0.002;\r\n\r\n if (pickNormal) {\r\n var axis1 = Vector3.Cross(Axis.Y, pickNormal);\r\n var axis2 = Vector3.Cross(pickNormal, axis1);\r\n Vector3.RotationFromAxisToRef(axis2, pickNormal, axis1, gazer._gazeTracker.rotation);\r\n }\r\n gazer._gazeTracker.position.copyFrom(hit.pickedPoint);\r\n\r\n if (gazer._gazeTracker.position.x < 0) {\r\n gazer._gazeTracker.position.x += deltaFighting;\r\n }\r\n else {\r\n gazer._gazeTracker.position.x -= deltaFighting;\r\n }\r\n if (gazer._gazeTracker.position.y < 0) {\r\n gazer._gazeTracker.position.y += deltaFighting;\r\n }\r\n else {\r\n gazer._gazeTracker.position.y -= deltaFighting;\r\n }\r\n if (gazer._gazeTracker.position.z < 0) {\r\n gazer._gazeTracker.position.z += deltaFighting;\r\n }\r\n else {\r\n gazer._gazeTracker.position.z -= deltaFighting;\r\n }\r\n }\r\n\r\n // Changing the size of the laser pointer based on the distance from the targetted point\r\n gazer._updatePointerDistance(hit.distance);\r\n }\r\n else {\r\n gazer._updatePointerDistance();\r\n gazer._gazeTracker.isVisible = false;\r\n }\r\n\r\n if (hit && hit.pickedMesh) {\r\n // The object selected is the floor, we're in a teleportation scenario\r\n if (this._teleportationInitialized && this._isTeleportationFloor(hit.pickedMesh) && hit.pickedPoint) {\r\n // Moving the teleportation area to this targetted point\r\n\r\n //Raise onSelectedMeshUnselected observable if ray collided floor mesh/meshes and a non floor mesh was previously selected\r\n if (gazer._currentMeshSelected && !this._isTeleportationFloor(gazer._currentMeshSelected)) {\r\n this._notifySelectedMeshUnselected(gazer._currentMeshSelected);\r\n }\r\n\r\n gazer._currentMeshSelected = null;\r\n if (gazer._teleportationRequestInitiated) {\r\n this._moveTeleportationSelectorTo(hit, gazer, ray);\r\n }\r\n return;\r\n }\r\n // If not, we're in a selection scenario\r\n //this._teleportationAllowed = false;\r\n if (hit.pickedMesh !== gazer._currentMeshSelected) {\r\n if (this.meshSelectionPredicate(hit.pickedMesh)) {\r\n this.onNewMeshPicked.notifyObservers(hit);\r\n gazer._currentMeshSelected = hit.pickedMesh;\r\n if (hit.pickedMesh.isPickable && hit.pickedMesh.actionManager) {\r\n this.changeGazeColor(this._pickedGazeColor);\r\n this.changeLaserColor(this._pickedLaserColor);\r\n gazer._isActionableMesh = true;\r\n }\r\n else {\r\n this.changeGazeColor(this._gazeColor);\r\n this.changeLaserColor(this._laserColor);\r\n gazer._isActionableMesh = false;\r\n }\r\n try {\r\n this.onNewMeshSelected.notifyObservers(hit.pickedMesh);\r\n let gazerAsControllerGazer = gazer as VRExperienceHelperControllerGazer;\r\n if (gazerAsControllerGazer.webVRController) {\r\n this.onMeshSelectedWithController.notifyObservers({ mesh: hit.pickedMesh, controller: gazerAsControllerGazer.webVRController });\r\n }\r\n }\r\n catch (err) {\r\n Logger.Warn(\"Error while raising onNewMeshSelected or onMeshSelectedWithController: \" + err);\r\n }\r\n }\r\n else {\r\n this._notifySelectedMeshUnselected(gazer._currentMeshSelected);\r\n gazer._currentMeshSelected = null;\r\n this.changeGazeColor(this._gazeColor);\r\n this.changeLaserColor(this._laserColor);\r\n }\r\n }\r\n }\r\n else {\r\n this._notifySelectedMeshUnselected(gazer._currentMeshSelected);\r\n gazer._currentMeshSelected = null;\r\n //this._teleportationAllowed = false;\r\n this.changeGazeColor(this._gazeColor);\r\n this.changeLaserColor(this._laserColor);\r\n }\r\n }\r\n\r\n private _notifySelectedMeshUnselected(mesh: Nullable<AbstractMesh>) {\r\n if (mesh) {\r\n this.onSelectedMeshUnselected.notifyObservers(mesh);\r\n }\r\n }\r\n\r\n /**\r\n * Permanently set new colors for the laser pointer\r\n * @param color the new laser color\r\n * @param pickedColor the new laser color when picked mesh detected\r\n */\r\n public setLaserColor(color: Color3, pickedColor: Color3 = this._pickedLaserColor) {\r\n this._laserColor = color;\r\n this._pickedLaserColor = pickedColor;\r\n }\r\n\r\n /**\r\n * Set lighting enabled / disabled on the laser pointer of both controllers\r\n * @param enabled should the lighting be enabled on the laser pointer\r\n */\r\n public setLaserLightingState(enabled: boolean = true) {\r\n if (this._leftController) {\r\n this._leftController._setLaserPointerLightingDisabled(!enabled);\r\n\r\n }\r\n if (this._rightController) {\r\n this._rightController._setLaserPointerLightingDisabled(!enabled);\r\n }\r\n }\r\n\r\n /**\r\n * Permanently set new colors for the gaze pointer\r\n * @param color the new gaze color\r\n * @param pickedColor the new gaze color when picked mesh detected\r\n */\r\n public setGazeColor(color: Color3, pickedColor: Color3 = this._pickedGazeColor) {\r\n this._gazeColor = color;\r\n this._pickedGazeColor = pickedColor;\r\n }\r\n\r\n /**\r\n * Sets the color of the laser ray from the vr controllers.\r\n * @param color new color for the ray.\r\n */\r\n public changeLaserColor(color: Color3) {\r\n if (!this.updateControllerLaserColor) {\r\n return;\r\n }\r\n\r\n if (this._leftController) {\r\n this._leftController._setLaserPointerColor(color);\r\n\r\n }\r\n if (this._rightController) {\r\n this._rightController._setLaserPointerColor(color);\r\n }\r\n }\r\n\r\n /**\r\n * Sets the color of the ray from the vr headsets gaze.\r\n * @param color new color for the ray.\r\n */\r\n public changeGazeColor(color: Color3) {\r\n if (!this.updateGazeTrackerColor) {\r\n return;\r\n }\r\n if (!(<StandardMaterial>this._cameraGazer._gazeTracker.material)) {\r\n return;\r\n }\r\n (<StandardMaterial>this._cameraGazer._gazeTracker.material).emissiveColor = color;\r\n if (this._leftController) {\r\n (<StandardMaterial>this._leftController._gazeTracker.material).emissiveColor = color;\r\n }\r\n if (this._rightController) {\r\n (<StandardMaterial>this._rightController._gazeTracker.material).emissiveColor = color;\r\n }\r\n }\r\n\r\n /**\r\n * Exits VR and disposes of the vr experience helper\r\n */\r\n public dispose() {\r\n if (this.isInVRMode) {\r\n this.exitVR();\r\n }\r\n\r\n if (this._postProcessMove) {\r\n this._postProcessMove.dispose();\r\n }\r\n\r\n if (this._webVRCamera) {\r\n this._webVRCamera.dispose();\r\n }\r\n if (this._vrDeviceOrientationCamera) {\r\n this._vrDeviceOrientationCamera.dispose();\r\n }\r\n if (!this._useCustomVRButton && this._btnVR && this._btnVR.parentNode) {\r\n document.body.removeChild(this._btnVR);\r\n }\r\n\r\n if (this._deviceOrientationCamera && (this._scene.activeCamera != this._deviceOrientationCamera)) {\r\n this._deviceOrientationCamera.dispose();\r\n }\r\n\r\n if (this._cameraGazer) {\r\n this._cameraGazer.dispose();\r\n }\r\n if (this._leftController) {\r\n this._leftController.dispose();\r\n }\r\n if (this._rightController) {\r\n this._rightController.dispose();\r\n }\r\n\r\n if (this._teleportationTarget) {\r\n this._teleportationTarget.dispose();\r\n }\r\n\r\n if (this.xr) {\r\n this.xr.dispose();\r\n }\r\n\r\n this._floorMeshesCollection = [];\r\n\r\n document.removeEventListener(\"keydown\", this._onKeyDown);\r\n window.removeEventListener('vrdisplaypresentchange', this._onVrDisplayPresentChange);\r\n\r\n window.removeEventListener(\"resize\", this._onResize);\r\n document.removeEventListener(\"fullscreenchange\", this._onFullscreenChange);\r\n document.removeEventListener(\"mozfullscreenchange\", this._onFullscreenChange);\r\n document.removeEventListener(\"webkitfullscreenchange\", this._onFullscreenChange);\r\n document.removeEventListener(\"msfullscreenchange\", this._onFullscreenChange);\r\n (<any>document).onmsfullscreenchange = null;\r\n\r\n this._scene.getEngine().onVRDisplayChangedObservable.removeCallback(this._onVRDisplayChanged);\r\n this._scene.getEngine().onVRRequestPresentStart.removeCallback(this._onVRRequestPresentStart);\r\n this._scene.getEngine().onVRRequestPresentComplete.removeCallback(this._onVRRequestPresentComplete);\r\n window.removeEventListener('vrdisplaypresentchange', this._onVrDisplayPresentChange);\r\n\r\n this._scene.gamepadManager.onGamepadConnectedObservable.removeCallback(this._onNewGamepadConnected);\r\n this._scene.gamepadManager.onGamepadDisconnectedObservable.removeCallback(this._onNewGamepadDisconnected);\r\n\r\n this._scene.unregisterBeforeRender(this.beforeRender);\r\n }\r\n\r\n /**\r\n * Gets the name of the VRExperienceHelper class\r\n * @returns \"VRExperienceHelper\"\r\n */\r\n public getClassName(): string {\r\n return \"VRExperienceHelper\";\r\n }\r\n}\r\n"]}
1
+ {"version":3,"file":"vrExperienceHelper.js","sourceRoot":"","sources":["../../../../sourceES6/core/Cameras/VR/vrExperienceHelper.ts"],"names":[],"mappings":"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","sourcesContent":["import { Logger } from \"../../Misc/logger\";\r\nimport { Observer, Observable } from \"../../Misc/observable\";\r\nimport { Nullable } from \"../../types\";\r\nimport { Camera } from \"../../Cameras/camera\";\r\nimport { FreeCamera } from \"../../Cameras/freeCamera\";\r\nimport { TargetCamera } from \"../../Cameras/targetCamera\";\r\nimport { DeviceOrientationCamera } from \"../../Cameras/deviceOrientationCamera\";\r\nimport { VRDeviceOrientationFreeCamera } from \"../../Cameras/VR/vrDeviceOrientationFreeCamera\";\r\nimport { WebVROptions, WebVRFreeCamera } from \"../../Cameras/VR/webVRCamera\";\r\nimport { PointerEventTypes } from \"../../Events/pointerEvents\";\r\nimport { Scene, IDisposable } from \"../../scene\";\r\nimport { Quaternion, Matrix, Vector3 } from \"../../Maths/math.vector\";\r\nimport { Color3, Color4 } from '../../Maths/math.color';\r\nimport { Gamepad, StickValues } from \"../../Gamepads/gamepad\";\r\nimport { PoseEnabledController, PoseEnabledControllerType } from \"../../Gamepads/Controllers/poseEnabledController\";\r\nimport { WebVRController } from \"../../Gamepads/Controllers/webVRController\";\r\nimport { Xbox360Pad, Xbox360Button } from \"../../Gamepads/xboxGamepad\";\r\nimport { IDisplayChangedEventArgs } from \"../../Engines/engine\";\r\nimport { AbstractMesh } from \"../../Meshes/abstractMesh\";\r\nimport { TransformNode } from \"../../Meshes/transformNode\";\r\nimport { Mesh } from \"../../Meshes/mesh\";\r\nimport { PickingInfo } from \"../../Collisions/pickingInfo\";\r\nimport { Ray } from \"../../Culling/ray\";\r\nimport { ImageProcessingConfiguration } from \"../../Materials/imageProcessingConfiguration\";\r\nimport { StandardMaterial } from \"../../Materials/standardMaterial\";\r\nimport { DynamicTexture } from \"../../Materials/Textures/dynamicTexture\";\r\nimport { ImageProcessingPostProcess } from \"../../PostProcesses/imageProcessingPostProcess\";\r\nimport { SineEase, EasingFunction, CircleEase } from \"../../Animations/easing\";\r\nimport { Animation } from \"../../Animations/animation\";\r\nimport { VRCameraMetrics } from '../../Cameras/VR/vrCameraMetrics';\r\nimport \"../../Gamepads/gamepadSceneComponent\";\r\nimport \"../../Animations/animatable\";\r\nimport { Axis } from '../../Maths/math.axis';\r\nimport { WebXRSessionManager } from '../../XR/webXRSessionManager';\r\nimport { WebXRDefaultExperience } from '../../XR/webXRDefaultExperience';\r\nimport { WebXRState } from '../../XR/webXRTypes';\r\nimport { CreateCylinder } from \"../../Meshes/Builders/cylinderBuilder\";\r\nimport { CreateTorus } from \"../../Meshes/Builders/torusBuilder\";\r\nimport { CreateGround } from \"../../Meshes/Builders/groundBuilder\";\r\n\r\n/**\r\n * Options to modify the vr teleportation behavior.\r\n */\r\nexport interface VRTeleportationOptions {\r\n /**\r\n * The name of the mesh which should be used as the teleportation floor. (default: null)\r\n */\r\n floorMeshName?: string;\r\n /**\r\n * A list of meshes to be used as the teleportation floor. (default: empty)\r\n */\r\n floorMeshes?: Mesh[];\r\n /**\r\n * The teleportation mode. (default: TELEPORTATIONMODE_CONSTANTTIME)\r\n */\r\n teleportationMode?: number;\r\n /**\r\n * The duration of the animation in ms, apply when animationMode is TELEPORTATIONMODE_CONSTANTTIME. (default 122ms)\r\n */\r\n teleportationTime?: number;\r\n /**\r\n * The speed of the animation in distance/sec, apply when animationMode is TELEPORTATIONMODE_CONSTANTSPEED. (default 20 units / sec)\r\n */\r\n teleportationSpeed?: number;\r\n /**\r\n * The easing function used in the animation or null for Linear. (default CircleEase)\r\n */\r\n easingFunction?: EasingFunction;\r\n}\r\n\r\n/**\r\n * Options to modify the vr experience helper's behavior.\r\n */\r\nexport interface VRExperienceHelperOptions extends WebVROptions {\r\n /**\r\n * Create a DeviceOrientationCamera to be used as your out of vr camera. (default: true)\r\n */\r\n createDeviceOrientationCamera?: boolean;\r\n /**\r\n * Create a VRDeviceOrientationFreeCamera to be used for VR when no external HMD is found. (default: true)\r\n */\r\n createFallbackVRDeviceOrientationFreeCamera?: boolean;\r\n /**\r\n * Uses the main button on the controller to toggle the laser casted. (default: true)\r\n */\r\n laserToggle?: boolean;\r\n /**\r\n * A list of meshes to be used as the teleportation floor. If specified, teleportation will be enabled (default: undefined)\r\n */\r\n floorMeshes?: Mesh[];\r\n /**\r\n * Distortion metrics for the fallback vrDeviceOrientationCamera (default: VRCameraMetrics.Default)\r\n */\r\n vrDeviceOrientationCameraMetrics?: VRCameraMetrics;\r\n /**\r\n * Defines if WebXR should be used instead of WebVR (if available)\r\n */\r\n useXR?: boolean;\r\n}\r\n\r\nclass VRExperienceHelperGazer implements IDisposable {\r\n /** @hidden */\r\n public _gazeTracker: Mesh;\r\n\r\n /** @hidden */\r\n public _currentMeshSelected: Nullable<AbstractMesh>;\r\n /** @hidden */\r\n public _currentHit: Nullable<PickingInfo>;\r\n\r\n public static _idCounter = 0;\r\n /** @hidden */\r\n public _id: number;\r\n\r\n /** @hidden */\r\n public _pointerDownOnMeshAsked: boolean = false;\r\n /** @hidden */\r\n public _isActionableMesh: boolean = false;\r\n\r\n /** @hidden */\r\n public _interactionsEnabled: boolean;\r\n /** @hidden */\r\n public _teleportationEnabled: boolean;\r\n /** @hidden */\r\n public _teleportationRequestInitiated = false;\r\n /** @hidden */\r\n public _teleportationBackRequestInitiated = false;\r\n /** @hidden */\r\n public _rotationRightAsked = false;\r\n /** @hidden */\r\n public _rotationLeftAsked = false;\r\n /** @hidden */\r\n public _dpadPressed = true;\r\n\r\n /** @hidden */\r\n public _activePointer = false;\r\n\r\n constructor(public scene: Scene, gazeTrackerToClone: Nullable<Mesh> = null) {\r\n this._id = VRExperienceHelperGazer._idCounter++;\r\n\r\n // Gaze tracker\r\n if (!gazeTrackerToClone) {\r\n this._gazeTracker = CreateTorus(\"gazeTracker\", {\r\n diameter: 0.0035,\r\n thickness: 0.0025,\r\n tessellation: 20,\r\n updatable: false\r\n }, scene);\r\n this._gazeTracker.bakeCurrentTransformIntoVertices();\r\n this._gazeTracker.isPickable = false;\r\n this._gazeTracker.isVisible = false;\r\n var targetMat = new StandardMaterial(\"targetMat\", scene);\r\n targetMat.specularColor = Color3.Black();\r\n targetMat.emissiveColor = new Color3(0.7, 0.7, 0.7);\r\n targetMat.backFaceCulling = false;\r\n this._gazeTracker.material = targetMat;\r\n } else {\r\n this._gazeTracker = gazeTrackerToClone.clone(\"gazeTracker\") as Mesh;\r\n }\r\n\r\n }\r\n\r\n /** @hidden */\r\n public _getForwardRay(length: number): Ray {\r\n return new Ray(Vector3.Zero(), new Vector3(0, 0, length));\r\n }\r\n\r\n /** @hidden */\r\n public _selectionPointerDown() {\r\n this._pointerDownOnMeshAsked = true;\r\n if (this._currentHit) {\r\n this.scene.simulatePointerDown(this._currentHit, { pointerId: this._id });\r\n }\r\n }\r\n\r\n /** @hidden */\r\n public _selectionPointerUp() {\r\n if (this._currentHit) {\r\n this.scene.simulatePointerUp(this._currentHit, { pointerId: this._id });\r\n }\r\n this._pointerDownOnMeshAsked = false;\r\n }\r\n\r\n /** @hidden */\r\n public _activatePointer() {\r\n this._activePointer = true;\r\n }\r\n\r\n /** @hidden */\r\n public _deactivatePointer() {\r\n this._activePointer = false;\r\n }\r\n\r\n /** @hidden */\r\n public _updatePointerDistance(distance: number = 100) {\r\n }\r\n\r\n public dispose() {\r\n this._interactionsEnabled = false;\r\n this._teleportationEnabled = false;\r\n if (this._gazeTracker) {\r\n this._gazeTracker.dispose();\r\n }\r\n }\r\n}\r\n\r\nclass VRExperienceHelperControllerGazer extends VRExperienceHelperGazer {\r\n private _laserPointer: Mesh;\r\n private _meshAttachedObserver: Nullable<Observer<AbstractMesh>>;\r\n constructor(public webVRController: WebVRController, scene: Scene, gazeTrackerToClone: Mesh) {\r\n super(scene, gazeTrackerToClone);\r\n // Laser pointer\r\n this._laserPointer = CreateCylinder(\"laserPointer\", {\r\n updatable: false,\r\n height: 1,\r\n diameterTop: 0.004,\r\n diameterBottom: 0.0002,\r\n tessellation: 20,\r\n subdivisions: 1,\r\n }, scene);\r\n var laserPointerMaterial = new StandardMaterial(\"laserPointerMat\", scene);\r\n laserPointerMaterial.emissiveColor = new Color3(0.7, 0.7, 0.7);\r\n laserPointerMaterial.alpha = 0.6;\r\n this._laserPointer.material = laserPointerMaterial;\r\n this._laserPointer.rotation.x = Math.PI / 2;\r\n this._laserPointer.position.z = -0.5;\r\n this._laserPointer.isVisible = false;\r\n this._laserPointer.isPickable = false;\r\n\r\n if (!webVRController.mesh) {\r\n // Create an empty mesh that is used prior to loading the high quality model\r\n var preloadMesh = new Mesh(\"preloadControllerMesh\", scene);\r\n var preloadPointerPose = new Mesh(PoseEnabledController.POINTING_POSE, scene);\r\n preloadPointerPose.rotation.x = -0.7;\r\n preloadMesh.addChild(preloadPointerPose);\r\n webVRController.attachToMesh(preloadMesh);\r\n }\r\n\r\n this._setLaserPointerParent(webVRController.mesh!);\r\n\r\n this._meshAttachedObserver = webVRController._meshAttachedObservable.add((mesh) => {\r\n this._setLaserPointerParent(mesh);\r\n });\r\n }\r\n\r\n _getForwardRay(length: number): Ray {\r\n return this.webVRController.getForwardRay(length);\r\n }\r\n\r\n /** @hidden */\r\n public _activatePointer() {\r\n super._activatePointer();\r\n this._laserPointer.isVisible = true;\r\n }\r\n\r\n /** @hidden */\r\n public _deactivatePointer() {\r\n super._deactivatePointer();\r\n this._laserPointer.isVisible = false;\r\n }\r\n\r\n /** @hidden */\r\n public _setLaserPointerColor(color: Color3) {\r\n (<StandardMaterial>this._laserPointer.material).emissiveColor = color;\r\n }\r\n\r\n /** @hidden */\r\n public _setLaserPointerLightingDisabled(disabled: boolean) {\r\n (<StandardMaterial>this._laserPointer.material).disableLighting = disabled;\r\n }\r\n\r\n /** @hidden */\r\n public _setLaserPointerParent(mesh: AbstractMesh) {\r\n var makeNotPick = (root: AbstractMesh) => {\r\n root.isPickable = false;\r\n root.getChildMeshes().forEach((c) => {\r\n makeNotPick(c);\r\n });\r\n };\r\n makeNotPick(mesh);\r\n var meshChildren = mesh.getChildren(undefined, false);\r\n\r\n let laserParent: TransformNode = mesh;\r\n this.webVRController._pointingPoseNode = null;\r\n for (var i = 0; i < meshChildren.length; i++) {\r\n if (meshChildren[i].name && meshChildren[i].name.indexOf(PoseEnabledController.POINTING_POSE) >= 0) {\r\n laserParent = <TransformNode>meshChildren[i];\r\n this.webVRController._pointingPoseNode = laserParent;\r\n break;\r\n }\r\n }\r\n this._laserPointer.parent = laserParent;\r\n }\r\n\r\n public _updatePointerDistance(distance: number = 100) {\r\n this._laserPointer.scaling.y = distance;\r\n this._laserPointer.position.z = -distance / 2;\r\n }\r\n\r\n dispose() {\r\n super.dispose();\r\n this._laserPointer.dispose();\r\n if (this._meshAttachedObserver) {\r\n this.webVRController._meshAttachedObservable.remove(this._meshAttachedObserver);\r\n }\r\n }\r\n}\r\n\r\nclass VRExperienceHelperCameraGazer extends VRExperienceHelperGazer {\r\n constructor(private getCamera: () => Nullable<Camera>, scene: Scene) {\r\n super(scene);\r\n }\r\n\r\n _getForwardRay(length: number): Ray {\r\n var camera = this.getCamera();\r\n if (camera) {\r\n return camera.getForwardRay(length);\r\n } else {\r\n return new Ray(Vector3.Zero(), Vector3.Forward());\r\n }\r\n }\r\n}\r\n\r\n/**\r\n * Event containing information after VR has been entered\r\n */\r\nexport class OnAfterEnteringVRObservableEvent {\r\n /**\r\n * If entering vr was successful\r\n */\r\n public success: boolean;\r\n}\r\n\r\n/**\r\n * Helps to quickly add VR support to an existing scene.\r\n * See https://doc.babylonjs.com/how_to/webvr_helper\r\n */\r\nexport class VRExperienceHelper {\r\n private _scene: Scene;\r\n private _position: Vector3;\r\n private _btnVR: Nullable<HTMLButtonElement>;\r\n private _btnVRDisplayed: boolean;\r\n\r\n // Can the system support WebVR, even if a headset isn't plugged in?\r\n private _webVRsupported = false;\r\n // If WebVR is supported, is a headset plugged in and are we ready to present?\r\n private _webVRready = false;\r\n // Are we waiting for the requestPresent callback to complete?\r\n private _webVRrequesting = false;\r\n // Are we presenting to the headset right now? (this is the vrDevice state)\r\n private _webVRpresenting = false;\r\n // Have we entered VR? (this is the VRExperienceHelper state)\r\n private _hasEnteredVR: boolean;\r\n\r\n // Are we presenting in the fullscreen fallback?\r\n private _fullscreenVRpresenting = false;\r\n\r\n private _inputElement: Nullable<HTMLElement>;\r\n private _webVRCamera: WebVRFreeCamera;\r\n private _vrDeviceOrientationCamera: Nullable<VRDeviceOrientationFreeCamera>;\r\n private _deviceOrientationCamera: Nullable<DeviceOrientationCamera>;\r\n private _existingCamera: Camera;\r\n\r\n private _onKeyDown: (event: KeyboardEvent) => void;\r\n private _onVrDisplayPresentChange: any;\r\n private _onVRDisplayChanged: (eventArgs: IDisplayChangedEventArgs) => void;\r\n private _onVRRequestPresentStart: () => void;\r\n private _onVRRequestPresentComplete: (success: boolean) => void;\r\n\r\n /**\r\n * Gets or sets a boolean indicating that gaze can be enabled even if pointer lock is not engage (useful on iOS where fullscreen mode and pointer lock are not supported)\r\n */\r\n public enableGazeEvenWhenNoPointerLock = false;\r\n\r\n /**\r\n * Gets or sets a boolean indicating that the VREXperienceHelper will exit VR if double tap is detected\r\n */\r\n public exitVROnDoubleTap = true;\r\n\r\n /**\r\n * Observable raised right before entering VR.\r\n */\r\n public onEnteringVRObservable = new Observable<VRExperienceHelper>();\r\n\r\n /**\r\n * Observable raised when entering VR has completed.\r\n */\r\n public onAfterEnteringVRObservable = new Observable<OnAfterEnteringVRObservableEvent>();\r\n\r\n /**\r\n * Observable raised when exiting VR.\r\n */\r\n public onExitingVRObservable = new Observable<VRExperienceHelper>();\r\n\r\n /**\r\n * Observable raised when controller mesh is loaded.\r\n */\r\n public onControllerMeshLoadedObservable = new Observable<WebVRController>();\r\n\r\n /** Return this.onEnteringVRObservable\r\n * Note: This one is for backward compatibility. Please use onEnteringVRObservable directly\r\n */\r\n public get onEnteringVR(): Observable<VRExperienceHelper> {\r\n return this.onEnteringVRObservable;\r\n }\r\n\r\n /** Return this.onExitingVRObservable\r\n * Note: This one is for backward compatibility. Please use onExitingVRObservable directly\r\n */\r\n public get onExitingVR(): Observable<VRExperienceHelper> {\r\n return this.onExitingVRObservable;\r\n }\r\n\r\n /** Return this.onControllerMeshLoadedObservable\r\n * Note: This one is for backward compatibility. Please use onControllerMeshLoadedObservable directly\r\n */\r\n public get onControllerMeshLoaded(): Observable<WebVRController> {\r\n return this.onControllerMeshLoadedObservable;\r\n }\r\n\r\n private _rayLength: number;\r\n private _useCustomVRButton: boolean = false;\r\n private _teleportationRequested: boolean = false;\r\n private _teleportActive = false;\r\n private _floorMeshName: string;\r\n private _floorMeshesCollection: Mesh[] = [];\r\n private _teleportationMode: number = VRExperienceHelper.TELEPORTATIONMODE_CONSTANTTIME;\r\n private _teleportationTime: number = 122;\r\n private _teleportationSpeed: number = 20;\r\n private _teleportationEasing: EasingFunction;\r\n private _rotationAllowed: boolean = true;\r\n private _teleportBackwardsVector = new Vector3(0, -1, -1);\r\n private _teleportationTarget: Mesh;\r\n private _isDefaultTeleportationTarget = true;\r\n private _postProcessMove: ImageProcessingPostProcess;\r\n private _teleportationFillColor: string = \"#444444\";\r\n private _teleportationBorderColor: string = \"#FFFFFF\";\r\n private _rotationAngle: number = 0;\r\n private _haloCenter = new Vector3(0, 0, 0);\r\n private _cameraGazer: VRExperienceHelperCameraGazer;\r\n private _padSensibilityUp = 0.65;\r\n private _padSensibilityDown = 0.35;\r\n\r\n private _leftController: Nullable<VRExperienceHelperControllerGazer> = null;\r\n private _rightController: Nullable<VRExperienceHelperControllerGazer> = null;\r\n\r\n private _gazeColor: Color3 = new Color3(0.7, 0.7, 0.7);\r\n private _laserColor: Color3 = new Color3(0.7, 0.7, 0.7);\r\n private _pickedLaserColor: Color3 = new Color3(0.2, 0.2, 1);\r\n private _pickedGazeColor: Color3 = new Color3(0, 0, 1);\r\n\r\n /**\r\n * Observable raised when a new mesh is selected based on meshSelectionPredicate\r\n */\r\n public onNewMeshSelected = new Observable<AbstractMesh>();\r\n\r\n /**\r\n * Observable raised when a new mesh is selected based on meshSelectionPredicate.\r\n * This observable will provide the mesh and the controller used to select the mesh\r\n */\r\n public onMeshSelectedWithController = new Observable<{ mesh: AbstractMesh, controller: WebVRController }>();\r\n\r\n /**\r\n * Observable raised when a new mesh is picked based on meshSelectionPredicate\r\n */\r\n public onNewMeshPicked = new Observable<PickingInfo>();\r\n\r\n private _circleEase: CircleEase;\r\n\r\n /**\r\n * Observable raised before camera teleportation\r\n */\r\n public onBeforeCameraTeleport = new Observable<Vector3>();\r\n\r\n /**\r\n * Observable raised after camera teleportation\r\n */\r\n public onAfterCameraTeleport = new Observable<Vector3>();\r\n\r\n /**\r\n * Observable raised when current selected mesh gets unselected\r\n */\r\n public onSelectedMeshUnselected = new Observable<AbstractMesh>();\r\n\r\n private _raySelectionPredicate: (mesh: AbstractMesh) => boolean;\r\n\r\n /**\r\n * To be optionally changed by user to define custom ray selection\r\n */\r\n public raySelectionPredicate: (mesh: AbstractMesh) => boolean;\r\n\r\n /**\r\n * To be optionally changed by user to define custom selection logic (after ray selection)\r\n */\r\n public meshSelectionPredicate: (mesh: AbstractMesh) => boolean;\r\n\r\n /**\r\n * Set teleportation enabled. If set to false camera teleportation will be disabled but camera rotation will be kept.\r\n */\r\n public teleportationEnabled: boolean = true;\r\n\r\n private _defaultHeight: number;\r\n private _teleportationInitialized = false;\r\n private _interactionsEnabled = false;\r\n private _interactionsRequested = false;\r\n private _displayGaze = true;\r\n private _displayLaserPointer = true;\r\n\r\n /**\r\n * The mesh used to display where the user is going to teleport.\r\n */\r\n public get teleportationTarget(): Mesh {\r\n return this._teleportationTarget;\r\n }\r\n\r\n /**\r\n * Sets the mesh to be used to display where the user is going to teleport.\r\n */\r\n public set teleportationTarget(value: Mesh) {\r\n if (value) {\r\n value.name = \"teleportationTarget\";\r\n this._isDefaultTeleportationTarget = false;\r\n this._teleportationTarget = value;\r\n }\r\n }\r\n\r\n /**\r\n * The mesh used to display where the user is selecting, this mesh will be cloned and set as the gazeTracker for the left and right controller\r\n * when set bakeCurrentTransformIntoVertices will be called on the mesh.\r\n * See https://doc.babylonjs.com/resources/baking_transformations\r\n */\r\n public get gazeTrackerMesh(): Mesh {\r\n return this._cameraGazer._gazeTracker;\r\n }\r\n\r\n public set gazeTrackerMesh(value: Mesh) {\r\n if (value) {\r\n // Dispose of existing meshes\r\n if (this._cameraGazer._gazeTracker) {\r\n this._cameraGazer._gazeTracker.dispose();\r\n }\r\n if (this._leftController && this._leftController._gazeTracker) {\r\n this._leftController._gazeTracker.dispose();\r\n }\r\n if (this._rightController && this._rightController._gazeTracker) {\r\n this._rightController._gazeTracker.dispose();\r\n }\r\n\r\n // Set and create gaze trackers on head and controllers\r\n this._cameraGazer._gazeTracker = value;\r\n this._cameraGazer._gazeTracker.bakeCurrentTransformIntoVertices();\r\n this._cameraGazer._gazeTracker.isPickable = false;\r\n this._cameraGazer._gazeTracker.isVisible = false;\r\n this._cameraGazer._gazeTracker.name = \"gazeTracker\";\r\n if (this._leftController) {\r\n this._leftController._gazeTracker = this._cameraGazer._gazeTracker.clone(\"gazeTracker\") as Mesh;\r\n }\r\n\r\n if (this._rightController) {\r\n this._rightController._gazeTracker = this._cameraGazer._gazeTracker.clone(\"gazeTracker\") as Mesh;\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * If the gaze trackers scale should be updated to be constant size when pointing at near/far meshes\r\n */\r\n public updateGazeTrackerScale = true;\r\n /**\r\n * If the gaze trackers color should be updated when selecting meshes\r\n */\r\n public updateGazeTrackerColor = true;\r\n /**\r\n * If the controller laser color should be updated when selecting meshes\r\n */\r\n public updateControllerLaserColor = true;\r\n\r\n /**\r\n * The gaze tracking mesh corresponding to the left controller\r\n */\r\n public get leftControllerGazeTrackerMesh(): Nullable<Mesh> {\r\n if (this._leftController) {\r\n return this._leftController._gazeTracker;\r\n }\r\n return null;\r\n }\r\n\r\n /**\r\n * The gaze tracking mesh corresponding to the right controller\r\n */\r\n public get rightControllerGazeTrackerMesh(): Nullable<Mesh> {\r\n if (this._rightController) {\r\n return this._rightController._gazeTracker;\r\n }\r\n return null;\r\n }\r\n\r\n /**\r\n * If the ray of the gaze should be displayed.\r\n */\r\n public get displayGaze(): boolean {\r\n return this._displayGaze;\r\n }\r\n\r\n /**\r\n * Sets if the ray of the gaze should be displayed.\r\n */\r\n public set displayGaze(value: boolean) {\r\n this._displayGaze = value;\r\n if (!value) {\r\n this._cameraGazer._gazeTracker.isVisible = false;\r\n\r\n if (this._leftController) {\r\n this._leftController._gazeTracker.isVisible = false;\r\n }\r\n\r\n if (this._rightController) {\r\n this._rightController._gazeTracker.isVisible = false;\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * If the ray of the LaserPointer should be displayed.\r\n */\r\n public get displayLaserPointer(): boolean {\r\n return this._displayLaserPointer;\r\n }\r\n\r\n /**\r\n * Sets if the ray of the LaserPointer should be displayed.\r\n */\r\n public set displayLaserPointer(value: boolean) {\r\n this._displayLaserPointer = value;\r\n if (!value) {\r\n if (this._rightController) {\r\n this._rightController._deactivatePointer();\r\n this._rightController._gazeTracker.isVisible = false;\r\n }\r\n if (this._leftController) {\r\n this._leftController._deactivatePointer();\r\n this._leftController._gazeTracker.isVisible = false;\r\n }\r\n }\r\n else {\r\n if (this._rightController) {\r\n this._rightController._activatePointer();\r\n }\r\n if (this._leftController) {\r\n this._leftController._activatePointer();\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * The deviceOrientationCamera used as the camera when not in VR.\r\n */\r\n public get deviceOrientationCamera(): Nullable<DeviceOrientationCamera> {\r\n return this._deviceOrientationCamera;\r\n }\r\n\r\n /**\r\n * Based on the current WebVR support, returns the current VR camera used.\r\n */\r\n public get currentVRCamera(): Nullable<Camera> {\r\n if (this._webVRready) {\r\n return this._webVRCamera;\r\n }\r\n else {\r\n return this._scene.activeCamera;\r\n }\r\n }\r\n\r\n /**\r\n * The webVRCamera which is used when in VR.\r\n */\r\n public get webVRCamera(): WebVRFreeCamera {\r\n return this._webVRCamera;\r\n }\r\n\r\n /**\r\n * The deviceOrientationCamera that is used as a fallback when vr device is not connected.\r\n */\r\n public get vrDeviceOrientationCamera(): Nullable<VRDeviceOrientationFreeCamera> {\r\n return this._vrDeviceOrientationCamera;\r\n }\r\n\r\n /**\r\n * The html button that is used to trigger entering into VR.\r\n */\r\n public get vrButton(): Nullable<HTMLButtonElement> {\r\n return this._btnVR;\r\n }\r\n\r\n private get _teleportationRequestInitiated(): boolean {\r\n var result = this._cameraGazer._teleportationRequestInitiated\r\n || (this._leftController !== null && this._leftController._teleportationRequestInitiated)\r\n || (this._rightController !== null && this._rightController._teleportationRequestInitiated);\r\n return result;\r\n }\r\n\r\n /**\r\n * Defines whether or not Pointer lock should be requested when switching to\r\n * full screen.\r\n */\r\n public requestPointerLockOnFullScreen = true;\r\n\r\n // XR\r\n\r\n /**\r\n * If asking to force XR, this will be populated with the default xr experience\r\n */\r\n public xr: WebXRDefaultExperience;\r\n\r\n /**\r\n * Was the XR test done already. If this is true AND this.xr exists, xr is initialized.\r\n * If this is true and no this.xr, xr exists but is not supported, using WebVR.\r\n */\r\n public xrTestDone: boolean = false;\r\n\r\n /**\r\n * Instantiates a VRExperienceHelper.\r\n * Helps to quickly add VR support to an existing scene.\r\n * @param scene The scene the VRExperienceHelper belongs to.\r\n * @param webVROptions Options to modify the vr experience helper's behavior.\r\n */\r\n constructor(scene: Scene,\r\n /** Options to modify the vr experience helper's behavior. */\r\n public webVROptions: VRExperienceHelperOptions = {}) {\r\n Logger.Warn('WebVR is deprecated. Please avoid using this experience helper and use the WebXR experience helper instead');\r\n this._scene = scene;\r\n this._inputElement = scene.getEngine().getInputElement();\r\n\r\n // check for VR support:\r\n\r\n const vrSupported = 'getVRDisplays' in navigator;\r\n // no VR support? force XR but only when it is not set because web vr can work without the getVRDisplays\r\n if (!vrSupported && webVROptions.useXR === undefined) {\r\n webVROptions.useXR = true;\r\n }\r\n\r\n // Parse options\r\n if (webVROptions.createFallbackVRDeviceOrientationFreeCamera === undefined) {\r\n webVROptions.createFallbackVRDeviceOrientationFreeCamera = true;\r\n }\r\n if (webVROptions.createDeviceOrientationCamera === undefined) {\r\n webVROptions.createDeviceOrientationCamera = true;\r\n }\r\n if (webVROptions.laserToggle === undefined) {\r\n webVROptions.laserToggle = true;\r\n }\r\n if (webVROptions.defaultHeight === undefined) {\r\n webVROptions.defaultHeight = 1.7;\r\n }\r\n if (webVROptions.useCustomVRButton) {\r\n this._useCustomVRButton = true;\r\n if (webVROptions.customVRButton) {\r\n this._btnVR = webVROptions.customVRButton;\r\n }\r\n }\r\n if (webVROptions.rayLength) {\r\n this._rayLength = webVROptions.rayLength;\r\n }\r\n this._defaultHeight = webVROptions.defaultHeight;\r\n\r\n if (webVROptions.positionScale) {\r\n this._rayLength *= webVROptions.positionScale;\r\n this._defaultHeight *= webVROptions.positionScale;\r\n }\r\n\r\n this._hasEnteredVR = false;\r\n\r\n // Set position\r\n if (this._scene.activeCamera) {\r\n this._position = this._scene.activeCamera.position.clone();\r\n } else {\r\n this._position = new Vector3(0, this._defaultHeight, 0);\r\n }\r\n\r\n // Set non-vr camera\r\n if (webVROptions.createDeviceOrientationCamera || !this._scene.activeCamera) {\r\n this._deviceOrientationCamera = new DeviceOrientationCamera(\"deviceOrientationVRHelper\", this._position.clone(), scene);\r\n\r\n // Copy data from existing camera\r\n if (this._scene.activeCamera) {\r\n this._deviceOrientationCamera.minZ = this._scene.activeCamera.minZ;\r\n this._deviceOrientationCamera.maxZ = this._scene.activeCamera.maxZ;\r\n // Set rotation from previous camera\r\n if (this._scene.activeCamera instanceof TargetCamera && this._scene.activeCamera.rotation) {\r\n var targetCamera = this._scene.activeCamera;\r\n if (targetCamera.rotationQuaternion) {\r\n this._deviceOrientationCamera.rotationQuaternion.copyFrom(targetCamera.rotationQuaternion);\r\n } else {\r\n this._deviceOrientationCamera.rotationQuaternion.copyFrom(Quaternion.RotationYawPitchRoll(targetCamera.rotation.y, targetCamera.rotation.x, targetCamera.rotation.z));\r\n }\r\n this._deviceOrientationCamera.rotation = targetCamera.rotation.clone();\r\n }\r\n }\r\n\r\n this._scene.activeCamera = this._deviceOrientationCamera;\r\n if (this._inputElement) {\r\n this._scene.activeCamera.attachControl();\r\n }\r\n } else {\r\n this._existingCamera = this._scene.activeCamera;\r\n }\r\n\r\n if (this.webVROptions.useXR && (navigator as any).xr) {\r\n // force-check XR session support\r\n WebXRSessionManager.IsSessionSupportedAsync(\"immersive-vr\").then((supported) => {\r\n if (supported) {\r\n Logger.Log(\"Using WebXR. It is recommended to use the WebXRDefaultExperience directly\");\r\n // it is possible to use XR, let's do it!\r\n scene.createDefaultXRExperienceAsync({\r\n floorMeshes: webVROptions.floorMeshes || []\r\n }).then((xr) => {\r\n this.xr = xr;\r\n // connect observables\r\n this.xrTestDone = true;\r\n\r\n this._cameraGazer = new VRExperienceHelperCameraGazer(() => { return this.xr.baseExperience.camera; }, scene);\r\n\r\n this.xr.baseExperience.onStateChangedObservable.add((state) => {\r\n // support for entering / exiting\r\n switch (state) {\r\n case WebXRState.ENTERING_XR:\r\n this.onEnteringVRObservable.notifyObservers(this);\r\n if (!this._interactionsEnabled) {\r\n this.xr.pointerSelection.detach();\r\n }\r\n this.xr.pointerSelection.displayLaserPointer = this._displayLaserPointer;\r\n break;\r\n case WebXRState.EXITING_XR:\r\n this.onExitingVRObservable.notifyObservers(this);\r\n\r\n // resize to update width and height when exiting vr exits fullscreen\r\n this._scene.getEngine().resize();\r\n break;\r\n case WebXRState.IN_XR:\r\n this._hasEnteredVR = true;\r\n break;\r\n case WebXRState.NOT_IN_XR:\r\n this._hasEnteredVR = false;\r\n break;\r\n }\r\n });\r\n });\r\n } else {\r\n // XR not supported (thou exists), continue WebVR init\r\n this.completeVRInit(scene, webVROptions);\r\n }\r\n });\r\n } else {\r\n // no XR, continue init synchronous\r\n this.completeVRInit(scene, webVROptions);\r\n }\r\n\r\n }\r\n\r\n private completeVRInit(scene: Scene,\r\n webVROptions: VRExperienceHelperOptions): void {\r\n this.xrTestDone = true;\r\n // Create VR cameras\r\n if (webVROptions.createFallbackVRDeviceOrientationFreeCamera) {\r\n if (webVROptions.useMultiview) {\r\n if (!webVROptions.vrDeviceOrientationCameraMetrics) {\r\n webVROptions.vrDeviceOrientationCameraMetrics = VRCameraMetrics.GetDefault();\r\n }\r\n webVROptions.vrDeviceOrientationCameraMetrics.multiviewEnabled = true;\r\n }\r\n this._vrDeviceOrientationCamera = new VRDeviceOrientationFreeCamera(\"VRDeviceOrientationVRHelper\", this._position, this._scene, true, webVROptions.vrDeviceOrientationCameraMetrics);\r\n this._vrDeviceOrientationCamera.angularSensibility = Number.MAX_VALUE;\r\n }\r\n this._webVRCamera = new WebVRFreeCamera(\"WebVRHelper\", this._position, this._scene, webVROptions);\r\n this._webVRCamera.useStandingMatrix();\r\n\r\n this._cameraGazer = new VRExperienceHelperCameraGazer(() => { return this.currentVRCamera; }, scene);\r\n // Create default button\r\n if (!this._useCustomVRButton) {\r\n this._btnVR = <HTMLButtonElement>document.createElement(\"BUTTON\");\r\n this._btnVR.className = \"babylonVRicon\";\r\n this._btnVR.id = \"babylonVRiconbtn\";\r\n this._btnVR.title = \"Click to switch to VR\";\r\n const url = !window.SVGSVGElement ? \"https://cdn.babylonjs.com/Assets/vrButton.png\" : \"data:image/svg+xml;charset=UTF-8,%3Csvg%20xmlns%3D%22http%3A//www.w3.org/2000/svg%22%20width%3D%222048%22%20height%3D%221152%22%20viewBox%3D%220%200%202048%201152%22%20version%3D%221.1%22%3E%3Cpath%20transform%3D%22rotate%28180%201024%2C576.0000000000001%29%22%20d%3D%22m1109%2C896q17%2C0%2030%2C-12t13%2C-30t-12.5%2C-30.5t-30.5%2C-12.5l-170%2C0q-18%2C0%20-30.5%2C12.5t-12.5%2C30.5t13%2C30t30%2C12l170%2C0zm-85%2C256q59%2C0%20132.5%2C-1.5t154.5%2C-5.5t164.5%2C-11.5t163%2C-20t150%2C-30t124.5%2C-41.5q23%2C-11%2042%2C-24t38%2C-30q27%2C-25%2041%2C-61.5t14%2C-72.5l0%2C-257q0%2C-123%20-47%2C-232t-128%2C-190t-190%2C-128t-232%2C-47l-81%2C0q-37%2C0%20-68.5%2C14t-60.5%2C34.5t-55.5%2C45t-53%2C45t-53%2C34.5t-55.5%2C14t-55.5%2C-14t-53%2C-34.5t-53%2C-45t-55.5%2C-45t-60.5%2C-34.5t-68.5%2C-14l-81%2C0q-123%2C0%20-232%2C47t-190%2C128t-128%2C190t-47%2C232l0%2C257q0%2C68%2038%2C115t97%2C73q54%2C24%20124.5%2C41.5t150%2C30t163%2C20t164.5%2C11.5t154.5%2C5.5t132.5%2C1.5zm939%2C-298q0%2C39%20-24.5%2C67t-58.5%2C42q-54%2C23%20-122%2C39.5t-143.5%2C28t-155.5%2C19t-157%2C11t-148.5%2C5t-129.5%2C1.5q-59%2C0%20-130%2C-1.5t-148%2C-5t-157%2C-11t-155.5%2C-19t-143.5%2C-28t-122%2C-39.5q-34%2C-14%20-58.5%2C-42t-24.5%2C-67l0%2C-257q0%2C-106%2040.5%2C-199t110%2C-162.5t162.5%2C-109.5t199%2C-40l81%2C0q27%2C0%2052%2C14t50%2C34.5t51%2C44.5t55.5%2C44.5t63.5%2C34.5t74%2C14t74%2C-14t63.5%2C-34.5t55.5%2C-44.5t51%2C-44.5t50%2C-34.5t52%2C-14l14%2C0q37%2C0%2070%2C0.5t64.5%2C4.5t63.5%2C12t68%2C23q71%2C30%20128.5%2C78.5t98.5%2C110t63.5%2C133.5t22.5%2C149l0%2C257z%22%20fill%3D%22white%22%20/%3E%3C/svg%3E%0A\";\r\n var css = \".babylonVRicon { position: absolute; right: 20px; height: 50px; width: 80px; background-color: rgba(51,51,51,0.7); background-image: url(\" + url + \"); background-size: 80%; background-repeat:no-repeat; background-position: center; border: none; outline: none; transition: transform 0.125s ease-out } .babylonVRicon:hover { transform: scale(1.05) } .babylonVRicon:active {background-color: rgba(51,51,51,1) } .babylonVRicon:focus {background-color: rgba(51,51,51,1) }\";\r\n css += \".babylonVRicon.vrdisplaypresenting { display: none; }\";\r\n // TODO: Add user feedback so that they know what state the VRDisplay is in (disconnected, connected, entering-VR)\r\n // css += \".babylonVRicon.vrdisplaysupported { }\";\r\n // css += \".babylonVRicon.vrdisplayready { }\";\r\n // css += \".babylonVRicon.vrdisplayrequesting { }\";\r\n\r\n var style = document.createElement('style');\r\n style.appendChild(document.createTextNode(css));\r\n document.getElementsByTagName('head')[0].appendChild(style);\r\n\r\n this.moveButtonToBottomRight();\r\n }\r\n\r\n // VR button click event\r\n if (this._btnVR) {\r\n this._btnVR.addEventListener(\"click\", () => {\r\n if (!this.isInVRMode) {\r\n this.enterVR();\r\n } else {\r\n this._scene.getEngine().disableVR();\r\n }\r\n });\r\n }\r\n\r\n // Window events\r\n\r\n let hostWindow = this._scene.getEngine().getHostWindow();\r\n if (!hostWindow) {\r\n return;\r\n }\r\n\r\n hostWindow.addEventListener(\"resize\", this._onResize);\r\n document.addEventListener(\"fullscreenchange\", this._onFullscreenChange, false);\r\n document.addEventListener(\"mozfullscreenchange\", this._onFullscreenChange, false);\r\n document.addEventListener(\"webkitfullscreenchange\", this._onFullscreenChange, false);\r\n document.addEventListener(\"msfullscreenchange\", this._onFullscreenChange, false);\r\n (<any>document).onmsfullscreenchange = this._onFullscreenChange;\r\n\r\n // Display vr button when headset is connected\r\n if (webVROptions.createFallbackVRDeviceOrientationFreeCamera) {\r\n this.displayVRButton();\r\n } else {\r\n this._scene.getEngine().onVRDisplayChangedObservable.add((e) => {\r\n if (e.vrDisplay) {\r\n this.displayVRButton();\r\n }\r\n });\r\n }\r\n\r\n // Exiting VR mode using 'ESC' key on desktop\r\n this._onKeyDown = (event: KeyboardEvent) => {\r\n if (event.keyCode === 27 && this.isInVRMode) {\r\n this.exitVR();\r\n }\r\n };\r\n document.addEventListener(\"keydown\", this._onKeyDown);\r\n\r\n // Exiting VR mode double tapping the touch screen\r\n this._scene.onPrePointerObservable.add(() => {\r\n if (this._hasEnteredVR && this.exitVROnDoubleTap) {\r\n this.exitVR();\r\n if (this._fullscreenVRpresenting) {\r\n this._scene.getEngine().exitFullscreen();\r\n }\r\n }\r\n }, PointerEventTypes.POINTERDOUBLETAP, false);\r\n\r\n // Listen for WebVR display changes\r\n this._onVRDisplayChanged = (eventArgs: IDisplayChangedEventArgs) => this.onVRDisplayChanged(eventArgs);\r\n this._onVrDisplayPresentChange = () => this.onVrDisplayPresentChange();\r\n this._onVRRequestPresentStart = () => {\r\n this._webVRrequesting = true;\r\n this.updateButtonVisibility();\r\n };\r\n this._onVRRequestPresentComplete = () => {\r\n this._webVRrequesting = false;\r\n this.updateButtonVisibility();\r\n };\r\n scene.getEngine().onVRDisplayChangedObservable.add(this._onVRDisplayChanged);\r\n scene.getEngine().onVRRequestPresentStart.add(this._onVRRequestPresentStart);\r\n scene.getEngine().onVRRequestPresentComplete.add(this._onVRRequestPresentComplete);\r\n hostWindow.addEventListener('vrdisplaypresentchange', this._onVrDisplayPresentChange);\r\n\r\n scene.onDisposeObservable.add(() => {\r\n this.dispose();\r\n });\r\n\r\n // Gamepad connection events\r\n this._webVRCamera.onControllerMeshLoadedObservable.add((webVRController) => this._onDefaultMeshLoaded(webVRController));\r\n this._scene.gamepadManager.onGamepadConnectedObservable.add(this._onNewGamepadConnected);\r\n this._scene.gamepadManager.onGamepadDisconnectedObservable.add(this._onNewGamepadDisconnected);\r\n\r\n this.updateButtonVisibility();\r\n\r\n //create easing functions\r\n this._circleEase = new CircleEase();\r\n this._circleEase.setEasingMode(EasingFunction.EASINGMODE_EASEINOUT);\r\n this._teleportationEasing = this._circleEase;\r\n\r\n // Allow clicking in the vrDeviceOrientationCamera\r\n scene.onPointerObservable.add((e) => {\r\n if (this._interactionsEnabled) {\r\n if (scene.activeCamera === this.vrDeviceOrientationCamera && (e.event as PointerEvent).pointerType === \"mouse\") {\r\n if (e.type === PointerEventTypes.POINTERDOWN) {\r\n this._cameraGazer._selectionPointerDown();\r\n } else if (e.type === PointerEventTypes.POINTERUP) {\r\n this._cameraGazer._selectionPointerUp();\r\n }\r\n }\r\n }\r\n });\r\n\r\n if (this.webVROptions.floorMeshes) {\r\n this.enableTeleportation({ floorMeshes: this.webVROptions.floorMeshes });\r\n }\r\n }\r\n\r\n // Raised when one of the controller has loaded successfully its associated default mesh\r\n private _onDefaultMeshLoaded(webVRController: WebVRController) {\r\n if (this._leftController && this._leftController.webVRController == webVRController) {\r\n if (webVRController.mesh) {\r\n this._leftController._setLaserPointerParent(webVRController.mesh);\r\n }\r\n }\r\n if (this._rightController && this._rightController.webVRController == webVRController) {\r\n if (webVRController.mesh) {\r\n this._rightController._setLaserPointerParent(webVRController.mesh);\r\n }\r\n }\r\n\r\n try {\r\n this.onControllerMeshLoadedObservable.notifyObservers(webVRController);\r\n }\r\n catch (err) {\r\n Logger.Warn(\"Error in your custom logic onControllerMeshLoaded: \" + err);\r\n }\r\n }\r\n\r\n private _onResize = () => {\r\n this.moveButtonToBottomRight();\r\n if (this._fullscreenVRpresenting && this._webVRready) {\r\n this.exitVR();\r\n }\r\n }\r\n\r\n private _onFullscreenChange = () => {\r\n let anyDoc = document as any;\r\n if (anyDoc.fullscreen !== undefined) {\r\n this._fullscreenVRpresenting = (<any>document).fullscreen;\r\n } else if (anyDoc.mozFullScreen !== undefined) {\r\n this._fullscreenVRpresenting = anyDoc.mozFullScreen;\r\n } else if (anyDoc.webkitIsFullScreen !== undefined) {\r\n this._fullscreenVRpresenting = anyDoc.webkitIsFullScreen;\r\n } else if (anyDoc.msIsFullScreen !== undefined) {\r\n this._fullscreenVRpresenting = anyDoc.msIsFullScreen;\r\n } else if ((<any>document).msFullscreenElement !== undefined) {\r\n this._fullscreenVRpresenting = (<any>document).msFullscreenElement;\r\n }\r\n if (!this._fullscreenVRpresenting && this._inputElement) {\r\n this.exitVR();\r\n if (!this._useCustomVRButton && this._btnVR) {\r\n this._btnVR.style.top = this._inputElement.offsetTop + this._inputElement.offsetHeight - 70 + \"px\";\r\n this._btnVR.style.left = this._inputElement.offsetLeft + this._inputElement.offsetWidth - 100 + \"px\";\r\n // make sure the button is visible after setting its position\r\n this.updateButtonVisibility();\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * Gets a value indicating if we are currently in VR mode.\r\n */\r\n public get isInVRMode(): boolean {\r\n return (this.xr && this.webVROptions.useXR && this.xr.baseExperience.state === WebXRState.IN_XR) || (this._webVRpresenting || this._fullscreenVRpresenting);\r\n }\r\n\r\n private onVrDisplayPresentChange() {\r\n var vrDisplay = this._scene.getEngine().getVRDevice();\r\n if (vrDisplay) {\r\n var wasPresenting = this._webVRpresenting;\r\n this._webVRpresenting = vrDisplay.isPresenting;\r\n\r\n if (wasPresenting && !this._webVRpresenting) {\r\n this.exitVR();\r\n }\r\n } else {\r\n Logger.Warn('Detected VRDisplayPresentChange on an unknown VRDisplay. Did you can enterVR on the vrExperienceHelper?');\r\n }\r\n\r\n this.updateButtonVisibility();\r\n }\r\n\r\n private onVRDisplayChanged(eventArgs: IDisplayChangedEventArgs) {\r\n this._webVRsupported = eventArgs.vrSupported;\r\n this._webVRready = !!eventArgs.vrDisplay;\r\n this._webVRpresenting = eventArgs.vrDisplay && eventArgs.vrDisplay.isPresenting;\r\n\r\n this.updateButtonVisibility();\r\n }\r\n\r\n private moveButtonToBottomRight() {\r\n if (this._inputElement && !this._useCustomVRButton && this._btnVR) {\r\n const rect: ClientRect = this._inputElement.getBoundingClientRect();\r\n this._btnVR.style.top = rect.top + rect.height - 70 + \"px\";\r\n this._btnVR.style.left = rect.left + rect.width - 100 + \"px\";\r\n }\r\n }\r\n\r\n private displayVRButton() {\r\n if (!this._useCustomVRButton && !this._btnVRDisplayed && this._btnVR) {\r\n document.body.appendChild(this._btnVR);\r\n this._btnVRDisplayed = true;\r\n }\r\n }\r\n\r\n private updateButtonVisibility() {\r\n if (!this._btnVR || this._useCustomVRButton) {\r\n return;\r\n }\r\n this._btnVR.className = \"babylonVRicon\";\r\n if (this.isInVRMode) {\r\n this._btnVR.className += \" vrdisplaypresenting\";\r\n } else {\r\n if (this._webVRready) { this._btnVR.className += \" vrdisplayready\"; }\r\n if (this._webVRsupported) { this._btnVR.className += \" vrdisplaysupported\"; }\r\n if (this._webVRrequesting) { this._btnVR.className += \" vrdisplayrequesting\"; }\r\n }\r\n }\r\n\r\n private _cachedAngularSensibility = { angularSensibilityX: null, angularSensibilityY: null, angularSensibility: null };\r\n /**\r\n * Attempt to enter VR. If a headset is connected and ready, will request present on that.\r\n * Otherwise, will use the fullscreen API.\r\n */\r\n public enterVR() {\r\n if (this.xr) {\r\n this.xr.baseExperience.enterXRAsync(\"immersive-vr\", \"local-floor\", this.xr.renderTarget);\r\n return;\r\n }\r\n if (this.onEnteringVRObservable) {\r\n try {\r\n this.onEnteringVRObservable.notifyObservers(this);\r\n }\r\n catch (err) {\r\n Logger.Warn(\"Error in your custom logic onEnteringVR: \" + err);\r\n }\r\n }\r\n\r\n if (this._scene.activeCamera) {\r\n this._position = this._scene.activeCamera.position.clone();\r\n\r\n if (this.vrDeviceOrientationCamera) {\r\n this.vrDeviceOrientationCamera.rotation = Quaternion.FromRotationMatrix(this._scene.activeCamera.getWorldMatrix().getRotationMatrix()).toEulerAngles();\r\n this.vrDeviceOrientationCamera.angularSensibility = 2000;\r\n }\r\n if (this.webVRCamera) {\r\n var currentYRotation = this.webVRCamera.deviceRotationQuaternion.toEulerAngles().y;\r\n var desiredYRotation = Quaternion.FromRotationMatrix(this._scene.activeCamera.getWorldMatrix().getRotationMatrix()).toEulerAngles().y;\r\n var delta = desiredYRotation - currentYRotation;\r\n var currentGlobalRotation = this.webVRCamera.rotationQuaternion.toEulerAngles().y;\r\n this.webVRCamera.rotationQuaternion = Quaternion.FromEulerAngles(0, currentGlobalRotation + delta, 0);\r\n }\r\n\r\n // make sure that we return to the last active camera\r\n this._existingCamera = this._scene.activeCamera;\r\n\r\n // Remove and cache angular sensability to avoid camera rotation when in VR\r\n if ((<any>this._existingCamera).angularSensibilityX) {\r\n this._cachedAngularSensibility.angularSensibilityX = (<any>this._existingCamera).angularSensibilityX;\r\n (<any>this._existingCamera).angularSensibilityX = Number.MAX_VALUE;\r\n }\r\n if ((<any>this._existingCamera).angularSensibilityY) {\r\n this._cachedAngularSensibility.angularSensibilityY = (<any>this._existingCamera).angularSensibilityY;\r\n (<any>this._existingCamera).angularSensibilityY = Number.MAX_VALUE;\r\n }\r\n if ((<any>this._existingCamera).angularSensibility) {\r\n this._cachedAngularSensibility.angularSensibility = (<any>this._existingCamera).angularSensibility;\r\n (<any>this._existingCamera).angularSensibility = Number.MAX_VALUE;\r\n }\r\n }\r\n\r\n if (this._webVRrequesting) {\r\n return;\r\n }\r\n\r\n // If WebVR is supported and a headset is connected\r\n if (this._webVRready) {\r\n if (!this._webVRpresenting) {\r\n this._scene.getEngine().onVRRequestPresentComplete.addOnce((result) => {\r\n this.onAfterEnteringVRObservable.notifyObservers({ success: result });\r\n });\r\n this._webVRCamera.position = this._position;\r\n this._scene.activeCamera = this._webVRCamera;\r\n }\r\n }\r\n else if (this._vrDeviceOrientationCamera) {\r\n this._vrDeviceOrientationCamera.position = this._position;\r\n if (this._scene.activeCamera) {\r\n this._vrDeviceOrientationCamera.minZ = this._scene.activeCamera.minZ;\r\n }\r\n this._scene.activeCamera = this._vrDeviceOrientationCamera;\r\n this._scene.getEngine().enterFullscreen(this.requestPointerLockOnFullScreen);\r\n this.updateButtonVisibility();\r\n this._vrDeviceOrientationCamera.onViewMatrixChangedObservable.addOnce(() => {\r\n this.onAfterEnteringVRObservable.notifyObservers({ success: true });\r\n });\r\n }\r\n\r\n if (this._scene.activeCamera && this._inputElement) {\r\n this._scene.activeCamera.attachControl();\r\n }\r\n\r\n if (this._interactionsEnabled) {\r\n this._scene.registerBeforeRender(this.beforeRender);\r\n }\r\n\r\n if (this._displayLaserPointer) {\r\n [this._leftController, this._rightController].forEach((controller) => {\r\n if (controller) {\r\n controller._activatePointer();\r\n }\r\n });\r\n }\r\n\r\n this._hasEnteredVR = true;\r\n }\r\n\r\n /**\r\n * Attempt to exit VR, or fullscreen.\r\n */\r\n public exitVR() {\r\n if (this.xr) {\r\n this.xr.baseExperience.exitXRAsync();\r\n return;\r\n }\r\n if (this._hasEnteredVR) {\r\n if (this.onExitingVRObservable) {\r\n try {\r\n this.onExitingVRObservable.notifyObservers(this);\r\n }\r\n catch (err) {\r\n Logger.Warn(\"Error in your custom logic onExitingVR: \" + err);\r\n }\r\n }\r\n if (this._webVRpresenting) {\r\n this._scene.getEngine().disableVR();\r\n }\r\n if (this._scene.activeCamera) {\r\n this._position = this._scene.activeCamera.position.clone();\r\n\r\n }\r\n\r\n if (this.vrDeviceOrientationCamera) {\r\n this.vrDeviceOrientationCamera.angularSensibility = Number.MAX_VALUE;\r\n }\r\n\r\n if (this._deviceOrientationCamera) {\r\n this._deviceOrientationCamera.position = this._position;\r\n this._scene.activeCamera = this._deviceOrientationCamera;\r\n\r\n // Restore angular sensibility\r\n if (this._cachedAngularSensibility.angularSensibilityX) {\r\n (<any>this._deviceOrientationCamera).angularSensibilityX = this._cachedAngularSensibility.angularSensibilityX;\r\n this._cachedAngularSensibility.angularSensibilityX = null;\r\n }\r\n if (this._cachedAngularSensibility.angularSensibilityY) {\r\n (<any>this._deviceOrientationCamera).angularSensibilityY = this._cachedAngularSensibility.angularSensibilityY;\r\n this._cachedAngularSensibility.angularSensibilityY = null;\r\n }\r\n if (this._cachedAngularSensibility.angularSensibility) {\r\n (<any>this._deviceOrientationCamera).angularSensibility = this._cachedAngularSensibility.angularSensibility;\r\n this._cachedAngularSensibility.angularSensibility = null;\r\n }\r\n } else if (this._existingCamera) {\r\n this._existingCamera.position = this._position;\r\n this._scene.activeCamera = this._existingCamera;\r\n if (this._inputElement) {\r\n this._scene.activeCamera.attachControl();\r\n }\r\n\r\n // Restore angular sensibility\r\n if (this._cachedAngularSensibility.angularSensibilityX) {\r\n (<any>this._existingCamera).angularSensibilityX = this._cachedAngularSensibility.angularSensibilityX;\r\n this._cachedAngularSensibility.angularSensibilityX = null;\r\n }\r\n if (this._cachedAngularSensibility.angularSensibilityY) {\r\n (<any>this._existingCamera).angularSensibilityY = this._cachedAngularSensibility.angularSensibilityY;\r\n this._cachedAngularSensibility.angularSensibilityY = null;\r\n }\r\n if (this._cachedAngularSensibility.angularSensibility) {\r\n (<any>this._existingCamera).angularSensibility = this._cachedAngularSensibility.angularSensibility;\r\n this._cachedAngularSensibility.angularSensibility = null;\r\n }\r\n }\r\n\r\n this.updateButtonVisibility();\r\n\r\n if (this._interactionsEnabled) {\r\n this._scene.unregisterBeforeRender(this.beforeRender);\r\n this._cameraGazer._gazeTracker.isVisible = false;\r\n if (this._leftController) {\r\n this._leftController._gazeTracker.isVisible = false;\r\n }\r\n if (this._rightController) {\r\n this._rightController._gazeTracker.isVisible = false;\r\n }\r\n }\r\n\r\n // resize to update width and height when exiting vr exits fullscreen\r\n this._scene.getEngine().resize();\r\n\r\n [this._leftController, this._rightController].forEach((controller) => {\r\n if (controller) {\r\n controller._deactivatePointer();\r\n }\r\n });\r\n\r\n this._hasEnteredVR = false;\r\n\r\n // Update engine state to re enable non-vr camera input\r\n var engine = this._scene.getEngine();\r\n if (engine._onVrDisplayPresentChange) {\r\n engine._onVrDisplayPresentChange();\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * The position of the vr experience helper.\r\n */\r\n public get position(): Vector3 {\r\n return this._position;\r\n }\r\n\r\n /**\r\n * Sets the position of the vr experience helper.\r\n */\r\n public set position(value: Vector3) {\r\n this._position = value;\r\n\r\n if (this._scene.activeCamera) {\r\n this._scene.activeCamera.position = value;\r\n }\r\n }\r\n\r\n /**\r\n * Enables controllers and user interactions such as selecting and object or clicking on an object.\r\n */\r\n public enableInteractions() {\r\n if (!this._interactionsEnabled) {\r\n this._interactionsRequested = true;\r\n\r\n // in XR it is enabled by default, but just to make sure, re-attach\r\n if (this.xr) {\r\n if (this.xr.baseExperience.state === WebXRState.IN_XR) {\r\n this.xr.pointerSelection.attach();\r\n }\r\n return;\r\n }\r\n\r\n if (this._leftController) {\r\n this._enableInteractionOnController(this._leftController);\r\n }\r\n\r\n if (this._rightController) {\r\n this._enableInteractionOnController(this._rightController);\r\n }\r\n\r\n this.raySelectionPredicate = (mesh) => {\r\n return mesh.isVisible && (mesh.isPickable || mesh.name === this._floorMeshName);\r\n };\r\n\r\n this.meshSelectionPredicate = () => {\r\n return true;\r\n };\r\n\r\n this._raySelectionPredicate = (mesh) => {\r\n if (this._isTeleportationFloor(mesh) || (mesh.name.indexOf(\"gazeTracker\") === -1\r\n && mesh.name.indexOf(\"teleportationTarget\") === -1\r\n && mesh.name.indexOf(\"torusTeleportation\") === -1)) {\r\n return this.raySelectionPredicate(mesh);\r\n }\r\n return false;\r\n };\r\n\r\n this._interactionsEnabled = true;\r\n }\r\n }\r\n\r\n private get _noControllerIsActive() {\r\n return !(this._leftController && this._leftController._activePointer) && !(this._rightController && this._rightController._activePointer);\r\n }\r\n\r\n private beforeRender = () => {\r\n if (this._leftController && this._leftController._activePointer) {\r\n this._castRayAndSelectObject(this._leftController);\r\n }\r\n\r\n if (this._rightController && this._rightController._activePointer) {\r\n this._castRayAndSelectObject(this._rightController);\r\n }\r\n\r\n if (this._noControllerIsActive && (this._scene.getEngine().isPointerLock || this.enableGazeEvenWhenNoPointerLock)) {\r\n this._castRayAndSelectObject(this._cameraGazer);\r\n } else {\r\n this._cameraGazer._gazeTracker.isVisible = false;\r\n }\r\n\r\n }\r\n\r\n private _isTeleportationFloor(mesh: AbstractMesh): boolean {\r\n for (var i = 0; i < this._floorMeshesCollection.length; i++) {\r\n if (this._floorMeshesCollection[i].id === mesh.id) {\r\n return true;\r\n }\r\n }\r\n if (this._floorMeshName && mesh.name === this._floorMeshName) {\r\n return true;\r\n }\r\n return false;\r\n }\r\n\r\n /**\r\n * Adds a floor mesh to be used for teleportation.\r\n * @param floorMesh the mesh to be used for teleportation.\r\n */\r\n public addFloorMesh(floorMesh: Mesh): void {\r\n if (!this._floorMeshesCollection) {\r\n return;\r\n }\r\n\r\n if (this._floorMeshesCollection.indexOf(floorMesh) > -1) {\r\n return;\r\n }\r\n\r\n this._floorMeshesCollection.push(floorMesh);\r\n }\r\n\r\n /**\r\n * Removes a floor mesh from being used for teleportation.\r\n * @param floorMesh the mesh to be removed.\r\n */\r\n public removeFloorMesh(floorMesh: Mesh): void {\r\n if (!this._floorMeshesCollection) {\r\n return;\r\n }\r\n\r\n const meshIndex = this._floorMeshesCollection.indexOf(floorMesh);\r\n if (meshIndex !== -1) {\r\n this._floorMeshesCollection.splice(meshIndex, 1);\r\n }\r\n }\r\n\r\n /**\r\n * Enables interactions and teleportation using the VR controllers and gaze.\r\n * @param vrTeleportationOptions options to modify teleportation behavior.\r\n */\r\n public enableTeleportation(vrTeleportationOptions: VRTeleportationOptions = {}) {\r\n if (!this._teleportationInitialized) {\r\n this._teleportationRequested = true;\r\n\r\n this.enableInteractions();\r\n\r\n if (this.webVROptions.useXR && (vrTeleportationOptions.floorMeshes || vrTeleportationOptions.floorMeshName)) {\r\n const floorMeshes: AbstractMesh[] = vrTeleportationOptions.floorMeshes || [];\r\n if (!floorMeshes.length) {\r\n const floorMesh = this._scene.getMeshByName(vrTeleportationOptions.floorMeshName!);\r\n if (floorMesh) {\r\n floorMeshes.push(floorMesh);\r\n }\r\n }\r\n if (this.xr) {\r\n floorMeshes.forEach((mesh) => {\r\n this.xr.teleportation.addFloorMesh(mesh);\r\n });\r\n if (!this.xr.teleportation.attached) {\r\n this.xr.teleportation.attach();\r\n }\r\n return;\r\n } else if (!this.xrTestDone) {\r\n const waitForXr = () => {\r\n if (this.xrTestDone) {\r\n this._scene.unregisterBeforeRender(waitForXr);\r\n if (this.xr) {\r\n if (!this.xr.teleportation.attached) {\r\n this.xr.teleportation.attach();\r\n }\r\n } else {\r\n this.enableTeleportation(vrTeleportationOptions);\r\n }\r\n }\r\n };\r\n this._scene.registerBeforeRender(waitForXr);\r\n return;\r\n }\r\n }\r\n\r\n if (vrTeleportationOptions.floorMeshName) {\r\n this._floorMeshName = vrTeleportationOptions.floorMeshName;\r\n }\r\n if (vrTeleportationOptions.floorMeshes) {\r\n this._floorMeshesCollection = vrTeleportationOptions.floorMeshes;\r\n }\r\n\r\n if (vrTeleportationOptions.teleportationMode) {\r\n this._teleportationMode = vrTeleportationOptions.teleportationMode;\r\n }\r\n if (vrTeleportationOptions.teleportationTime && vrTeleportationOptions.teleportationTime > 0) {\r\n this._teleportationTime = vrTeleportationOptions.teleportationTime;\r\n }\r\n if (vrTeleportationOptions.teleportationSpeed && vrTeleportationOptions.teleportationSpeed > 0) {\r\n this._teleportationSpeed = vrTeleportationOptions.teleportationSpeed;\r\n }\r\n if (vrTeleportationOptions.easingFunction !== undefined) {\r\n this._teleportationEasing = vrTeleportationOptions.easingFunction;\r\n }\r\n\r\n if (this._leftController != null) {\r\n this._enableTeleportationOnController(this._leftController);\r\n }\r\n if (this._rightController != null) {\r\n this._enableTeleportationOnController(this._rightController);\r\n }\r\n\r\n // Creates an image processing post process for the vignette not relying\r\n // on the main scene configuration for image processing to reduce setup and spaces\r\n // (gamma/linear) conflicts.\r\n const imageProcessingConfiguration = new ImageProcessingConfiguration();\r\n imageProcessingConfiguration.vignetteColor = new Color4(0, 0, 0, 0);\r\n imageProcessingConfiguration.vignetteEnabled = true;\r\n this._postProcessMove = new ImageProcessingPostProcess(\"postProcessMove\",\r\n 1.0,\r\n this._webVRCamera,\r\n undefined,\r\n undefined,\r\n undefined,\r\n undefined,\r\n imageProcessingConfiguration);\r\n\r\n this._webVRCamera.detachPostProcess(this._postProcessMove);\r\n this._teleportationInitialized = true;\r\n if (this._isDefaultTeleportationTarget) {\r\n this._createTeleportationCircles();\r\n this._teleportationTarget.scaling.scaleInPlace(this._webVRCamera.deviceScaleFactor);\r\n }\r\n }\r\n }\r\n\r\n private _onNewGamepadConnected = (gamepad: Gamepad) => {\r\n if (gamepad.type !== Gamepad.POSE_ENABLED) {\r\n if (gamepad.leftStick) {\r\n gamepad.onleftstickchanged((stickValues) => {\r\n if (this._teleportationInitialized && this.teleportationEnabled) {\r\n // Listening to classic/xbox gamepad only if no VR controller is active\r\n if ((!this._leftController && !this._rightController) ||\r\n ((this._leftController && !this._leftController._activePointer) &&\r\n (this._rightController && !this._rightController._activePointer))) {\r\n this._checkTeleportWithRay(stickValues, this._cameraGazer);\r\n this._checkTeleportBackwards(stickValues, this._cameraGazer);\r\n }\r\n }\r\n });\r\n }\r\n if (gamepad.rightStick) {\r\n gamepad.onrightstickchanged((stickValues) => {\r\n if (this._teleportationInitialized) {\r\n this._checkRotate(stickValues, this._cameraGazer);\r\n }\r\n });\r\n }\r\n if (gamepad.type === Gamepad.XBOX) {\r\n (<Xbox360Pad>gamepad).onbuttondown((buttonPressed: Xbox360Button) => {\r\n if (this._interactionsEnabled && buttonPressed === Xbox360Button.A) {\r\n this._cameraGazer._selectionPointerDown();\r\n }\r\n });\r\n (<Xbox360Pad>gamepad).onbuttonup((buttonPressed: Xbox360Button) => {\r\n if (this._interactionsEnabled && buttonPressed === Xbox360Button.A) {\r\n this._cameraGazer._selectionPointerUp();\r\n }\r\n });\r\n }\r\n } else {\r\n var webVRController = <WebVRController>gamepad;\r\n var controller = new VRExperienceHelperControllerGazer(webVRController, this._scene, this._cameraGazer._gazeTracker);\r\n\r\n if (webVRController.hand === \"right\" || (this._leftController && this._leftController.webVRController != webVRController)) {\r\n this._rightController = controller;\r\n } else {\r\n this._leftController = controller;\r\n }\r\n\r\n this._tryEnableInteractionOnController(controller);\r\n }\r\n }\r\n\r\n // This only succeeds if the controller's mesh exists for the controller so this must be called whenever new controller is connected or when mesh is loaded\r\n private _tryEnableInteractionOnController = (controller: VRExperienceHelperControllerGazer) => {\r\n if (this._interactionsRequested && !controller._interactionsEnabled) {\r\n this._enableInteractionOnController(controller);\r\n }\r\n if (this._teleportationRequested && !controller._teleportationEnabled) {\r\n this._enableTeleportationOnController(controller);\r\n }\r\n }\r\n\r\n private _onNewGamepadDisconnected = (gamepad: Gamepad) => {\r\n if (gamepad instanceof WebVRController) {\r\n\r\n if (gamepad.hand === \"left\" && this._leftController != null) {\r\n this._leftController.dispose();\r\n this._leftController = null;\r\n }\r\n if (gamepad.hand === \"right\" && this._rightController != null) {\r\n this._rightController.dispose();\r\n this._rightController = null;\r\n }\r\n }\r\n }\r\n\r\n private _enableInteractionOnController(controller: VRExperienceHelperControllerGazer) {\r\n var controllerMesh = controller.webVRController.mesh;\r\n if (controllerMesh) {\r\n\r\n controller._interactionsEnabled = true;\r\n if (this.isInVRMode && this._displayLaserPointer) {\r\n controller._activatePointer();\r\n }\r\n if (this.webVROptions.laserToggle) {\r\n controller.webVRController.onMainButtonStateChangedObservable.add((stateObject) => {\r\n // Enabling / disabling laserPointer\r\n if (this._displayLaserPointer && stateObject.value === 1) {\r\n if (controller._activePointer) {\r\n controller._deactivatePointer();\r\n } else {\r\n controller._activatePointer();\r\n }\r\n if (this.displayGaze) {\r\n controller._gazeTracker.isVisible = controller._activePointer;\r\n }\r\n }\r\n });\r\n }\r\n controller.webVRController.onTriggerStateChangedObservable.add((stateObject) => {\r\n var gazer: VRExperienceHelperGazer = controller;\r\n if (this._noControllerIsActive) {\r\n gazer = this._cameraGazer;\r\n }\r\n if (!gazer._pointerDownOnMeshAsked) {\r\n if (stateObject.value > this._padSensibilityUp) {\r\n gazer._selectionPointerDown();\r\n }\r\n } else if (stateObject.value < this._padSensibilityDown) {\r\n gazer._selectionPointerUp();\r\n }\r\n });\r\n }\r\n }\r\n\r\n private _checkTeleportWithRay(stateObject: StickValues, gazer: VRExperienceHelperGazer) {\r\n // Dont teleport if another gaze already requested teleportation\r\n if (this._teleportationRequestInitiated && !gazer._teleportationRequestInitiated) {\r\n return;\r\n }\r\n if (!gazer._teleportationRequestInitiated) {\r\n if (stateObject.y < -this._padSensibilityUp && gazer._dpadPressed) {\r\n gazer._activatePointer();\r\n gazer._teleportationRequestInitiated = true;\r\n }\r\n } else {\r\n // Listening to the proper controller values changes to confirm teleportation\r\n if (Math.sqrt(stateObject.y * stateObject.y + stateObject.x * stateObject.x) < this._padSensibilityDown) {\r\n if (this._teleportActive) {\r\n this.teleportCamera(this._haloCenter);\r\n }\r\n\r\n gazer._teleportationRequestInitiated = false;\r\n }\r\n }\r\n }\r\n private _checkRotate(stateObject: StickValues, gazer: VRExperienceHelperGazer) {\r\n // Only rotate when user is not currently selecting a teleportation location\r\n if (gazer._teleportationRequestInitiated) {\r\n return;\r\n }\r\n\r\n if (!gazer._rotationLeftAsked) {\r\n if (stateObject.x < -this._padSensibilityUp && gazer._dpadPressed) {\r\n gazer._rotationLeftAsked = true;\r\n if (this._rotationAllowed) {\r\n this._rotateCamera(false);\r\n }\r\n }\r\n } else {\r\n if (stateObject.x > -this._padSensibilityDown) {\r\n gazer._rotationLeftAsked = false;\r\n }\r\n }\r\n\r\n if (!gazer._rotationRightAsked) {\r\n if (stateObject.x > this._padSensibilityUp && gazer._dpadPressed) {\r\n gazer._rotationRightAsked = true;\r\n if (this._rotationAllowed) {\r\n this._rotateCamera(true);\r\n }\r\n }\r\n } else {\r\n if (stateObject.x < this._padSensibilityDown) {\r\n gazer._rotationRightAsked = false;\r\n }\r\n }\r\n }\r\n private _checkTeleportBackwards(stateObject: StickValues, gazer: VRExperienceHelperGazer) {\r\n // Only teleport backwards when user is not currently selecting a teleportation location\r\n if (gazer._teleportationRequestInitiated) {\r\n return;\r\n }\r\n // Teleport backwards\r\n if (stateObject.y > this._padSensibilityUp && gazer._dpadPressed) {\r\n if (!gazer._teleportationBackRequestInitiated) {\r\n if (!this.currentVRCamera) {\r\n return;\r\n }\r\n\r\n // Get rotation and position of the current camera\r\n var rotation = Quaternion.FromRotationMatrix(this.currentVRCamera.getWorldMatrix().getRotationMatrix());\r\n var position = this.currentVRCamera.position;\r\n\r\n // If the camera has device position, use that instead\r\n if ((<WebVRFreeCamera>this.currentVRCamera).devicePosition && (<WebVRFreeCamera>this.currentVRCamera).deviceRotationQuaternion) {\r\n rotation = (<WebVRFreeCamera>this.currentVRCamera).deviceRotationQuaternion;\r\n position = (<WebVRFreeCamera>this.currentVRCamera).devicePosition;\r\n }\r\n\r\n // Get matrix with only the y rotation of the device rotation\r\n rotation.toEulerAnglesToRef(this._workingVector);\r\n this._workingVector.z = 0;\r\n this._workingVector.x = 0;\r\n Quaternion.RotationYawPitchRollToRef(this._workingVector.y, this._workingVector.x, this._workingVector.z, this._workingQuaternion);\r\n this._workingQuaternion.toRotationMatrix(this._workingMatrix);\r\n\r\n // Rotate backwards ray by device rotation to cast at the ground behind the user\r\n Vector3.TransformCoordinatesToRef(this._teleportBackwardsVector, this._workingMatrix, this._workingVector);\r\n\r\n // Teleport if ray hit the ground and is not to far away eg. backwards off a cliff\r\n var ray = new Ray(position, this._workingVector);\r\n var hit = this._scene.pickWithRay(ray, this._raySelectionPredicate);\r\n if (hit && hit.pickedPoint && hit.pickedMesh && this._isTeleportationFloor(hit.pickedMesh) && hit.distance < 5) {\r\n this.teleportCamera(hit.pickedPoint);\r\n }\r\n\r\n gazer._teleportationBackRequestInitiated = true;\r\n }\r\n } else {\r\n gazer._teleportationBackRequestInitiated = false;\r\n }\r\n\r\n }\r\n\r\n private _enableTeleportationOnController(controller: VRExperienceHelperControllerGazer) {\r\n var controllerMesh = controller.webVRController.mesh;\r\n if (controllerMesh) {\r\n if (!controller._interactionsEnabled) {\r\n this._enableInteractionOnController(controller);\r\n }\r\n controller._interactionsEnabled = true;\r\n controller._teleportationEnabled = true;\r\n if (controller.webVRController.controllerType === PoseEnabledControllerType.VIVE) {\r\n controller._dpadPressed = false;\r\n controller.webVRController.onPadStateChangedObservable.add((stateObject) => {\r\n controller._dpadPressed = stateObject.pressed;\r\n if (!controller._dpadPressed) {\r\n controller._rotationLeftAsked = false;\r\n controller._rotationRightAsked = false;\r\n controller._teleportationBackRequestInitiated = false;\r\n }\r\n });\r\n }\r\n controller.webVRController.onPadValuesChangedObservable.add((stateObject) => {\r\n if (this.teleportationEnabled) {\r\n this._checkTeleportBackwards(stateObject, controller);\r\n this._checkTeleportWithRay(stateObject, controller);\r\n }\r\n this._checkRotate(stateObject, controller);\r\n });\r\n }\r\n }\r\n\r\n private _createTeleportationCircles() {\r\n this._teleportationTarget = CreateGround(\"teleportationTarget\", { width: 2, height: 2, subdivisions: 2 }, this._scene);\r\n this._teleportationTarget.isPickable = false;\r\n\r\n var length = 512;\r\n var dynamicTexture = new DynamicTexture(\"DynamicTexture\", length, this._scene, true);\r\n dynamicTexture.hasAlpha = true;\r\n var context = dynamicTexture.getContext();\r\n\r\n var centerX = length / 2;\r\n var centerY = length / 2;\r\n var radius = 200;\r\n\r\n context.beginPath();\r\n context.arc(centerX, centerY, radius, 0, 2 * Math.PI, false);\r\n context.fillStyle = this._teleportationFillColor;\r\n context.fill();\r\n context.lineWidth = 10;\r\n context.strokeStyle = this._teleportationBorderColor;\r\n context.stroke();\r\n context.closePath();\r\n dynamicTexture.update();\r\n\r\n var teleportationCircleMaterial = new StandardMaterial(\"TextPlaneMaterial\", this._scene);\r\n teleportationCircleMaterial.diffuseTexture = dynamicTexture;\r\n this._teleportationTarget.material = teleportationCircleMaterial;\r\n\r\n var torus = CreateTorus(\"torusTeleportation\", {\r\n diameter: 0.75,\r\n thickness: 0.1,\r\n tessellation: 25,\r\n updatable: false\r\n }, this._scene);\r\n torus.isPickable = false;\r\n torus.parent = this._teleportationTarget;\r\n\r\n var animationInnerCircle = new Animation(\"animationInnerCircle\", \"position.y\", 30, Animation.ANIMATIONTYPE_FLOAT, Animation.ANIMATIONLOOPMODE_CYCLE);\r\n\r\n var keys = [];\r\n keys.push({\r\n frame: 0,\r\n value: 0\r\n });\r\n keys.push({\r\n frame: 30,\r\n value: 0.4\r\n });\r\n keys.push({\r\n frame: 60,\r\n value: 0\r\n });\r\n\r\n animationInnerCircle.setKeys(keys);\r\n\r\n var easingFunction = new SineEase();\r\n easingFunction.setEasingMode(EasingFunction.EASINGMODE_EASEINOUT);\r\n animationInnerCircle.setEasingFunction(easingFunction);\r\n\r\n torus.animations = [];\r\n torus.animations.push(animationInnerCircle);\r\n\r\n this._scene.beginAnimation(torus, 0, 60, true);\r\n\r\n this._hideTeleportationTarget();\r\n }\r\n\r\n private _displayTeleportationTarget() {\r\n this._teleportActive = true;\r\n if (this._teleportationInitialized) {\r\n this._teleportationTarget.isVisible = true;\r\n if (this._isDefaultTeleportationTarget) {\r\n (<Mesh>this._teleportationTarget.getChildren()[0]).isVisible = true;\r\n }\r\n }\r\n }\r\n\r\n private _hideTeleportationTarget() {\r\n this._teleportActive = false;\r\n if (this._teleportationInitialized) {\r\n this._teleportationTarget.isVisible = false;\r\n if (this._isDefaultTeleportationTarget) {\r\n (<Mesh>this._teleportationTarget.getChildren()[0]).isVisible = false;\r\n }\r\n }\r\n }\r\n\r\n private _rotateCamera(right: boolean) {\r\n if (!(this.currentVRCamera instanceof FreeCamera)) {\r\n return;\r\n }\r\n\r\n if (right) {\r\n this._rotationAngle++;\r\n }\r\n else {\r\n this._rotationAngle--;\r\n }\r\n\r\n this.currentVRCamera.animations = [];\r\n\r\n var target = Quaternion.FromRotationMatrix(Matrix.RotationY(Math.PI / 4 * this._rotationAngle));\r\n\r\n var animationRotation = new Animation(\"animationRotation\", \"rotationQuaternion\", 90, Animation.ANIMATIONTYPE_QUATERNION,\r\n Animation.ANIMATIONLOOPMODE_CONSTANT);\r\n\r\n var animationRotationKeys = [];\r\n animationRotationKeys.push({\r\n frame: 0,\r\n value: this.currentVRCamera.rotationQuaternion\r\n });\r\n animationRotationKeys.push({\r\n frame: 6,\r\n value: target\r\n });\r\n\r\n animationRotation.setKeys(animationRotationKeys);\r\n\r\n animationRotation.setEasingFunction(this._circleEase);\r\n\r\n this.currentVRCamera.animations.push(animationRotation);\r\n\r\n this._postProcessMove.animations = [];\r\n\r\n var animationPP = new Animation(\"animationPP\", \"vignetteWeight\", 90, Animation.ANIMATIONTYPE_FLOAT,\r\n Animation.ANIMATIONLOOPMODE_CONSTANT);\r\n\r\n var vignetteWeightKeys = [];\r\n vignetteWeightKeys.push({\r\n frame: 0,\r\n value: 0\r\n });\r\n vignetteWeightKeys.push({\r\n frame: 3,\r\n value: 4\r\n });\r\n vignetteWeightKeys.push({\r\n frame: 6,\r\n value: 0\r\n });\r\n\r\n animationPP.setKeys(vignetteWeightKeys);\r\n animationPP.setEasingFunction(this._circleEase);\r\n this._postProcessMove.animations.push(animationPP);\r\n\r\n var animationPP2 = new Animation(\"animationPP2\", \"vignetteStretch\", 90, Animation.ANIMATIONTYPE_FLOAT,\r\n Animation.ANIMATIONLOOPMODE_CONSTANT);\r\n\r\n var vignetteStretchKeys = [];\r\n vignetteStretchKeys.push({\r\n frame: 0,\r\n value: 0\r\n });\r\n vignetteStretchKeys.push({\r\n frame: 3,\r\n value: 10\r\n });\r\n vignetteStretchKeys.push({\r\n frame: 6,\r\n value: 0\r\n });\r\n\r\n animationPP2.setKeys(vignetteStretchKeys);\r\n animationPP2.setEasingFunction(this._circleEase);\r\n this._postProcessMove.animations.push(animationPP2);\r\n\r\n this._postProcessMove.imageProcessingConfiguration.vignetteWeight = 0;\r\n this._postProcessMove.imageProcessingConfiguration.vignetteStretch = 0;\r\n this._postProcessMove.samples = 4;\r\n this._webVRCamera.attachPostProcess(this._postProcessMove);\r\n this._scene.beginAnimation(this._postProcessMove, 0, 6, false, 1, () => {\r\n this._webVRCamera.detachPostProcess(this._postProcessMove);\r\n });\r\n this._scene.beginAnimation(this.currentVRCamera, 0, 6, false, 1);\r\n }\r\n\r\n private _moveTeleportationSelectorTo(hit: PickingInfo, gazer: VRExperienceHelperGazer, ray: Ray) {\r\n if (hit.pickedPoint) {\r\n if (gazer._teleportationRequestInitiated) {\r\n this._displayTeleportationTarget();\r\n this._haloCenter.copyFrom(hit.pickedPoint);\r\n this._teleportationTarget.position.copyFrom(hit.pickedPoint);\r\n }\r\n\r\n var pickNormal = this._convertNormalToDirectionOfRay(hit.getNormal(true, false), ray);\r\n if (pickNormal) {\r\n var axis1 = Vector3.Cross(Axis.Y, pickNormal);\r\n var axis2 = Vector3.Cross(pickNormal, axis1);\r\n Vector3.RotationFromAxisToRef(axis2, pickNormal, axis1, this._teleportationTarget.rotation);\r\n }\r\n this._teleportationTarget.position.y += 0.1;\r\n }\r\n }\r\n private _workingVector = Vector3.Zero();\r\n private _workingQuaternion = Quaternion.Identity();\r\n private _workingMatrix = Matrix.Identity();\r\n\r\n /**\r\n * Time Constant Teleportation Mode\r\n */\r\n public static readonly TELEPORTATIONMODE_CONSTANTTIME = 0;\r\n /**\r\n * Speed Constant Teleportation Mode\r\n */\r\n public static readonly TELEPORTATIONMODE_CONSTANTSPEED = 1;\r\n\r\n /**\r\n * Teleports the users feet to the desired location\r\n * @param location The location where the user's feet should be placed\r\n */\r\n public teleportCamera(location: Vector3) {\r\n if (!(this.currentVRCamera instanceof FreeCamera)) {\r\n return;\r\n }\r\n // Teleport the hmd to where the user is looking by moving the anchor to where they are looking minus the\r\n // offset of the headset from the anchor.\r\n if (this.webVRCamera.leftCamera) {\r\n this._workingVector.copyFrom(this.webVRCamera.leftCamera.globalPosition);\r\n this._workingVector.subtractInPlace(this.webVRCamera.position);\r\n location.subtractToRef(this._workingVector, this._workingVector);\r\n } else {\r\n this._workingVector.copyFrom(location);\r\n }\r\n // Add height to account for user's height offset\r\n if (this.isInVRMode) {\r\n this._workingVector.y += this.webVRCamera.deviceDistanceToRoomGround() * this._webVRCamera.deviceScaleFactor;\r\n } else {\r\n this._workingVector.y += this._defaultHeight;\r\n }\r\n\r\n this.onBeforeCameraTeleport.notifyObservers(this._workingVector);\r\n\r\n // Animations FPS\r\n const FPS = 90;\r\n var speedRatio, lastFrame;\r\n if (this._teleportationMode == VRExperienceHelper.TELEPORTATIONMODE_CONSTANTSPEED) {\r\n lastFrame = FPS;\r\n var dist = Vector3.Distance(this.currentVRCamera.position, this._workingVector);\r\n speedRatio = this._teleportationSpeed / dist;\r\n } else {\r\n // teleportationMode is TELEPORTATIONMODE_CONSTANTTIME\r\n lastFrame = Math.round(this._teleportationTime * FPS / 1000);\r\n speedRatio = 1;\r\n }\r\n\r\n // Create animation from the camera's position to the new location\r\n this.currentVRCamera.animations = [];\r\n var animationCameraTeleportation = new Animation(\"animationCameraTeleportation\", \"position\", FPS, Animation.ANIMATIONTYPE_VECTOR3, Animation.ANIMATIONLOOPMODE_CONSTANT);\r\n var animationCameraTeleportationKeys = [{\r\n frame: 0,\r\n value: this.currentVRCamera.position\r\n },\r\n {\r\n frame: lastFrame,\r\n value: this._workingVector\r\n }\r\n ];\r\n\r\n animationCameraTeleportation.setKeys(animationCameraTeleportationKeys);\r\n animationCameraTeleportation.setEasingFunction(this._teleportationEasing);\r\n this.currentVRCamera.animations.push(animationCameraTeleportation);\r\n\r\n this._postProcessMove.animations = [];\r\n\r\n // Calculate the mid frame for vignette animations\r\n var midFrame = Math.round(lastFrame / 2);\r\n\r\n var animationPP = new Animation(\"animationPP\", \"vignetteWeight\", FPS, Animation.ANIMATIONTYPE_FLOAT,\r\n Animation.ANIMATIONLOOPMODE_CONSTANT);\r\n\r\n var vignetteWeightKeys = [];\r\n vignetteWeightKeys.push({\r\n frame: 0,\r\n value: 0\r\n });\r\n vignetteWeightKeys.push({\r\n frame: midFrame,\r\n value: 8\r\n });\r\n vignetteWeightKeys.push({\r\n frame: lastFrame,\r\n value: 0\r\n });\r\n\r\n animationPP.setKeys(vignetteWeightKeys);\r\n this._postProcessMove.animations.push(animationPP);\r\n\r\n var animationPP2 = new Animation(\"animationPP2\", \"vignetteStretch\", FPS, Animation.ANIMATIONTYPE_FLOAT,\r\n Animation.ANIMATIONLOOPMODE_CONSTANT);\r\n\r\n var vignetteStretchKeys = [];\r\n vignetteStretchKeys.push({\r\n frame: 0,\r\n value: 0\r\n });\r\n vignetteStretchKeys.push({\r\n frame: midFrame,\r\n value: 10\r\n });\r\n vignetteStretchKeys.push({\r\n frame: lastFrame,\r\n value: 0\r\n });\r\n\r\n animationPP2.setKeys(vignetteStretchKeys);\r\n this._postProcessMove.animations.push(animationPP2);\r\n\r\n this._postProcessMove.imageProcessingConfiguration.vignetteWeight = 0;\r\n this._postProcessMove.imageProcessingConfiguration.vignetteStretch = 0;\r\n\r\n this._webVRCamera.attachPostProcess(this._postProcessMove);\r\n this._scene.beginAnimation(this._postProcessMove, 0, lastFrame, false, speedRatio, () => {\r\n this._webVRCamera.detachPostProcess(this._postProcessMove);\r\n });\r\n this._scene.beginAnimation(this.currentVRCamera, 0, lastFrame, false, speedRatio, () => {\r\n this.onAfterCameraTeleport.notifyObservers(this._workingVector);\r\n });\r\n\r\n this._hideTeleportationTarget();\r\n }\r\n\r\n private _convertNormalToDirectionOfRay(normal: Nullable<Vector3>, ray: Ray) {\r\n if (normal) {\r\n var angle = Math.acos(Vector3.Dot(normal, ray.direction));\r\n if (angle < Math.PI / 2) {\r\n normal.scaleInPlace(-1);\r\n }\r\n }\r\n return normal;\r\n }\r\n\r\n private _castRayAndSelectObject(gazer: VRExperienceHelperGazer) {\r\n if (!(this.currentVRCamera instanceof FreeCamera)) {\r\n return;\r\n }\r\n\r\n var ray = gazer._getForwardRay(this._rayLength);\r\n var hit = this._scene.pickWithRay(ray, this._raySelectionPredicate);\r\n\r\n if (hit) {\r\n this._scene.simulatePointerMove(hit, { pointerId: gazer._id });\r\n }\r\n gazer._currentHit = hit;\r\n\r\n // Moving the gazeTracker on the mesh face targetted\r\n if (hit && hit.pickedPoint) {\r\n if (this._displayGaze) {\r\n let multiplier = 1;\r\n\r\n gazer._gazeTracker.isVisible = true;\r\n\r\n if (gazer._isActionableMesh) {\r\n multiplier = 3;\r\n }\r\n if (this.updateGazeTrackerScale) {\r\n gazer._gazeTracker.scaling.x = hit.distance * multiplier;\r\n gazer._gazeTracker.scaling.y = hit.distance * multiplier;\r\n gazer._gazeTracker.scaling.z = hit.distance * multiplier;\r\n }\r\n\r\n var pickNormal = this._convertNormalToDirectionOfRay(hit.getNormal(), ray);\r\n // To avoid z-fighting\r\n let deltaFighting = 0.002;\r\n\r\n if (pickNormal) {\r\n var axis1 = Vector3.Cross(Axis.Y, pickNormal);\r\n var axis2 = Vector3.Cross(pickNormal, axis1);\r\n Vector3.RotationFromAxisToRef(axis2, pickNormal, axis1, gazer._gazeTracker.rotation);\r\n }\r\n gazer._gazeTracker.position.copyFrom(hit.pickedPoint);\r\n\r\n if (gazer._gazeTracker.position.x < 0) {\r\n gazer._gazeTracker.position.x += deltaFighting;\r\n }\r\n else {\r\n gazer._gazeTracker.position.x -= deltaFighting;\r\n }\r\n if (gazer._gazeTracker.position.y < 0) {\r\n gazer._gazeTracker.position.y += deltaFighting;\r\n }\r\n else {\r\n gazer._gazeTracker.position.y -= deltaFighting;\r\n }\r\n if (gazer._gazeTracker.position.z < 0) {\r\n gazer._gazeTracker.position.z += deltaFighting;\r\n }\r\n else {\r\n gazer._gazeTracker.position.z -= deltaFighting;\r\n }\r\n }\r\n\r\n // Changing the size of the laser pointer based on the distance from the targetted point\r\n gazer._updatePointerDistance(hit.distance);\r\n }\r\n else {\r\n gazer._updatePointerDistance();\r\n gazer._gazeTracker.isVisible = false;\r\n }\r\n\r\n if (hit && hit.pickedMesh) {\r\n // The object selected is the floor, we're in a teleportation scenario\r\n if (this._teleportationInitialized && this._isTeleportationFloor(hit.pickedMesh) && hit.pickedPoint) {\r\n // Moving the teleportation area to this targetted point\r\n\r\n //Raise onSelectedMeshUnselected observable if ray collided floor mesh/meshes and a non floor mesh was previously selected\r\n if (gazer._currentMeshSelected && !this._isTeleportationFloor(gazer._currentMeshSelected)) {\r\n this._notifySelectedMeshUnselected(gazer._currentMeshSelected);\r\n }\r\n\r\n gazer._currentMeshSelected = null;\r\n if (gazer._teleportationRequestInitiated) {\r\n this._moveTeleportationSelectorTo(hit, gazer, ray);\r\n }\r\n return;\r\n }\r\n // If not, we're in a selection scenario\r\n //this._teleportationAllowed = false;\r\n if (hit.pickedMesh !== gazer._currentMeshSelected) {\r\n if (this.meshSelectionPredicate(hit.pickedMesh)) {\r\n this.onNewMeshPicked.notifyObservers(hit);\r\n gazer._currentMeshSelected = hit.pickedMesh;\r\n if (hit.pickedMesh.isPickable && hit.pickedMesh.actionManager) {\r\n this.changeGazeColor(this._pickedGazeColor);\r\n this.changeLaserColor(this._pickedLaserColor);\r\n gazer._isActionableMesh = true;\r\n }\r\n else {\r\n this.changeGazeColor(this._gazeColor);\r\n this.changeLaserColor(this._laserColor);\r\n gazer._isActionableMesh = false;\r\n }\r\n try {\r\n this.onNewMeshSelected.notifyObservers(hit.pickedMesh);\r\n let gazerAsControllerGazer = gazer as VRExperienceHelperControllerGazer;\r\n if (gazerAsControllerGazer.webVRController) {\r\n this.onMeshSelectedWithController.notifyObservers({ mesh: hit.pickedMesh, controller: gazerAsControllerGazer.webVRController });\r\n }\r\n }\r\n catch (err) {\r\n Logger.Warn(\"Error while raising onNewMeshSelected or onMeshSelectedWithController: \" + err);\r\n }\r\n }\r\n else {\r\n this._notifySelectedMeshUnselected(gazer._currentMeshSelected);\r\n gazer._currentMeshSelected = null;\r\n this.changeGazeColor(this._gazeColor);\r\n this.changeLaserColor(this._laserColor);\r\n }\r\n }\r\n }\r\n else {\r\n this._notifySelectedMeshUnselected(gazer._currentMeshSelected);\r\n gazer._currentMeshSelected = null;\r\n //this._teleportationAllowed = false;\r\n this.changeGazeColor(this._gazeColor);\r\n this.changeLaserColor(this._laserColor);\r\n }\r\n }\r\n\r\n private _notifySelectedMeshUnselected(mesh: Nullable<AbstractMesh>) {\r\n if (mesh) {\r\n this.onSelectedMeshUnselected.notifyObservers(mesh);\r\n }\r\n }\r\n\r\n /**\r\n * Permanently set new colors for the laser pointer\r\n * @param color the new laser color\r\n * @param pickedColor the new laser color when picked mesh detected\r\n */\r\n public setLaserColor(color: Color3, pickedColor: Color3 = this._pickedLaserColor) {\r\n this._laserColor = color;\r\n this._pickedLaserColor = pickedColor;\r\n }\r\n\r\n /**\r\n * Set lighting enabled / disabled on the laser pointer of both controllers\r\n * @param enabled should the lighting be enabled on the laser pointer\r\n */\r\n public setLaserLightingState(enabled: boolean = true) {\r\n if (this._leftController) {\r\n this._leftController._setLaserPointerLightingDisabled(!enabled);\r\n\r\n }\r\n if (this._rightController) {\r\n this._rightController._setLaserPointerLightingDisabled(!enabled);\r\n }\r\n }\r\n\r\n /**\r\n * Permanently set new colors for the gaze pointer\r\n * @param color the new gaze color\r\n * @param pickedColor the new gaze color when picked mesh detected\r\n */\r\n public setGazeColor(color: Color3, pickedColor: Color3 = this._pickedGazeColor) {\r\n this._gazeColor = color;\r\n this._pickedGazeColor = pickedColor;\r\n }\r\n\r\n /**\r\n * Sets the color of the laser ray from the vr controllers.\r\n * @param color new color for the ray.\r\n */\r\n public changeLaserColor(color: Color3) {\r\n if (!this.updateControllerLaserColor) {\r\n return;\r\n }\r\n\r\n if (this._leftController) {\r\n this._leftController._setLaserPointerColor(color);\r\n\r\n }\r\n if (this._rightController) {\r\n this._rightController._setLaserPointerColor(color);\r\n }\r\n }\r\n\r\n /**\r\n * Sets the color of the ray from the vr headsets gaze.\r\n * @param color new color for the ray.\r\n */\r\n public changeGazeColor(color: Color3) {\r\n if (!this.updateGazeTrackerColor) {\r\n return;\r\n }\r\n if (!(<StandardMaterial>this._cameraGazer._gazeTracker.material)) {\r\n return;\r\n }\r\n (<StandardMaterial>this._cameraGazer._gazeTracker.material).emissiveColor = color;\r\n if (this._leftController) {\r\n (<StandardMaterial>this._leftController._gazeTracker.material).emissiveColor = color;\r\n }\r\n if (this._rightController) {\r\n (<StandardMaterial>this._rightController._gazeTracker.material).emissiveColor = color;\r\n }\r\n }\r\n\r\n /**\r\n * Exits VR and disposes of the vr experience helper\r\n */\r\n public dispose() {\r\n if (this.isInVRMode) {\r\n this.exitVR();\r\n }\r\n\r\n if (this._postProcessMove) {\r\n this._postProcessMove.dispose();\r\n }\r\n\r\n if (this._webVRCamera) {\r\n this._webVRCamera.dispose();\r\n }\r\n if (this._vrDeviceOrientationCamera) {\r\n this._vrDeviceOrientationCamera.dispose();\r\n }\r\n if (!this._useCustomVRButton && this._btnVR && this._btnVR.parentNode) {\r\n document.body.removeChild(this._btnVR);\r\n }\r\n\r\n if (this._deviceOrientationCamera && (this._scene.activeCamera != this._deviceOrientationCamera)) {\r\n this._deviceOrientationCamera.dispose();\r\n }\r\n\r\n if (this._cameraGazer) {\r\n this._cameraGazer.dispose();\r\n }\r\n if (this._leftController) {\r\n this._leftController.dispose();\r\n }\r\n if (this._rightController) {\r\n this._rightController.dispose();\r\n }\r\n\r\n if (this._teleportationTarget) {\r\n this._teleportationTarget.dispose();\r\n }\r\n\r\n if (this.xr) {\r\n this.xr.dispose();\r\n }\r\n\r\n this._floorMeshesCollection = [];\r\n\r\n document.removeEventListener(\"keydown\", this._onKeyDown);\r\n window.removeEventListener('vrdisplaypresentchange', this._onVrDisplayPresentChange);\r\n\r\n window.removeEventListener(\"resize\", this._onResize);\r\n document.removeEventListener(\"fullscreenchange\", this._onFullscreenChange);\r\n document.removeEventListener(\"mozfullscreenchange\", this._onFullscreenChange);\r\n document.removeEventListener(\"webkitfullscreenchange\", this._onFullscreenChange);\r\n document.removeEventListener(\"msfullscreenchange\", this._onFullscreenChange);\r\n (<any>document).onmsfullscreenchange = null;\r\n\r\n this._scene.getEngine().onVRDisplayChangedObservable.removeCallback(this._onVRDisplayChanged);\r\n this._scene.getEngine().onVRRequestPresentStart.removeCallback(this._onVRRequestPresentStart);\r\n this._scene.getEngine().onVRRequestPresentComplete.removeCallback(this._onVRRequestPresentComplete);\r\n window.removeEventListener('vrdisplaypresentchange', this._onVrDisplayPresentChange);\r\n\r\n this._scene.gamepadManager.onGamepadConnectedObservable.removeCallback(this._onNewGamepadConnected);\r\n this._scene.gamepadManager.onGamepadDisconnectedObservable.removeCallback(this._onNewGamepadDisconnected);\r\n\r\n this._scene.unregisterBeforeRender(this.beforeRender);\r\n }\r\n\r\n /**\r\n * Gets the name of the VRExperienceHelper class\r\n * @returns \"VRExperienceHelper\"\r\n */\r\n public getClassName(): string {\r\n return \"VRExperienceHelper\";\r\n }\r\n}\r\n"]}