@babylonjs/core 6.7.0 → 6.8.1

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 (412) hide show
  1. package/Actions/abstractActionManager.js.map +1 -1
  2. package/Actions/action.js.map +1 -1
  3. package/Animations/animation.js.map +1 -1
  4. package/Animations/animationGroup.d.ts +5 -0
  5. package/Animations/animationGroup.js +12 -0
  6. package/Animations/animationGroup.js.map +1 -1
  7. package/Animations/easing.js.map +1 -1
  8. package/Audio/audioSceneComponent.js.map +1 -1
  9. package/Audio/sound.js.map +1 -1
  10. package/BakedVertexAnimation/bakedVertexAnimationManager.js.map +1 -1
  11. package/Behaviors/Cameras/bouncingBehavior.js.map +1 -1
  12. package/Behaviors/Cameras/framingBehavior.js.map +1 -1
  13. package/Behaviors/Meshes/fadeInOutBehavior.js.map +1 -1
  14. package/Behaviors/Meshes/pointerDragBehavior.js.map +1 -1
  15. package/Bones/bone.js.map +1 -1
  16. package/Bones/boneIKController.js.map +1 -1
  17. package/Bones/boneLookController.js.map +1 -1
  18. package/Buffers/dataBuffer.js.map +1 -1
  19. package/Cameras/Inputs/BaseCameraMouseWheelInput.js.map +1 -1
  20. package/Cameras/Inputs/BaseCameraPointersInput.js.map +1 -1
  21. package/Cameras/Inputs/arcRotateCameraGamepadInput.js.map +1 -1
  22. package/Cameras/Inputs/arcRotateCameraKeyboardMoveInput.js.map +1 -1
  23. package/Cameras/Inputs/arcRotateCameraMouseWheelInput.js.map +1 -1
  24. package/Cameras/Inputs/arcRotateCameraPointersInput.js.map +1 -1
  25. package/Cameras/Inputs/flyCameraKeyboardInput.js.map +1 -1
  26. package/Cameras/Inputs/flyCameraMouseInput.js.map +1 -1
  27. package/Cameras/Inputs/followCameraKeyboardMoveInput.js.map +1 -1
  28. package/Cameras/Inputs/followCameraMouseWheelInput.js.map +1 -1
  29. package/Cameras/Inputs/followCameraPointersInput.js.map +1 -1
  30. package/Cameras/Inputs/freeCameraGamepadInput.js.map +1 -1
  31. package/Cameras/Inputs/freeCameraKeyboardMoveInput.js.map +1 -1
  32. package/Cameras/Inputs/freeCameraMouseInput.js.map +1 -1
  33. package/Cameras/Inputs/freeCameraTouchInput.js.map +1 -1
  34. package/Cameras/VR/vrExperienceHelper.js.map +1 -1
  35. package/Cameras/arcRotateCamera.js.map +1 -1
  36. package/Cameras/camera.js.map +1 -1
  37. package/Cameras/flyCamera.js.map +1 -1
  38. package/Cameras/followCamera.js.map +1 -1
  39. package/Cameras/freeCamera.js.map +1 -1
  40. package/Cameras/targetCamera.js.map +1 -1
  41. package/Collisions/collider.js.map +1 -1
  42. package/Compute/computeEffect.js.map +1 -1
  43. package/Compute/computeShader.js +1 -5
  44. package/Compute/computeShader.js.map +1 -1
  45. package/Culling/Octrees/octree.js.map +1 -1
  46. package/Culling/boundingBox.js.map +1 -1
  47. package/Culling/boundingInfo.js.map +1 -1
  48. package/Culling/boundingSphere.js.map +1 -1
  49. package/Culling/ray.d.ts +7 -2
  50. package/Culling/ray.js +8 -3
  51. package/Culling/ray.js.map +1 -1
  52. package/Debug/debugLayer.js +1 -9
  53. package/Debug/debugLayer.js.map +1 -1
  54. package/Debug/skeletonViewer.js.map +1 -1
  55. package/Engines/Extensions/engine.cubeTexture.js +1 -6
  56. package/Engines/Extensions/engine.cubeTexture.js.map +1 -1
  57. package/Engines/Extensions/engine.multiRender.js.map +1 -1
  58. package/Engines/Extensions/engine.multiview.d.ts +6 -1
  59. package/Engines/Extensions/engine.multiview.js +27 -7
  60. package/Engines/Extensions/engine.multiview.js.map +1 -1
  61. package/Engines/Extensions/engine.renderTarget.js +1 -6
  62. package/Engines/Extensions/engine.renderTarget.js.map +1 -1
  63. package/Engines/Extensions/engine.renderTargetCube.js +1 -9
  64. package/Engines/Extensions/engine.renderTargetCube.js.map +1 -1
  65. package/Engines/Extensions/engine.webVR.js +1 -5
  66. package/Engines/Extensions/engine.webVR.js.map +1 -1
  67. package/Engines/Native/nativeInterfaces.d.ts +1 -0
  68. package/Engines/Native/nativeInterfaces.js.map +1 -1
  69. package/Engines/Processors/Expressions/Operators/shaderDefineArithmeticOperator.js +3 -0
  70. package/Engines/Processors/Expressions/Operators/shaderDefineArithmeticOperator.js.map +1 -1
  71. package/Engines/Processors/Expressions/shaderDefineExpression.d.ts +37 -0
  72. package/Engines/Processors/Expressions/shaderDefineExpression.js +57 -0
  73. package/Engines/Processors/Expressions/shaderDefineExpression.js.map +1 -1
  74. package/Engines/Processors/shaderCodeInliner.js.map +1 -1
  75. package/Engines/Processors/shaderProcessor.js +34 -14
  76. package/Engines/Processors/shaderProcessor.js.map +1 -1
  77. package/Engines/WebGL/webGLRenderTargetWrapper.d.ts +19 -0
  78. package/Engines/WebGL/webGLRenderTargetWrapper.js +20 -1
  79. package/Engines/WebGL/webGLRenderTargetWrapper.js.map +1 -1
  80. package/Engines/WebGPU/Extensions/engine.cubeTexture.js +1 -7
  81. package/Engines/WebGPU/Extensions/engine.cubeTexture.js.map +1 -1
  82. package/Engines/WebGPU/Extensions/engine.renderTarget.js +1 -8
  83. package/Engines/WebGPU/Extensions/engine.renderTarget.js.map +1 -1
  84. package/Engines/WebGPU/Extensions/engine.renderTargetCube.js +1 -10
  85. package/Engines/WebGPU/Extensions/engine.renderTargetCube.js.map +1 -1
  86. package/Engines/WebGPU/webgpuCacheBindGroups.js.map +1 -1
  87. package/Engines/WebGPU/webgpuCacheRenderPipeline.js.map +1 -1
  88. package/Engines/WebGPU/webgpuCacheSampler.js +1 -6
  89. package/Engines/WebGPU/webgpuCacheSampler.js.map +1 -1
  90. package/Engines/WebGPU/webgpuShaderProcessor.js.map +1 -1
  91. package/Engines/WebGPU/webgpuTintWASM.js +1 -4
  92. package/Engines/WebGPU/webgpuTintWASM.js.map +1 -1
  93. package/Engines/engine.d.ts +8 -1
  94. package/Engines/engine.js.map +1 -1
  95. package/Engines/engineCapabilities.d.ts +2 -0
  96. package/Engines/engineCapabilities.js.map +1 -1
  97. package/Engines/nativeEngine.d.ts +2 -0
  98. package/Engines/nativeEngine.js +16 -0
  99. package/Engines/nativeEngine.js.map +1 -1
  100. package/Engines/nullEngine.js +1 -9
  101. package/Engines/nullEngine.js.map +1 -1
  102. package/Engines/thinEngine.js +7 -9
  103. package/Engines/thinEngine.js.map +1 -1
  104. package/Engines/webgpuEngine.js +3 -14
  105. package/Engines/webgpuEngine.js.map +1 -1
  106. package/Gamepads/Controllers/gearVRController.js.map +1 -1
  107. package/Gamepads/Controllers/oculusTouchController.js.map +1 -1
  108. package/Gamepads/Controllers/poseEnabledController.js.map +1 -1
  109. package/Gamepads/Controllers/windowsMotionController.js.map +1 -1
  110. package/Gamepads/gamepad.js.map +1 -1
  111. package/Gizmos/cameraGizmo.js.map +1 -1
  112. package/Gizmos/gizmo.js.map +1 -1
  113. package/Gizmos/lightGizmo.js.map +1 -1
  114. package/Gizmos/planeRotationGizmo.js.map +1 -1
  115. package/Helpers/environmentHelper.js +2 -8
  116. package/Helpers/environmentHelper.js.map +1 -1
  117. package/Helpers/textureDome.js.map +1 -1
  118. package/Inputs/scene.inputManager.js +4 -1
  119. package/Inputs/scene.inputManager.js.map +1 -1
  120. package/Layers/effectLayer.js +1 -8
  121. package/Layers/effectLayer.js.map +1 -1
  122. package/Layers/glowLayer.js +1 -12
  123. package/Layers/glowLayer.js.map +1 -1
  124. package/Layers/highlightLayer.js +1 -11
  125. package/Layers/highlightLayer.js.map +1 -1
  126. package/Legacy/legacy.js +1 -1
  127. package/Legacy/legacy.js.map +1 -1
  128. package/LensFlares/lensFlareSystem.js.map +1 -1
  129. package/Lights/Shadows/shadowGenerator.js +1 -4
  130. package/Lights/Shadows/shadowGenerator.js.map +1 -1
  131. package/Lights/directionalLight.js.map +1 -1
  132. package/Lights/hemisphericLight.js.map +1 -1
  133. package/Lights/light.js.map +1 -1
  134. package/Lights/spotLight.js.map +1 -1
  135. package/Loading/loadingScreen.js.map +1 -1
  136. package/Loading/sceneLoader.d.ts +8 -8
  137. package/Loading/sceneLoader.js +35 -19
  138. package/Loading/sceneLoader.js.map +1 -1
  139. package/Materials/Background/backgroundMaterial.js.map +1 -1
  140. package/Materials/Node/Blocks/Dual/currentScreenBlock.d.ts +1 -1
  141. package/Materials/Node/Blocks/Dual/lightBlock.js.map +1 -1
  142. package/Materials/Node/Blocks/Dual/reflectionTextureBaseBlock.js.map +1 -1
  143. package/Materials/Node/Blocks/Dual/sceneDepthBlock.d.ts +1 -1
  144. package/Materials/Node/Blocks/Dual/sceneDepthBlock.js.map +1 -1
  145. package/Materials/Node/Blocks/Fragment/fragmentOutputBlock.js.map +1 -1
  146. package/Materials/Node/Blocks/Fragment/heightToNormalBlock.js.map +1 -1
  147. package/Materials/Node/Blocks/Fragment/imageProcessingBlock.js.map +1 -1
  148. package/Materials/Node/Blocks/Fragment/perturbNormalBlock.js.map +1 -1
  149. package/Materials/Node/Blocks/PBR/clearCoatBlock.js.map +1 -1
  150. package/Materials/Node/Blocks/PBR/pbrMetallicRoughnessBlock.js.map +1 -1
  151. package/Materials/Node/Blocks/PBR/reflectionBlock.js.map +1 -1
  152. package/Materials/Node/Blocks/PBR/refractionBlock.js.map +1 -1
  153. package/Materials/Node/Blocks/PBR/sheenBlock.js.map +1 -1
  154. package/Materials/Node/Blocks/addBlock.js +2 -0
  155. package/Materials/Node/Blocks/addBlock.js.map +1 -1
  156. package/Materials/Node/Blocks/clampBlock.js.map +1 -1
  157. package/Materials/Node/Blocks/cloudBlock.js.map +1 -1
  158. package/Materials/Node/Blocks/customBlock.d.ts +1 -0
  159. package/Materials/Node/Blocks/customBlock.js +18 -2
  160. package/Materials/Node/Blocks/customBlock.js.map +1 -1
  161. package/Materials/Node/Blocks/divideBlock.js +2 -0
  162. package/Materials/Node/Blocks/divideBlock.js.map +1 -1
  163. package/Materials/Node/Blocks/meshAttributeExistsBlock.js.map +1 -1
  164. package/Materials/Node/Blocks/multiplyBlock.js +2 -0
  165. package/Materials/Node/Blocks/multiplyBlock.js.map +1 -1
  166. package/Materials/Node/Blocks/remapBlock.js.map +1 -1
  167. package/Materials/Node/Blocks/subtractBlock.js +2 -0
  168. package/Materials/Node/Blocks/subtractBlock.js.map +1 -1
  169. package/Materials/Node/Blocks/triPlanarBlock.js.map +1 -1
  170. package/Materials/Node/Blocks/worleyNoise3DBlock.js.map +1 -1
  171. package/Materials/Node/nodeMaterial.d.ts +6 -1
  172. package/Materials/Node/nodeMaterial.js +6 -10
  173. package/Materials/Node/nodeMaterial.js.map +1 -1
  174. package/Materials/PBR/pbrAnisotropicConfiguration.js.map +1 -1
  175. package/Materials/PBR/pbrBRDFConfiguration.js.map +1 -1
  176. package/Materials/PBR/pbrBaseMaterial.js +1 -5
  177. package/Materials/PBR/pbrBaseMaterial.js.map +1 -1
  178. package/Materials/PBR/pbrBaseSimpleMaterial.js.map +1 -1
  179. package/Materials/PBR/pbrClearCoatConfiguration.js.map +1 -1
  180. package/Materials/PBR/pbrIridescenceConfiguration.js.map +1 -1
  181. package/Materials/PBR/pbrMaterial.d.ts +2 -1
  182. package/Materials/PBR/pbrMaterial.js +6 -13
  183. package/Materials/PBR/pbrMaterial.js.map +1 -1
  184. package/Materials/PBR/pbrMetallicRoughnessMaterial.js.map +1 -1
  185. package/Materials/PBR/pbrSheenConfiguration.js.map +1 -1
  186. package/Materials/PBR/pbrSpecularGlossinessMaterial.js.map +1 -1
  187. package/Materials/PBR/pbrSubSurfaceConfiguration.js.map +1 -1
  188. package/Materials/Textures/Procedurals/proceduralTexture.js.map +1 -1
  189. package/Materials/Textures/baseTexture.js.map +1 -1
  190. package/Materials/Textures/cubeTexture.js.map +1 -1
  191. package/Materials/Textures/equiRectangularCubeTexture.js.map +1 -1
  192. package/Materials/Textures/hdrCubeTexture.js.map +1 -1
  193. package/Materials/Textures/htmlElementTexture.js +1 -4
  194. package/Materials/Textures/htmlElementTexture.js.map +1 -1
  195. package/Materials/Textures/internalTexture.js.map +1 -1
  196. package/Materials/Textures/renderTargetTexture.js.map +1 -1
  197. package/Materials/Textures/texture.js.map +1 -1
  198. package/Materials/Textures/videoTexture.js +9 -22
  199. package/Materials/Textures/videoTexture.js.map +1 -1
  200. package/Materials/colorCurves.js.map +1 -1
  201. package/Materials/effect.js.map +1 -1
  202. package/Materials/greasedLinePluginMaterial.d.ts +307 -0
  203. package/Materials/greasedLinePluginMaterial.js +553 -0
  204. package/Materials/greasedLinePluginMaterial.js.map +1 -0
  205. package/Materials/imageProcessingConfiguration.js.map +1 -1
  206. package/Materials/index.d.ts +1 -0
  207. package/Materials/index.js +1 -0
  208. package/Materials/index.js.map +1 -1
  209. package/Materials/material.d.ts +3 -0
  210. package/Materials/material.decalMapConfiguration.js.map +1 -1
  211. package/Materials/material.detailMapConfiguration.js.map +1 -1
  212. package/Materials/material.js +40 -5
  213. package/Materials/material.js.map +1 -1
  214. package/Materials/materialPluginBase.d.ts +2 -2
  215. package/Materials/materialPluginBase.js +2 -2
  216. package/Materials/materialPluginBase.js.map +1 -1
  217. package/Materials/materialPluginManager.d.ts +3 -2
  218. package/Materials/materialPluginManager.js +3 -1
  219. package/Materials/materialPluginManager.js.map +1 -1
  220. package/Materials/multiMaterial.js +1 -1
  221. package/Materials/multiMaterial.js.map +1 -1
  222. package/Materials/shaderMaterial.d.ts +23 -4
  223. package/Materials/shaderMaterial.js +41 -21
  224. package/Materials/shaderMaterial.js.map +1 -1
  225. package/Materials/standardMaterial.d.ts +2 -1
  226. package/Materials/standardMaterial.js +4 -1
  227. package/Materials/standardMaterial.js.map +1 -1
  228. package/Materials/uniformBuffer.js.map +1 -1
  229. package/Maths/math.vector.d.ts +2 -1
  230. package/Maths/math.vector.js +3 -2
  231. package/Maths/math.vector.js.map +1 -1
  232. package/Meshes/Builders/decalBuilder.js +4 -4
  233. package/Meshes/Builders/decalBuilder.js.map +1 -1
  234. package/Meshes/Builders/greasedLineBuilder.d.ts +105 -0
  235. package/Meshes/Builders/greasedLineBuilder.js +330 -0
  236. package/Meshes/Builders/greasedLineBuilder.js.map +1 -0
  237. package/Meshes/Builders/index.d.ts +1 -0
  238. package/Meshes/Builders/index.js +1 -0
  239. package/Meshes/Builders/index.js.map +1 -1
  240. package/Meshes/abstractMesh.d.ts +3 -2
  241. package/Meshes/abstractMesh.js +5 -3
  242. package/Meshes/abstractMesh.js.map +1 -1
  243. package/Meshes/greasedLineMesh.d.ts +189 -0
  244. package/Meshes/greasedLineMesh.js +437 -0
  245. package/Meshes/greasedLineMesh.js.map +1 -0
  246. package/Meshes/index.d.ts +1 -0
  247. package/Meshes/index.js +1 -0
  248. package/Meshes/index.js.map +1 -1
  249. package/Meshes/mesh.d.ts +4 -0
  250. package/Meshes/mesh.js +20 -10
  251. package/Meshes/mesh.js.map +1 -1
  252. package/Meshes/mesh.vertexData.js.map +1 -1
  253. package/Meshes/meshUVSpaceRenderer.js +1 -8
  254. package/Meshes/meshUVSpaceRenderer.js.map +1 -1
  255. package/Meshes/transformNode.js.map +1 -1
  256. package/Misc/basis.js.map +1 -1
  257. package/Misc/deepCopier.js +8 -2
  258. package/Misc/deepCopier.js.map +1 -1
  259. package/Misc/dumpTools.d.ts +4 -3
  260. package/Misc/dumpTools.js +5 -4
  261. package/Misc/dumpTools.js.map +1 -1
  262. package/Misc/environmentTextureTools.js +1 -1
  263. package/Misc/environmentTextureTools.js.map +1 -1
  264. package/Misc/fileTools.js +10 -10
  265. package/Misc/fileTools.js.map +1 -1
  266. package/Misc/greasedLineTools.d.ts +141 -0
  267. package/Misc/greasedLineTools.js +263 -0
  268. package/Misc/greasedLineTools.js.map +1 -0
  269. package/Misc/index.d.ts +1 -0
  270. package/Misc/index.js +1 -0
  271. package/Misc/index.js.map +1 -1
  272. package/Misc/khronosTextureContainer.js.map +1 -1
  273. package/Misc/observable.d.ts +11 -0
  274. package/Misc/observable.js +26 -1
  275. package/Misc/observable.js.map +1 -1
  276. package/Misc/sceneOptimizer.js.map +1 -1
  277. package/Misc/screenshotTools.d.ts +15 -5
  278. package/Misc/screenshotTools.js +23 -13
  279. package/Misc/screenshotTools.js.map +1 -1
  280. package/Misc/smartArray.js.map +1 -1
  281. package/Misc/tools.d.ts +21 -9
  282. package/Misc/tools.js +21 -9
  283. package/Misc/tools.js.map +1 -1
  284. package/Misc/videoRecorder.js +1 -4
  285. package/Misc/videoRecorder.js.map +1 -1
  286. package/Misc/virtualJoystick.js +1 -4
  287. package/Misc/virtualJoystick.js.map +1 -1
  288. package/Misc/webRequest.js.map +1 -1
  289. package/Morph/morphTarget.js.map +1 -1
  290. package/Morph/morphTargetManager.js.map +1 -1
  291. package/Offline/database.js.map +1 -1
  292. package/Particles/baseParticleSystem.js.map +1 -1
  293. package/Particles/gpuParticleSystem.d.ts +1 -0
  294. package/Particles/gpuParticleSystem.js +5 -8
  295. package/Particles/gpuParticleSystem.js.map +1 -1
  296. package/Particles/particle.js.map +1 -1
  297. package/Particles/particleSystem.js +1 -1
  298. package/Particles/particleSystem.js.map +1 -1
  299. package/Particles/particleSystemSet.js.map +1 -1
  300. package/Physics/physicsHelper.js +4 -4
  301. package/Physics/physicsHelper.js.map +1 -1
  302. package/Physics/physicsRaycastResult.d.ts +3 -1
  303. package/Physics/physicsRaycastResult.js +10 -1
  304. package/Physics/physicsRaycastResult.js.map +1 -1
  305. package/Physics/v1/Plugins/ammoJSPlugin.js.map +1 -1
  306. package/Physics/v1/physicsImpostor.js.map +1 -1
  307. package/Physics/v2/IPhysicsEnginePlugin.d.ts +10 -0
  308. package/Physics/v2/IPhysicsEnginePlugin.js.map +1 -1
  309. package/Physics/v2/Plugins/havokPlugin.d.ts +3 -2
  310. package/Physics/v2/Plugins/havokPlugin.js +9 -6
  311. package/Physics/v2/Plugins/havokPlugin.js.map +1 -1
  312. package/PostProcesses/RenderPipeline/Pipelines/defaultRenderingPipeline.js.map +1 -1
  313. package/PostProcesses/RenderPipeline/Pipelines/ssao2RenderingPipeline.js.map +1 -1
  314. package/PostProcesses/RenderPipeline/Pipelines/ssaoRenderingPipeline.js.map +1 -1
  315. package/PostProcesses/RenderPipeline/Pipelines/ssrRenderingPipeline.js.map +1 -1
  316. package/PostProcesses/RenderPipeline/Pipelines/standardRenderingPipeline.js.map +1 -1
  317. package/PostProcesses/RenderPipeline/postProcessRenderPipeline.js.map +1 -1
  318. package/PostProcesses/blackAndWhitePostProcess.js.map +1 -1
  319. package/PostProcesses/bloomMergePostProcess.js.map +1 -1
  320. package/PostProcesses/blurPostProcess.js.map +1 -1
  321. package/PostProcesses/circleOfConfusionPostProcess.js.map +1 -1
  322. package/PostProcesses/colorCorrectionPostProcess.js.map +1 -1
  323. package/PostProcesses/convolutionPostProcess.js.map +1 -1
  324. package/PostProcesses/depthOfFieldBlurPostProcess.js.map +1 -1
  325. package/PostProcesses/extractHighlightsPostProcess.js.map +1 -1
  326. package/PostProcesses/filterPostProcess.js.map +1 -1
  327. package/PostProcesses/grainPostProcess.js.map +1 -1
  328. package/PostProcesses/imageProcessingPostProcess.js.map +1 -1
  329. package/PostProcesses/motionBlurPostProcess.js.map +1 -1
  330. package/PostProcesses/postProcess.js.map +1 -1
  331. package/PostProcesses/refractionPostProcess.js.map +1 -1
  332. package/PostProcesses/screenSpaceCurvaturePostProcess.js.map +1 -1
  333. package/PostProcesses/screenSpaceReflectionPostProcess.js.map +1 -1
  334. package/PostProcesses/sharpenPostProcess.js.map +1 -1
  335. package/PostProcesses/volumetricLightScatteringPostProcess.js.map +1 -1
  336. package/Probes/reflectionProbe.js.map +1 -1
  337. package/Rendering/boundingBoxRenderer.js +2 -4
  338. package/Rendering/boundingBoxRenderer.js.map +1 -1
  339. package/Rendering/depthPeelingRenderer.js.map +1 -1
  340. package/Rendering/depthRenderer.js.map +1 -1
  341. package/Rendering/geometryBufferRenderer.js.map +1 -1
  342. package/Rendering/outlineRenderer.js.map +1 -1
  343. package/Rendering/prePassRenderer.js.map +1 -1
  344. package/Rendering/renderingGroup.js.map +1 -1
  345. package/Rendering/renderingManager.js.map +1 -1
  346. package/Rendering/subSurfaceConfiguration.js.map +1 -1
  347. package/Rendering/utilityLayerRenderer.js.map +1 -1
  348. package/Shaders/ShadersInclude/pbrBlockAlbedoOpacity.js +4 -2
  349. package/Shaders/ShadersInclude/pbrBlockAlbedoOpacity.js.map +1 -1
  350. package/Shaders/ShadersInclude/pbrDebug.js +11 -2
  351. package/Shaders/ShadersInclude/pbrDebug.js.map +1 -1
  352. package/Shaders/velocity.fragment.d.ts +5 -0
  353. package/Shaders/velocity.fragment.js +13 -0
  354. package/Shaders/velocity.fragment.js.map +1 -0
  355. package/Shaders/velocity.vertex.d.ts +7 -0
  356. package/Shaders/velocity.vertex.js +23 -0
  357. package/Shaders/velocity.vertex.js.map +1 -0
  358. package/Sprites/spriteManager.js.map +1 -1
  359. package/XR/features/WebXRAnchorSystem.js.map +1 -1
  360. package/XR/features/WebXRBackgroundRemover.js.map +1 -1
  361. package/XR/features/WebXRControllerMovement.js.map +1 -1
  362. package/XR/features/WebXRControllerPhysics.js +4 -13
  363. package/XR/features/WebXRControllerPhysics.js.map +1 -1
  364. package/XR/features/WebXRControllerPointerSelection.js.map +1 -1
  365. package/XR/features/WebXRControllerTeleportation.js.map +1 -1
  366. package/XR/features/WebXRDOMOverlay.js.map +1 -1
  367. package/XR/features/WebXRDepthSensing.js.map +1 -1
  368. package/XR/features/WebXREyeTracking.js.map +1 -1
  369. package/XR/features/WebXRFeaturePointSystem.js.map +1 -1
  370. package/XR/features/WebXRHandTracking.js +2 -8
  371. package/XR/features/WebXRHandTracking.js.map +1 -1
  372. package/XR/features/WebXRHitTest.js.map +1 -1
  373. package/XR/features/WebXRHitTestLegacy.js.map +1 -1
  374. package/XR/features/WebXRImageTracking.js.map +1 -1
  375. package/XR/features/WebXRLayers.js +18 -8
  376. package/XR/features/WebXRLayers.js.map +1 -1
  377. package/XR/features/WebXRLightEstimation.js.map +1 -1
  378. package/XR/features/WebXRMeshDetector.js.map +1 -1
  379. package/XR/features/WebXRNearInteraction.js.map +1 -1
  380. package/XR/features/WebXRPlaneDetector.js.map +1 -1
  381. package/XR/features/WebXRSpaceWarp.d.ts +138 -0
  382. package/XR/features/WebXRSpaceWarp.js +290 -0
  383. package/XR/features/WebXRSpaceWarp.js.map +1 -0
  384. package/XR/features/index.d.ts +1 -0
  385. package/XR/features/index.js +1 -0
  386. package/XR/features/index.js.map +1 -1
  387. package/XR/motionController/webXRAbstractMotionController.js +1 -4
  388. package/XR/motionController/webXRAbstractMotionController.js.map +1 -1
  389. package/XR/motionController/webXRControllerComponent.js.map +1 -1
  390. package/XR/motionController/webXRGenericMotionController.js.map +1 -1
  391. package/XR/motionController/webXRHTCViveMotionController.js.map +1 -1
  392. package/XR/motionController/webXRMicrosoftMixedRealityController.js.map +1 -1
  393. package/XR/motionController/webXROculusTouchMotionController.js.map +1 -1
  394. package/XR/webXRCamera.js.map +1 -1
  395. package/XR/webXRDefaultExperience.js +6 -28
  396. package/XR/webXRDefaultExperience.js.map +1 -1
  397. package/XR/webXRFeaturesManager.d.ts +4 -0
  398. package/XR/webXRFeaturesManager.js +5 -4
  399. package/XR/webXRFeaturesManager.js.map +1 -1
  400. package/XR/webXRInput.js +1 -6
  401. package/XR/webXRInput.js.map +1 -1
  402. package/XR/webXRSessionManager.d.ts +4 -0
  403. package/XR/webXRSessionManager.js +6 -0
  404. package/XR/webXRSessionManager.js.map +1 -1
  405. package/abstractScene.js.map +1 -1
  406. package/assetContainer.js +1 -4
  407. package/assetContainer.js.map +1 -1
  408. package/node.js.map +1 -1
  409. package/package.json +2 -4
  410. package/scene.d.ts +5 -2
  411. package/scene.js +9 -12
  412. package/scene.js.map +1 -1
@@ -1 +1 @@
1
- {"version":3,"file":"webXRGenericMotionController.js","sourceRoot":"","sources":["../../../../../lts/core/generated/XR/motionController/webXRGenericMotionController.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,6BAA6B,EAAE,MAAM,iCAAiC,CAAC;AAGhF,OAAO,EAAE,IAAI,EAAE,MAAM,mBAAmB,CAAC;AACzC,OAAO,EAAE,UAAU,EAAE,MAAM,yBAAyB,CAAC;AAErD;;GAEG;AACH,MAAM,OAAO,mCAAoC,SAAQ,6BAA6B;IAQlF,YAAY,KAAY,EAAE,aAA6C,EAAE,UAAsC;QAC3G,KAAK,CAAC,KAAK,EAAE,oBAAoB,CAAC,UAAU,CAAC,EAAE,aAAa,EAAE,UAAU,CAAC,CAAC;QAHvE,cAAS,GAAG,mCAAmC,CAAC,SAAS,CAAC;IAIjE,CAAC;IAES,mBAAmB;QACzB,OAAO;YACH,QAAQ,EAAE,iBAAiB;YAC3B,IAAI,EAAE,4CAA4C;SACrD,CAAC;IACN,CAAC;IAES,2BAA2B;QACjC,OAAO,IAAI,CAAC;IAChB,CAAC;IAED,6DAA6D;IACnD,mBAAmB,CAAC,MAAsB;QAChD,gBAAgB;IACpB,CAAC;IAES,YAAY,CAAC,MAAsB;QACzC,IAAI,CAAC,QAAQ,GAAG,IAAI,IAAI,CAAC,IAAI,CAAC,SAAS,GAAG,GAAG,GAAG,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC;QAE7E,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,EAAE;YACpB,IAAI,CAAC,UAAU,GAAG,KAAK,CAAC;YACxB,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE;gBACd,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;aACjC;QACL,CAAC,CAAC,CAAC;QAEH,IAAI,CAAC,QAAQ,CAAC,kBAAkB,GAAG,UAAU,CAAC,eAAe,CAAC,CAAC,EAAE,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC;IACjF,CAAC;IAES,YAAY;QAClB,QAAQ;IACZ,CAAC;;AA1CD;;GAEG;AACW,6CAAS,GAAG,iBAAiB,CAAC;AA0ChD,gJAAgJ;AAChJ,MAAM,oBAAoB,GAA+B;IACrD,IAAI,EAAE;QACF,iBAAiB,EAAE,qBAAqB;QACxC,UAAU,EAAE;YACR,gEAAgE;YAChE,qBAAqB,EAAE;gBACnB,IAAI,EAAE,SAAS;gBACf,cAAc,EAAE;oBACZ,MAAM,EAAE,CAAC;iBACZ;gBACD,YAAY,EAAE,qBAAqB;gBACnC,eAAe,EAAE,EAAE;aACtB;SACJ;QACD,cAAc,EAAE,aAAa;QAC7B,YAAY,EAAE,sBAAsB;QACpC,SAAS,EAAE,UAAU;KACxB;IACD,KAAK,EAAE;QACH,iBAAiB,EAAE,qBAAqB;QACxC,UAAU,EAAE;YACR,gEAAgE;YAChE,qBAAqB,EAAE;gBACnB,IAAI,EAAE,SAAS;gBACf,cAAc,EAAE;oBACZ,MAAM,EAAE,CAAC;iBACZ;gBACD,YAAY,EAAE,qBAAqB;gBACnC,eAAe,EAAE,EAAE;aACtB;SACJ;QACD,cAAc,EAAE,aAAa;QAC7B,YAAY,EAAE,uBAAuB;QACrC,SAAS,EAAE,WAAW;KACzB;IACD,IAAI,EAAE;QACF,iBAAiB,EAAE,qBAAqB;QACxC,UAAU,EAAE;YACR,gEAAgE;YAChE,qBAAqB,EAAE;gBACnB,IAAI,EAAE,SAAS;gBACf,cAAc,EAAE;oBACZ,MAAM,EAAE,CAAC;iBACZ;gBACD,YAAY,EAAE,qBAAqB;gBACnC,eAAe,EAAE,EAAE;aACtB;SACJ;QACD,cAAc,EAAE,aAAa;QAC7B,YAAY,EAAE,sBAAsB;QACpC,SAAS,EAAE,UAAU;KACxB;CACJ,CAAC","sourcesContent":["import type { IMinimalMotionControllerObject, MotionControllerHandedness, IMotionControllerLayoutMap } from \"./webXRAbstractMotionController\";\r\nimport { WebXRAbstractMotionController } from \"./webXRAbstractMotionController\";\r\nimport type { AbstractMesh } from \"../../Meshes/abstractMesh\";\r\nimport type { Scene } from \"../../scene\";\r\nimport { Mesh } from \"../../Meshes/mesh\";\r\nimport { Quaternion } from \"../../Maths/math.vector\";\r\n\r\n/**\r\n * A generic trigger-only motion controller for WebXR\r\n */\r\nexport class WebXRGenericTriggerMotionController extends WebXRAbstractMotionController {\r\n /**\r\n * Static version of the profile id of this controller\r\n */\r\n public static ProfileId = \"generic-trigger\";\r\n\r\n public profileId = WebXRGenericTriggerMotionController.ProfileId;\r\n\r\n constructor(scene: Scene, gamepadObject: IMinimalMotionControllerObject, handedness: MotionControllerHandedness) {\r\n super(scene, GenericTriggerLayout[handedness], gamepadObject, handedness);\r\n }\r\n\r\n protected _getFilenameAndPath(): { filename: string; path: string } {\r\n return {\r\n filename: \"generic.babylon\",\r\n path: \"https://controllers.babylonjs.com/generic/\",\r\n };\r\n }\r\n\r\n protected _getModelLoadingConstraints(): boolean {\r\n return true;\r\n }\r\n\r\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\r\n protected _processLoadedModel(meshes: AbstractMesh[]): void {\r\n // nothing to do\r\n }\r\n\r\n protected _setRootMesh(meshes: AbstractMesh[]): void {\r\n this.rootMesh = new Mesh(this.profileId + \" \" + this.handedness, this.scene);\r\n\r\n meshes.forEach((mesh) => {\r\n mesh.isPickable = false;\r\n if (!mesh.parent) {\r\n mesh.setParent(this.rootMesh);\r\n }\r\n });\r\n\r\n this.rootMesh.rotationQuaternion = Quaternion.FromEulerAngles(0, Math.PI, 0);\r\n }\r\n\r\n protected _updateModel(): void {\r\n // no-op\r\n }\r\n}\r\n\r\n// https://github.com/immersive-web/webxr-input-profiles/blob/master/packages/registry/profiles/generic/generic-trigger-touchpad-thumbstick.json\r\nconst GenericTriggerLayout: IMotionControllerLayoutMap = {\r\n left: {\r\n selectComponentId: \"xr-standard-trigger\",\r\n components: {\r\n // eslint-disable-next-line @typescript-eslint/naming-convention\r\n \"xr-standard-trigger\": {\r\n type: \"trigger\",\r\n gamepadIndices: {\r\n button: 0,\r\n },\r\n rootNodeName: \"xr_standard_trigger\",\r\n visualResponses: {},\r\n },\r\n },\r\n gamepadMapping: \"xr-standard\",\r\n rootNodeName: \"generic-trigger-left\",\r\n assetPath: \"left.glb\",\r\n },\r\n right: {\r\n selectComponentId: \"xr-standard-trigger\",\r\n components: {\r\n // eslint-disable-next-line @typescript-eslint/naming-convention\r\n \"xr-standard-trigger\": {\r\n type: \"trigger\",\r\n gamepadIndices: {\r\n button: 0,\r\n },\r\n rootNodeName: \"xr_standard_trigger\",\r\n visualResponses: {},\r\n },\r\n },\r\n gamepadMapping: \"xr-standard\",\r\n rootNodeName: \"generic-trigger-right\",\r\n assetPath: \"right.glb\",\r\n },\r\n none: {\r\n selectComponentId: \"xr-standard-trigger\",\r\n components: {\r\n // eslint-disable-next-line @typescript-eslint/naming-convention\r\n \"xr-standard-trigger\": {\r\n type: \"trigger\",\r\n gamepadIndices: {\r\n button: 0,\r\n },\r\n rootNodeName: \"xr_standard_trigger\",\r\n visualResponses: {},\r\n },\r\n },\r\n gamepadMapping: \"xr-standard\",\r\n rootNodeName: \"generic-trigger-none\",\r\n assetPath: \"none.glb\",\r\n },\r\n};\r\n"]}
1
+ {"version":3,"file":"webXRGenericMotionController.js","sourceRoot":"","sources":["../../../../../lts/core/generated/XR/motionController/webXRGenericMotionController.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,6BAA6B,EAAE,MAAM,iCAAiC,CAAC;AAGhF,OAAO,EAAE,IAAI,EAAE,MAAM,mBAAmB,CAAC;AACzC,OAAO,EAAE,UAAU,EAAE,MAAM,yBAAyB,CAAC;AAErD;;GAEG;AACH,MAAM,OAAO,mCAAoC,SAAQ,6BAA6B;IAQlF,YAAY,KAAY,EAAE,aAA6C,EAAE,UAAsC;QAC3G,KAAK,CAAC,KAAK,EAAE,oBAAoB,CAAC,UAAU,CAAC,EAAE,aAAa,EAAE,UAAU,CAAC,CAAC;QAHvE,cAAS,GAAG,mCAAmC,CAAC,SAAS,CAAC;IAIjE,CAAC;IAES,mBAAmB;QACzB,OAAO;YACH,QAAQ,EAAE,iBAAiB;YAC3B,IAAI,EAAE,4CAA4C;SACrD,CAAC;IACN,CAAC;IAES,2BAA2B;QACjC,OAAO,IAAI,CAAC;IAChB,CAAC;IAED,6DAA6D;IACnD,mBAAmB,CAAC,MAAsB;QAChD,gBAAgB;IACpB,CAAC;IAES,YAAY,CAAC,MAAsB;QACzC,IAAI,CAAC,QAAQ,GAAG,IAAI,IAAI,CAAC,IAAI,CAAC,SAAS,GAAG,GAAG,GAAG,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC;QAE7E,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,EAAE;YACpB,IAAI,CAAC,UAAU,GAAG,KAAK,CAAC;YACxB,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE;gBACd,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;aACjC;QACL,CAAC,CAAC,CAAC;QAEH,IAAI,CAAC,QAAQ,CAAC,kBAAkB,GAAG,UAAU,CAAC,eAAe,CAAC,CAAC,EAAE,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC;IACjF,CAAC;IAES,YAAY;QAClB,QAAQ;IACZ,CAAC;;AA1CD;;GAEG;AACW,6CAAS,GAAG,iBAAiB,AAApB,CAAqB;AA0ChD,gJAAgJ;AAChJ,MAAM,oBAAoB,GAA+B;IACrD,IAAI,EAAE;QACF,iBAAiB,EAAE,qBAAqB;QACxC,UAAU,EAAE;YACR,gEAAgE;YAChE,qBAAqB,EAAE;gBACnB,IAAI,EAAE,SAAS;gBACf,cAAc,EAAE;oBACZ,MAAM,EAAE,CAAC;iBACZ;gBACD,YAAY,EAAE,qBAAqB;gBACnC,eAAe,EAAE,EAAE;aACtB;SACJ;QACD,cAAc,EAAE,aAAa;QAC7B,YAAY,EAAE,sBAAsB;QACpC,SAAS,EAAE,UAAU;KACxB;IACD,KAAK,EAAE;QACH,iBAAiB,EAAE,qBAAqB;QACxC,UAAU,EAAE;YACR,gEAAgE;YAChE,qBAAqB,EAAE;gBACnB,IAAI,EAAE,SAAS;gBACf,cAAc,EAAE;oBACZ,MAAM,EAAE,CAAC;iBACZ;gBACD,YAAY,EAAE,qBAAqB;gBACnC,eAAe,EAAE,EAAE;aACtB;SACJ;QACD,cAAc,EAAE,aAAa;QAC7B,YAAY,EAAE,uBAAuB;QACrC,SAAS,EAAE,WAAW;KACzB;IACD,IAAI,EAAE;QACF,iBAAiB,EAAE,qBAAqB;QACxC,UAAU,EAAE;YACR,gEAAgE;YAChE,qBAAqB,EAAE;gBACnB,IAAI,EAAE,SAAS;gBACf,cAAc,EAAE;oBACZ,MAAM,EAAE,CAAC;iBACZ;gBACD,YAAY,EAAE,qBAAqB;gBACnC,eAAe,EAAE,EAAE;aACtB;SACJ;QACD,cAAc,EAAE,aAAa;QAC7B,YAAY,EAAE,sBAAsB;QACpC,SAAS,EAAE,UAAU;KACxB;CACJ,CAAC","sourcesContent":["import type { IMinimalMotionControllerObject, MotionControllerHandedness, IMotionControllerLayoutMap } from \"./webXRAbstractMotionController\";\r\nimport { WebXRAbstractMotionController } from \"./webXRAbstractMotionController\";\r\nimport type { AbstractMesh } from \"../../Meshes/abstractMesh\";\r\nimport type { Scene } from \"../../scene\";\r\nimport { Mesh } from \"../../Meshes/mesh\";\r\nimport { Quaternion } from \"../../Maths/math.vector\";\r\n\r\n/**\r\n * A generic trigger-only motion controller for WebXR\r\n */\r\nexport class WebXRGenericTriggerMotionController extends WebXRAbstractMotionController {\r\n /**\r\n * Static version of the profile id of this controller\r\n */\r\n public static ProfileId = \"generic-trigger\";\r\n\r\n public profileId = WebXRGenericTriggerMotionController.ProfileId;\r\n\r\n constructor(scene: Scene, gamepadObject: IMinimalMotionControllerObject, handedness: MotionControllerHandedness) {\r\n super(scene, GenericTriggerLayout[handedness], gamepadObject, handedness);\r\n }\r\n\r\n protected _getFilenameAndPath(): { filename: string; path: string } {\r\n return {\r\n filename: \"generic.babylon\",\r\n path: \"https://controllers.babylonjs.com/generic/\",\r\n };\r\n }\r\n\r\n protected _getModelLoadingConstraints(): boolean {\r\n return true;\r\n }\r\n\r\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\r\n protected _processLoadedModel(meshes: AbstractMesh[]): void {\r\n // nothing to do\r\n }\r\n\r\n protected _setRootMesh(meshes: AbstractMesh[]): void {\r\n this.rootMesh = new Mesh(this.profileId + \" \" + this.handedness, this.scene);\r\n\r\n meshes.forEach((mesh) => {\r\n mesh.isPickable = false;\r\n if (!mesh.parent) {\r\n mesh.setParent(this.rootMesh);\r\n }\r\n });\r\n\r\n this.rootMesh.rotationQuaternion = Quaternion.FromEulerAngles(0, Math.PI, 0);\r\n }\r\n\r\n protected _updateModel(): void {\r\n // no-op\r\n }\r\n}\r\n\r\n// https://github.com/immersive-web/webxr-input-profiles/blob/master/packages/registry/profiles/generic/generic-trigger-touchpad-thumbstick.json\r\nconst GenericTriggerLayout: IMotionControllerLayoutMap = {\r\n left: {\r\n selectComponentId: \"xr-standard-trigger\",\r\n components: {\r\n // eslint-disable-next-line @typescript-eslint/naming-convention\r\n \"xr-standard-trigger\": {\r\n type: \"trigger\",\r\n gamepadIndices: {\r\n button: 0,\r\n },\r\n rootNodeName: \"xr_standard_trigger\",\r\n visualResponses: {},\r\n },\r\n },\r\n gamepadMapping: \"xr-standard\",\r\n rootNodeName: \"generic-trigger-left\",\r\n assetPath: \"left.glb\",\r\n },\r\n right: {\r\n selectComponentId: \"xr-standard-trigger\",\r\n components: {\r\n // eslint-disable-next-line @typescript-eslint/naming-convention\r\n \"xr-standard-trigger\": {\r\n type: \"trigger\",\r\n gamepadIndices: {\r\n button: 0,\r\n },\r\n rootNodeName: \"xr_standard_trigger\",\r\n visualResponses: {},\r\n },\r\n },\r\n gamepadMapping: \"xr-standard\",\r\n rootNodeName: \"generic-trigger-right\",\r\n assetPath: \"right.glb\",\r\n },\r\n none: {\r\n selectComponentId: \"xr-standard-trigger\",\r\n components: {\r\n // eslint-disable-next-line @typescript-eslint/naming-convention\r\n \"xr-standard-trigger\": {\r\n type: \"trigger\",\r\n gamepadIndices: {\r\n button: 0,\r\n },\r\n rootNodeName: \"xr_standard_trigger\",\r\n visualResponses: {},\r\n },\r\n },\r\n gamepadMapping: \"xr-standard\",\r\n rootNodeName: \"generic-trigger-none\",\r\n assetPath: \"none.glb\",\r\n },\r\n};\r\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"webXRHTCViveMotionController.js","sourceRoot":"","sources":["../../../../../lts/core/generated/XR/motionController/webXRHTCViveMotionController.ts"],"names":[],"mappings":"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","sourcesContent":["/* eslint-disable @typescript-eslint/naming-convention */\r\nimport type { IMotionControllerLayoutMap, IMinimalMotionControllerObject, MotionControllerHandedness } from \"./webXRAbstractMotionController\";\r\nimport { WebXRAbstractMotionController } from \"./webXRAbstractMotionController\";\r\nimport type { Scene } from \"../../scene\";\r\nimport type { AbstractMesh } from \"../../Meshes/abstractMesh\";\r\nimport { Mesh } from \"../../Meshes/mesh\";\r\nimport { Quaternion } from \"../../Maths/math.vector\";\r\nimport { WebXRMotionControllerManager } from \"./webXRMotionControllerManager\";\r\n\r\n/**\r\n * The motion controller class for the standard HTC-Vive controllers\r\n */\r\nexport class WebXRHTCViveMotionController extends WebXRAbstractMotionController {\r\n private _modelRootNode: AbstractMesh;\r\n\r\n /**\r\n * The base url used to load the left and right controller models\r\n */\r\n public static MODEL_BASE_URL: string = \"https://controllers.babylonjs.com/vive/\";\r\n /**\r\n * File name for the controller model.\r\n */\r\n public static MODEL_FILENAME: string = \"wand.babylon\";\r\n\r\n public profileId = \"htc-vive\";\r\n\r\n /**\r\n * Create a new Vive motion controller object\r\n * @param scene the scene to use to create this controller\r\n * @param gamepadObject the corresponding gamepad object\r\n * @param handedness the handedness of the controller\r\n */\r\n constructor(scene: Scene, gamepadObject: IMinimalMotionControllerObject, handedness: MotionControllerHandedness) {\r\n super(scene, HTCViveLayout[handedness], gamepadObject, handedness);\r\n }\r\n\r\n protected _getFilenameAndPath(): { filename: string; path: string } {\r\n const filename = WebXRHTCViveMotionController.MODEL_FILENAME;\r\n const path = WebXRHTCViveMotionController.MODEL_BASE_URL;\r\n\r\n return {\r\n filename,\r\n path,\r\n };\r\n }\r\n\r\n protected _getModelLoadingConstraints(): boolean {\r\n return true;\r\n }\r\n\r\n protected _processLoadedModel(_meshes: AbstractMesh[]): void {\r\n this.getComponentIds().forEach((id) => {\r\n const comp = id && this.getComponent(id);\r\n if (comp) {\r\n comp.onButtonStateChangedObservable.add(\r\n (component) => {\r\n if (!this.rootMesh || this.disableAnimation) {\r\n return;\r\n }\r\n\r\n switch (id) {\r\n case \"xr-standard-trigger\":\r\n (<AbstractMesh>this._modelRootNode.getChildren()[6]).rotation.x = -component.value * 0.15;\r\n return;\r\n case \"xr-standard-touchpad\":\r\n return;\r\n case \"xr-standard-squeeze\":\r\n return;\r\n }\r\n },\r\n undefined,\r\n true\r\n );\r\n }\r\n });\r\n }\r\n\r\n protected _setRootMesh(meshes: AbstractMesh[]): void {\r\n this.rootMesh = new Mesh(this.profileId + \" \" + this.handedness, this.scene);\r\n\r\n meshes.forEach((mesh) => {\r\n mesh.isPickable = false;\r\n });\r\n this._modelRootNode = meshes[1];\r\n this._modelRootNode.parent = this.rootMesh;\r\n if (!this.scene.useRightHandedSystem) {\r\n this.rootMesh.rotationQuaternion = Quaternion.FromEulerAngles(0, Math.PI, 0);\r\n }\r\n }\r\n\r\n protected _updateModel(): void {\r\n // no-op. model is updated using observables.\r\n }\r\n}\r\n\r\n// register the profile\r\nWebXRMotionControllerManager.RegisterController(\"htc-vive\", (xrInput: XRInputSource, scene: Scene) => {\r\n return new WebXRHTCViveMotionController(scene, <any>xrInput.gamepad, xrInput.handedness);\r\n});\r\n\r\n// WebXRMotionControllerManager.RegisterController(\"htc-vive-legacy\", (xrInput: XRInputSource, scene: Scene) => {\r\n// return new WebXRHTCViveMotionController(scene, <any>(xrInput.gamepad), xrInput.handedness, true);\r\n// });\r\n\r\nconst HTCViveLayout: IMotionControllerLayoutMap = {\r\n left: {\r\n selectComponentId: \"xr-standard-trigger\",\r\n components: {\r\n \"xr-standard-trigger\": {\r\n type: \"trigger\",\r\n gamepadIndices: {\r\n button: 0,\r\n },\r\n rootNodeName: \"xr_standard_trigger\",\r\n visualResponses: {},\r\n },\r\n \"xr-standard-squeeze\": {\r\n type: \"squeeze\",\r\n gamepadIndices: {\r\n button: 1,\r\n },\r\n rootNodeName: \"xr_standard_squeeze\",\r\n visualResponses: {},\r\n },\r\n \"xr-standard-touchpad\": {\r\n type: \"touchpad\",\r\n gamepadIndices: {\r\n button: 2,\r\n xAxis: 0,\r\n yAxis: 1,\r\n },\r\n rootNodeName: \"xr_standard_touchpad\",\r\n visualResponses: {},\r\n },\r\n menu: {\r\n type: \"button\",\r\n gamepadIndices: {\r\n button: 4,\r\n },\r\n rootNodeName: \"menu\",\r\n visualResponses: {},\r\n },\r\n },\r\n gamepadMapping: \"xr-standard\",\r\n rootNodeName: \"htc_vive_none\",\r\n assetPath: \"none.glb\",\r\n },\r\n right: {\r\n selectComponentId: \"xr-standard-trigger\",\r\n components: {\r\n \"xr-standard-trigger\": {\r\n type: \"trigger\",\r\n gamepadIndices: {\r\n button: 0,\r\n },\r\n rootNodeName: \"xr_standard_trigger\",\r\n visualResponses: {},\r\n },\r\n \"xr-standard-squeeze\": {\r\n type: \"squeeze\",\r\n gamepadIndices: {\r\n button: 1,\r\n },\r\n rootNodeName: \"xr_standard_squeeze\",\r\n visualResponses: {},\r\n },\r\n \"xr-standard-touchpad\": {\r\n type: \"touchpad\",\r\n gamepadIndices: {\r\n button: 2,\r\n xAxis: 0,\r\n yAxis: 1,\r\n },\r\n rootNodeName: \"xr_standard_touchpad\",\r\n visualResponses: {},\r\n },\r\n menu: {\r\n type: \"button\",\r\n gamepadIndices: {\r\n button: 4,\r\n },\r\n rootNodeName: \"menu\",\r\n visualResponses: {},\r\n },\r\n },\r\n gamepadMapping: \"xr-standard\",\r\n rootNodeName: \"htc_vive_none\",\r\n assetPath: \"none.glb\",\r\n },\r\n none: {\r\n selectComponentId: \"xr-standard-trigger\",\r\n components: {\r\n \"xr-standard-trigger\": {\r\n type: \"trigger\",\r\n gamepadIndices: {\r\n button: 0,\r\n },\r\n rootNodeName: \"xr_standard_trigger\",\r\n visualResponses: {},\r\n },\r\n \"xr-standard-squeeze\": {\r\n type: \"squeeze\",\r\n gamepadIndices: {\r\n button: 1,\r\n },\r\n rootNodeName: \"xr_standard_squeeze\",\r\n visualResponses: {},\r\n },\r\n \"xr-standard-touchpad\": {\r\n type: \"touchpad\",\r\n gamepadIndices: {\r\n button: 2,\r\n xAxis: 0,\r\n yAxis: 1,\r\n },\r\n rootNodeName: \"xr_standard_touchpad\",\r\n visualResponses: {},\r\n },\r\n menu: {\r\n type: \"button\",\r\n gamepadIndices: {\r\n button: 4,\r\n },\r\n rootNodeName: \"menu\",\r\n visualResponses: {},\r\n },\r\n },\r\n gamepadMapping: \"xr-standard\",\r\n rootNodeName: \"htc-vive-none\",\r\n assetPath: \"none.glb\",\r\n },\r\n};\r\n"]}
1
+ {"version":3,"file":"webXRHTCViveMotionController.js","sourceRoot":"","sources":["../../../../../lts/core/generated/XR/motionController/webXRHTCViveMotionController.ts"],"names":[],"mappings":"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","sourcesContent":["/* eslint-disable @typescript-eslint/naming-convention */\r\nimport type { IMotionControllerLayoutMap, IMinimalMotionControllerObject, MotionControllerHandedness } from \"./webXRAbstractMotionController\";\r\nimport { WebXRAbstractMotionController } from \"./webXRAbstractMotionController\";\r\nimport type { Scene } from \"../../scene\";\r\nimport type { AbstractMesh } from \"../../Meshes/abstractMesh\";\r\nimport { Mesh } from \"../../Meshes/mesh\";\r\nimport { Quaternion } from \"../../Maths/math.vector\";\r\nimport { WebXRMotionControllerManager } from \"./webXRMotionControllerManager\";\r\n\r\n/**\r\n * The motion controller class for the standard HTC-Vive controllers\r\n */\r\nexport class WebXRHTCViveMotionController extends WebXRAbstractMotionController {\r\n private _modelRootNode: AbstractMesh;\r\n\r\n /**\r\n * The base url used to load the left and right controller models\r\n */\r\n public static MODEL_BASE_URL: string = \"https://controllers.babylonjs.com/vive/\";\r\n /**\r\n * File name for the controller model.\r\n */\r\n public static MODEL_FILENAME: string = \"wand.babylon\";\r\n\r\n public profileId = \"htc-vive\";\r\n\r\n /**\r\n * Create a new Vive motion controller object\r\n * @param scene the scene to use to create this controller\r\n * @param gamepadObject the corresponding gamepad object\r\n * @param handedness the handedness of the controller\r\n */\r\n constructor(scene: Scene, gamepadObject: IMinimalMotionControllerObject, handedness: MotionControllerHandedness) {\r\n super(scene, HTCViveLayout[handedness], gamepadObject, handedness);\r\n }\r\n\r\n protected _getFilenameAndPath(): { filename: string; path: string } {\r\n const filename = WebXRHTCViveMotionController.MODEL_FILENAME;\r\n const path = WebXRHTCViveMotionController.MODEL_BASE_URL;\r\n\r\n return {\r\n filename,\r\n path,\r\n };\r\n }\r\n\r\n protected _getModelLoadingConstraints(): boolean {\r\n return true;\r\n }\r\n\r\n protected _processLoadedModel(_meshes: AbstractMesh[]): void {\r\n this.getComponentIds().forEach((id) => {\r\n const comp = id && this.getComponent(id);\r\n if (comp) {\r\n comp.onButtonStateChangedObservable.add(\r\n (component) => {\r\n if (!this.rootMesh || this.disableAnimation) {\r\n return;\r\n }\r\n\r\n switch (id) {\r\n case \"xr-standard-trigger\":\r\n (<AbstractMesh>this._modelRootNode.getChildren()[6]).rotation.x = -component.value * 0.15;\r\n return;\r\n case \"xr-standard-touchpad\":\r\n return;\r\n case \"xr-standard-squeeze\":\r\n return;\r\n }\r\n },\r\n undefined,\r\n true\r\n );\r\n }\r\n });\r\n }\r\n\r\n protected _setRootMesh(meshes: AbstractMesh[]): void {\r\n this.rootMesh = new Mesh(this.profileId + \" \" + this.handedness, this.scene);\r\n\r\n meshes.forEach((mesh) => {\r\n mesh.isPickable = false;\r\n });\r\n this._modelRootNode = meshes[1];\r\n this._modelRootNode.parent = this.rootMesh;\r\n if (!this.scene.useRightHandedSystem) {\r\n this.rootMesh.rotationQuaternion = Quaternion.FromEulerAngles(0, Math.PI, 0);\r\n }\r\n }\r\n\r\n protected _updateModel(): void {\r\n // no-op. model is updated using observables.\r\n }\r\n}\r\n\r\n// register the profile\r\nWebXRMotionControllerManager.RegisterController(\"htc-vive\", (xrInput: XRInputSource, scene: Scene) => {\r\n return new WebXRHTCViveMotionController(scene, <any>xrInput.gamepad, xrInput.handedness);\r\n});\r\n\r\n// WebXRMotionControllerManager.RegisterController(\"htc-vive-legacy\", (xrInput: XRInputSource, scene: Scene) => {\r\n// return new WebXRHTCViveMotionController(scene, <any>(xrInput.gamepad), xrInput.handedness, true);\r\n// });\r\n\r\nconst HTCViveLayout: IMotionControllerLayoutMap = {\r\n left: {\r\n selectComponentId: \"xr-standard-trigger\",\r\n components: {\r\n \"xr-standard-trigger\": {\r\n type: \"trigger\",\r\n gamepadIndices: {\r\n button: 0,\r\n },\r\n rootNodeName: \"xr_standard_trigger\",\r\n visualResponses: {},\r\n },\r\n \"xr-standard-squeeze\": {\r\n type: \"squeeze\",\r\n gamepadIndices: {\r\n button: 1,\r\n },\r\n rootNodeName: \"xr_standard_squeeze\",\r\n visualResponses: {},\r\n },\r\n \"xr-standard-touchpad\": {\r\n type: \"touchpad\",\r\n gamepadIndices: {\r\n button: 2,\r\n xAxis: 0,\r\n yAxis: 1,\r\n },\r\n rootNodeName: \"xr_standard_touchpad\",\r\n visualResponses: {},\r\n },\r\n menu: {\r\n type: \"button\",\r\n gamepadIndices: {\r\n button: 4,\r\n },\r\n rootNodeName: \"menu\",\r\n visualResponses: {},\r\n },\r\n },\r\n gamepadMapping: \"xr-standard\",\r\n rootNodeName: \"htc_vive_none\",\r\n assetPath: \"none.glb\",\r\n },\r\n right: {\r\n selectComponentId: \"xr-standard-trigger\",\r\n components: {\r\n \"xr-standard-trigger\": {\r\n type: \"trigger\",\r\n gamepadIndices: {\r\n button: 0,\r\n },\r\n rootNodeName: \"xr_standard_trigger\",\r\n visualResponses: {},\r\n },\r\n \"xr-standard-squeeze\": {\r\n type: \"squeeze\",\r\n gamepadIndices: {\r\n button: 1,\r\n },\r\n rootNodeName: \"xr_standard_squeeze\",\r\n visualResponses: {},\r\n },\r\n \"xr-standard-touchpad\": {\r\n type: \"touchpad\",\r\n gamepadIndices: {\r\n button: 2,\r\n xAxis: 0,\r\n yAxis: 1,\r\n },\r\n rootNodeName: \"xr_standard_touchpad\",\r\n visualResponses: {},\r\n },\r\n menu: {\r\n type: \"button\",\r\n gamepadIndices: {\r\n button: 4,\r\n },\r\n rootNodeName: \"menu\",\r\n visualResponses: {},\r\n },\r\n },\r\n gamepadMapping: \"xr-standard\",\r\n rootNodeName: \"htc_vive_none\",\r\n assetPath: \"none.glb\",\r\n },\r\n none: {\r\n selectComponentId: \"xr-standard-trigger\",\r\n components: {\r\n \"xr-standard-trigger\": {\r\n type: \"trigger\",\r\n gamepadIndices: {\r\n button: 0,\r\n },\r\n rootNodeName: \"xr_standard_trigger\",\r\n visualResponses: {},\r\n },\r\n \"xr-standard-squeeze\": {\r\n type: \"squeeze\",\r\n gamepadIndices: {\r\n button: 1,\r\n },\r\n rootNodeName: \"xr_standard_squeeze\",\r\n visualResponses: {},\r\n },\r\n \"xr-standard-touchpad\": {\r\n type: \"touchpad\",\r\n gamepadIndices: {\r\n button: 2,\r\n xAxis: 0,\r\n yAxis: 1,\r\n },\r\n rootNodeName: \"xr_standard_touchpad\",\r\n visualResponses: {},\r\n },\r\n menu: {\r\n type: \"button\",\r\n gamepadIndices: {\r\n button: 4,\r\n },\r\n rootNodeName: \"menu\",\r\n visualResponses: {},\r\n },\r\n },\r\n gamepadMapping: \"xr-standard\",\r\n rootNodeName: \"htc-vive-none\",\r\n assetPath: \"none.glb\",\r\n },\r\n};\r\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"webXRMicrosoftMixedRealityController.js","sourceRoot":"","sources":["../../../../../lts/core/generated/XR/motionController/webXRMicrosoftMixedRealityController.ts"],"names":[],"mappings":"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","sourcesContent":["/* eslint-disable @typescript-eslint/naming-convention */\r\nimport type { IMinimalMotionControllerObject, MotionControllerHandedness, IMotionControllerLayoutMap } from \"./webXRAbstractMotionController\";\r\nimport { WebXRAbstractMotionController } from \"./webXRAbstractMotionController\";\r\nimport { WebXRMotionControllerManager } from \"./webXRMotionControllerManager\";\r\nimport type { AbstractMesh } from \"../../Meshes/abstractMesh\";\r\nimport type { Scene } from \"../../scene\";\r\nimport { Mesh } from \"../../Meshes/mesh\";\r\nimport { Quaternion } from \"../../Maths/math.vector\";\r\nimport { SceneLoader } from \"../../Loading/sceneLoader\";\r\nimport { Logger } from \"../../Misc/logger\";\r\n\r\n/**\r\n * The motion controller class for all microsoft mixed reality controllers\r\n */\r\nexport class WebXRMicrosoftMixedRealityController extends WebXRAbstractMotionController {\r\n // use this in the future - https://github.com/immersive-web/webxr-input-profiles/tree/master/packages/assets/profiles/microsoft\r\n protected readonly _mapping = {\r\n defaultButton: {\r\n valueNodeName: \"VALUE\",\r\n unpressedNodeName: \"UNPRESSED\",\r\n pressedNodeName: \"PRESSED\",\r\n },\r\n defaultAxis: {\r\n valueNodeName: \"VALUE\",\r\n minNodeName: \"MIN\",\r\n maxNodeName: \"MAX\",\r\n },\r\n buttons: {\r\n \"xr-standard-trigger\": {\r\n rootNodeName: \"SELECT\",\r\n componentProperty: \"button\",\r\n states: [\"default\", \"touched\", \"pressed\"],\r\n },\r\n \"xr-standard-squeeze\": {\r\n rootNodeName: \"GRASP\",\r\n componentProperty: \"state\",\r\n states: [\"pressed\"],\r\n },\r\n \"xr-standard-touchpad\": {\r\n rootNodeName: \"TOUCHPAD_PRESS\",\r\n labelAnchorNodeName: \"squeeze-label\",\r\n touchPointNodeName: \"TOUCH\", // TODO - use this for visual feedback\r\n },\r\n \"xr-standard-thumbstick\": {\r\n rootNodeName: \"THUMBSTICK_PRESS\",\r\n componentProperty: \"state\",\r\n states: [\"pressed\"],\r\n },\r\n },\r\n axes: {\r\n \"xr-standard-touchpad\": {\r\n \"x-axis\": {\r\n rootNodeName: \"TOUCHPAD_TOUCH_X\",\r\n },\r\n \"y-axis\": {\r\n rootNodeName: \"TOUCHPAD_TOUCH_Y\",\r\n },\r\n },\r\n \"xr-standard-thumbstick\": {\r\n \"x-axis\": {\r\n rootNodeName: \"THUMBSTICK_X\",\r\n },\r\n \"y-axis\": {\r\n rootNodeName: \"THUMBSTICK_Y\",\r\n },\r\n },\r\n },\r\n };\r\n\r\n /**\r\n * The base url used to load the left and right controller models\r\n */\r\n public static MODEL_BASE_URL: string = \"https://controllers.babylonjs.com/microsoft/\";\r\n /**\r\n * The name of the left controller model file\r\n */\r\n public static MODEL_LEFT_FILENAME: string = \"left.glb\";\r\n /**\r\n * The name of the right controller model file\r\n */\r\n public static MODEL_RIGHT_FILENAME: string = \"right.glb\";\r\n\r\n public profileId = \"microsoft-mixed-reality\";\r\n\r\n constructor(scene: Scene, gamepadObject: IMinimalMotionControllerObject, handedness: MotionControllerHandedness) {\r\n super(scene, MixedRealityProfile[\"left-right\"], gamepadObject, handedness);\r\n }\r\n\r\n protected _getFilenameAndPath(): { filename: string; path: string } {\r\n let filename = \"\";\r\n if (this.handedness === \"left\") {\r\n filename = WebXRMicrosoftMixedRealityController.MODEL_LEFT_FILENAME;\r\n } else {\r\n // Right is the default if no hand is specified\r\n filename = WebXRMicrosoftMixedRealityController.MODEL_RIGHT_FILENAME;\r\n }\r\n\r\n const device = \"default\";\r\n const path = WebXRMicrosoftMixedRealityController.MODEL_BASE_URL + device + \"/\";\r\n return {\r\n filename,\r\n path,\r\n };\r\n }\r\n\r\n protected _getModelLoadingConstraints(): boolean {\r\n const glbLoaded = SceneLoader.IsPluginForExtensionAvailable(\".glb\");\r\n if (!glbLoaded) {\r\n Logger.Warn(\"glTF / glb loaded was not registered, using generic controller instead\");\r\n }\r\n return glbLoaded;\r\n }\r\n\r\n protected _processLoadedModel(_meshes: AbstractMesh[]): void {\r\n if (!this.rootMesh) {\r\n return;\r\n }\r\n\r\n // Button Meshes\r\n this.getComponentIds().forEach((id, i) => {\r\n if (this.disableAnimation) {\r\n return;\r\n }\r\n if (id && this.rootMesh) {\r\n const buttonMap = (<any>this._mapping.buttons)[id];\r\n const buttonMeshName = buttonMap.rootNodeName;\r\n if (!buttonMeshName) {\r\n Logger.Log(\"Skipping unknown button at index: \" + i + \" with mapped name: \" + id);\r\n return;\r\n }\r\n\r\n const buttonMesh = this._getChildByName(this.rootMesh, buttonMeshName);\r\n if (!buttonMesh) {\r\n Logger.Warn(\"Missing button mesh with name: \" + buttonMeshName);\r\n return;\r\n }\r\n\r\n buttonMap.valueMesh = this._getImmediateChildByName(buttonMesh, this._mapping.defaultButton.valueNodeName);\r\n buttonMap.pressedMesh = this._getImmediateChildByName(buttonMesh, this._mapping.defaultButton.pressedNodeName);\r\n buttonMap.unpressedMesh = this._getImmediateChildByName(buttonMesh, this._mapping.defaultButton.unpressedNodeName);\r\n\r\n if (buttonMap.valueMesh && buttonMap.pressedMesh && buttonMap.unpressedMesh) {\r\n const comp = this.getComponent(id);\r\n if (comp) {\r\n comp.onButtonStateChangedObservable.add(\r\n (component) => {\r\n this._lerpTransform(buttonMap, component.value);\r\n },\r\n undefined,\r\n true\r\n );\r\n }\r\n } else {\r\n // If we didn't find the mesh, it simply means this button won't have transforms applied as mapped button value changes.\r\n Logger.Warn(\"Missing button submesh under mesh with name: \" + buttonMeshName);\r\n }\r\n }\r\n });\r\n\r\n // Axis Meshes\r\n this.getComponentIds().forEach((id) => {\r\n const comp = this.getComponent(id);\r\n if (!comp.isAxes()) {\r\n return;\r\n }\r\n\r\n [\"x-axis\", \"y-axis\"].forEach((axis) => {\r\n if (!this.rootMesh) {\r\n return;\r\n }\r\n const axisMap = (<any>this._mapping.axes)[id][axis];\r\n\r\n const axisMesh = this._getChildByName(this.rootMesh, axisMap.rootNodeName);\r\n if (!axisMesh) {\r\n Logger.Warn(\"Missing axis mesh with name: \" + axisMap.rootNodeName);\r\n return;\r\n }\r\n\r\n axisMap.valueMesh = this._getImmediateChildByName(axisMesh, this._mapping.defaultAxis.valueNodeName);\r\n axisMap.minMesh = this._getImmediateChildByName(axisMesh, this._mapping.defaultAxis.minNodeName);\r\n axisMap.maxMesh = this._getImmediateChildByName(axisMesh, this._mapping.defaultAxis.maxNodeName);\r\n\r\n if (axisMap.valueMesh && axisMap.minMesh && axisMap.maxMesh) {\r\n if (comp) {\r\n comp.onAxisValueChangedObservable.add(\r\n (axisValues) => {\r\n const value = axis === \"x-axis\" ? axisValues.x : axisValues.y;\r\n this._lerpTransform(axisMap, value, true);\r\n },\r\n undefined,\r\n true\r\n );\r\n }\r\n } else {\r\n // If we didn't find the mesh, it simply means this button won't have transforms applied as mapped button value changes.\r\n Logger.Warn(\"Missing axis submesh under mesh with name: \" + axisMap.rootNodeName);\r\n }\r\n });\r\n });\r\n }\r\n\r\n protected _setRootMesh(meshes: AbstractMesh[]): void {\r\n this.rootMesh = new Mesh(this.profileId + \" \" + this.handedness, this.scene);\r\n this.rootMesh.isPickable = false;\r\n let rootMesh;\r\n // Find the root node in the loaded glTF scene, and attach it as a child of 'parentMesh'\r\n for (let i = 0; i < meshes.length; i++) {\r\n const mesh = meshes[i];\r\n\r\n mesh.isPickable = false;\r\n\r\n if (!mesh.parent) {\r\n // Handle root node, attach to the new parentMesh\r\n rootMesh = mesh;\r\n }\r\n }\r\n\r\n if (rootMesh) {\r\n rootMesh.setParent(this.rootMesh);\r\n }\r\n\r\n if (!this.scene.useRightHandedSystem) {\r\n this.rootMesh.rotationQuaternion = Quaternion.FromEulerAngles(0, Math.PI, 0);\r\n }\r\n }\r\n\r\n protected _updateModel(): void {\r\n // no-op. model is updated using observables.\r\n }\r\n}\r\n\r\n// register the profile\r\nWebXRMotionControllerManager.RegisterController(\"windows-mixed-reality\", (xrInput: XRInputSource, scene: Scene) => {\r\n return new WebXRMicrosoftMixedRealityController(scene, <any>xrInput.gamepad, xrInput.handedness);\r\n});\r\n\r\n// https://github.com/immersive-web/webxr-input-profiles/blob/master/packages/registry/profiles/microsoft/microsoft-mixed-reality.json\r\nconst MixedRealityProfile: IMotionControllerLayoutMap = {\r\n left: {\r\n selectComponentId: \"xr-standard-trigger\",\r\n components: {\r\n \"xr-standard-trigger\": {\r\n type: \"trigger\",\r\n gamepadIndices: {\r\n button: 0,\r\n },\r\n rootNodeName: \"xr_standard_trigger\",\r\n visualResponses: {\r\n xr_standard_trigger_pressed: {\r\n componentProperty: \"button\",\r\n states: [\"default\", \"touched\", \"pressed\"],\r\n valueNodeProperty: \"transform\",\r\n valueNodeName: \"xr_standard_trigger_pressed_value\",\r\n minNodeName: \"xr_standard_trigger_pressed_min\",\r\n maxNodeName: \"xr_standard_trigger_pressed_max\",\r\n },\r\n },\r\n },\r\n \"xr-standard-squeeze\": {\r\n type: \"squeeze\",\r\n gamepadIndices: {\r\n button: 1,\r\n },\r\n rootNodeName: \"xr_standard_squeeze\",\r\n visualResponses: {\r\n xr_standard_squeeze_pressed: {\r\n componentProperty: \"button\",\r\n states: [\"default\", \"touched\", \"pressed\"],\r\n valueNodeProperty: \"transform\",\r\n valueNodeName: \"xr_standard_squeeze_pressed_value\",\r\n minNodeName: \"xr_standard_squeeze_pressed_min\",\r\n maxNodeName: \"xr_standard_squeeze_pressed_max\",\r\n },\r\n },\r\n },\r\n \"xr-standard-touchpad\": {\r\n type: \"touchpad\",\r\n gamepadIndices: {\r\n button: 2,\r\n xAxis: 0,\r\n yAxis: 1,\r\n },\r\n rootNodeName: \"xr_standard_touchpad\",\r\n visualResponses: {\r\n xr_standard_touchpad_pressed: {\r\n componentProperty: \"button\",\r\n states: [\"default\", \"touched\", \"pressed\"],\r\n valueNodeProperty: \"transform\",\r\n valueNodeName: \"xr_standard_touchpad_pressed_value\",\r\n minNodeName: \"xr_standard_touchpad_pressed_min\",\r\n maxNodeName: \"xr_standard_touchpad_pressed_max\",\r\n },\r\n xr_standard_touchpad_xaxis_pressed: {\r\n componentProperty: \"xAxis\",\r\n states: [\"default\", \"touched\", \"pressed\"],\r\n valueNodeProperty: \"transform\",\r\n valueNodeName: \"xr_standard_touchpad_xaxis_pressed_value\",\r\n minNodeName: \"xr_standard_touchpad_xaxis_pressed_min\",\r\n maxNodeName: \"xr_standard_touchpad_xaxis_pressed_max\",\r\n },\r\n xr_standard_touchpad_yaxis_pressed: {\r\n componentProperty: \"yAxis\",\r\n states: [\"default\", \"touched\", \"pressed\"],\r\n valueNodeProperty: \"transform\",\r\n valueNodeName: \"xr_standard_touchpad_yaxis_pressed_value\",\r\n minNodeName: \"xr_standard_touchpad_yaxis_pressed_min\",\r\n maxNodeName: \"xr_standard_touchpad_yaxis_pressed_max\",\r\n },\r\n xr_standard_touchpad_xaxis_touched: {\r\n componentProperty: \"xAxis\",\r\n states: [\"default\", \"touched\", \"pressed\"],\r\n valueNodeProperty: \"transform\",\r\n valueNodeName: \"xr_standard_touchpad_xaxis_touched_value\",\r\n minNodeName: \"xr_standard_touchpad_xaxis_touched_min\",\r\n maxNodeName: \"xr_standard_touchpad_xaxis_touched_max\",\r\n },\r\n xr_standard_touchpad_yaxis_touched: {\r\n componentProperty: \"yAxis\",\r\n states: [\"default\", \"touched\", \"pressed\"],\r\n valueNodeProperty: \"transform\",\r\n valueNodeName: \"xr_standard_touchpad_yaxis_touched_value\",\r\n minNodeName: \"xr_standard_touchpad_yaxis_touched_min\",\r\n maxNodeName: \"xr_standard_touchpad_yaxis_touched_max\",\r\n },\r\n xr_standard_touchpad_axes_touched: {\r\n componentProperty: \"state\",\r\n states: [\"touched\", \"pressed\"],\r\n valueNodeProperty: \"visibility\",\r\n valueNodeName: \"xr_standard_touchpad_axes_touched_value\",\r\n },\r\n },\r\n touchPointNodeName: \"xr_standard_touchpad_axes_touched_value\",\r\n },\r\n \"xr-standard-thumbstick\": {\r\n type: \"thumbstick\",\r\n gamepadIndices: {\r\n button: 3,\r\n xAxis: 2,\r\n yAxis: 3,\r\n },\r\n rootNodeName: \"xr_standard_thumbstick\",\r\n visualResponses: {\r\n xr_standard_thumbstick_pressed: {\r\n componentProperty: \"button\",\r\n states: [\"default\", \"touched\", \"pressed\"],\r\n valueNodeProperty: \"transform\",\r\n valueNodeName: \"xr_standard_thumbstick_pressed_value\",\r\n minNodeName: \"xr_standard_thumbstick_pressed_min\",\r\n maxNodeName: \"xr_standard_thumbstick_pressed_max\",\r\n },\r\n xr_standard_thumbstick_xaxis_pressed: {\r\n componentProperty: \"xAxis\",\r\n states: [\"default\", \"touched\", \"pressed\"],\r\n valueNodeProperty: \"transform\",\r\n valueNodeName: \"xr_standard_thumbstick_xaxis_pressed_value\",\r\n minNodeName: \"xr_standard_thumbstick_xaxis_pressed_min\",\r\n maxNodeName: \"xr_standard_thumbstick_xaxis_pressed_max\",\r\n },\r\n xr_standard_thumbstick_yaxis_pressed: {\r\n componentProperty: \"yAxis\",\r\n states: [\"default\", \"touched\", \"pressed\"],\r\n valueNodeProperty: \"transform\",\r\n valueNodeName: \"xr_standard_thumbstick_yaxis_pressed_value\",\r\n minNodeName: \"xr_standard_thumbstick_yaxis_pressed_min\",\r\n maxNodeName: \"xr_standard_thumbstick_yaxis_pressed_max\",\r\n },\r\n },\r\n },\r\n },\r\n gamepadMapping: \"xr-standard\",\r\n rootNodeName: \"microsoft-mixed-reality-left\",\r\n assetPath: \"left.glb\",\r\n },\r\n right: {\r\n selectComponentId: \"xr-standard-trigger\",\r\n components: {\r\n \"xr-standard-trigger\": {\r\n type: \"trigger\",\r\n gamepadIndices: {\r\n button: 0,\r\n },\r\n rootNodeName: \"xr_standard_trigger\",\r\n visualResponses: {\r\n xr_standard_trigger_pressed: {\r\n componentProperty: \"button\",\r\n states: [\"default\", \"touched\", \"pressed\"],\r\n valueNodeProperty: \"transform\",\r\n valueNodeName: \"xr_standard_trigger_pressed_value\",\r\n minNodeName: \"xr_standard_trigger_pressed_min\",\r\n maxNodeName: \"xr_standard_trigger_pressed_max\",\r\n },\r\n },\r\n },\r\n \"xr-standard-squeeze\": {\r\n type: \"squeeze\",\r\n gamepadIndices: {\r\n button: 1,\r\n },\r\n rootNodeName: \"xr_standard_squeeze\",\r\n visualResponses: {\r\n xr_standard_squeeze_pressed: {\r\n componentProperty: \"button\",\r\n states: [\"default\", \"touched\", \"pressed\"],\r\n valueNodeProperty: \"transform\",\r\n valueNodeName: \"xr_standard_squeeze_pressed_value\",\r\n minNodeName: \"xr_standard_squeeze_pressed_min\",\r\n maxNodeName: \"xr_standard_squeeze_pressed_max\",\r\n },\r\n },\r\n },\r\n \"xr-standard-touchpad\": {\r\n type: \"touchpad\",\r\n gamepadIndices: {\r\n button: 2,\r\n xAxis: 0,\r\n yAxis: 1,\r\n },\r\n rootNodeName: \"xr_standard_touchpad\",\r\n visualResponses: {\r\n xr_standard_touchpad_pressed: {\r\n componentProperty: \"button\",\r\n states: [\"default\", \"touched\", \"pressed\"],\r\n valueNodeProperty: \"transform\",\r\n valueNodeName: \"xr_standard_touchpad_pressed_value\",\r\n minNodeName: \"xr_standard_touchpad_pressed_min\",\r\n maxNodeName: \"xr_standard_touchpad_pressed_max\",\r\n },\r\n xr_standard_touchpad_xaxis_pressed: {\r\n componentProperty: \"xAxis\",\r\n states: [\"default\", \"touched\", \"pressed\"],\r\n valueNodeProperty: \"transform\",\r\n valueNodeName: \"xr_standard_touchpad_xaxis_pressed_value\",\r\n minNodeName: \"xr_standard_touchpad_xaxis_pressed_min\",\r\n maxNodeName: \"xr_standard_touchpad_xaxis_pressed_max\",\r\n },\r\n xr_standard_touchpad_yaxis_pressed: {\r\n componentProperty: \"yAxis\",\r\n states: [\"default\", \"touched\", \"pressed\"],\r\n valueNodeProperty: \"transform\",\r\n valueNodeName: \"xr_standard_touchpad_yaxis_pressed_value\",\r\n minNodeName: \"xr_standard_touchpad_yaxis_pressed_min\",\r\n maxNodeName: \"xr_standard_touchpad_yaxis_pressed_max\",\r\n },\r\n xr_standard_touchpad_xaxis_touched: {\r\n componentProperty: \"xAxis\",\r\n states: [\"default\", \"touched\", \"pressed\"],\r\n valueNodeProperty: \"transform\",\r\n valueNodeName: \"xr_standard_touchpad_xaxis_touched_value\",\r\n minNodeName: \"xr_standard_touchpad_xaxis_touched_min\",\r\n maxNodeName: \"xr_standard_touchpad_xaxis_touched_max\",\r\n },\r\n xr_standard_touchpad_yaxis_touched: {\r\n componentProperty: \"yAxis\",\r\n states: [\"default\", \"touched\", \"pressed\"],\r\n valueNodeProperty: \"transform\",\r\n valueNodeName: \"xr_standard_touchpad_yaxis_touched_value\",\r\n minNodeName: \"xr_standard_touchpad_yaxis_touched_min\",\r\n maxNodeName: \"xr_standard_touchpad_yaxis_touched_max\",\r\n },\r\n xr_standard_touchpad_axes_touched: {\r\n componentProperty: \"state\",\r\n states: [\"touched\", \"pressed\"],\r\n valueNodeProperty: \"visibility\",\r\n valueNodeName: \"xr_standard_touchpad_axes_touched_value\",\r\n },\r\n },\r\n touchPointNodeName: \"xr_standard_touchpad_axes_touched_value\",\r\n },\r\n \"xr-standard-thumbstick\": {\r\n type: \"thumbstick\",\r\n gamepadIndices: {\r\n button: 3,\r\n xAxis: 2,\r\n yAxis: 3,\r\n },\r\n rootNodeName: \"xr_standard_thumbstick\",\r\n visualResponses: {\r\n xr_standard_thumbstick_pressed: {\r\n componentProperty: \"button\",\r\n states: [\"default\", \"touched\", \"pressed\"],\r\n valueNodeProperty: \"transform\",\r\n valueNodeName: \"xr_standard_thumbstick_pressed_value\",\r\n minNodeName: \"xr_standard_thumbstick_pressed_min\",\r\n maxNodeName: \"xr_standard_thumbstick_pressed_max\",\r\n },\r\n xr_standard_thumbstick_xaxis_pressed: {\r\n componentProperty: \"xAxis\",\r\n states: [\"default\", \"touched\", \"pressed\"],\r\n valueNodeProperty: \"transform\",\r\n valueNodeName: \"xr_standard_thumbstick_xaxis_pressed_value\",\r\n minNodeName: \"xr_standard_thumbstick_xaxis_pressed_min\",\r\n maxNodeName: \"xr_standard_thumbstick_xaxis_pressed_max\",\r\n },\r\n xr_standard_thumbstick_yaxis_pressed: {\r\n componentProperty: \"yAxis\",\r\n states: [\"default\", \"touched\", \"pressed\"],\r\n valueNodeProperty: \"transform\",\r\n valueNodeName: \"xr_standard_thumbstick_yaxis_pressed_value\",\r\n minNodeName: \"xr_standard_thumbstick_yaxis_pressed_min\",\r\n maxNodeName: \"xr_standard_thumbstick_yaxis_pressed_max\",\r\n },\r\n },\r\n },\r\n },\r\n gamepadMapping: \"xr-standard\",\r\n rootNodeName: \"microsoft-mixed-reality-right\",\r\n assetPath: \"right.glb\",\r\n },\r\n};\r\n"]}
1
+ {"version":3,"file":"webXRMicrosoftMixedRealityController.js","sourceRoot":"","sources":["../../../../../lts/core/generated/XR/motionController/webXRMicrosoftMixedRealityController.ts"],"names":[],"mappings":"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","sourcesContent":["/* eslint-disable @typescript-eslint/naming-convention */\r\nimport type { IMinimalMotionControllerObject, MotionControllerHandedness, IMotionControllerLayoutMap } from \"./webXRAbstractMotionController\";\r\nimport { WebXRAbstractMotionController } from \"./webXRAbstractMotionController\";\r\nimport { WebXRMotionControllerManager } from \"./webXRMotionControllerManager\";\r\nimport type { AbstractMesh } from \"../../Meshes/abstractMesh\";\r\nimport type { Scene } from \"../../scene\";\r\nimport { Mesh } from \"../../Meshes/mesh\";\r\nimport { Quaternion } from \"../../Maths/math.vector\";\r\nimport { SceneLoader } from \"../../Loading/sceneLoader\";\r\nimport { Logger } from \"../../Misc/logger\";\r\n\r\n/**\r\n * The motion controller class for all microsoft mixed reality controllers\r\n */\r\nexport class WebXRMicrosoftMixedRealityController extends WebXRAbstractMotionController {\r\n // use this in the future - https://github.com/immersive-web/webxr-input-profiles/tree/master/packages/assets/profiles/microsoft\r\n protected readonly _mapping = {\r\n defaultButton: {\r\n valueNodeName: \"VALUE\",\r\n unpressedNodeName: \"UNPRESSED\",\r\n pressedNodeName: \"PRESSED\",\r\n },\r\n defaultAxis: {\r\n valueNodeName: \"VALUE\",\r\n minNodeName: \"MIN\",\r\n maxNodeName: \"MAX\",\r\n },\r\n buttons: {\r\n \"xr-standard-trigger\": {\r\n rootNodeName: \"SELECT\",\r\n componentProperty: \"button\",\r\n states: [\"default\", \"touched\", \"pressed\"],\r\n },\r\n \"xr-standard-squeeze\": {\r\n rootNodeName: \"GRASP\",\r\n componentProperty: \"state\",\r\n states: [\"pressed\"],\r\n },\r\n \"xr-standard-touchpad\": {\r\n rootNodeName: \"TOUCHPAD_PRESS\",\r\n labelAnchorNodeName: \"squeeze-label\",\r\n touchPointNodeName: \"TOUCH\", // TODO - use this for visual feedback\r\n },\r\n \"xr-standard-thumbstick\": {\r\n rootNodeName: \"THUMBSTICK_PRESS\",\r\n componentProperty: \"state\",\r\n states: [\"pressed\"],\r\n },\r\n },\r\n axes: {\r\n \"xr-standard-touchpad\": {\r\n \"x-axis\": {\r\n rootNodeName: \"TOUCHPAD_TOUCH_X\",\r\n },\r\n \"y-axis\": {\r\n rootNodeName: \"TOUCHPAD_TOUCH_Y\",\r\n },\r\n },\r\n \"xr-standard-thumbstick\": {\r\n \"x-axis\": {\r\n rootNodeName: \"THUMBSTICK_X\",\r\n },\r\n \"y-axis\": {\r\n rootNodeName: \"THUMBSTICK_Y\",\r\n },\r\n },\r\n },\r\n };\r\n\r\n /**\r\n * The base url used to load the left and right controller models\r\n */\r\n public static MODEL_BASE_URL: string = \"https://controllers.babylonjs.com/microsoft/\";\r\n /**\r\n * The name of the left controller model file\r\n */\r\n public static MODEL_LEFT_FILENAME: string = \"left.glb\";\r\n /**\r\n * The name of the right controller model file\r\n */\r\n public static MODEL_RIGHT_FILENAME: string = \"right.glb\";\r\n\r\n public profileId = \"microsoft-mixed-reality\";\r\n\r\n constructor(scene: Scene, gamepadObject: IMinimalMotionControllerObject, handedness: MotionControllerHandedness) {\r\n super(scene, MixedRealityProfile[\"left-right\"], gamepadObject, handedness);\r\n }\r\n\r\n protected _getFilenameAndPath(): { filename: string; path: string } {\r\n let filename = \"\";\r\n if (this.handedness === \"left\") {\r\n filename = WebXRMicrosoftMixedRealityController.MODEL_LEFT_FILENAME;\r\n } else {\r\n // Right is the default if no hand is specified\r\n filename = WebXRMicrosoftMixedRealityController.MODEL_RIGHT_FILENAME;\r\n }\r\n\r\n const device = \"default\";\r\n const path = WebXRMicrosoftMixedRealityController.MODEL_BASE_URL + device + \"/\";\r\n return {\r\n filename,\r\n path,\r\n };\r\n }\r\n\r\n protected _getModelLoadingConstraints(): boolean {\r\n const glbLoaded = SceneLoader.IsPluginForExtensionAvailable(\".glb\");\r\n if (!glbLoaded) {\r\n Logger.Warn(\"glTF / glb loaded was not registered, using generic controller instead\");\r\n }\r\n return glbLoaded;\r\n }\r\n\r\n protected _processLoadedModel(_meshes: AbstractMesh[]): void {\r\n if (!this.rootMesh) {\r\n return;\r\n }\r\n\r\n // Button Meshes\r\n this.getComponentIds().forEach((id, i) => {\r\n if (this.disableAnimation) {\r\n return;\r\n }\r\n if (id && this.rootMesh) {\r\n const buttonMap = (<any>this._mapping.buttons)[id];\r\n const buttonMeshName = buttonMap.rootNodeName;\r\n if (!buttonMeshName) {\r\n Logger.Log(\"Skipping unknown button at index: \" + i + \" with mapped name: \" + id);\r\n return;\r\n }\r\n\r\n const buttonMesh = this._getChildByName(this.rootMesh, buttonMeshName);\r\n if (!buttonMesh) {\r\n Logger.Warn(\"Missing button mesh with name: \" + buttonMeshName);\r\n return;\r\n }\r\n\r\n buttonMap.valueMesh = this._getImmediateChildByName(buttonMesh, this._mapping.defaultButton.valueNodeName);\r\n buttonMap.pressedMesh = this._getImmediateChildByName(buttonMesh, this._mapping.defaultButton.pressedNodeName);\r\n buttonMap.unpressedMesh = this._getImmediateChildByName(buttonMesh, this._mapping.defaultButton.unpressedNodeName);\r\n\r\n if (buttonMap.valueMesh && buttonMap.pressedMesh && buttonMap.unpressedMesh) {\r\n const comp = this.getComponent(id);\r\n if (comp) {\r\n comp.onButtonStateChangedObservable.add(\r\n (component) => {\r\n this._lerpTransform(buttonMap, component.value);\r\n },\r\n undefined,\r\n true\r\n );\r\n }\r\n } else {\r\n // If we didn't find the mesh, it simply means this button won't have transforms applied as mapped button value changes.\r\n Logger.Warn(\"Missing button submesh under mesh with name: \" + buttonMeshName);\r\n }\r\n }\r\n });\r\n\r\n // Axis Meshes\r\n this.getComponentIds().forEach((id) => {\r\n const comp = this.getComponent(id);\r\n if (!comp.isAxes()) {\r\n return;\r\n }\r\n\r\n [\"x-axis\", \"y-axis\"].forEach((axis) => {\r\n if (!this.rootMesh) {\r\n return;\r\n }\r\n const axisMap = (<any>this._mapping.axes)[id][axis];\r\n\r\n const axisMesh = this._getChildByName(this.rootMesh, axisMap.rootNodeName);\r\n if (!axisMesh) {\r\n Logger.Warn(\"Missing axis mesh with name: \" + axisMap.rootNodeName);\r\n return;\r\n }\r\n\r\n axisMap.valueMesh = this._getImmediateChildByName(axisMesh, this._mapping.defaultAxis.valueNodeName);\r\n axisMap.minMesh = this._getImmediateChildByName(axisMesh, this._mapping.defaultAxis.minNodeName);\r\n axisMap.maxMesh = this._getImmediateChildByName(axisMesh, this._mapping.defaultAxis.maxNodeName);\r\n\r\n if (axisMap.valueMesh && axisMap.minMesh && axisMap.maxMesh) {\r\n if (comp) {\r\n comp.onAxisValueChangedObservable.add(\r\n (axisValues) => {\r\n const value = axis === \"x-axis\" ? axisValues.x : axisValues.y;\r\n this._lerpTransform(axisMap, value, true);\r\n },\r\n undefined,\r\n true\r\n );\r\n }\r\n } else {\r\n // If we didn't find the mesh, it simply means this button won't have transforms applied as mapped button value changes.\r\n Logger.Warn(\"Missing axis submesh under mesh with name: \" + axisMap.rootNodeName);\r\n }\r\n });\r\n });\r\n }\r\n\r\n protected _setRootMesh(meshes: AbstractMesh[]): void {\r\n this.rootMesh = new Mesh(this.profileId + \" \" + this.handedness, this.scene);\r\n this.rootMesh.isPickable = false;\r\n let rootMesh;\r\n // Find the root node in the loaded glTF scene, and attach it as a child of 'parentMesh'\r\n for (let i = 0; i < meshes.length; i++) {\r\n const mesh = meshes[i];\r\n\r\n mesh.isPickable = false;\r\n\r\n if (!mesh.parent) {\r\n // Handle root node, attach to the new parentMesh\r\n rootMesh = mesh;\r\n }\r\n }\r\n\r\n if (rootMesh) {\r\n rootMesh.setParent(this.rootMesh);\r\n }\r\n\r\n if (!this.scene.useRightHandedSystem) {\r\n this.rootMesh.rotationQuaternion = Quaternion.FromEulerAngles(0, Math.PI, 0);\r\n }\r\n }\r\n\r\n protected _updateModel(): void {\r\n // no-op. model is updated using observables.\r\n }\r\n}\r\n\r\n// register the profile\r\nWebXRMotionControllerManager.RegisterController(\"windows-mixed-reality\", (xrInput: XRInputSource, scene: Scene) => {\r\n return new WebXRMicrosoftMixedRealityController(scene, <any>xrInput.gamepad, xrInput.handedness);\r\n});\r\n\r\n// https://github.com/immersive-web/webxr-input-profiles/blob/master/packages/registry/profiles/microsoft/microsoft-mixed-reality.json\r\nconst MixedRealityProfile: IMotionControllerLayoutMap = {\r\n left: {\r\n selectComponentId: \"xr-standard-trigger\",\r\n components: {\r\n \"xr-standard-trigger\": {\r\n type: \"trigger\",\r\n gamepadIndices: {\r\n button: 0,\r\n },\r\n rootNodeName: \"xr_standard_trigger\",\r\n visualResponses: {\r\n xr_standard_trigger_pressed: {\r\n componentProperty: \"button\",\r\n states: [\"default\", \"touched\", \"pressed\"],\r\n valueNodeProperty: \"transform\",\r\n valueNodeName: \"xr_standard_trigger_pressed_value\",\r\n minNodeName: \"xr_standard_trigger_pressed_min\",\r\n maxNodeName: \"xr_standard_trigger_pressed_max\",\r\n },\r\n },\r\n },\r\n \"xr-standard-squeeze\": {\r\n type: \"squeeze\",\r\n gamepadIndices: {\r\n button: 1,\r\n },\r\n rootNodeName: \"xr_standard_squeeze\",\r\n visualResponses: {\r\n xr_standard_squeeze_pressed: {\r\n componentProperty: \"button\",\r\n states: [\"default\", \"touched\", \"pressed\"],\r\n valueNodeProperty: \"transform\",\r\n valueNodeName: \"xr_standard_squeeze_pressed_value\",\r\n minNodeName: \"xr_standard_squeeze_pressed_min\",\r\n maxNodeName: \"xr_standard_squeeze_pressed_max\",\r\n },\r\n },\r\n },\r\n \"xr-standard-touchpad\": {\r\n type: \"touchpad\",\r\n gamepadIndices: {\r\n button: 2,\r\n xAxis: 0,\r\n yAxis: 1,\r\n },\r\n rootNodeName: \"xr_standard_touchpad\",\r\n visualResponses: {\r\n xr_standard_touchpad_pressed: {\r\n componentProperty: \"button\",\r\n states: [\"default\", \"touched\", \"pressed\"],\r\n valueNodeProperty: \"transform\",\r\n valueNodeName: \"xr_standard_touchpad_pressed_value\",\r\n minNodeName: \"xr_standard_touchpad_pressed_min\",\r\n maxNodeName: \"xr_standard_touchpad_pressed_max\",\r\n },\r\n xr_standard_touchpad_xaxis_pressed: {\r\n componentProperty: \"xAxis\",\r\n states: [\"default\", \"touched\", \"pressed\"],\r\n valueNodeProperty: \"transform\",\r\n valueNodeName: \"xr_standard_touchpad_xaxis_pressed_value\",\r\n minNodeName: \"xr_standard_touchpad_xaxis_pressed_min\",\r\n maxNodeName: \"xr_standard_touchpad_xaxis_pressed_max\",\r\n },\r\n xr_standard_touchpad_yaxis_pressed: {\r\n componentProperty: \"yAxis\",\r\n states: [\"default\", \"touched\", \"pressed\"],\r\n valueNodeProperty: \"transform\",\r\n valueNodeName: \"xr_standard_touchpad_yaxis_pressed_value\",\r\n minNodeName: \"xr_standard_touchpad_yaxis_pressed_min\",\r\n maxNodeName: \"xr_standard_touchpad_yaxis_pressed_max\",\r\n },\r\n xr_standard_touchpad_xaxis_touched: {\r\n componentProperty: \"xAxis\",\r\n states: [\"default\", \"touched\", \"pressed\"],\r\n valueNodeProperty: \"transform\",\r\n valueNodeName: \"xr_standard_touchpad_xaxis_touched_value\",\r\n minNodeName: \"xr_standard_touchpad_xaxis_touched_min\",\r\n maxNodeName: \"xr_standard_touchpad_xaxis_touched_max\",\r\n },\r\n xr_standard_touchpad_yaxis_touched: {\r\n componentProperty: \"yAxis\",\r\n states: [\"default\", \"touched\", \"pressed\"],\r\n valueNodeProperty: \"transform\",\r\n valueNodeName: \"xr_standard_touchpad_yaxis_touched_value\",\r\n minNodeName: \"xr_standard_touchpad_yaxis_touched_min\",\r\n maxNodeName: \"xr_standard_touchpad_yaxis_touched_max\",\r\n },\r\n xr_standard_touchpad_axes_touched: {\r\n componentProperty: \"state\",\r\n states: [\"touched\", \"pressed\"],\r\n valueNodeProperty: \"visibility\",\r\n valueNodeName: \"xr_standard_touchpad_axes_touched_value\",\r\n },\r\n },\r\n touchPointNodeName: \"xr_standard_touchpad_axes_touched_value\",\r\n },\r\n \"xr-standard-thumbstick\": {\r\n type: \"thumbstick\",\r\n gamepadIndices: {\r\n button: 3,\r\n xAxis: 2,\r\n yAxis: 3,\r\n },\r\n rootNodeName: \"xr_standard_thumbstick\",\r\n visualResponses: {\r\n xr_standard_thumbstick_pressed: {\r\n componentProperty: \"button\",\r\n states: [\"default\", \"touched\", \"pressed\"],\r\n valueNodeProperty: \"transform\",\r\n valueNodeName: \"xr_standard_thumbstick_pressed_value\",\r\n minNodeName: \"xr_standard_thumbstick_pressed_min\",\r\n maxNodeName: \"xr_standard_thumbstick_pressed_max\",\r\n },\r\n xr_standard_thumbstick_xaxis_pressed: {\r\n componentProperty: \"xAxis\",\r\n states: [\"default\", \"touched\", \"pressed\"],\r\n valueNodeProperty: \"transform\",\r\n valueNodeName: \"xr_standard_thumbstick_xaxis_pressed_value\",\r\n minNodeName: \"xr_standard_thumbstick_xaxis_pressed_min\",\r\n maxNodeName: \"xr_standard_thumbstick_xaxis_pressed_max\",\r\n },\r\n xr_standard_thumbstick_yaxis_pressed: {\r\n componentProperty: \"yAxis\",\r\n states: [\"default\", \"touched\", \"pressed\"],\r\n valueNodeProperty: \"transform\",\r\n valueNodeName: \"xr_standard_thumbstick_yaxis_pressed_value\",\r\n minNodeName: \"xr_standard_thumbstick_yaxis_pressed_min\",\r\n maxNodeName: \"xr_standard_thumbstick_yaxis_pressed_max\",\r\n },\r\n },\r\n },\r\n },\r\n gamepadMapping: \"xr-standard\",\r\n rootNodeName: \"microsoft-mixed-reality-left\",\r\n assetPath: \"left.glb\",\r\n },\r\n right: {\r\n selectComponentId: \"xr-standard-trigger\",\r\n components: {\r\n \"xr-standard-trigger\": {\r\n type: \"trigger\",\r\n gamepadIndices: {\r\n button: 0,\r\n },\r\n rootNodeName: \"xr_standard_trigger\",\r\n visualResponses: {\r\n xr_standard_trigger_pressed: {\r\n componentProperty: \"button\",\r\n states: [\"default\", \"touched\", \"pressed\"],\r\n valueNodeProperty: \"transform\",\r\n valueNodeName: \"xr_standard_trigger_pressed_value\",\r\n minNodeName: \"xr_standard_trigger_pressed_min\",\r\n maxNodeName: \"xr_standard_trigger_pressed_max\",\r\n },\r\n },\r\n },\r\n \"xr-standard-squeeze\": {\r\n type: \"squeeze\",\r\n gamepadIndices: {\r\n button: 1,\r\n },\r\n rootNodeName: \"xr_standard_squeeze\",\r\n visualResponses: {\r\n xr_standard_squeeze_pressed: {\r\n componentProperty: \"button\",\r\n states: [\"default\", \"touched\", \"pressed\"],\r\n valueNodeProperty: \"transform\",\r\n valueNodeName: \"xr_standard_squeeze_pressed_value\",\r\n minNodeName: \"xr_standard_squeeze_pressed_min\",\r\n maxNodeName: \"xr_standard_squeeze_pressed_max\",\r\n },\r\n },\r\n },\r\n \"xr-standard-touchpad\": {\r\n type: \"touchpad\",\r\n gamepadIndices: {\r\n button: 2,\r\n xAxis: 0,\r\n yAxis: 1,\r\n },\r\n rootNodeName: \"xr_standard_touchpad\",\r\n visualResponses: {\r\n xr_standard_touchpad_pressed: {\r\n componentProperty: \"button\",\r\n states: [\"default\", \"touched\", \"pressed\"],\r\n valueNodeProperty: \"transform\",\r\n valueNodeName: \"xr_standard_touchpad_pressed_value\",\r\n minNodeName: \"xr_standard_touchpad_pressed_min\",\r\n maxNodeName: \"xr_standard_touchpad_pressed_max\",\r\n },\r\n xr_standard_touchpad_xaxis_pressed: {\r\n componentProperty: \"xAxis\",\r\n states: [\"default\", \"touched\", \"pressed\"],\r\n valueNodeProperty: \"transform\",\r\n valueNodeName: \"xr_standard_touchpad_xaxis_pressed_value\",\r\n minNodeName: \"xr_standard_touchpad_xaxis_pressed_min\",\r\n maxNodeName: \"xr_standard_touchpad_xaxis_pressed_max\",\r\n },\r\n xr_standard_touchpad_yaxis_pressed: {\r\n componentProperty: \"yAxis\",\r\n states: [\"default\", \"touched\", \"pressed\"],\r\n valueNodeProperty: \"transform\",\r\n valueNodeName: \"xr_standard_touchpad_yaxis_pressed_value\",\r\n minNodeName: \"xr_standard_touchpad_yaxis_pressed_min\",\r\n maxNodeName: \"xr_standard_touchpad_yaxis_pressed_max\",\r\n },\r\n xr_standard_touchpad_xaxis_touched: {\r\n componentProperty: \"xAxis\",\r\n states: [\"default\", \"touched\", \"pressed\"],\r\n valueNodeProperty: \"transform\",\r\n valueNodeName: \"xr_standard_touchpad_xaxis_touched_value\",\r\n minNodeName: \"xr_standard_touchpad_xaxis_touched_min\",\r\n maxNodeName: \"xr_standard_touchpad_xaxis_touched_max\",\r\n },\r\n xr_standard_touchpad_yaxis_touched: {\r\n componentProperty: \"yAxis\",\r\n states: [\"default\", \"touched\", \"pressed\"],\r\n valueNodeProperty: \"transform\",\r\n valueNodeName: \"xr_standard_touchpad_yaxis_touched_value\",\r\n minNodeName: \"xr_standard_touchpad_yaxis_touched_min\",\r\n maxNodeName: \"xr_standard_touchpad_yaxis_touched_max\",\r\n },\r\n xr_standard_touchpad_axes_touched: {\r\n componentProperty: \"state\",\r\n states: [\"touched\", \"pressed\"],\r\n valueNodeProperty: \"visibility\",\r\n valueNodeName: \"xr_standard_touchpad_axes_touched_value\",\r\n },\r\n },\r\n touchPointNodeName: \"xr_standard_touchpad_axes_touched_value\",\r\n },\r\n \"xr-standard-thumbstick\": {\r\n type: \"thumbstick\",\r\n gamepadIndices: {\r\n button: 3,\r\n xAxis: 2,\r\n yAxis: 3,\r\n },\r\n rootNodeName: \"xr_standard_thumbstick\",\r\n visualResponses: {\r\n xr_standard_thumbstick_pressed: {\r\n componentProperty: \"button\",\r\n states: [\"default\", \"touched\", \"pressed\"],\r\n valueNodeProperty: \"transform\",\r\n valueNodeName: \"xr_standard_thumbstick_pressed_value\",\r\n minNodeName: \"xr_standard_thumbstick_pressed_min\",\r\n maxNodeName: \"xr_standard_thumbstick_pressed_max\",\r\n },\r\n xr_standard_thumbstick_xaxis_pressed: {\r\n componentProperty: \"xAxis\",\r\n states: [\"default\", \"touched\", \"pressed\"],\r\n valueNodeProperty: \"transform\",\r\n valueNodeName: \"xr_standard_thumbstick_xaxis_pressed_value\",\r\n minNodeName: \"xr_standard_thumbstick_xaxis_pressed_min\",\r\n maxNodeName: \"xr_standard_thumbstick_xaxis_pressed_max\",\r\n },\r\n xr_standard_thumbstick_yaxis_pressed: {\r\n componentProperty: \"yAxis\",\r\n states: [\"default\", \"touched\", \"pressed\"],\r\n valueNodeProperty: \"transform\",\r\n valueNodeName: \"xr_standard_thumbstick_yaxis_pressed_value\",\r\n minNodeName: \"xr_standard_thumbstick_yaxis_pressed_min\",\r\n maxNodeName: \"xr_standard_thumbstick_yaxis_pressed_max\",\r\n },\r\n },\r\n },\r\n },\r\n gamepadMapping: \"xr-standard\",\r\n rootNodeName: \"microsoft-mixed-reality-right\",\r\n assetPath: \"right.glb\",\r\n },\r\n};\r\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"webXROculusTouchMotionController.js","sourceRoot":"","sources":["../../../../../lts/core/generated/XR/motionController/webXROculusTouchMotionController.ts"],"names":[],"mappings":"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","sourcesContent":["/* eslint-disable @typescript-eslint/naming-convention */\r\nimport type { IMinimalMotionControllerObject, MotionControllerHandedness, IMotionControllerLayoutMap } from \"./webXRAbstractMotionController\";\r\nimport { WebXRAbstractMotionController } from \"./webXRAbstractMotionController\";\r\nimport { WebXRMotionControllerManager } from \"./webXRMotionControllerManager\";\r\nimport type { AbstractMesh } from \"../../Meshes/abstractMesh\";\r\nimport type { Scene } from \"../../scene\";\r\nimport { Mesh } from \"../../Meshes/mesh\";\r\nimport { Quaternion } from \"../../Maths/math.vector\";\r\n\r\n/**\r\n * The motion controller class for oculus touch (quest, rift).\r\n * This class supports legacy mapping as well the standard xr mapping\r\n */\r\nexport class WebXROculusTouchMotionController extends WebXRAbstractMotionController {\r\n private _modelRootNode: AbstractMesh;\r\n\r\n /**\r\n * The base url used to load the left and right controller models\r\n */\r\n public static MODEL_BASE_URL: string = \"https://controllers.babylonjs.com/oculus/\";\r\n /**\r\n * The name of the left controller model file\r\n */\r\n public static MODEL_LEFT_FILENAME: string = \"left.babylon\";\r\n /**\r\n * The name of the right controller model file\r\n */\r\n public static MODEL_RIGHT_FILENAME: string = \"right.babylon\";\r\n /**\r\n * Base Url for the Quest controller model.\r\n */\r\n public static QUEST_MODEL_BASE_URL: string = \"https://controllers.babylonjs.com/oculusQuest/\";\r\n\r\n public profileId = \"oculus-touch\";\r\n\r\n constructor(\r\n scene: Scene,\r\n gamepadObject: IMinimalMotionControllerObject,\r\n handedness: MotionControllerHandedness,\r\n _legacyMapping: boolean = false,\r\n private _forceLegacyControllers: boolean = false\r\n ) {\r\n super(scene, OculusTouchLayouts[handedness], gamepadObject, handedness);\r\n }\r\n\r\n protected _getFilenameAndPath(): { filename: string; path: string } {\r\n let filename = \"\";\r\n if (this.handedness === \"left\") {\r\n filename = WebXROculusTouchMotionController.MODEL_LEFT_FILENAME;\r\n } else {\r\n // Right is the default if no hand is specified\r\n filename = WebXROculusTouchMotionController.MODEL_RIGHT_FILENAME;\r\n }\r\n\r\n const path = this._isQuest() ? WebXROculusTouchMotionController.QUEST_MODEL_BASE_URL : WebXROculusTouchMotionController.MODEL_BASE_URL;\r\n return {\r\n filename,\r\n path,\r\n };\r\n }\r\n\r\n protected _getModelLoadingConstraints(): boolean {\r\n return true;\r\n }\r\n\r\n protected _processLoadedModel(_meshes: AbstractMesh[]): void {\r\n const isQuest = this._isQuest();\r\n const triggerDirection = this.handedness === \"right\" ? -1 : 1;\r\n\r\n this.getComponentIds().forEach((id) => {\r\n const comp = id && this.getComponent(id);\r\n if (comp) {\r\n comp.onButtonStateChangedObservable.add(\r\n (component) => {\r\n if (!this.rootMesh || this.disableAnimation) {\r\n return;\r\n }\r\n\r\n switch (id) {\r\n case \"xr-standard-trigger\": // index trigger\r\n if (!isQuest) {\r\n (<AbstractMesh>this._modelRootNode.getChildren()[3]).rotation.x = -component.value * 0.2;\r\n (<AbstractMesh>this._modelRootNode.getChildren()[3]).position.y = -component.value * 0.005;\r\n (<AbstractMesh>this._modelRootNode.getChildren()[3]).position.z = -component.value * 0.005;\r\n }\r\n return;\r\n case \"xr-standard-squeeze\": // secondary trigger\r\n if (!isQuest) {\r\n (<AbstractMesh>this._modelRootNode.getChildren()[4]).position.x = triggerDirection * component.value * 0.0035;\r\n }\r\n return;\r\n case \"xr-standard-thumbstick\": // thumbstick\r\n return;\r\n case \"a-button\":\r\n case \"x-button\":\r\n if (!isQuest) {\r\n if (component.pressed) {\r\n (<AbstractMesh>this._modelRootNode.getChildren()[1]).position.y = -0.001;\r\n } else {\r\n (<AbstractMesh>this._modelRootNode.getChildren()[1]).position.y = 0;\r\n }\r\n }\r\n return;\r\n case \"b-button\":\r\n case \"y-button\":\r\n if (!isQuest) {\r\n if (component.pressed) {\r\n (<AbstractMesh>this._modelRootNode.getChildren()[2]).position.y = -0.001;\r\n } else {\r\n (<AbstractMesh>this._modelRootNode.getChildren()[2]).position.y = 0;\r\n }\r\n }\r\n return;\r\n }\r\n },\r\n undefined,\r\n true\r\n );\r\n }\r\n });\r\n }\r\n\r\n protected _setRootMesh(meshes: AbstractMesh[]): void {\r\n this.rootMesh = new Mesh(this.profileId + \" \" + this.handedness, this.scene);\r\n if (!this.scene.useRightHandedSystem) {\r\n this.rootMesh.rotationQuaternion = Quaternion.FromEulerAngles(0, Math.PI, 0);\r\n }\r\n\r\n meshes.forEach((mesh) => {\r\n mesh.isPickable = false;\r\n });\r\n if (this._isQuest()) {\r\n this._modelRootNode = meshes[0];\r\n } else {\r\n this._modelRootNode = meshes[1];\r\n this.rootMesh.position.y = 0.034;\r\n this.rootMesh.position.z = 0.052;\r\n }\r\n this._modelRootNode.parent = this.rootMesh;\r\n }\r\n\r\n protected _updateModel(): void {\r\n // no-op. model is updated using observables.\r\n }\r\n\r\n /**\r\n * Is this the new type of oculus touch. At the moment both have the same profile and it is impossible to differentiate\r\n * between the touch and touch 2.\r\n */\r\n private _isQuest() {\r\n // this is SADLY the only way to currently check. Until proper profiles will be available.\r\n return !!navigator.userAgent.match(/Quest/gi) && !this._forceLegacyControllers;\r\n }\r\n}\r\n\r\n// register the profile\r\nWebXRMotionControllerManager.RegisterController(\"oculus-touch\", (xrInput: XRInputSource, scene: Scene) => {\r\n return new WebXROculusTouchMotionController(scene, <any>xrInput.gamepad, xrInput.handedness);\r\n});\r\n\r\nWebXRMotionControllerManager.RegisterController(\"oculus-touch-legacy\", (xrInput: XRInputSource, scene: Scene) => {\r\n return new WebXROculusTouchMotionController(scene, <any>xrInput.gamepad, xrInput.handedness, true);\r\n});\r\n\r\nconst OculusTouchLayouts: IMotionControllerLayoutMap = {\r\n left: {\r\n selectComponentId: \"xr-standard-trigger\",\r\n components: {\r\n \"xr-standard-trigger\": {\r\n type: \"trigger\",\r\n gamepadIndices: {\r\n button: 0,\r\n },\r\n rootNodeName: \"xr_standard_trigger\",\r\n visualResponses: {},\r\n },\r\n \"xr-standard-squeeze\": {\r\n type: \"squeeze\",\r\n gamepadIndices: {\r\n button: 1,\r\n },\r\n rootNodeName: \"xr_standard_squeeze\",\r\n visualResponses: {},\r\n },\r\n \"xr-standard-thumbstick\": {\r\n type: \"thumbstick\",\r\n gamepadIndices: {\r\n button: 3,\r\n xAxis: 2,\r\n yAxis: 3,\r\n },\r\n rootNodeName: \"xr_standard_thumbstick\",\r\n visualResponses: {},\r\n },\r\n \"x-button\": {\r\n type: \"button\",\r\n gamepadIndices: {\r\n button: 4,\r\n },\r\n rootNodeName: \"x_button\",\r\n visualResponses: {},\r\n },\r\n \"y-button\": {\r\n type: \"button\",\r\n gamepadIndices: {\r\n button: 5,\r\n },\r\n rootNodeName: \"y_button\",\r\n visualResponses: {},\r\n },\r\n thumbrest: {\r\n type: \"button\",\r\n gamepadIndices: {\r\n button: 6,\r\n },\r\n rootNodeName: \"thumbrest\",\r\n visualResponses: {},\r\n },\r\n },\r\n gamepadMapping: \"xr-standard\",\r\n rootNodeName: \"oculus-touch-v2-left\",\r\n assetPath: \"left.glb\",\r\n },\r\n right: {\r\n selectComponentId: \"xr-standard-trigger\",\r\n components: {\r\n \"xr-standard-trigger\": {\r\n type: \"trigger\",\r\n gamepadIndices: {\r\n button: 0,\r\n },\r\n rootNodeName: \"xr_standard_trigger\",\r\n visualResponses: {},\r\n },\r\n \"xr-standard-squeeze\": {\r\n type: \"squeeze\",\r\n gamepadIndices: {\r\n button: 1,\r\n },\r\n rootNodeName: \"xr_standard_squeeze\",\r\n visualResponses: {},\r\n },\r\n \"xr-standard-thumbstick\": {\r\n type: \"thumbstick\",\r\n gamepadIndices: {\r\n button: 3,\r\n xAxis: 2,\r\n yAxis: 3,\r\n },\r\n rootNodeName: \"xr_standard_thumbstick\",\r\n visualResponses: {},\r\n },\r\n \"a-button\": {\r\n type: \"button\",\r\n gamepadIndices: {\r\n button: 4,\r\n },\r\n rootNodeName: \"a_button\",\r\n visualResponses: {},\r\n },\r\n \"b-button\": {\r\n type: \"button\",\r\n gamepadIndices: {\r\n button: 5,\r\n },\r\n rootNodeName: \"b_button\",\r\n visualResponses: {},\r\n },\r\n thumbrest: {\r\n type: \"button\",\r\n gamepadIndices: {\r\n button: 6,\r\n },\r\n rootNodeName: \"thumbrest\",\r\n visualResponses: {},\r\n },\r\n },\r\n gamepadMapping: \"xr-standard\",\r\n rootNodeName: \"oculus-touch-v2-right\",\r\n assetPath: \"right.glb\",\r\n },\r\n};\r\n"]}
1
+ {"version":3,"file":"webXROculusTouchMotionController.js","sourceRoot":"","sources":["../../../../../lts/core/generated/XR/motionController/webXROculusTouchMotionController.ts"],"names":[],"mappings":"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","sourcesContent":["/* eslint-disable @typescript-eslint/naming-convention */\r\nimport type { IMinimalMotionControllerObject, MotionControllerHandedness, IMotionControllerLayoutMap } from \"./webXRAbstractMotionController\";\r\nimport { WebXRAbstractMotionController } from \"./webXRAbstractMotionController\";\r\nimport { WebXRMotionControllerManager } from \"./webXRMotionControllerManager\";\r\nimport type { AbstractMesh } from \"../../Meshes/abstractMesh\";\r\nimport type { Scene } from \"../../scene\";\r\nimport { Mesh } from \"../../Meshes/mesh\";\r\nimport { Quaternion } from \"../../Maths/math.vector\";\r\n\r\n/**\r\n * The motion controller class for oculus touch (quest, rift).\r\n * This class supports legacy mapping as well the standard xr mapping\r\n */\r\nexport class WebXROculusTouchMotionController extends WebXRAbstractMotionController {\r\n private _modelRootNode: AbstractMesh;\r\n\r\n /**\r\n * The base url used to load the left and right controller models\r\n */\r\n public static MODEL_BASE_URL: string = \"https://controllers.babylonjs.com/oculus/\";\r\n /**\r\n * The name of the left controller model file\r\n */\r\n public static MODEL_LEFT_FILENAME: string = \"left.babylon\";\r\n /**\r\n * The name of the right controller model file\r\n */\r\n public static MODEL_RIGHT_FILENAME: string = \"right.babylon\";\r\n /**\r\n * Base Url for the Quest controller model.\r\n */\r\n public static QUEST_MODEL_BASE_URL: string = \"https://controllers.babylonjs.com/oculusQuest/\";\r\n\r\n public profileId = \"oculus-touch\";\r\n\r\n constructor(\r\n scene: Scene,\r\n gamepadObject: IMinimalMotionControllerObject,\r\n handedness: MotionControllerHandedness,\r\n _legacyMapping: boolean = false,\r\n private _forceLegacyControllers: boolean = false\r\n ) {\r\n super(scene, OculusTouchLayouts[handedness], gamepadObject, handedness);\r\n }\r\n\r\n protected _getFilenameAndPath(): { filename: string; path: string } {\r\n let filename = \"\";\r\n if (this.handedness === \"left\") {\r\n filename = WebXROculusTouchMotionController.MODEL_LEFT_FILENAME;\r\n } else {\r\n // Right is the default if no hand is specified\r\n filename = WebXROculusTouchMotionController.MODEL_RIGHT_FILENAME;\r\n }\r\n\r\n const path = this._isQuest() ? WebXROculusTouchMotionController.QUEST_MODEL_BASE_URL : WebXROculusTouchMotionController.MODEL_BASE_URL;\r\n return {\r\n filename,\r\n path,\r\n };\r\n }\r\n\r\n protected _getModelLoadingConstraints(): boolean {\r\n return true;\r\n }\r\n\r\n protected _processLoadedModel(_meshes: AbstractMesh[]): void {\r\n const isQuest = this._isQuest();\r\n const triggerDirection = this.handedness === \"right\" ? -1 : 1;\r\n\r\n this.getComponentIds().forEach((id) => {\r\n const comp = id && this.getComponent(id);\r\n if (comp) {\r\n comp.onButtonStateChangedObservable.add(\r\n (component) => {\r\n if (!this.rootMesh || this.disableAnimation) {\r\n return;\r\n }\r\n\r\n switch (id) {\r\n case \"xr-standard-trigger\": // index trigger\r\n if (!isQuest) {\r\n (<AbstractMesh>this._modelRootNode.getChildren()[3]).rotation.x = -component.value * 0.2;\r\n (<AbstractMesh>this._modelRootNode.getChildren()[3]).position.y = -component.value * 0.005;\r\n (<AbstractMesh>this._modelRootNode.getChildren()[3]).position.z = -component.value * 0.005;\r\n }\r\n return;\r\n case \"xr-standard-squeeze\": // secondary trigger\r\n if (!isQuest) {\r\n (<AbstractMesh>this._modelRootNode.getChildren()[4]).position.x = triggerDirection * component.value * 0.0035;\r\n }\r\n return;\r\n case \"xr-standard-thumbstick\": // thumbstick\r\n return;\r\n case \"a-button\":\r\n case \"x-button\":\r\n if (!isQuest) {\r\n if (component.pressed) {\r\n (<AbstractMesh>this._modelRootNode.getChildren()[1]).position.y = -0.001;\r\n } else {\r\n (<AbstractMesh>this._modelRootNode.getChildren()[1]).position.y = 0;\r\n }\r\n }\r\n return;\r\n case \"b-button\":\r\n case \"y-button\":\r\n if (!isQuest) {\r\n if (component.pressed) {\r\n (<AbstractMesh>this._modelRootNode.getChildren()[2]).position.y = -0.001;\r\n } else {\r\n (<AbstractMesh>this._modelRootNode.getChildren()[2]).position.y = 0;\r\n }\r\n }\r\n return;\r\n }\r\n },\r\n undefined,\r\n true\r\n );\r\n }\r\n });\r\n }\r\n\r\n protected _setRootMesh(meshes: AbstractMesh[]): void {\r\n this.rootMesh = new Mesh(this.profileId + \" \" + this.handedness, this.scene);\r\n if (!this.scene.useRightHandedSystem) {\r\n this.rootMesh.rotationQuaternion = Quaternion.FromEulerAngles(0, Math.PI, 0);\r\n }\r\n\r\n meshes.forEach((mesh) => {\r\n mesh.isPickable = false;\r\n });\r\n if (this._isQuest()) {\r\n this._modelRootNode = meshes[0];\r\n } else {\r\n this._modelRootNode = meshes[1];\r\n this.rootMesh.position.y = 0.034;\r\n this.rootMesh.position.z = 0.052;\r\n }\r\n this._modelRootNode.parent = this.rootMesh;\r\n }\r\n\r\n protected _updateModel(): void {\r\n // no-op. model is updated using observables.\r\n }\r\n\r\n /**\r\n * Is this the new type of oculus touch. At the moment both have the same profile and it is impossible to differentiate\r\n * between the touch and touch 2.\r\n */\r\n private _isQuest() {\r\n // this is SADLY the only way to currently check. Until proper profiles will be available.\r\n return !!navigator.userAgent.match(/Quest/gi) && !this._forceLegacyControllers;\r\n }\r\n}\r\n\r\n// register the profile\r\nWebXRMotionControllerManager.RegisterController(\"oculus-touch\", (xrInput: XRInputSource, scene: Scene) => {\r\n return new WebXROculusTouchMotionController(scene, <any>xrInput.gamepad, xrInput.handedness);\r\n});\r\n\r\nWebXRMotionControllerManager.RegisterController(\"oculus-touch-legacy\", (xrInput: XRInputSource, scene: Scene) => {\r\n return new WebXROculusTouchMotionController(scene, <any>xrInput.gamepad, xrInput.handedness, true);\r\n});\r\n\r\nconst OculusTouchLayouts: IMotionControllerLayoutMap = {\r\n left: {\r\n selectComponentId: \"xr-standard-trigger\",\r\n components: {\r\n \"xr-standard-trigger\": {\r\n type: \"trigger\",\r\n gamepadIndices: {\r\n button: 0,\r\n },\r\n rootNodeName: \"xr_standard_trigger\",\r\n visualResponses: {},\r\n },\r\n \"xr-standard-squeeze\": {\r\n type: \"squeeze\",\r\n gamepadIndices: {\r\n button: 1,\r\n },\r\n rootNodeName: \"xr_standard_squeeze\",\r\n visualResponses: {},\r\n },\r\n \"xr-standard-thumbstick\": {\r\n type: \"thumbstick\",\r\n gamepadIndices: {\r\n button: 3,\r\n xAxis: 2,\r\n yAxis: 3,\r\n },\r\n rootNodeName: \"xr_standard_thumbstick\",\r\n visualResponses: {},\r\n },\r\n \"x-button\": {\r\n type: \"button\",\r\n gamepadIndices: {\r\n button: 4,\r\n },\r\n rootNodeName: \"x_button\",\r\n visualResponses: {},\r\n },\r\n \"y-button\": {\r\n type: \"button\",\r\n gamepadIndices: {\r\n button: 5,\r\n },\r\n rootNodeName: \"y_button\",\r\n visualResponses: {},\r\n },\r\n thumbrest: {\r\n type: \"button\",\r\n gamepadIndices: {\r\n button: 6,\r\n },\r\n rootNodeName: \"thumbrest\",\r\n visualResponses: {},\r\n },\r\n },\r\n gamepadMapping: \"xr-standard\",\r\n rootNodeName: \"oculus-touch-v2-left\",\r\n assetPath: \"left.glb\",\r\n },\r\n right: {\r\n selectComponentId: \"xr-standard-trigger\",\r\n components: {\r\n \"xr-standard-trigger\": {\r\n type: \"trigger\",\r\n gamepadIndices: {\r\n button: 0,\r\n },\r\n rootNodeName: \"xr_standard_trigger\",\r\n visualResponses: {},\r\n },\r\n \"xr-standard-squeeze\": {\r\n type: \"squeeze\",\r\n gamepadIndices: {\r\n button: 1,\r\n },\r\n rootNodeName: \"xr_standard_squeeze\",\r\n visualResponses: {},\r\n },\r\n \"xr-standard-thumbstick\": {\r\n type: \"thumbstick\",\r\n gamepadIndices: {\r\n button: 3,\r\n xAxis: 2,\r\n yAxis: 3,\r\n },\r\n rootNodeName: \"xr_standard_thumbstick\",\r\n visualResponses: {},\r\n },\r\n \"a-button\": {\r\n type: \"button\",\r\n gamepadIndices: {\r\n button: 4,\r\n },\r\n rootNodeName: \"a_button\",\r\n visualResponses: {},\r\n },\r\n \"b-button\": {\r\n type: \"button\",\r\n gamepadIndices: {\r\n button: 5,\r\n },\r\n rootNodeName: \"b_button\",\r\n visualResponses: {},\r\n },\r\n thumbrest: {\r\n type: \"button\",\r\n gamepadIndices: {\r\n button: 6,\r\n },\r\n rootNodeName: \"thumbrest\",\r\n visualResponses: {},\r\n },\r\n },\r\n gamepadMapping: \"xr-standard\",\r\n rootNodeName: \"oculus-touch-v2-right\",\r\n assetPath: \"right.glb\",\r\n },\r\n};\r\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"webXRCamera.js","sourceRoot":"","sources":["../../../../lts/core/generated/XR/webXRCamera.ts"],"names":[],"mappings":"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","sourcesContent":["import { Vector3, Matrix, Quaternion, TmpVectors } from \"../Maths/math.vector\";\r\nimport type { Scene } from \"../scene\";\r\nimport { Camera } from \"../Cameras/camera\";\r\nimport { FreeCamera } from \"../Cameras/freeCamera\";\r\nimport { TargetCamera } from \"../Cameras/targetCamera\";\r\nimport type { WebXRSessionManager } from \"./webXRSessionManager\";\r\nimport { Viewport } from \"../Maths/math.viewport\";\r\nimport { Observable } from \"../Misc/observable\";\r\nimport { WebXRTrackingState } from \"./webXRTypes\";\r\n\r\n/**\r\n * WebXR Camera which holds the views for the xrSession\r\n * @see https://doc.babylonjs.com/features/featuresDeepDive/webXR/webXRCamera\r\n */\r\nexport class WebXRCamera extends FreeCamera {\r\n private static _ScaleReadOnly = Vector3.One();\r\n\r\n private _firstFrame = false;\r\n private _referenceQuaternion: Quaternion = Quaternion.Identity();\r\n private _referencedPosition: Vector3 = new Vector3();\r\n private _trackingState: WebXRTrackingState = WebXRTrackingState.NOT_TRACKING;\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 * Notifies when the camera's tracking state has changed.\r\n * Notice - will also be triggered when tracking has started (at the beginning of the session)\r\n */\r\n public onTrackingStateChanged = new Observable<WebXRTrackingState>();\r\n /**\r\n * Should position compensation execute on first frame.\r\n * This is used when copying the position from a native (non XR) camera\r\n */\r\n public compensateOnFirstFrame: boolean = true;\r\n\r\n /**\r\n * The last XRViewerPose from the current XRFrame\r\n * @internal\r\n */\r\n public _lastXRViewerPose?: XRViewerPose;\r\n\r\n /**\r\n * Creates a new webXRCamera, this should only be set at the camera after it has been updated by the xrSessionManager\r\n * @param name the name of the camera\r\n * @param scene the scene to add the camera to\r\n * @param _xrSessionManager a constructed xr session manager\r\n */\r\n constructor(name: string, scene: Scene, private _xrSessionManager: WebXRSessionManager) {\r\n super(name, Vector3.Zero(), scene);\r\n\r\n // Initial camera configuration\r\n this.minZ = 0.1;\r\n this.rotationQuaternion = new Quaternion();\r\n this.cameraRigMode = Camera.RIG_MODE_CUSTOM;\r\n this.updateUpVectorFromRotation = true;\r\n this._updateNumberOfRigCameras(1);\r\n // freeze projection matrix, which will be copied later\r\n this.freezeProjectionMatrix();\r\n\r\n this._xrSessionManager.onXRSessionInit.add(() => {\r\n this._referencedPosition.copyFromFloats(0, 0, 0);\r\n this._referenceQuaternion.copyFromFloats(0, 0, 0, 1);\r\n // first frame - camera's y position should be 0 for the correct offset\r\n this._firstFrame = this.compensateOnFirstFrame;\r\n });\r\n\r\n // Check transformation changes on each frame. Callback is added to be first so that the transformation will be\r\n // applied to the rest of the elements using the referenceSpace object\r\n this._xrSessionManager.onXRFrameObservable.add(\r\n () => {\r\n if (this._firstFrame) {\r\n this._updateFromXRSession();\r\n }\r\n this._updateReferenceSpace();\r\n this._updateFromXRSession();\r\n },\r\n undefined,\r\n true\r\n );\r\n }\r\n\r\n /**\r\n * Get the current XR tracking state of the camera\r\n */\r\n public get trackingState(): WebXRTrackingState {\r\n return this._trackingState;\r\n }\r\n\r\n private _setTrackingState(newState: WebXRTrackingState) {\r\n if (this._trackingState !== newState) {\r\n this._trackingState = newState;\r\n this.onTrackingStateChanged.notifyObservers(newState);\r\n }\r\n }\r\n\r\n /**\r\n * Return the user's height, unrelated to the current ground.\r\n * This will be the y position of this camera, when ground level is 0.\r\n */\r\n public get realWorldHeight(): number {\r\n const basePose = this._xrSessionManager.currentFrame && this._xrSessionManager.currentFrame.getViewerPose(this._xrSessionManager.baseReferenceSpace);\r\n if (basePose && basePose.transform) {\r\n return basePose.transform.position.y;\r\n } else {\r\n return 0;\r\n }\r\n }\r\n\r\n /** @internal */\r\n public _updateForDualEyeDebugging(/*pupilDistance = 0.01*/) {\r\n // Create initial camera rigs\r\n this._updateNumberOfRigCameras(2);\r\n this.rigCameras[0].viewport = new Viewport(0, 0, 0.5, 1.0);\r\n // this.rigCameras[0].position.x = -pupilDistance / 2;\r\n this.rigCameras[0].outputRenderTarget = null;\r\n this.rigCameras[1].viewport = new Viewport(0.5, 0, 0.5, 1.0);\r\n // this.rigCameras[1].position.x = pupilDistance / 2;\r\n this.rigCameras[1].outputRenderTarget = null;\r\n }\r\n\r\n /**\r\n * Sets this camera's transformation based on a non-vr camera\r\n * @param otherCamera the non-vr camera to copy the transformation from\r\n * @param resetToBaseReferenceSpace should XR reset to the base reference space\r\n */\r\n public setTransformationFromNonVRCamera(otherCamera: Camera = this.getScene().activeCamera!, resetToBaseReferenceSpace: boolean = true) {\r\n if (!otherCamera || otherCamera === this) {\r\n return;\r\n }\r\n const mat = otherCamera.computeWorldMatrix();\r\n mat.decompose(undefined, this.rotationQuaternion, this.position);\r\n // set the ground level\r\n this.position.y = 0;\r\n Quaternion.FromEulerAnglesToRef(0, this.rotationQuaternion.toEulerAngles().y, 0, this.rotationQuaternion);\r\n this._firstFrame = true;\r\n if (resetToBaseReferenceSpace) {\r\n this._xrSessionManager.resetReferenceSpace();\r\n }\r\n }\r\n\r\n /**\r\n * Gets the current instance class name (\"WebXRCamera\").\r\n * @returns the class name\r\n */\r\n public getClassName(): string {\r\n return \"WebXRCamera\";\r\n }\r\n\r\n /**\r\n * Set the target for the camera to look at.\r\n * Note that this only rotates around the Y axis, as opposed to the default behavior of other cameras\r\n * @param target the target to set the camera to look at\r\n */\r\n public setTarget(target: Vector3): void {\r\n // only rotate around the y axis!\r\n const tmpVector = TmpVectors.Vector3[1];\r\n target.subtractToRef(this.position, tmpVector);\r\n tmpVector.y = 0;\r\n tmpVector.normalize();\r\n const yRotation = Math.atan2(tmpVector.x, tmpVector.z);\r\n this.rotationQuaternion.toEulerAnglesToRef(tmpVector);\r\n Quaternion.FromEulerAnglesToRef(tmpVector.x, yRotation, tmpVector.z, this.rotationQuaternion);\r\n }\r\n\r\n public dispose() {\r\n super.dispose();\r\n this._lastXRViewerPose = undefined;\r\n }\r\n\r\n private _rotate180 = new Quaternion(0, 1, 0, 0);\r\n\r\n private _updateFromXRSession() {\r\n const pose = this._xrSessionManager.currentFrame && this._xrSessionManager.currentFrame.getViewerPose(this._xrSessionManager.referenceSpace);\r\n this._lastXRViewerPose = pose || undefined;\r\n if (!pose) {\r\n this._setTrackingState(WebXRTrackingState.NOT_TRACKING);\r\n return;\r\n }\r\n\r\n // Set the tracking state. if it didn't change it is a no-op\r\n const trackingState = pose.emulatedPosition ? WebXRTrackingState.TRACKING_LOST : WebXRTrackingState.TRACKING;\r\n this._setTrackingState(trackingState);\r\n\r\n // check min/max Z and update if not the same as in cache\r\n if (this.minZ !== this._cache.minZ || this.maxZ !== this._cache.maxZ) {\r\n const xrRenderState: XRRenderStateInit = {\r\n // if maxZ is 0 it should be \"Infinity\", but it doesn't work with the WebXR API. Setting to a large number.\r\n depthFar: this.maxZ || 10000,\r\n depthNear: this.minZ,\r\n };\r\n\r\n this._xrSessionManager.updateRenderState(xrRenderState);\r\n this._cache.minZ = this.minZ;\r\n this._cache.maxZ = this.maxZ;\r\n }\r\n\r\n if (pose.transform) {\r\n const orientation = pose.transform.orientation;\r\n if (pose.transform.orientation.x === undefined) {\r\n // Babylon native polyfill can return an undefined orientation value\r\n // When not initialized\r\n return;\r\n }\r\n const pos = pose.transform.position;\r\n this._referencedPosition.set(pos.x, pos.y, pos.z);\r\n\r\n this._referenceQuaternion.set(orientation.x, orientation.y, orientation.z, orientation.w);\r\n if (!this._scene.useRightHandedSystem) {\r\n this._referencedPosition.z *= -1;\r\n this._referenceQuaternion.z *= -1;\r\n this._referenceQuaternion.w *= -1;\r\n }\r\n\r\n if (this._firstFrame) {\r\n this._firstFrame = false;\r\n // we have the XR reference, now use this to find the offset to get the camera to be\r\n // in the right position\r\n\r\n // set the height to correlate to the current height\r\n this.position.y += this._referencedPosition.y;\r\n // avoid using the head rotation on the first frame.\r\n this._referenceQuaternion.copyFromFloats(0, 0, 0, 1);\r\n } else {\r\n // update position and rotation as reference\r\n this.rotationQuaternion.copyFrom(this._referenceQuaternion);\r\n this.position.copyFrom(this._referencedPosition);\r\n }\r\n }\r\n\r\n // Update camera rigs\r\n if (this.rigCameras.length !== pose.views.length) {\r\n this._updateNumberOfRigCameras(pose.views.length);\r\n }\r\n\r\n pose.views.forEach((view: XRView, i: number) => {\r\n const currentRig = <TargetCamera>this.rigCameras[i];\r\n // update right and left, where applicable\r\n if (!currentRig.isLeftCamera && !currentRig.isRightCamera) {\r\n if (view.eye === \"right\") {\r\n currentRig._isRightCamera = true;\r\n } else if (view.eye === \"left\") {\r\n currentRig._isLeftCamera = true;\r\n }\r\n }\r\n // Update view/projection matrix\r\n const pos = view.transform.position;\r\n const orientation = view.transform.orientation;\r\n\r\n currentRig.parent = this.parent;\r\n\r\n currentRig.position.set(pos.x, pos.y, pos.z);\r\n currentRig.rotationQuaternion.set(orientation.x, orientation.y, orientation.z, orientation.w);\r\n if (!this._scene.useRightHandedSystem) {\r\n currentRig.position.z *= -1;\r\n currentRig.rotationQuaternion.z *= -1;\r\n currentRig.rotationQuaternion.w *= -1;\r\n } else {\r\n currentRig.rotationQuaternion.multiplyInPlace(this._rotate180);\r\n }\r\n Matrix.FromFloat32ArrayToRefScaled(view.projectionMatrix, 0, 1, currentRig._projectionMatrix);\r\n\r\n if (!this._scene.useRightHandedSystem) {\r\n currentRig._projectionMatrix.toggleProjectionMatrixHandInPlace();\r\n }\r\n\r\n // first camera?\r\n if (i === 0) {\r\n this._projectionMatrix.copyFrom(currentRig._projectionMatrix);\r\n }\r\n\r\n const renderTargetTexture = this._xrSessionManager.getRenderTargetTextureForView(view);\r\n this._renderingMultiview = renderTargetTexture?._texture?.isMultiview || false;\r\n if (this._renderingMultiview) {\r\n // For multiview, the render target texture is the same per-view (just the slice index is different),\r\n // so we only need to set the output render target once for the rig parent.\r\n if (i == 0) {\r\n this._xrSessionManager.trySetViewportForView(this.viewport, view);\r\n this.outputRenderTarget = renderTargetTexture;\r\n }\r\n } else {\r\n // Update viewport\r\n this._xrSessionManager.trySetViewportForView(currentRig.viewport, view);\r\n\r\n // Set cameras to render to the session's render target\r\n currentRig.outputRenderTarget = renderTargetTexture || this._xrSessionManager.getRenderTargetTextureForView(view);\r\n }\r\n\r\n // Replicate parent rig camera behavior\r\n currentRig.layerMask = this.layerMask;\r\n });\r\n }\r\n\r\n private _updateNumberOfRigCameras(viewCount = 1) {\r\n while (this.rigCameras.length < viewCount) {\r\n const newCamera = new TargetCamera(\"XR-RigCamera: \" + this.rigCameras.length, Vector3.Zero(), this.getScene());\r\n newCamera.minZ = 0.1;\r\n newCamera.rotationQuaternion = new Quaternion();\r\n newCamera.updateUpVectorFromRotation = true;\r\n newCamera.isRigCamera = true;\r\n newCamera.rigParent = this;\r\n // do not compute projection matrix, provided by XR\r\n newCamera.freezeProjectionMatrix();\r\n this.rigCameras.push(newCamera);\r\n }\r\n while (this.rigCameras.length > viewCount) {\r\n const removedCamera = this.rigCameras.pop();\r\n if (removedCamera) {\r\n removedCamera.dispose();\r\n }\r\n }\r\n }\r\n\r\n private _updateReferenceSpace() {\r\n // were position & rotation updated OUTSIDE of the xr update loop\r\n if (!this.position.equals(this._referencedPosition) || !this.rotationQuaternion.equals(this._referenceQuaternion)) {\r\n const referencedMat = TmpVectors.Matrix[0];\r\n const poseMat = TmpVectors.Matrix[1];\r\n const transformMat = TmpVectors.Matrix[2];\r\n\r\n Matrix.ComposeToRef(WebXRCamera._ScaleReadOnly, this._referenceQuaternion, this._referencedPosition, referencedMat);\r\n Matrix.ComposeToRef(WebXRCamera._ScaleReadOnly, this.rotationQuaternion, this.position, poseMat);\r\n referencedMat.invert().multiplyToRef(poseMat, transformMat);\r\n transformMat.invert();\r\n\r\n if (!this._scene.useRightHandedSystem) {\r\n transformMat.toggleModelMatrixHandInPlace();\r\n }\r\n\r\n transformMat.decompose(undefined, this._referenceQuaternion, this._referencedPosition);\r\n const transform = new XRRigidTransform(\r\n {\r\n x: this._referencedPosition.x,\r\n y: this._referencedPosition.y,\r\n z: this._referencedPosition.z,\r\n },\r\n {\r\n x: this._referenceQuaternion.x,\r\n y: this._referenceQuaternion.y,\r\n z: this._referenceQuaternion.z,\r\n w: this._referenceQuaternion.w,\r\n }\r\n );\r\n this._xrSessionManager.referenceSpace = this._xrSessionManager.referenceSpace.getOffsetReferenceSpace(transform);\r\n }\r\n }\r\n}\r\n"]}
1
+ {"version":3,"file":"webXRCamera.js","sourceRoot":"","sources":["../../../../lts/core/generated/XR/webXRCamera.ts"],"names":[],"mappings":"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","sourcesContent":["import { Vector3, Matrix, Quaternion, TmpVectors } from \"../Maths/math.vector\";\r\nimport type { Scene } from \"../scene\";\r\nimport { Camera } from \"../Cameras/camera\";\r\nimport { FreeCamera } from \"../Cameras/freeCamera\";\r\nimport { TargetCamera } from \"../Cameras/targetCamera\";\r\nimport type { WebXRSessionManager } from \"./webXRSessionManager\";\r\nimport { Viewport } from \"../Maths/math.viewport\";\r\nimport { Observable } from \"../Misc/observable\";\r\nimport { WebXRTrackingState } from \"./webXRTypes\";\r\n\r\n/**\r\n * WebXR Camera which holds the views for the xrSession\r\n * @see https://doc.babylonjs.com/features/featuresDeepDive/webXR/webXRCamera\r\n */\r\nexport class WebXRCamera extends FreeCamera {\r\n private static _ScaleReadOnly = Vector3.One();\r\n\r\n private _firstFrame = false;\r\n private _referenceQuaternion: Quaternion = Quaternion.Identity();\r\n private _referencedPosition: Vector3 = new Vector3();\r\n private _trackingState: WebXRTrackingState = WebXRTrackingState.NOT_TRACKING;\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 * Notifies when the camera's tracking state has changed.\r\n * Notice - will also be triggered when tracking has started (at the beginning of the session)\r\n */\r\n public onTrackingStateChanged = new Observable<WebXRTrackingState>();\r\n /**\r\n * Should position compensation execute on first frame.\r\n * This is used when copying the position from a native (non XR) camera\r\n */\r\n public compensateOnFirstFrame: boolean = true;\r\n\r\n /**\r\n * The last XRViewerPose from the current XRFrame\r\n * @internal\r\n */\r\n public _lastXRViewerPose?: XRViewerPose;\r\n\r\n /**\r\n * Creates a new webXRCamera, this should only be set at the camera after it has been updated by the xrSessionManager\r\n * @param name the name of the camera\r\n * @param scene the scene to add the camera to\r\n * @param _xrSessionManager a constructed xr session manager\r\n */\r\n constructor(name: string, scene: Scene, private _xrSessionManager: WebXRSessionManager) {\r\n super(name, Vector3.Zero(), scene);\r\n\r\n // Initial camera configuration\r\n this.minZ = 0.1;\r\n this.rotationQuaternion = new Quaternion();\r\n this.cameraRigMode = Camera.RIG_MODE_CUSTOM;\r\n this.updateUpVectorFromRotation = true;\r\n this._updateNumberOfRigCameras(1);\r\n // freeze projection matrix, which will be copied later\r\n this.freezeProjectionMatrix();\r\n\r\n this._xrSessionManager.onXRSessionInit.add(() => {\r\n this._referencedPosition.copyFromFloats(0, 0, 0);\r\n this._referenceQuaternion.copyFromFloats(0, 0, 0, 1);\r\n // first frame - camera's y position should be 0 for the correct offset\r\n this._firstFrame = this.compensateOnFirstFrame;\r\n });\r\n\r\n // Check transformation changes on each frame. Callback is added to be first so that the transformation will be\r\n // applied to the rest of the elements using the referenceSpace object\r\n this._xrSessionManager.onXRFrameObservable.add(\r\n () => {\r\n if (this._firstFrame) {\r\n this._updateFromXRSession();\r\n }\r\n this._updateReferenceSpace();\r\n this._updateFromXRSession();\r\n },\r\n undefined,\r\n true\r\n );\r\n }\r\n\r\n /**\r\n * Get the current XR tracking state of the camera\r\n */\r\n public get trackingState(): WebXRTrackingState {\r\n return this._trackingState;\r\n }\r\n\r\n private _setTrackingState(newState: WebXRTrackingState) {\r\n if (this._trackingState !== newState) {\r\n this._trackingState = newState;\r\n this.onTrackingStateChanged.notifyObservers(newState);\r\n }\r\n }\r\n\r\n /**\r\n * Return the user's height, unrelated to the current ground.\r\n * This will be the y position of this camera, when ground level is 0.\r\n */\r\n public get realWorldHeight(): number {\r\n const basePose = this._xrSessionManager.currentFrame && this._xrSessionManager.currentFrame.getViewerPose(this._xrSessionManager.baseReferenceSpace);\r\n if (basePose && basePose.transform) {\r\n return basePose.transform.position.y;\r\n } else {\r\n return 0;\r\n }\r\n }\r\n\r\n /** @internal */\r\n public _updateForDualEyeDebugging(/*pupilDistance = 0.01*/) {\r\n // Create initial camera rigs\r\n this._updateNumberOfRigCameras(2);\r\n this.rigCameras[0].viewport = new Viewport(0, 0, 0.5, 1.0);\r\n // this.rigCameras[0].position.x = -pupilDistance / 2;\r\n this.rigCameras[0].outputRenderTarget = null;\r\n this.rigCameras[1].viewport = new Viewport(0.5, 0, 0.5, 1.0);\r\n // this.rigCameras[1].position.x = pupilDistance / 2;\r\n this.rigCameras[1].outputRenderTarget = null;\r\n }\r\n\r\n /**\r\n * Sets this camera's transformation based on a non-vr camera\r\n * @param otherCamera the non-vr camera to copy the transformation from\r\n * @param resetToBaseReferenceSpace should XR reset to the base reference space\r\n */\r\n public setTransformationFromNonVRCamera(otherCamera: Camera = this.getScene().activeCamera!, resetToBaseReferenceSpace: boolean = true) {\r\n if (!otherCamera || otherCamera === this) {\r\n return;\r\n }\r\n const mat = otherCamera.computeWorldMatrix();\r\n mat.decompose(undefined, this.rotationQuaternion, this.position);\r\n // set the ground level\r\n this.position.y = 0;\r\n Quaternion.FromEulerAnglesToRef(0, this.rotationQuaternion.toEulerAngles().y, 0, this.rotationQuaternion);\r\n this._firstFrame = true;\r\n if (resetToBaseReferenceSpace) {\r\n this._xrSessionManager.resetReferenceSpace();\r\n }\r\n }\r\n\r\n /**\r\n * Gets the current instance class name (\"WebXRCamera\").\r\n * @returns the class name\r\n */\r\n public getClassName(): string {\r\n return \"WebXRCamera\";\r\n }\r\n\r\n /**\r\n * Set the target for the camera to look at.\r\n * Note that this only rotates around the Y axis, as opposed to the default behavior of other cameras\r\n * @param target the target to set the camera to look at\r\n */\r\n public setTarget(target: Vector3): void {\r\n // only rotate around the y axis!\r\n const tmpVector = TmpVectors.Vector3[1];\r\n target.subtractToRef(this.position, tmpVector);\r\n tmpVector.y = 0;\r\n tmpVector.normalize();\r\n const yRotation = Math.atan2(tmpVector.x, tmpVector.z);\r\n this.rotationQuaternion.toEulerAnglesToRef(tmpVector);\r\n Quaternion.FromEulerAnglesToRef(tmpVector.x, yRotation, tmpVector.z, this.rotationQuaternion);\r\n }\r\n\r\n public dispose() {\r\n super.dispose();\r\n this._lastXRViewerPose = undefined;\r\n }\r\n\r\n private _rotate180 = new Quaternion(0, 1, 0, 0);\r\n\r\n private _updateFromXRSession() {\r\n const pose = this._xrSessionManager.currentFrame && this._xrSessionManager.currentFrame.getViewerPose(this._xrSessionManager.referenceSpace);\r\n this._lastXRViewerPose = pose || undefined;\r\n if (!pose) {\r\n this._setTrackingState(WebXRTrackingState.NOT_TRACKING);\r\n return;\r\n }\r\n\r\n // Set the tracking state. if it didn't change it is a no-op\r\n const trackingState = pose.emulatedPosition ? WebXRTrackingState.TRACKING_LOST : WebXRTrackingState.TRACKING;\r\n this._setTrackingState(trackingState);\r\n\r\n // check min/max Z and update if not the same as in cache\r\n if (this.minZ !== this._cache.minZ || this.maxZ !== this._cache.maxZ) {\r\n const xrRenderState: XRRenderStateInit = {\r\n // if maxZ is 0 it should be \"Infinity\", but it doesn't work with the WebXR API. Setting to a large number.\r\n depthFar: this.maxZ || 10000,\r\n depthNear: this.minZ,\r\n };\r\n\r\n this._xrSessionManager.updateRenderState(xrRenderState);\r\n this._cache.minZ = this.minZ;\r\n this._cache.maxZ = this.maxZ;\r\n }\r\n\r\n if (pose.transform) {\r\n const orientation = pose.transform.orientation;\r\n if (pose.transform.orientation.x === undefined) {\r\n // Babylon native polyfill can return an undefined orientation value\r\n // When not initialized\r\n return;\r\n }\r\n const pos = pose.transform.position;\r\n this._referencedPosition.set(pos.x, pos.y, pos.z);\r\n\r\n this._referenceQuaternion.set(orientation.x, orientation.y, orientation.z, orientation.w);\r\n if (!this._scene.useRightHandedSystem) {\r\n this._referencedPosition.z *= -1;\r\n this._referenceQuaternion.z *= -1;\r\n this._referenceQuaternion.w *= -1;\r\n }\r\n\r\n if (this._firstFrame) {\r\n this._firstFrame = false;\r\n // we have the XR reference, now use this to find the offset to get the camera to be\r\n // in the right position\r\n\r\n // set the height to correlate to the current height\r\n this.position.y += this._referencedPosition.y;\r\n // avoid using the head rotation on the first frame.\r\n this._referenceQuaternion.copyFromFloats(0, 0, 0, 1);\r\n } else {\r\n // update position and rotation as reference\r\n this.rotationQuaternion.copyFrom(this._referenceQuaternion);\r\n this.position.copyFrom(this._referencedPosition);\r\n }\r\n }\r\n\r\n // Update camera rigs\r\n if (this.rigCameras.length !== pose.views.length) {\r\n this._updateNumberOfRigCameras(pose.views.length);\r\n }\r\n\r\n pose.views.forEach((view: XRView, i: number) => {\r\n const currentRig = <TargetCamera>this.rigCameras[i];\r\n // update right and left, where applicable\r\n if (!currentRig.isLeftCamera && !currentRig.isRightCamera) {\r\n if (view.eye === \"right\") {\r\n currentRig._isRightCamera = true;\r\n } else if (view.eye === \"left\") {\r\n currentRig._isLeftCamera = true;\r\n }\r\n }\r\n // Update view/projection matrix\r\n const pos = view.transform.position;\r\n const orientation = view.transform.orientation;\r\n\r\n currentRig.parent = this.parent;\r\n\r\n currentRig.position.set(pos.x, pos.y, pos.z);\r\n currentRig.rotationQuaternion.set(orientation.x, orientation.y, orientation.z, orientation.w);\r\n if (!this._scene.useRightHandedSystem) {\r\n currentRig.position.z *= -1;\r\n currentRig.rotationQuaternion.z *= -1;\r\n currentRig.rotationQuaternion.w *= -1;\r\n } else {\r\n currentRig.rotationQuaternion.multiplyInPlace(this._rotate180);\r\n }\r\n Matrix.FromFloat32ArrayToRefScaled(view.projectionMatrix, 0, 1, currentRig._projectionMatrix);\r\n\r\n if (!this._scene.useRightHandedSystem) {\r\n currentRig._projectionMatrix.toggleProjectionMatrixHandInPlace();\r\n }\r\n\r\n // first camera?\r\n if (i === 0) {\r\n this._projectionMatrix.copyFrom(currentRig._projectionMatrix);\r\n }\r\n\r\n const renderTargetTexture = this._xrSessionManager.getRenderTargetTextureForView(view);\r\n this._renderingMultiview = renderTargetTexture?._texture?.isMultiview || false;\r\n if (this._renderingMultiview) {\r\n // For multiview, the render target texture is the same per-view (just the slice index is different),\r\n // so we only need to set the output render target once for the rig parent.\r\n if (i == 0) {\r\n this._xrSessionManager.trySetViewportForView(this.viewport, view);\r\n this.outputRenderTarget = renderTargetTexture;\r\n }\r\n } else {\r\n // Update viewport\r\n this._xrSessionManager.trySetViewportForView(currentRig.viewport, view);\r\n\r\n // Set cameras to render to the session's render target\r\n currentRig.outputRenderTarget = renderTargetTexture || this._xrSessionManager.getRenderTargetTextureForView(view);\r\n }\r\n\r\n // Replicate parent rig camera behavior\r\n currentRig.layerMask = this.layerMask;\r\n });\r\n }\r\n\r\n private _updateNumberOfRigCameras(viewCount = 1) {\r\n while (this.rigCameras.length < viewCount) {\r\n const newCamera = new TargetCamera(\"XR-RigCamera: \" + this.rigCameras.length, Vector3.Zero(), this.getScene());\r\n newCamera.minZ = 0.1;\r\n newCamera.rotationQuaternion = new Quaternion();\r\n newCamera.updateUpVectorFromRotation = true;\r\n newCamera.isRigCamera = true;\r\n newCamera.rigParent = this;\r\n // do not compute projection matrix, provided by XR\r\n newCamera.freezeProjectionMatrix();\r\n this.rigCameras.push(newCamera);\r\n }\r\n while (this.rigCameras.length > viewCount) {\r\n const removedCamera = this.rigCameras.pop();\r\n if (removedCamera) {\r\n removedCamera.dispose();\r\n }\r\n }\r\n }\r\n\r\n private _updateReferenceSpace() {\r\n // were position & rotation updated OUTSIDE of the xr update loop\r\n if (!this.position.equals(this._referencedPosition) || !this.rotationQuaternion.equals(this._referenceQuaternion)) {\r\n const referencedMat = TmpVectors.Matrix[0];\r\n const poseMat = TmpVectors.Matrix[1];\r\n const transformMat = TmpVectors.Matrix[2];\r\n\r\n Matrix.ComposeToRef(WebXRCamera._ScaleReadOnly, this._referenceQuaternion, this._referencedPosition, referencedMat);\r\n Matrix.ComposeToRef(WebXRCamera._ScaleReadOnly, this.rotationQuaternion, this.position, poseMat);\r\n referencedMat.invert().multiplyToRef(poseMat, transformMat);\r\n transformMat.invert();\r\n\r\n if (!this._scene.useRightHandedSystem) {\r\n transformMat.toggleModelMatrixHandInPlace();\r\n }\r\n\r\n transformMat.decompose(undefined, this._referenceQuaternion, this._referencedPosition);\r\n const transform = new XRRigidTransform(\r\n {\r\n x: this._referencedPosition.x,\r\n y: this._referencedPosition.y,\r\n z: this._referencedPosition.z,\r\n },\r\n {\r\n x: this._referenceQuaternion.x,\r\n y: this._referenceQuaternion.y,\r\n z: this._referenceQuaternion.z,\r\n w: this._referenceQuaternion.w,\r\n }\r\n );\r\n this._xrSessionManager.referenceSpace = this._xrSessionManager.referenceSpace.getOffsetReferenceSpace(transform);\r\n }\r\n }\r\n}\r\n"]}
@@ -28,10 +28,7 @@ export class WebXRDefaultExperience {
28
28
  });
29
29
  // init the UI right after construction
30
30
  if (!options.disableDefaultUI) {
31
- const uiOptions = {
32
- renderTarget: result.renderTarget,
33
- ...(options.uiOptions || {}),
34
- };
31
+ const uiOptions = Object.assign({ renderTarget: result.renderTarget }, (options.uiOptions || {}));
35
32
  if (options.optionalFeatures) {
36
33
  if (typeof options.optionalFeatures === "boolean") {
37
34
  uiOptions.optionalFeatures = ["hit-test", "anchors", "plane-detection", "hand-tracking"];
@@ -50,41 +47,22 @@ export class WebXRDefaultExperience {
50
47
  result.baseExperience.camera.compensateOnFirstFrame = false;
51
48
  }
52
49
  // Add controller support
53
- result.input = new WebXRInput(xrHelper.sessionManager, xrHelper.camera, {
54
- controllerOptions: {
50
+ result.input = new WebXRInput(xrHelper.sessionManager, xrHelper.camera, Object.assign({ controllerOptions: {
55
51
  renderingGroupId: options.renderingGroupId,
56
- },
57
- ...(options.inputOptions || {}),
58
- });
52
+ } }, (options.inputOptions || {})));
59
53
  if (!options.disablePointerSelection) {
60
54
  // Add default pointer selection
61
- const pointerSelectionOptions = {
62
- ...options.pointerSelectionOptions,
63
- xrInput: result.input,
64
- renderingGroupId: options.renderingGroupId,
65
- };
55
+ const pointerSelectionOptions = Object.assign(Object.assign({}, options.pointerSelectionOptions), { xrInput: result.input, renderingGroupId: options.renderingGroupId });
66
56
  result.pointerSelection = (result.baseExperience.featuresManager.enableFeature(WebXRControllerPointerSelection.Name, options.useStablePlugins ? "stable" : "latest", pointerSelectionOptions));
67
57
  if (!options.disableTeleportation) {
68
58
  // Add default teleportation, including rotation
69
- result.teleportation = result.baseExperience.featuresManager.enableFeature(WebXRMotionControllerTeleportation.Name, options.useStablePlugins ? "stable" : "latest", {
70
- floorMeshes: options.floorMeshes,
71
- xrInput: result.input,
72
- renderingGroupId: options.renderingGroupId,
73
- ...options.teleportationOptions,
74
- });
59
+ result.teleportation = result.baseExperience.featuresManager.enableFeature(WebXRMotionControllerTeleportation.Name, options.useStablePlugins ? "stable" : "latest", Object.assign({ floorMeshes: options.floorMeshes, xrInput: result.input, renderingGroupId: options.renderingGroupId }, options.teleportationOptions));
75
60
  result.teleportation.setSelectionFeature(result.pointerSelection);
76
61
  }
77
62
  }
78
63
  if (!options.disableNearInteraction) {
79
64
  // Add default pointer selection
80
- result.nearInteraction = result.baseExperience.featuresManager.enableFeature(WebXRNearInteraction.Name, options.useStablePlugins ? "stable" : "latest", {
81
- xrInput: result.input,
82
- farInteractionFeature: result.pointerSelection,
83
- renderingGroupId: options.renderingGroupId,
84
- useUtilityLayer: true,
85
- enableNearInteractionOnAllControllers: true,
86
- ...options.nearInteractionOptions,
87
- });
65
+ result.nearInteraction = result.baseExperience.featuresManager.enableFeature(WebXRNearInteraction.Name, options.useStablePlugins ? "stable" : "latest", Object.assign({ xrInput: result.input, farInteractionFeature: result.pointerSelection, renderingGroupId: options.renderingGroupId, useUtilityLayer: true, enableNearInteractionOnAllControllers: true }, options.nearInteractionOptions));
88
66
  }
89
67
  // Create the WebXR output target
90
68
  result.renderTarget = result.baseExperience.sessionManager.getWebXRRenderTarget(options.outputCanvasOptions);