@babylonjs/core 6.8.0 → 6.9.0

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 (517) hide show
  1. package/Actions/abstractActionManager.js.map +1 -1
  2. package/Actions/action.d.ts +4 -5
  3. package/Actions/action.js.map +1 -1
  4. package/Actions/condition.d.ts +1 -2
  5. package/Actions/condition.js.map +1 -1
  6. package/Actions/directActions.d.ts +1 -2
  7. package/Actions/directActions.js.map +1 -1
  8. package/Animations/animatable.interface.d.ts +1 -2
  9. package/Animations/animatable.interface.js.map +1 -1
  10. package/Animations/animation.d.ts +3 -4
  11. package/Animations/animation.js.map +1 -1
  12. package/Animations/animationGroup.d.ts +5 -0
  13. package/Animations/animationGroup.js +12 -0
  14. package/Animations/animationGroup.js.map +1 -1
  15. package/Animations/easing.js.map +1 -1
  16. package/Animations/runtimeAnimation.d.ts +1 -2
  17. package/Animations/runtimeAnimation.js.map +1 -1
  18. package/Audio/audioSceneComponent.js.map +1 -1
  19. package/Audio/sound.js.map +1 -1
  20. package/BakedVertexAnimation/bakedVertexAnimationManager.js.map +1 -1
  21. package/Behaviors/Cameras/bouncingBehavior.js.map +1 -1
  22. package/Behaviors/Cameras/framingBehavior.js.map +1 -1
  23. package/Behaviors/Meshes/fadeInOutBehavior.js.map +1 -1
  24. package/Behaviors/Meshes/pointerDragBehavior.js.map +1 -1
  25. package/Bones/bone.d.ts +3 -3
  26. package/Bones/bone.js.map +1 -1
  27. package/Bones/boneIKController.js.map +1 -1
  28. package/Bones/boneLookController.js.map +1 -1
  29. package/Buffers/dataBuffer.js.map +1 -1
  30. package/Cameras/Inputs/BaseCameraMouseWheelInput.js.map +1 -1
  31. package/Cameras/Inputs/BaseCameraPointersInput.js.map +1 -1
  32. package/Cameras/Inputs/arcRotateCameraGamepadInput.js.map +1 -1
  33. package/Cameras/Inputs/arcRotateCameraKeyboardMoveInput.js.map +1 -1
  34. package/Cameras/Inputs/arcRotateCameraMouseWheelInput.js.map +1 -1
  35. package/Cameras/Inputs/arcRotateCameraPointersInput.js.map +1 -1
  36. package/Cameras/Inputs/flyCameraKeyboardInput.js.map +1 -1
  37. package/Cameras/Inputs/flyCameraMouseInput.js.map +1 -1
  38. package/Cameras/Inputs/followCameraKeyboardMoveInput.js.map +1 -1
  39. package/Cameras/Inputs/followCameraMouseWheelInput.js.map +1 -1
  40. package/Cameras/Inputs/followCameraPointersInput.js.map +1 -1
  41. package/Cameras/Inputs/freeCameraGamepadInput.js.map +1 -1
  42. package/Cameras/Inputs/freeCameraKeyboardMoveInput.js.map +1 -1
  43. package/Cameras/Inputs/freeCameraMouseInput.js.map +1 -1
  44. package/Cameras/Inputs/freeCameraTouchInput.js.map +1 -1
  45. package/Cameras/VR/vrExperienceHelper.js.map +1 -1
  46. package/Cameras/arcRotateCamera.d.ts +1 -2
  47. package/Cameras/arcRotateCamera.js.map +1 -1
  48. package/Cameras/camera.d.ts +6 -7
  49. package/Cameras/camera.js.map +1 -1
  50. package/Cameras/flyCamera.js.map +1 -1
  51. package/Cameras/followCamera.js.map +1 -1
  52. package/Cameras/freeCamera.js.map +1 -1
  53. package/Cameras/targetCamera.js.map +1 -1
  54. package/Collisions/collider.js.map +1 -1
  55. package/Collisions/meshCollisionData.d.ts +1 -2
  56. package/Collisions/meshCollisionData.js.map +1 -1
  57. package/Collisions/pickingInfo.d.ts +1 -2
  58. package/Collisions/pickingInfo.js.map +1 -1
  59. package/Compute/computeEffect.d.ts +1 -2
  60. package/Compute/computeEffect.js.map +1 -1
  61. package/Compute/computeShader.js +1 -5
  62. package/Compute/computeShader.js.map +1 -1
  63. package/Culling/Octrees/octree.js.map +1 -1
  64. package/Culling/Octrees/octreeSceneComponent.d.ts +1 -2
  65. package/Culling/Octrees/octreeSceneComponent.js.map +1 -1
  66. package/Culling/boundingBox.d.ts +1 -2
  67. package/Culling/boundingBox.js.map +1 -1
  68. package/Culling/boundingInfo.d.ts +1 -2
  69. package/Culling/boundingInfo.js.map +1 -1
  70. package/Culling/boundingSphere.js.map +1 -1
  71. package/Culling/ray.js.map +1 -1
  72. package/Debug/debugLayer.js +1 -9
  73. package/Debug/debugLayer.js.map +1 -1
  74. package/Debug/skeletonViewer.js.map +1 -1
  75. package/Engines/Extensions/engine.cubeTexture.js +1 -6
  76. package/Engines/Extensions/engine.cubeTexture.js.map +1 -1
  77. package/Engines/Extensions/engine.multiRender.js.map +1 -1
  78. package/Engines/Extensions/engine.renderTarget.js +1 -6
  79. package/Engines/Extensions/engine.renderTarget.js.map +1 -1
  80. package/Engines/Extensions/engine.renderTargetCube.js +1 -9
  81. package/Engines/Extensions/engine.renderTargetCube.js.map +1 -1
  82. package/Engines/Extensions/engine.storageBuffer.d.ts +1 -2
  83. package/Engines/Extensions/engine.storageBuffer.js.map +1 -1
  84. package/Engines/Extensions/engine.textureSampler.d.ts +1 -2
  85. package/Engines/Extensions/engine.textureSampler.js.map +1 -1
  86. package/Engines/Extensions/engine.webVR.js +1 -5
  87. package/Engines/Extensions/engine.webVR.js.map +1 -1
  88. package/Engines/Processors/Expressions/Operators/shaderDefineArithmeticOperator.js +3 -0
  89. package/Engines/Processors/Expressions/Operators/shaderDefineArithmeticOperator.js.map +1 -1
  90. package/Engines/Processors/iShaderProcessor.d.ts +1 -2
  91. package/Engines/Processors/iShaderProcessor.js.map +1 -1
  92. package/Engines/Processors/shaderCodeInliner.js.map +1 -1
  93. package/Engines/Processors/shaderProcessor.d.ts +5 -6
  94. package/Engines/Processors/shaderProcessor.js +10 -3
  95. package/Engines/Processors/shaderProcessor.js.map +1 -1
  96. package/Engines/WebGL/webGLShaderProcessors.d.ts +1 -2
  97. package/Engines/WebGL/webGLShaderProcessors.js.map +1 -1
  98. package/Engines/WebGPU/Extensions/engine.cubeTexture.js +1 -7
  99. package/Engines/WebGPU/Extensions/engine.cubeTexture.js.map +1 -1
  100. package/Engines/WebGPU/Extensions/engine.query.js.map +1 -1
  101. package/Engines/WebGPU/Extensions/engine.rawTexture.js.map +1 -1
  102. package/Engines/WebGPU/Extensions/engine.renderTarget.js +1 -8
  103. package/Engines/WebGPU/Extensions/engine.renderTarget.js.map +1 -1
  104. package/Engines/WebGPU/Extensions/engine.renderTargetCube.js +1 -10
  105. package/Engines/WebGPU/Extensions/engine.renderTargetCube.js.map +1 -1
  106. package/Engines/WebGPU/Extensions/engine.storageBuffer.d.ts +1 -2
  107. package/Engines/WebGPU/Extensions/engine.storageBuffer.js.map +1 -1
  108. package/Engines/WebGPU/Extensions/engine.textureSampler.d.ts +1 -2
  109. package/Engines/WebGPU/Extensions/engine.textureSampler.js.map +1 -1
  110. package/Engines/WebGPU/webgpuCacheBindGroups.js.map +1 -1
  111. package/Engines/WebGPU/webgpuCacheRenderPipeline.js.map +1 -1
  112. package/Engines/WebGPU/webgpuCacheSampler.js +1 -6
  113. package/Engines/WebGPU/webgpuCacheSampler.js.map +1 -1
  114. package/Engines/WebGPU/webgpuHardwareTexture.d.ts +1 -2
  115. package/Engines/WebGPU/webgpuHardwareTexture.js.map +1 -1
  116. package/Engines/WebGPU/webgpuShaderProcessor.js.map +1 -1
  117. package/Engines/WebGPU/webgpuTintWASM.js +1 -4
  118. package/Engines/WebGPU/webgpuTintWASM.js.map +1 -1
  119. package/Engines/engine.d.ts +3 -3
  120. package/Engines/engine.js.map +1 -1
  121. package/Engines/engineStore.d.ts +4 -5
  122. package/Engines/engineStore.js.map +1 -1
  123. package/Engines/nativeEngine.js.map +1 -1
  124. package/Engines/nullEngine.js +1 -9
  125. package/Engines/nullEngine.js.map +1 -1
  126. package/Engines/thinEngine.js +3 -2
  127. package/Engines/thinEngine.js.map +1 -1
  128. package/Engines/webgpuEngine.d.ts +1 -2
  129. package/Engines/webgpuEngine.js +3 -14
  130. package/Engines/webgpuEngine.js.map +1 -1
  131. package/Events/pointerEvents.d.ts +1 -2
  132. package/Events/pointerEvents.js.map +1 -1
  133. package/Gamepads/Controllers/gearVRController.js.map +1 -1
  134. package/Gamepads/Controllers/oculusTouchController.js.map +1 -1
  135. package/Gamepads/Controllers/poseEnabledController.js.map +1 -1
  136. package/Gamepads/Controllers/windowsMotionController.js.map +1 -1
  137. package/Gamepads/gamepad.js.map +1 -1
  138. package/Gizmos/cameraGizmo.js.map +1 -1
  139. package/Gizmos/gizmo.js.map +1 -1
  140. package/Gizmos/lightGizmo.js.map +1 -1
  141. package/Gizmos/planeRotationGizmo.js.map +1 -1
  142. package/Helpers/environmentHelper.js +2 -8
  143. package/Helpers/environmentHelper.js.map +1 -1
  144. package/Helpers/textureDome.js.map +1 -1
  145. package/Inputs/scene.inputManager.d.ts +1 -2
  146. package/Inputs/scene.inputManager.js +4 -1
  147. package/Inputs/scene.inputManager.js.map +1 -1
  148. package/Layers/effectLayer.js +1 -8
  149. package/Layers/effectLayer.js.map +1 -1
  150. package/Layers/glowLayer.js +1 -12
  151. package/Layers/glowLayer.js.map +1 -1
  152. package/Layers/highlightLayer.js +1 -11
  153. package/Layers/highlightLayer.js.map +1 -1
  154. package/Legacy/legacy.js +1 -1
  155. package/Legacy/legacy.js.map +1 -1
  156. package/LensFlares/lensFlareSystem.js.map +1 -1
  157. package/Lights/Shadows/shadowGenerator.js +1 -4
  158. package/Lights/Shadows/shadowGenerator.js.map +1 -1
  159. package/Lights/directionalLight.js.map +1 -1
  160. package/Lights/hemisphericLight.js.map +1 -1
  161. package/Lights/light.js.map +1 -1
  162. package/Lights/spotLight.js.map +1 -1
  163. package/Loading/loadingScreen.js.map +1 -1
  164. package/Materials/Background/backgroundMaterial.js.map +1 -1
  165. package/Materials/Node/Blocks/Dual/currentScreenBlock.d.ts +2 -3
  166. package/Materials/Node/Blocks/Dual/currentScreenBlock.js.map +1 -1
  167. package/Materials/Node/Blocks/Dual/lightBlock.js.map +1 -1
  168. package/Materials/Node/Blocks/Dual/reflectionTextureBaseBlock.js.map +1 -1
  169. package/Materials/Node/Blocks/Dual/sceneDepthBlock.d.ts +2 -3
  170. package/Materials/Node/Blocks/Dual/sceneDepthBlock.js.map +1 -1
  171. package/Materials/Node/Blocks/Fragment/fragmentOutputBlock.d.ts +3 -4
  172. package/Materials/Node/Blocks/Fragment/fragmentOutputBlock.js.map +1 -1
  173. package/Materials/Node/Blocks/Fragment/heightToNormalBlock.js.map +1 -1
  174. package/Materials/Node/Blocks/Fragment/imageProcessingBlock.js.map +1 -1
  175. package/Materials/Node/Blocks/Fragment/perturbNormalBlock.js.map +1 -1
  176. package/Materials/Node/Blocks/PBR/clearCoatBlock.js.map +1 -1
  177. package/Materials/Node/Blocks/PBR/pbrMetallicRoughnessBlock.js.map +1 -1
  178. package/Materials/Node/Blocks/PBR/reflectionBlock.js.map +1 -1
  179. package/Materials/Node/Blocks/PBR/refractionBlock.js.map +1 -1
  180. package/Materials/Node/Blocks/PBR/sheenBlock.js.map +1 -1
  181. package/Materials/Node/Blocks/Particle/particleTextureBlock.d.ts +1 -2
  182. package/Materials/Node/Blocks/Particle/particleTextureBlock.js.map +1 -1
  183. package/Materials/Node/Blocks/Vertex/vertexOutputBlock.js.map +1 -1
  184. package/Materials/Node/Blocks/addBlock.js +2 -0
  185. package/Materials/Node/Blocks/addBlock.js.map +1 -1
  186. package/Materials/Node/Blocks/clampBlock.js.map +1 -1
  187. package/Materials/Node/Blocks/cloudBlock.js.map +1 -1
  188. package/Materials/Node/Blocks/customBlock.d.ts +1 -0
  189. package/Materials/Node/Blocks/customBlock.js +18 -2
  190. package/Materials/Node/Blocks/customBlock.js.map +1 -1
  191. package/Materials/Node/Blocks/divideBlock.js +2 -0
  192. package/Materials/Node/Blocks/divideBlock.js.map +1 -1
  193. package/Materials/Node/Blocks/meshAttributeExistsBlock.js.map +1 -1
  194. package/Materials/Node/Blocks/multiplyBlock.js +2 -0
  195. package/Materials/Node/Blocks/multiplyBlock.js.map +1 -1
  196. package/Materials/Node/Blocks/remapBlock.js.map +1 -1
  197. package/Materials/Node/Blocks/subtractBlock.js +2 -0
  198. package/Materials/Node/Blocks/subtractBlock.js.map +1 -1
  199. package/Materials/Node/Blocks/triPlanarBlock.js.map +1 -1
  200. package/Materials/Node/Blocks/worleyNoise3DBlock.js.map +1 -1
  201. package/Materials/Node/nodeMaterial.js +2 -8
  202. package/Materials/Node/nodeMaterial.js.map +1 -1
  203. package/Materials/Node/nodeMaterialDecorator.d.ts +2 -3
  204. package/Materials/Node/nodeMaterialDecorator.js.map +1 -1
  205. package/Materials/PBR/pbrAnisotropicConfiguration.d.ts +3 -4
  206. package/Materials/PBR/pbrAnisotropicConfiguration.js.map +1 -1
  207. package/Materials/PBR/pbrBRDFConfiguration.js.map +1 -1
  208. package/Materials/PBR/pbrBaseMaterial.js +1 -5
  209. package/Materials/PBR/pbrBaseMaterial.js.map +1 -1
  210. package/Materials/PBR/pbrBaseSimpleMaterial.js.map +1 -1
  211. package/Materials/PBR/pbrClearCoatConfiguration.d.ts +3 -4
  212. package/Materials/PBR/pbrClearCoatConfiguration.js.map +1 -1
  213. package/Materials/PBR/pbrIridescenceConfiguration.d.ts +3 -4
  214. package/Materials/PBR/pbrIridescenceConfiguration.js.map +1 -1
  215. package/Materials/PBR/pbrMaterial.d.ts +2 -1
  216. package/Materials/PBR/pbrMaterial.js +6 -13
  217. package/Materials/PBR/pbrMaterial.js.map +1 -1
  218. package/Materials/PBR/pbrMetallicRoughnessMaterial.js.map +1 -1
  219. package/Materials/PBR/pbrSheenConfiguration.d.ts +3 -4
  220. package/Materials/PBR/pbrSheenConfiguration.js.map +1 -1
  221. package/Materials/PBR/pbrSpecularGlossinessMaterial.js.map +1 -1
  222. package/Materials/PBR/pbrSubSurfaceConfiguration.d.ts +3 -4
  223. package/Materials/PBR/pbrSubSurfaceConfiguration.js.map +1 -1
  224. package/Materials/Textures/Procedurals/proceduralTexture.js.map +1 -1
  225. package/Materials/Textures/baseTexture.d.ts +2 -1
  226. package/Materials/Textures/baseTexture.js.map +1 -1
  227. package/Materials/Textures/cubeTexture.js.map +1 -1
  228. package/Materials/Textures/equiRectangularCubeTexture.js.map +1 -1
  229. package/Materials/Textures/hdrCubeTexture.js.map +1 -1
  230. package/Materials/Textures/htmlElementTexture.d.ts +2 -3
  231. package/Materials/Textures/htmlElementTexture.js +1 -4
  232. package/Materials/Textures/htmlElementTexture.js.map +1 -1
  233. package/Materials/Textures/internalTexture.d.ts +3 -4
  234. package/Materials/Textures/internalTexture.js.map +1 -1
  235. package/Materials/Textures/rawTexture.d.ts +1 -2
  236. package/Materials/Textures/rawTexture.js.map +1 -1
  237. package/Materials/Textures/rawTexture2DArray.d.ts +1 -2
  238. package/Materials/Textures/rawTexture2DArray.js.map +1 -1
  239. package/Materials/Textures/renderTargetTexture.d.ts +1 -2
  240. package/Materials/Textures/renderTargetTexture.js.map +1 -1
  241. package/Materials/Textures/texture.d.ts +4 -5
  242. package/Materials/Textures/texture.js.map +1 -1
  243. package/Materials/Textures/videoTexture.js +9 -22
  244. package/Materials/Textures/videoTexture.js.map +1 -1
  245. package/Materials/colorCurves.js.map +1 -1
  246. package/Materials/drawWrapper.d.ts +3 -4
  247. package/Materials/drawWrapper.js.map +1 -1
  248. package/Materials/effect.d.ts +5 -6
  249. package/Materials/effect.js.map +1 -1
  250. package/Materials/effectFallbacks.d.ts +2 -3
  251. package/Materials/effectFallbacks.js.map +1 -1
  252. package/Materials/greasedLinePluginMaterial.d.ts +307 -0
  253. package/Materials/greasedLinePluginMaterial.js +553 -0
  254. package/Materials/greasedLinePluginMaterial.js.map +1 -0
  255. package/Materials/iEffectFallbacks.d.ts +1 -2
  256. package/Materials/iEffectFallbacks.js.map +1 -1
  257. package/Materials/imageProcessingConfiguration.d.ts +2 -3
  258. package/Materials/imageProcessingConfiguration.js.map +1 -1
  259. package/Materials/index.d.ts +1 -0
  260. package/Materials/index.js +1 -0
  261. package/Materials/index.js.map +1 -1
  262. package/Materials/material.d.ts +6 -4
  263. package/Materials/material.decalMapConfiguration.js.map +1 -1
  264. package/Materials/material.detailMapConfiguration.d.ts +4 -5
  265. package/Materials/material.detailMapConfiguration.js.map +1 -1
  266. package/Materials/material.js +40 -5
  267. package/Materials/material.js.map +1 -1
  268. package/Materials/materialPluginBase.d.ts +13 -14
  269. package/Materials/materialPluginBase.js +2 -2
  270. package/Materials/materialPluginBase.js.map +1 -1
  271. package/Materials/materialPluginEvent.d.ts +8 -9
  272. package/Materials/materialPluginEvent.js.map +1 -1
  273. package/Materials/materialPluginFactoryExport.d.ts +1 -2
  274. package/Materials/materialPluginFactoryExport.js.map +1 -1
  275. package/Materials/materialPluginManager.d.ts +6 -6
  276. package/Materials/materialPluginManager.js +3 -1
  277. package/Materials/materialPluginManager.js.map +1 -1
  278. package/Materials/materialStencilState.d.ts +1 -2
  279. package/Materials/materialStencilState.js.map +1 -1
  280. package/Materials/shaderMaterial.d.ts +4 -5
  281. package/Materials/shaderMaterial.js +6 -19
  282. package/Materials/shaderMaterial.js.map +1 -1
  283. package/Materials/standardMaterial.d.ts +2 -1
  284. package/Materials/standardMaterial.js +4 -1
  285. package/Materials/standardMaterial.js.map +1 -1
  286. package/Materials/uniformBuffer.js.map +1 -1
  287. package/Maths/math.vector.d.ts +2 -1
  288. package/Maths/math.vector.js +3 -2
  289. package/Maths/math.vector.js.map +1 -1
  290. package/Meshes/Builders/decalBuilder.js +4 -4
  291. package/Meshes/Builders/decalBuilder.js.map +1 -1
  292. package/Meshes/Builders/greasedLineBuilder.d.ts +105 -0
  293. package/Meshes/Builders/greasedLineBuilder.js +330 -0
  294. package/Meshes/Builders/greasedLineBuilder.js.map +1 -0
  295. package/Meshes/Builders/index.d.ts +1 -0
  296. package/Meshes/Builders/index.js +1 -0
  297. package/Meshes/Builders/index.js.map +1 -1
  298. package/Meshes/Builders/linesBuilder.d.ts +1 -2
  299. package/Meshes/Builders/linesBuilder.js.map +1 -1
  300. package/Meshes/Builders/textBuilder.d.ts +34 -0
  301. package/Meshes/Builders/textBuilder.js +10 -2
  302. package/Meshes/Builders/textBuilder.js.map +1 -1
  303. package/Meshes/abstractMesh.d.ts +6 -6
  304. package/Meshes/abstractMesh.js +3 -2
  305. package/Meshes/abstractMesh.js.map +1 -1
  306. package/Meshes/geometry.d.ts +1 -2
  307. package/Meshes/geometry.js.map +1 -1
  308. package/Meshes/greasedLineMesh.d.ts +189 -0
  309. package/Meshes/greasedLineMesh.js +437 -0
  310. package/Meshes/greasedLineMesh.js.map +1 -0
  311. package/Meshes/index.d.ts +1 -0
  312. package/Meshes/index.js +1 -0
  313. package/Meshes/index.js.map +1 -1
  314. package/Meshes/mesh.d.ts +10 -6
  315. package/Meshes/mesh.js +20 -10
  316. package/Meshes/mesh.js.map +1 -1
  317. package/Meshes/mesh.vertexData.d.ts +2 -3
  318. package/Meshes/mesh.vertexData.js.map +1 -1
  319. package/Meshes/meshUVSpaceRenderer.js +1 -8
  320. package/Meshes/meshUVSpaceRenderer.js.map +1 -1
  321. package/Meshes/subMesh.d.ts +7 -8
  322. package/Meshes/subMesh.js.map +1 -1
  323. package/Meshes/transformNode.js.map +1 -1
  324. package/Misc/basis.js.map +1 -1
  325. package/Misc/copyTools.d.ts +1 -2
  326. package/Misc/copyTools.js.map +1 -1
  327. package/Misc/decorators.d.ts +5 -6
  328. package/Misc/decorators.js.map +1 -1
  329. package/Misc/deepCopier.js +7 -1
  330. package/Misc/deepCopier.js.map +1 -1
  331. package/Misc/dumpTools.d.ts +4 -3
  332. package/Misc/dumpTools.js +5 -4
  333. package/Misc/dumpTools.js.map +1 -1
  334. package/Misc/environmentTextureTools.js +1 -1
  335. package/Misc/environmentTextureTools.js.map +1 -1
  336. package/Misc/fileTools.js +10 -10
  337. package/Misc/fileTools.js.map +1 -1
  338. package/Misc/greasedLineTools.d.ts +153 -0
  339. package/Misc/greasedLineTools.js +299 -0
  340. package/Misc/greasedLineTools.js.map +1 -0
  341. package/Misc/index.d.ts +1 -0
  342. package/Misc/index.js +1 -0
  343. package/Misc/index.js.map +1 -1
  344. package/Misc/khronosTextureContainer.js.map +1 -1
  345. package/Misc/rgbdTextureTools.d.ts +3 -4
  346. package/Misc/rgbdTextureTools.js.map +1 -1
  347. package/Misc/sceneOptimizer.js.map +1 -1
  348. package/Misc/screenshotTools.d.ts +16 -7
  349. package/Misc/screenshotTools.js +23 -13
  350. package/Misc/screenshotTools.js.map +1 -1
  351. package/Misc/smartArray.js.map +1 -1
  352. package/Misc/tools.d.ts +21 -9
  353. package/Misc/tools.js +21 -9
  354. package/Misc/tools.js.map +1 -1
  355. package/Misc/videoRecorder.js +1 -4
  356. package/Misc/videoRecorder.js.map +1 -1
  357. package/Misc/virtualJoystick.js +1 -4
  358. package/Misc/virtualJoystick.js.map +1 -1
  359. package/Misc/webRequest.js.map +1 -1
  360. package/Morph/morphTarget.d.ts +2 -1
  361. package/Morph/morphTarget.js.map +1 -1
  362. package/Morph/morphTargetManager.js.map +1 -1
  363. package/Offline/database.js.map +1 -1
  364. package/Particles/EmitterTypes/IParticleEmitterType.d.ts +1 -2
  365. package/Particles/EmitterTypes/IParticleEmitterType.js.map +1 -1
  366. package/Particles/IParticleSystem.d.ts +2 -3
  367. package/Particles/IParticleSystem.js.map +1 -1
  368. package/Particles/baseParticleSystem.js.map +1 -1
  369. package/Particles/gpuParticleSystem.d.ts +1 -2
  370. package/Particles/gpuParticleSystem.js +2 -6
  371. package/Particles/gpuParticleSystem.js.map +1 -1
  372. package/Particles/particle.js.map +1 -1
  373. package/Particles/particleSystem.d.ts +1 -2
  374. package/Particles/particleSystem.js +1 -1
  375. package/Particles/particleSystem.js.map +1 -1
  376. package/Particles/particleSystemSet.js.map +1 -1
  377. package/Particles/subEmitter.d.ts +2 -3
  378. package/Particles/subEmitter.js.map +1 -1
  379. package/Particles/webgl2ParticleSystem.js.map +1 -1
  380. package/Physics/physicsHelper.js +4 -4
  381. package/Physics/physicsHelper.js.map +1 -1
  382. package/Physics/physicsRaycastResult.d.ts +3 -1
  383. package/Physics/physicsRaycastResult.js +10 -1
  384. package/Physics/physicsRaycastResult.js.map +1 -1
  385. package/Physics/v1/Plugins/ammoJSPlugin.js.map +1 -1
  386. package/Physics/v1/physicsImpostor.js.map +1 -1
  387. package/Physics/v2/IPhysicsEnginePlugin.d.ts +10 -0
  388. package/Physics/v2/IPhysicsEnginePlugin.js.map +1 -1
  389. package/Physics/v2/Plugins/havokPlugin.d.ts +3 -2
  390. package/Physics/v2/Plugins/havokPlugin.js +9 -6
  391. package/Physics/v2/Plugins/havokPlugin.js.map +1 -1
  392. package/PostProcesses/RenderPipeline/Pipelines/defaultRenderingPipeline.d.ts +1 -2
  393. package/PostProcesses/RenderPipeline/Pipelines/defaultRenderingPipeline.js.map +1 -1
  394. package/PostProcesses/RenderPipeline/Pipelines/ssao2RenderingPipeline.js.map +1 -1
  395. package/PostProcesses/RenderPipeline/Pipelines/ssaoRenderingPipeline.js.map +1 -1
  396. package/PostProcesses/RenderPipeline/Pipelines/ssrRenderingPipeline.js.map +1 -1
  397. package/PostProcesses/RenderPipeline/Pipelines/standardRenderingPipeline.d.ts +1 -2
  398. package/PostProcesses/RenderPipeline/Pipelines/standardRenderingPipeline.js.map +1 -1
  399. package/PostProcesses/RenderPipeline/postProcessRenderPipeline.d.ts +1 -2
  400. package/PostProcesses/RenderPipeline/postProcessRenderPipeline.js.map +1 -1
  401. package/PostProcesses/blackAndWhitePostProcess.d.ts +1 -2
  402. package/PostProcesses/blackAndWhitePostProcess.js.map +1 -1
  403. package/PostProcesses/bloomMergePostProcess.js.map +1 -1
  404. package/PostProcesses/blurPostProcess.d.ts +1 -2
  405. package/PostProcesses/blurPostProcess.js.map +1 -1
  406. package/PostProcesses/chromaticAberrationPostProcess.d.ts +1 -2
  407. package/PostProcesses/chromaticAberrationPostProcess.js.map +1 -1
  408. package/PostProcesses/circleOfConfusionPostProcess.js.map +1 -1
  409. package/PostProcesses/colorCorrectionPostProcess.d.ts +1 -2
  410. package/PostProcesses/colorCorrectionPostProcess.js.map +1 -1
  411. package/PostProcesses/convolutionPostProcess.d.ts +1 -2
  412. package/PostProcesses/convolutionPostProcess.js.map +1 -1
  413. package/PostProcesses/depthOfFieldBlurPostProcess.js.map +1 -1
  414. package/PostProcesses/displayPassPostProcess.d.ts +1 -2
  415. package/PostProcesses/displayPassPostProcess.js.map +1 -1
  416. package/PostProcesses/extractHighlightsPostProcess.js.map +1 -1
  417. package/PostProcesses/filterPostProcess.d.ts +1 -2
  418. package/PostProcesses/filterPostProcess.js.map +1 -1
  419. package/PostProcesses/fxaaPostProcess.d.ts +1 -2
  420. package/PostProcesses/fxaaPostProcess.js.map +1 -1
  421. package/PostProcesses/grainPostProcess.d.ts +1 -2
  422. package/PostProcesses/grainPostProcess.js.map +1 -1
  423. package/PostProcesses/imageProcessingPostProcess.js.map +1 -1
  424. package/PostProcesses/motionBlurPostProcess.d.ts +2 -3
  425. package/PostProcesses/motionBlurPostProcess.js.map +1 -1
  426. package/PostProcesses/passPostProcess.d.ts +1 -2
  427. package/PostProcesses/passPostProcess.js.map +1 -1
  428. package/PostProcesses/postProcess.d.ts +6 -6
  429. package/PostProcesses/postProcess.js.map +1 -1
  430. package/PostProcesses/postProcessManager.d.ts +1 -2
  431. package/PostProcesses/postProcessManager.js.map +1 -1
  432. package/PostProcesses/refractionPostProcess.d.ts +1 -2
  433. package/PostProcesses/refractionPostProcess.js.map +1 -1
  434. package/PostProcesses/screenSpaceCurvaturePostProcess.d.ts +2 -3
  435. package/PostProcesses/screenSpaceCurvaturePostProcess.js.map +1 -1
  436. package/PostProcesses/screenSpaceReflectionPostProcess.d.ts +2 -3
  437. package/PostProcesses/screenSpaceReflectionPostProcess.js.map +1 -1
  438. package/PostProcesses/sharpenPostProcess.d.ts +2 -3
  439. package/PostProcesses/sharpenPostProcess.js.map +1 -1
  440. package/PostProcesses/tonemapPostProcess.d.ts +1 -2
  441. package/PostProcesses/tonemapPostProcess.js.map +1 -1
  442. package/PostProcesses/volumetricLightScatteringPostProcess.d.ts +1 -2
  443. package/PostProcesses/volumetricLightScatteringPostProcess.js.map +1 -1
  444. package/Probes/reflectionProbe.js.map +1 -1
  445. package/Rendering/depthPeelingRenderer.js.map +1 -1
  446. package/Rendering/depthRenderer.d.ts +2 -3
  447. package/Rendering/depthRenderer.js.map +1 -1
  448. package/Rendering/geometryBufferRenderer.js +2 -2
  449. package/Rendering/geometryBufferRenderer.js.map +1 -1
  450. package/Rendering/outlineRenderer.js.map +1 -1
  451. package/Rendering/prePassRenderer.js.map +1 -1
  452. package/Rendering/renderingGroup.js.map +1 -1
  453. package/Rendering/renderingManager.d.ts +5 -6
  454. package/Rendering/renderingManager.js.map +1 -1
  455. package/Rendering/subSurfaceConfiguration.js.map +1 -1
  456. package/Rendering/utilityLayerRenderer.js.map +1 -1
  457. package/Shaders/ShadersInclude/pbrBlockAlbedoOpacity.js +4 -2
  458. package/Shaders/ShadersInclude/pbrBlockAlbedoOpacity.js.map +1 -1
  459. package/Shaders/ShadersInclude/pbrDebug.js +3 -1
  460. package/Shaders/ShadersInclude/pbrDebug.js.map +1 -1
  461. package/Sprites/sprite.d.ts +1 -2
  462. package/Sprites/sprite.js.map +1 -1
  463. package/Sprites/spriteManager.d.ts +1 -2
  464. package/Sprites/spriteManager.js.map +1 -1
  465. package/Sprites/spriteRenderer.d.ts +2 -3
  466. package/Sprites/spriteRenderer.js.map +1 -1
  467. package/XR/features/WebXRAnchorSystem.js.map +1 -1
  468. package/XR/features/WebXRBackgroundRemover.js.map +1 -1
  469. package/XR/features/WebXRControllerMovement.js.map +1 -1
  470. package/XR/features/WebXRControllerPhysics.js +4 -13
  471. package/XR/features/WebXRControllerPhysics.js.map +1 -1
  472. package/XR/features/WebXRControllerPointerSelection.js.map +1 -1
  473. package/XR/features/WebXRControllerTeleportation.js.map +1 -1
  474. package/XR/features/WebXRDOMOverlay.js.map +1 -1
  475. package/XR/features/WebXRDepthSensing.js.map +1 -1
  476. package/XR/features/WebXREyeTracking.js.map +1 -1
  477. package/XR/features/WebXRFeaturePointSystem.js.map +1 -1
  478. package/XR/features/WebXRHandTracking.js +2 -8
  479. package/XR/features/WebXRHandTracking.js.map +1 -1
  480. package/XR/features/WebXRHitTest.js.map +1 -1
  481. package/XR/features/WebXRHitTestLegacy.js.map +1 -1
  482. package/XR/features/WebXRImageTracking.js.map +1 -1
  483. package/XR/features/WebXRLayers.js +2 -2
  484. package/XR/features/WebXRLayers.js.map +1 -1
  485. package/XR/features/WebXRLightEstimation.js.map +1 -1
  486. package/XR/features/WebXRMeshDetector.js.map +1 -1
  487. package/XR/features/WebXRNearInteraction.js.map +1 -1
  488. package/XR/features/WebXRPlaneDetector.js.map +1 -1
  489. package/XR/features/WebXRSpaceWarp.js.map +1 -1
  490. package/XR/motionController/webXRAbstractMotionController.js +1 -4
  491. package/XR/motionController/webXRAbstractMotionController.js.map +1 -1
  492. package/XR/motionController/webXRControllerComponent.js.map +1 -1
  493. package/XR/motionController/webXRGenericMotionController.js.map +1 -1
  494. package/XR/motionController/webXRHTCViveMotionController.js.map +1 -1
  495. package/XR/motionController/webXRMicrosoftMixedRealityController.js.map +1 -1
  496. package/XR/motionController/webXROculusTouchMotionController.js.map +1 -1
  497. package/XR/webXRCamera.js.map +1 -1
  498. package/XR/webXRDefaultExperience.js +6 -28
  499. package/XR/webXRDefaultExperience.js.map +1 -1
  500. package/XR/webXRExperienceHelper.js +1 -0
  501. package/XR/webXRExperienceHelper.js.map +1 -1
  502. package/XR/webXRFeaturesManager.js +1 -4
  503. package/XR/webXRFeaturesManager.js.map +1 -1
  504. package/XR/webXRInput.js +1 -6
  505. package/XR/webXRInput.js.map +1 -1
  506. package/abstractScene.d.ts +3 -3
  507. package/abstractScene.js.map +1 -1
  508. package/assetContainer.js +1 -4
  509. package/assetContainer.js.map +1 -1
  510. package/node.d.ts +6 -7
  511. package/node.js.map +1 -1
  512. package/package.json +2 -4
  513. package/scene.d.ts +49 -50
  514. package/scene.js +4 -10
  515. package/scene.js.map +1 -1
  516. package/sceneComponent.d.ts +6 -7
  517. package/sceneComponent.js.map +1 -1
@@ -1 +1 @@
1
- {"version":3,"file":"webXRAbstractMotionController.js","sourceRoot":"","sources":["../../../../../lts/core/generated/XR/motionController/webXRAbstractMotionController.ts"],"names":[],"mappings":"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","sourcesContent":["import type { IDisposable, Scene } from \"../../scene\";\r\nimport { WebXRControllerComponent } from \"./webXRControllerComponent\";\r\nimport { Observable } from \"../../Misc/observable\";\r\nimport { Logger } from \"../../Misc/logger\";\r\nimport { SceneLoader } from \"../../Loading/sceneLoader\";\r\nimport type { AbstractMesh } from \"../../Meshes/abstractMesh\";\r\nimport type { Nullable } from \"../../types\";\r\nimport { Quaternion, Vector3 } from \"../../Maths/math.vector\";\r\nimport { Mesh } from \"../../Meshes/mesh\";\r\n\r\n/**\r\n * Handedness type in xrInput profiles. These can be used to define layouts in the Layout Map.\r\n */\r\nexport type MotionControllerHandedness = \"none\" | \"left\" | \"right\";\r\n/**\r\n * The type of components available in motion controllers.\r\n * This is not the name of the component.\r\n */\r\nexport type MotionControllerComponentType = \"trigger\" | \"squeeze\" | \"touchpad\" | \"thumbstick\" | \"button\";\r\n\r\n/**\r\n * The state of a controller component\r\n */\r\nexport type MotionControllerComponentStateType = \"default\" | \"touched\" | \"pressed\";\r\n\r\n/**\r\n * The schema of motion controller layout.\r\n * No object will be initialized using this interface\r\n * This is used just to define the profile.\r\n */\r\nexport interface IMotionControllerLayout {\r\n /**\r\n * Path to load the assets. Usually relative to the base path\r\n */\r\n assetPath: string;\r\n /**\r\n * Available components (unsorted)\r\n */\r\n components: {\r\n /**\r\n * A map of component Ids\r\n */\r\n [componentId: string]: {\r\n /**\r\n * The type of input the component outputs\r\n */\r\n type: MotionControllerComponentType;\r\n /**\r\n * The indices of this component in the gamepad object\r\n */\r\n gamepadIndices: {\r\n /**\r\n * Index of button\r\n */\r\n button?: number;\r\n /**\r\n * If available, index of x-axis\r\n */\r\n xAxis?: number;\r\n /**\r\n * If available, index of y-axis\r\n */\r\n yAxis?: number;\r\n };\r\n /**\r\n * The mesh's root node name\r\n */\r\n rootNodeName: string;\r\n /**\r\n * Animation definitions for this model\r\n */\r\n visualResponses: {\r\n [stateKey: string]: {\r\n /**\r\n * What property will be animated\r\n */\r\n componentProperty: \"xAxis\" | \"yAxis\" | \"button\" | \"state\";\r\n /**\r\n * What states influence this visual response\r\n */\r\n states: MotionControllerComponentStateType[];\r\n /**\r\n * Type of animation - movement or visibility\r\n */\r\n valueNodeProperty: \"transform\" | \"visibility\";\r\n /**\r\n * Base node name to move. Its position will be calculated according to the min and max nodes\r\n */\r\n valueNodeName?: string;\r\n /**\r\n * Minimum movement node\r\n */\r\n minNodeName?: string;\r\n /**\r\n * Max movement node\r\n */\r\n maxNodeName?: string;\r\n };\r\n };\r\n /**\r\n * If touch enabled, what is the name of node to display user feedback\r\n */\r\n touchPointNodeName?: string;\r\n };\r\n };\r\n /**\r\n * Is it xr standard mapping or not\r\n */\r\n gamepadMapping: \"\" | \"xr-standard\";\r\n /**\r\n * Base root node of this entire model\r\n */\r\n rootNodeName: string;\r\n /**\r\n * Defines the main button component id\r\n */\r\n selectComponentId: string;\r\n}\r\n\r\n/**\r\n * A definition for the layout map in the input profile\r\n */\r\nexport interface IMotionControllerLayoutMap {\r\n /**\r\n * Layouts with handedness type as a key\r\n */\r\n [handedness: string /* handedness */]: IMotionControllerLayout;\r\n}\r\n\r\n/**\r\n * The XR Input profile schema\r\n * Profiles can be found here:\r\n * https://github.com/immersive-web/webxr-input-profiles/tree/master/packages/registry/profiles\r\n */\r\nexport interface IMotionControllerProfile {\r\n /**\r\n * fallback profiles for this profileId\r\n */\r\n fallbackProfileIds: string[];\r\n /**\r\n * The layout map, with handedness as key\r\n */\r\n layouts: IMotionControllerLayoutMap;\r\n /**\r\n * The id of this profile\r\n * correlates to the profile(s) in the xrInput.profiles array\r\n */\r\n profileId: string;\r\n}\r\n\r\n/**\r\n * A helper-interface for the 3 meshes needed for controller button animation\r\n * The meshes are provided to the _lerpButtonTransform function to calculate the current position of the value mesh\r\n */\r\nexport interface IMotionControllerButtonMeshMap {\r\n /**\r\n * the mesh that defines the pressed value mesh position.\r\n * This is used to find the max-position of this button\r\n */\r\n pressedMesh: AbstractMesh;\r\n /**\r\n * the mesh that defines the unpressed value mesh position.\r\n * This is used to find the min (or initial) position of this button\r\n */\r\n unpressedMesh: AbstractMesh;\r\n /**\r\n * The mesh that will be changed when value changes\r\n */\r\n valueMesh: AbstractMesh;\r\n}\r\n\r\n/**\r\n * A helper-interface for the 3 meshes needed for controller axis animation.\r\n * This will be expanded when touchpad animations are fully supported\r\n * The meshes are provided to the _lerpAxisTransform function to calculate the current position of the value mesh\r\n */\r\nexport interface IMotionControllerMeshMap {\r\n /**\r\n * the mesh that defines the maximum value mesh position.\r\n */\r\n maxMesh?: AbstractMesh;\r\n /**\r\n * the mesh that defines the minimum value mesh position.\r\n */\r\n minMesh?: AbstractMesh;\r\n /**\r\n * The mesh that will be changed when axis value changes\r\n */\r\n valueMesh?: AbstractMesh;\r\n}\r\n\r\n/**\r\n * The elements needed for change-detection of the gamepad objects in motion controllers\r\n */\r\nexport interface IMinimalMotionControllerObject {\r\n /**\r\n * Available axes of this controller\r\n */\r\n axes: number[];\r\n /**\r\n * An array of available buttons\r\n */\r\n buttons: Array<{\r\n /**\r\n * Value of the button/trigger\r\n */\r\n value: number;\r\n /**\r\n * If the button/trigger is currently touched\r\n */\r\n touched: boolean;\r\n /**\r\n * If the button/trigger is currently pressed\r\n */\r\n pressed: boolean;\r\n }>;\r\n\r\n /**\r\n * EXPERIMENTAL haptic support.\r\n */\r\n hapticActuators?: Array<{\r\n pulse: (value: number, duration: number) => Promise<boolean>;\r\n }>;\r\n}\r\n\r\n/**\r\n * An Abstract Motion controller\r\n * This class receives an xrInput and a profile layout and uses those to initialize the components\r\n * Each component has an observable to check for changes in value and state\r\n */\r\nexport abstract class WebXRAbstractMotionController implements IDisposable {\r\n private _initComponent = (id: string) => {\r\n if (!id) {\r\n return;\r\n }\r\n const componentDef = this.layout.components[id];\r\n const type = componentDef.type;\r\n const buttonIndex = componentDef.gamepadIndices.button;\r\n // search for axes\r\n const axes: number[] = [];\r\n if (componentDef.gamepadIndices.xAxis !== undefined && componentDef.gamepadIndices.yAxis !== undefined) {\r\n axes.push(componentDef.gamepadIndices.xAxis, componentDef.gamepadIndices.yAxis);\r\n }\r\n\r\n this.components[id] = new WebXRControllerComponent(id, type, buttonIndex, axes);\r\n };\r\n\r\n private _modelReady: boolean = false;\r\n\r\n /**\r\n * A map of components (WebXRControllerComponent) in this motion controller\r\n * Components have a ComponentType and can also have both button and axis definitions\r\n */\r\n public readonly components: {\r\n [id: string]: WebXRControllerComponent;\r\n } = {};\r\n\r\n /**\r\n * Disable the model's animation. Can be set at any time.\r\n */\r\n public disableAnimation: boolean = false;\r\n /**\r\n * Observers registered here will be triggered when the model of this controller is done loading\r\n */\r\n public onModelLoadedObservable: Observable<WebXRAbstractMotionController> = new Observable();\r\n /**\r\n * The profile id of this motion controller\r\n */\r\n public abstract profileId: string;\r\n /**\r\n * The root mesh of the model. It is null if the model was not yet initialized\r\n */\r\n public rootMesh: Nullable<AbstractMesh>;\r\n\r\n /**\r\n * constructs a new abstract motion controller\r\n * @param scene the scene to which the model of the controller will be added\r\n * @param layout The profile layout to load\r\n * @param gamepadObject The gamepad object correlating to this controller\r\n * @param handedness handedness (left/right/none) of this controller\r\n * @param _doNotLoadControllerMesh set this flag to ignore the mesh loading\r\n * @param _controllerCache a cache holding controller models already loaded in this session\r\n */\r\n constructor(\r\n // eslint-disable-next-line @typescript-eslint/naming-convention\r\n protected scene: Scene,\r\n // eslint-disable-next-line @typescript-eslint/naming-convention\r\n protected layout: IMotionControllerLayout,\r\n /**\r\n * The gamepad object correlating to this controller\r\n */\r\n public gamepadObject: IMinimalMotionControllerObject,\r\n /**\r\n * handedness (left/right/none) of this controller\r\n */\r\n public handedness: MotionControllerHandedness,\r\n /**\r\n * @internal\r\n */\r\n public _doNotLoadControllerMesh: boolean = false,\r\n private _controllerCache?: Array<{\r\n filename: string;\r\n path: string;\r\n meshes: AbstractMesh[];\r\n }>\r\n ) {\r\n // initialize the components\r\n if (layout.components) {\r\n Object.keys(layout.components).forEach(this._initComponent);\r\n }\r\n // Model is loaded in WebXRInput\r\n }\r\n\r\n /**\r\n * Dispose this controller, the model mesh and all its components\r\n */\r\n public dispose(): void {\r\n this.getComponentIds().forEach((id) => this.getComponent(id).dispose());\r\n if (this.rootMesh) {\r\n this.rootMesh.getChildren(undefined, true).forEach((node) => {\r\n node.setEnabled(false);\r\n });\r\n this.rootMesh.dispose(!!this._controllerCache, !this._controllerCache);\r\n }\r\n }\r\n\r\n /**\r\n * Returns all components of specific type\r\n * @param type the type to search for\r\n * @returns an array of components with this type\r\n */\r\n public getAllComponentsOfType(type: MotionControllerComponentType): WebXRControllerComponent[] {\r\n return this.getComponentIds()\r\n .map((id) => this.components[id])\r\n .filter((component) => component.type === type);\r\n }\r\n\r\n /**\r\n * get a component based an its component id as defined in layout.components\r\n * @param id the id of the component\r\n * @returns the component correlates to the id or undefined if not found\r\n */\r\n public getComponent(id: string): WebXRControllerComponent {\r\n return this.components[id];\r\n }\r\n\r\n /**\r\n * Get the list of components available in this motion controller\r\n * @returns an array of strings correlating to available components\r\n */\r\n public getComponentIds(): string[] {\r\n return Object.keys(this.components);\r\n }\r\n\r\n /**\r\n * Get the first component of specific type\r\n * @param type type of component to find\r\n * @returns a controller component or null if not found\r\n */\r\n public getComponentOfType(type: MotionControllerComponentType): Nullable<WebXRControllerComponent> {\r\n return this.getAllComponentsOfType(type)[0] || null;\r\n }\r\n\r\n /**\r\n * Get the main (Select) component of this controller as defined in the layout\r\n * @returns the main component of this controller\r\n */\r\n public getMainComponent(): WebXRControllerComponent {\r\n return this.getComponent(this.layout.selectComponentId);\r\n }\r\n\r\n /**\r\n * Loads the model correlating to this controller\r\n * When the mesh is loaded, the onModelLoadedObservable will be triggered\r\n * @returns A promise fulfilled with the result of the model loading\r\n */\r\n public async loadModel(): Promise<boolean> {\r\n const useGeneric = !this._getModelLoadingConstraints();\r\n let loadingParams = this._getGenericFilenameAndPath();\r\n // Checking if GLB loader is present\r\n if (useGeneric) {\r\n Logger.Warn(\"Falling back to generic models\");\r\n } else {\r\n loadingParams = this._getFilenameAndPath();\r\n }\r\n return new Promise((resolve, reject) => {\r\n const meshesLoaded = (meshes: AbstractMesh[]) => {\r\n if (useGeneric) {\r\n this._getGenericParentMesh(meshes);\r\n } else {\r\n this._setRootMesh(meshes);\r\n }\r\n this._processLoadedModel(meshes);\r\n this._modelReady = true;\r\n this.onModelLoadedObservable.notifyObservers(this);\r\n resolve(true);\r\n };\r\n if (this._controllerCache) {\r\n // look for it in the cache\r\n const found = this._controllerCache.filter((c) => {\r\n return c.filename === loadingParams.filename && c.path === loadingParams.path;\r\n });\r\n if (found[0]) {\r\n found[0].meshes.forEach((mesh) => mesh.setEnabled(true));\r\n meshesLoaded(found[0].meshes);\r\n return;\r\n // found, don't continue to load\r\n }\r\n }\r\n SceneLoader.ImportMesh(\r\n \"\",\r\n loadingParams.path,\r\n loadingParams.filename,\r\n this.scene,\r\n (meshes) => {\r\n if (this._controllerCache) {\r\n this._controllerCache.push({\r\n ...loadingParams,\r\n meshes,\r\n });\r\n }\r\n meshesLoaded(meshes);\r\n },\r\n null,\r\n (_scene: Scene, message: string) => {\r\n Logger.Log(message);\r\n Logger.Warn(`Failed to retrieve controller model of type ${this.profileId} from the remote server: ${loadingParams.path}${loadingParams.filename}`);\r\n reject(message);\r\n }\r\n );\r\n });\r\n }\r\n\r\n /**\r\n * Update this model using the current XRFrame\r\n * @param xrFrame the current xr frame to use and update the model\r\n */\r\n public updateFromXRFrame(xrFrame: XRFrame): void {\r\n this.getComponentIds().forEach((id) => this.getComponent(id).update(this.gamepadObject));\r\n this.updateModel(xrFrame);\r\n }\r\n\r\n /**\r\n * Backwards compatibility due to a deeply-integrated typo\r\n */\r\n public get handness() {\r\n return this.handedness;\r\n }\r\n\r\n /**\r\n * Pulse (vibrate) this controller\r\n * If the controller does not support pulses, this function will fail silently and return Promise<false> directly after called\r\n * Consecutive calls to this function will cancel the last pulse call\r\n *\r\n * @param value the strength of the pulse in 0.0...1.0 range\r\n * @param duration Duration of the pulse in milliseconds\r\n * @param hapticActuatorIndex optional index of actuator (will usually be 0)\r\n * @returns a promise that will send true when the pulse has ended and false if the device doesn't support pulse or an error accrued\r\n */\r\n public pulse(value: number, duration: number, hapticActuatorIndex: number = 0): Promise<boolean> {\r\n if (this.gamepadObject.hapticActuators && this.gamepadObject.hapticActuators[hapticActuatorIndex]) {\r\n return this.gamepadObject.hapticActuators[hapticActuatorIndex].pulse(value, duration);\r\n } else {\r\n return Promise.resolve(false);\r\n }\r\n }\r\n\r\n // Look through all children recursively. This will return null if no mesh exists with the given name.\r\n protected _getChildByName(node: AbstractMesh, name: string): AbstractMesh | undefined {\r\n return <AbstractMesh | undefined>node.getChildren((n) => n.name === name, false)[0];\r\n }\r\n\r\n // Look through only immediate children. This will return null if no mesh exists with the given name.\r\n protected _getImmediateChildByName(node: AbstractMesh, name: string): AbstractMesh | undefined {\r\n return <AbstractMesh | undefined>node.getChildren((n) => n.name == name, true)[0];\r\n }\r\n\r\n /**\r\n * Moves the axis on the controller mesh based on its current state\r\n * @param axisMap\r\n * @param axisValue the value of the axis which determines the meshes new position\r\n * @internal\r\n */\r\n protected _lerpTransform(axisMap: IMotionControllerMeshMap, axisValue: number, fixValueCoordinates?: boolean): void {\r\n if (!axisMap.minMesh || !axisMap.maxMesh || !axisMap.valueMesh) {\r\n return;\r\n }\r\n\r\n if (!axisMap.minMesh.rotationQuaternion || !axisMap.maxMesh.rotationQuaternion || !axisMap.valueMesh.rotationQuaternion) {\r\n return;\r\n }\r\n\r\n // Convert from gamepad value range (-1 to +1) to lerp range (0 to 1)\r\n const lerpValue = fixValueCoordinates ? axisValue * 0.5 + 0.5 : axisValue;\r\n Quaternion.SlerpToRef(axisMap.minMesh.rotationQuaternion, axisMap.maxMesh.rotationQuaternion, lerpValue, axisMap.valueMesh.rotationQuaternion);\r\n Vector3.LerpToRef(axisMap.minMesh.position, axisMap.maxMesh.position, lerpValue, axisMap.valueMesh.position);\r\n }\r\n\r\n /**\r\n * Update the model itself with the current frame data\r\n * @param xrFrame the frame to use for updating the model mesh\r\n */\r\n // eslint-disable-next-line @typescript-eslint/naming-convention\r\n protected updateModel(xrFrame: XRFrame): void {\r\n if (!this._modelReady) {\r\n return;\r\n }\r\n this._updateModel(xrFrame);\r\n }\r\n\r\n /**\r\n * Get the filename and path for this controller's model\r\n * @returns a map of filename and path\r\n */\r\n protected abstract _getFilenameAndPath(): { filename: string; path: string };\r\n /**\r\n * This function is called before the mesh is loaded. It checks for loading constraints.\r\n * For example, this function can check if the GLB loader is available\r\n * If this function returns false, the generic controller will be loaded instead\r\n * @returns Is the client ready to load the mesh\r\n */\r\n protected abstract _getModelLoadingConstraints(): boolean;\r\n /**\r\n * This function will be called after the model was successfully loaded and can be used\r\n * for mesh transformations before it is available for the user\r\n * @param meshes the loaded meshes\r\n */\r\n protected abstract _processLoadedModel(meshes: AbstractMesh[]): void;\r\n /**\r\n * Set the root mesh for this controller. Important for the WebXR controller class\r\n * @param meshes the loaded meshes\r\n */\r\n protected abstract _setRootMesh(meshes: AbstractMesh[]): void;\r\n /**\r\n * A function executed each frame that updates the mesh (if needed)\r\n * @param xrFrame the current xrFrame\r\n */\r\n protected abstract _updateModel(xrFrame: XRFrame): void;\r\n\r\n private _getGenericFilenameAndPath(): { 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 private _getGenericParentMesh(meshes: AbstractMesh[]): void {\r\n this.rootMesh = new Mesh(this.profileId + \" \" + this.handedness, this.scene);\r\n\r\n meshes.forEach((mesh) => {\r\n if (!mesh.parent) {\r\n mesh.isPickable = false;\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"]}
1
+ {"version":3,"file":"webXRAbstractMotionController.js","sourceRoot":"","sources":["../../../../../lts/core/generated/XR/motionController/webXRAbstractMotionController.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,wBAAwB,EAAE,MAAM,4BAA4B,CAAC;AACtE,OAAO,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAC;AACnD,OAAO,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAC;AAC3C,OAAO,EAAE,WAAW,EAAE,MAAM,2BAA2B,CAAC;AAGxD,OAAO,EAAE,UAAU,EAAE,OAAO,EAAE,MAAM,yBAAyB,CAAC;AAC9D,OAAO,EAAE,IAAI,EAAE,MAAM,mBAAmB,CAAC;AAyNzC;;;;GAIG;AACH,MAAM,OAAgB,6BAA6B;IA4C/C;;;;;;;;OAQG;IACH;IACI,gEAAgE;IACtD,KAAY;IACtB,gEAAgE;IACtD,MAA+B;IACzC;;OAEG;IACI,aAA6C;IACpD;;OAEG;IACI,UAAsC;IAC7C;;OAEG;IACI,2BAAoC,KAAK,EACxC,gBAIN;QAnBQ,UAAK,GAAL,KAAK,CAAO;QAEZ,WAAM,GAAN,MAAM,CAAyB;QAIlC,kBAAa,GAAb,aAAa,CAAgC;QAI7C,eAAU,GAAV,UAAU,CAA4B;QAItC,6BAAwB,GAAxB,wBAAwB,CAAiB;QACxC,qBAAgB,GAAhB,gBAAgB,CAItB;QAzEE,mBAAc,GAAG,CAAC,EAAU,EAAE,EAAE;YACpC,IAAI,CAAC,EAAE,EAAE;gBACL,OAAO;aACV;YACD,MAAM,YAAY,GAAG,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,EAAE,CAAC,CAAC;YAChD,MAAM,IAAI,GAAG,YAAY,CAAC,IAAI,CAAC;YAC/B,MAAM,WAAW,GAAG,YAAY,CAAC,cAAc,CAAC,MAAM,CAAC;YACvD,kBAAkB;YAClB,MAAM,IAAI,GAAa,EAAE,CAAC;YAC1B,IAAI,YAAY,CAAC,cAAc,CAAC,KAAK,KAAK,SAAS,IAAI,YAAY,CAAC,cAAc,CAAC,KAAK,KAAK,SAAS,EAAE;gBACpG,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,cAAc,CAAC,KAAK,EAAE,YAAY,CAAC,cAAc,CAAC,KAAK,CAAC,CAAC;aACnF;YAED,IAAI,CAAC,UAAU,CAAC,EAAE,CAAC,GAAG,IAAI,wBAAwB,CAAC,EAAE,EAAE,IAAI,EAAE,WAAW,EAAE,IAAI,CAAC,CAAC;QACpF,CAAC,CAAC;QAEM,gBAAW,GAAY,KAAK,CAAC;QAErC;;;WAGG;QACa,eAAU,GAEtB,EAAE,CAAC;QAEP;;WAEG;QACI,qBAAgB,GAAY,KAAK,CAAC;QACzC;;WAEG;QACI,4BAAuB,GAA8C,IAAI,UAAU,EAAE,CAAC;QA0CzF,4BAA4B;QAC5B,IAAI,MAAM,CAAC,UAAU,EAAE;YACnB,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;SAC/D;QACD,gCAAgC;IACpC,CAAC;IAED;;OAEG;IACI,OAAO;QACV,IAAI,CAAC,eAAe,EAAE,CAAC,OAAO,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,IAAI,CAAC,YAAY,CAAC,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC;QACxE,IAAI,IAAI,CAAC,QAAQ,EAAE;YACf,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,EAAE;gBACxD,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC;YAC3B,CAAC,CAAC,CAAC;YACH,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,gBAAgB,EAAE,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC;SAC1E;IACL,CAAC;IAED;;;;OAIG;IACI,sBAAsB,CAAC,IAAmC;QAC7D,OAAO,IAAI,CAAC,eAAe,EAAE;aACxB,GAAG,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,IAAI,CAAC,UAAU,CAAC,EAAE,CAAC,CAAC;aAChC,MAAM,CAAC,CAAC,SAAS,EAAE,EAAE,CAAC,SAAS,CAAC,IAAI,KAAK,IAAI,CAAC,CAAC;IACxD,CAAC;IAED;;;;OAIG;IACI,YAAY,CAAC,EAAU;QAC1B,OAAO,IAAI,CAAC,UAAU,CAAC,EAAE,CAAC,CAAC;IAC/B,CAAC;IAED;;;OAGG;IACI,eAAe;QAClB,OAAO,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;IACxC,CAAC;IAED;;;;OAIG;IACI,kBAAkB,CAAC,IAAmC;QACzD,OAAO,IAAI,CAAC,sBAAsB,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC;IACxD,CAAC;IAED;;;OAGG;IACI,gBAAgB;QACnB,OAAO,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,MAAM,CAAC,iBAAiB,CAAC,CAAC;IAC5D,CAAC;IAED;;;;OAIG;IACI,KAAK,CAAC,SAAS;QAClB,MAAM,UAAU,GAAG,CAAC,IAAI,CAAC,2BAA2B,EAAE,CAAC;QACvD,IAAI,aAAa,GAAG,IAAI,CAAC,0BAA0B,EAAE,CAAC;QACtD,oCAAoC;QACpC,IAAI,UAAU,EAAE;YACZ,MAAM,CAAC,IAAI,CAAC,gCAAgC,CAAC,CAAC;SACjD;aAAM;YACH,aAAa,GAAG,IAAI,CAAC,mBAAmB,EAAE,CAAC;SAC9C;QACD,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;YACnC,MAAM,YAAY,GAAG,CAAC,MAAsB,EAAE,EAAE;gBAC5C,IAAI,UAAU,EAAE;oBACZ,IAAI,CAAC,qBAAqB,CAAC,MAAM,CAAC,CAAC;iBACtC;qBAAM;oBACH,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC;iBAC7B;gBACD,IAAI,CAAC,mBAAmB,CAAC,MAAM,CAAC,CAAC;gBACjC,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC;gBACxB,IAAI,CAAC,uBAAuB,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC;gBACnD,OAAO,CAAC,IAAI,CAAC,CAAC;YAClB,CAAC,CAAC;YACF,IAAI,IAAI,CAAC,gBAAgB,EAAE;gBACvB,2BAA2B;gBAC3B,MAAM,KAAK,GAAG,IAAI,CAAC,gBAAgB,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE;oBAC7C,OAAO,CAAC,CAAC,QAAQ,KAAK,aAAa,CAAC,QAAQ,IAAI,CAAC,CAAC,IAAI,KAAK,aAAa,CAAC,IAAI,CAAC;gBAClF,CAAC,CAAC,CAAC;gBACH,IAAI,KAAK,CAAC,CAAC,CAAC,EAAE;oBACV,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC;oBACzD,YAAY,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC;oBAC9B,OAAO;oBACP,gCAAgC;iBACnC;aACJ;YACD,WAAW,CAAC,UAAU,CAClB,EAAE,EACF,aAAa,CAAC,IAAI,EAClB,aAAa,CAAC,QAAQ,EACtB,IAAI,CAAC,KAAK,EACV,CAAC,MAAM,EAAE,EAAE;gBACP,IAAI,IAAI,CAAC,gBAAgB,EAAE;oBACvB,IAAI,CAAC,gBAAgB,CAAC,IAAI,iCACnB,aAAa,KAChB,MAAM,IACR,CAAC;iBACN;gBACD,YAAY,CAAC,MAAM,CAAC,CAAC;YACzB,CAAC,EACD,IAAI,EACJ,CAAC,MAAa,EAAE,OAAe,EAAE,EAAE;gBAC/B,MAAM,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;gBACpB,MAAM,CAAC,IAAI,CAAC,+CAA+C,IAAI,CAAC,SAAS,4BAA4B,aAAa,CAAC,IAAI,GAAG,aAAa,CAAC,QAAQ,EAAE,CAAC,CAAC;gBACpJ,MAAM,CAAC,OAAO,CAAC,CAAC;YACpB,CAAC,CACJ,CAAC;QACN,CAAC,CAAC,CAAC;IACP,CAAC;IAED;;;OAGG;IACI,iBAAiB,CAAC,OAAgB;QACrC,IAAI,CAAC,eAAe,EAAE,CAAC,OAAO,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,IAAI,CAAC,YAAY,CAAC,EAAE,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC;QACzF,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC;IAC9B,CAAC;IAED;;OAEG;IACH,IAAW,QAAQ;QACf,OAAO,IAAI,CAAC,UAAU,CAAC;IAC3B,CAAC;IAED;;;;;;;;;OASG;IACI,KAAK,CAAC,KAAa,EAAE,QAAgB,EAAE,sBAA8B,CAAC;QACzE,IAAI,IAAI,CAAC,aAAa,CAAC,eAAe,IAAI,IAAI,CAAC,aAAa,CAAC,eAAe,CAAC,mBAAmB,CAAC,EAAE;YAC/F,OAAO,IAAI,CAAC,aAAa,CAAC,eAAe,CAAC,mBAAmB,CAAC,CAAC,KAAK,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC;SACzF;aAAM;YACH,OAAO,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;SACjC;IACL,CAAC;IAED,sGAAsG;IAC5F,eAAe,CAAC,IAAkB,EAAE,IAAY;QACtD,OAAiC,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,IAAI,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;IACxF,CAAC;IAED,qGAAqG;IAC3F,wBAAwB,CAAC,IAAkB,EAAE,IAAY;QAC/D,OAAiC,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,IAAI,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;IACtF,CAAC;IAED;;;;;OAKG;IACO,cAAc,CAAC,OAAiC,EAAE,SAAiB,EAAE,mBAA6B;QACxG,IAAI,CAAC,OAAO,CAAC,OAAO,IAAI,CAAC,OAAO,CAAC,OAAO,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE;YAC5D,OAAO;SACV;QAED,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,kBAAkB,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,kBAAkB,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,kBAAkB,EAAE;YACrH,OAAO;SACV;QAED,qEAAqE;QACrE,MAAM,SAAS,GAAG,mBAAmB,CAAC,CAAC,CAAC,SAAS,GAAG,GAAG,GAAG,GAAG,CAAC,CAAC,CAAC,SAAS,CAAC;QAC1E,UAAU,CAAC,UAAU,CAAC,OAAO,CAAC,OAAO,CAAC,kBAAkB,EAAE,OAAO,CAAC,OAAO,CAAC,kBAAkB,EAAE,SAAS,EAAE,OAAO,CAAC,SAAS,CAAC,kBAAkB,CAAC,CAAC;QAC/I,OAAO,CAAC,SAAS,CAAC,OAAO,CAAC,OAAO,CAAC,QAAQ,EAAE,OAAO,CAAC,OAAO,CAAC,QAAQ,EAAE,SAAS,EAAE,OAAO,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC;IACjH,CAAC;IAED;;;OAGG;IACH,gEAAgE;IACtD,WAAW,CAAC,OAAgB;QAClC,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE;YACnB,OAAO;SACV;QACD,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC,CAAC;IAC/B,CAAC;IA+BO,0BAA0B;QAC9B,OAAO;YACH,QAAQ,EAAE,iBAAiB;YAC3B,IAAI,EAAE,4CAA4C;SACrD,CAAC;IACN,CAAC;IAEO,qBAAqB,CAAC,MAAsB;QAChD,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,IAAI,CAAC,MAAM,EAAE;gBACd,IAAI,CAAC,UAAU,GAAG,KAAK,CAAC;gBACxB,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;CACJ","sourcesContent":["import type { IDisposable, Scene } from \"../../scene\";\r\nimport { WebXRControllerComponent } from \"./webXRControllerComponent\";\r\nimport { Observable } from \"../../Misc/observable\";\r\nimport { Logger } from \"../../Misc/logger\";\r\nimport { SceneLoader } from \"../../Loading/sceneLoader\";\r\nimport type { AbstractMesh } from \"../../Meshes/abstractMesh\";\r\nimport type { Nullable } from \"../../types\";\r\nimport { Quaternion, Vector3 } from \"../../Maths/math.vector\";\r\nimport { Mesh } from \"../../Meshes/mesh\";\r\n\r\n/**\r\n * Handedness type in xrInput profiles. These can be used to define layouts in the Layout Map.\r\n */\r\nexport type MotionControllerHandedness = \"none\" | \"left\" | \"right\";\r\n/**\r\n * The type of components available in motion controllers.\r\n * This is not the name of the component.\r\n */\r\nexport type MotionControllerComponentType = \"trigger\" | \"squeeze\" | \"touchpad\" | \"thumbstick\" | \"button\";\r\n\r\n/**\r\n * The state of a controller component\r\n */\r\nexport type MotionControllerComponentStateType = \"default\" | \"touched\" | \"pressed\";\r\n\r\n/**\r\n * The schema of motion controller layout.\r\n * No object will be initialized using this interface\r\n * This is used just to define the profile.\r\n */\r\nexport interface IMotionControllerLayout {\r\n /**\r\n * Path to load the assets. Usually relative to the base path\r\n */\r\n assetPath: string;\r\n /**\r\n * Available components (unsorted)\r\n */\r\n components: {\r\n /**\r\n * A map of component Ids\r\n */\r\n [componentId: string]: {\r\n /**\r\n * The type of input the component outputs\r\n */\r\n type: MotionControllerComponentType;\r\n /**\r\n * The indices of this component in the gamepad object\r\n */\r\n gamepadIndices: {\r\n /**\r\n * Index of button\r\n */\r\n button?: number;\r\n /**\r\n * If available, index of x-axis\r\n */\r\n xAxis?: number;\r\n /**\r\n * If available, index of y-axis\r\n */\r\n yAxis?: number;\r\n };\r\n /**\r\n * The mesh's root node name\r\n */\r\n rootNodeName: string;\r\n /**\r\n * Animation definitions for this model\r\n */\r\n visualResponses: {\r\n [stateKey: string]: {\r\n /**\r\n * What property will be animated\r\n */\r\n componentProperty: \"xAxis\" | \"yAxis\" | \"button\" | \"state\";\r\n /**\r\n * What states influence this visual response\r\n */\r\n states: MotionControllerComponentStateType[];\r\n /**\r\n * Type of animation - movement or visibility\r\n */\r\n valueNodeProperty: \"transform\" | \"visibility\";\r\n /**\r\n * Base node name to move. Its position will be calculated according to the min and max nodes\r\n */\r\n valueNodeName?: string;\r\n /**\r\n * Minimum movement node\r\n */\r\n minNodeName?: string;\r\n /**\r\n * Max movement node\r\n */\r\n maxNodeName?: string;\r\n };\r\n };\r\n /**\r\n * If touch enabled, what is the name of node to display user feedback\r\n */\r\n touchPointNodeName?: string;\r\n };\r\n };\r\n /**\r\n * Is it xr standard mapping or not\r\n */\r\n gamepadMapping: \"\" | \"xr-standard\";\r\n /**\r\n * Base root node of this entire model\r\n */\r\n rootNodeName: string;\r\n /**\r\n * Defines the main button component id\r\n */\r\n selectComponentId: string;\r\n}\r\n\r\n/**\r\n * A definition for the layout map in the input profile\r\n */\r\nexport interface IMotionControllerLayoutMap {\r\n /**\r\n * Layouts with handedness type as a key\r\n */\r\n [handedness: string /* handedness */]: IMotionControllerLayout;\r\n}\r\n\r\n/**\r\n * The XR Input profile schema\r\n * Profiles can be found here:\r\n * https://github.com/immersive-web/webxr-input-profiles/tree/master/packages/registry/profiles\r\n */\r\nexport interface IMotionControllerProfile {\r\n /**\r\n * fallback profiles for this profileId\r\n */\r\n fallbackProfileIds: string[];\r\n /**\r\n * The layout map, with handedness as key\r\n */\r\n layouts: IMotionControllerLayoutMap;\r\n /**\r\n * The id of this profile\r\n * correlates to the profile(s) in the xrInput.profiles array\r\n */\r\n profileId: string;\r\n}\r\n\r\n/**\r\n * A helper-interface for the 3 meshes needed for controller button animation\r\n * The meshes are provided to the _lerpButtonTransform function to calculate the current position of the value mesh\r\n */\r\nexport interface IMotionControllerButtonMeshMap {\r\n /**\r\n * the mesh that defines the pressed value mesh position.\r\n * This is used to find the max-position of this button\r\n */\r\n pressedMesh: AbstractMesh;\r\n /**\r\n * the mesh that defines the unpressed value mesh position.\r\n * This is used to find the min (or initial) position of this button\r\n */\r\n unpressedMesh: AbstractMesh;\r\n /**\r\n * The mesh that will be changed when value changes\r\n */\r\n valueMesh: AbstractMesh;\r\n}\r\n\r\n/**\r\n * A helper-interface for the 3 meshes needed for controller axis animation.\r\n * This will be expanded when touchpad animations are fully supported\r\n * The meshes are provided to the _lerpAxisTransform function to calculate the current position of the value mesh\r\n */\r\nexport interface IMotionControllerMeshMap {\r\n /**\r\n * the mesh that defines the maximum value mesh position.\r\n */\r\n maxMesh?: AbstractMesh;\r\n /**\r\n * the mesh that defines the minimum value mesh position.\r\n */\r\n minMesh?: AbstractMesh;\r\n /**\r\n * The mesh that will be changed when axis value changes\r\n */\r\n valueMesh?: AbstractMesh;\r\n}\r\n\r\n/**\r\n * The elements needed for change-detection of the gamepad objects in motion controllers\r\n */\r\nexport interface IMinimalMotionControllerObject {\r\n /**\r\n * Available axes of this controller\r\n */\r\n axes: number[];\r\n /**\r\n * An array of available buttons\r\n */\r\n buttons: Array<{\r\n /**\r\n * Value of the button/trigger\r\n */\r\n value: number;\r\n /**\r\n * If the button/trigger is currently touched\r\n */\r\n touched: boolean;\r\n /**\r\n * If the button/trigger is currently pressed\r\n */\r\n pressed: boolean;\r\n }>;\r\n\r\n /**\r\n * EXPERIMENTAL haptic support.\r\n */\r\n hapticActuators?: Array<{\r\n pulse: (value: number, duration: number) => Promise<boolean>;\r\n }>;\r\n}\r\n\r\n/**\r\n * An Abstract Motion controller\r\n * This class receives an xrInput and a profile layout and uses those to initialize the components\r\n * Each component has an observable to check for changes in value and state\r\n */\r\nexport abstract class WebXRAbstractMotionController implements IDisposable {\r\n private _initComponent = (id: string) => {\r\n if (!id) {\r\n return;\r\n }\r\n const componentDef = this.layout.components[id];\r\n const type = componentDef.type;\r\n const buttonIndex = componentDef.gamepadIndices.button;\r\n // search for axes\r\n const axes: number[] = [];\r\n if (componentDef.gamepadIndices.xAxis !== undefined && componentDef.gamepadIndices.yAxis !== undefined) {\r\n axes.push(componentDef.gamepadIndices.xAxis, componentDef.gamepadIndices.yAxis);\r\n }\r\n\r\n this.components[id] = new WebXRControllerComponent(id, type, buttonIndex, axes);\r\n };\r\n\r\n private _modelReady: boolean = false;\r\n\r\n /**\r\n * A map of components (WebXRControllerComponent) in this motion controller\r\n * Components have a ComponentType and can also have both button and axis definitions\r\n */\r\n public readonly components: {\r\n [id: string]: WebXRControllerComponent;\r\n } = {};\r\n\r\n /**\r\n * Disable the model's animation. Can be set at any time.\r\n */\r\n public disableAnimation: boolean = false;\r\n /**\r\n * Observers registered here will be triggered when the model of this controller is done loading\r\n */\r\n public onModelLoadedObservable: Observable<WebXRAbstractMotionController> = new Observable();\r\n /**\r\n * The profile id of this motion controller\r\n */\r\n public abstract profileId: string;\r\n /**\r\n * The root mesh of the model. It is null if the model was not yet initialized\r\n */\r\n public rootMesh: Nullable<AbstractMesh>;\r\n\r\n /**\r\n * constructs a new abstract motion controller\r\n * @param scene the scene to which the model of the controller will be added\r\n * @param layout The profile layout to load\r\n * @param gamepadObject The gamepad object correlating to this controller\r\n * @param handedness handedness (left/right/none) of this controller\r\n * @param _doNotLoadControllerMesh set this flag to ignore the mesh loading\r\n * @param _controllerCache a cache holding controller models already loaded in this session\r\n */\r\n constructor(\r\n // eslint-disable-next-line @typescript-eslint/naming-convention\r\n protected scene: Scene,\r\n // eslint-disable-next-line @typescript-eslint/naming-convention\r\n protected layout: IMotionControllerLayout,\r\n /**\r\n * The gamepad object correlating to this controller\r\n */\r\n public gamepadObject: IMinimalMotionControllerObject,\r\n /**\r\n * handedness (left/right/none) of this controller\r\n */\r\n public handedness: MotionControllerHandedness,\r\n /**\r\n * @internal\r\n */\r\n public _doNotLoadControllerMesh: boolean = false,\r\n private _controllerCache?: Array<{\r\n filename: string;\r\n path: string;\r\n meshes: AbstractMesh[];\r\n }>\r\n ) {\r\n // initialize the components\r\n if (layout.components) {\r\n Object.keys(layout.components).forEach(this._initComponent);\r\n }\r\n // Model is loaded in WebXRInput\r\n }\r\n\r\n /**\r\n * Dispose this controller, the model mesh and all its components\r\n */\r\n public dispose(): void {\r\n this.getComponentIds().forEach((id) => this.getComponent(id).dispose());\r\n if (this.rootMesh) {\r\n this.rootMesh.getChildren(undefined, true).forEach((node) => {\r\n node.setEnabled(false);\r\n });\r\n this.rootMesh.dispose(!!this._controllerCache, !this._controllerCache);\r\n }\r\n }\r\n\r\n /**\r\n * Returns all components of specific type\r\n * @param type the type to search for\r\n * @returns an array of components with this type\r\n */\r\n public getAllComponentsOfType(type: MotionControllerComponentType): WebXRControllerComponent[] {\r\n return this.getComponentIds()\r\n .map((id) => this.components[id])\r\n .filter((component) => component.type === type);\r\n }\r\n\r\n /**\r\n * get a component based an its component id as defined in layout.components\r\n * @param id the id of the component\r\n * @returns the component correlates to the id or undefined if not found\r\n */\r\n public getComponent(id: string): WebXRControllerComponent {\r\n return this.components[id];\r\n }\r\n\r\n /**\r\n * Get the list of components available in this motion controller\r\n * @returns an array of strings correlating to available components\r\n */\r\n public getComponentIds(): string[] {\r\n return Object.keys(this.components);\r\n }\r\n\r\n /**\r\n * Get the first component of specific type\r\n * @param type type of component to find\r\n * @returns a controller component or null if not found\r\n */\r\n public getComponentOfType(type: MotionControllerComponentType): Nullable<WebXRControllerComponent> {\r\n return this.getAllComponentsOfType(type)[0] || null;\r\n }\r\n\r\n /**\r\n * Get the main (Select) component of this controller as defined in the layout\r\n * @returns the main component of this controller\r\n */\r\n public getMainComponent(): WebXRControllerComponent {\r\n return this.getComponent(this.layout.selectComponentId);\r\n }\r\n\r\n /**\r\n * Loads the model correlating to this controller\r\n * When the mesh is loaded, the onModelLoadedObservable will be triggered\r\n * @returns A promise fulfilled with the result of the model loading\r\n */\r\n public async loadModel(): Promise<boolean> {\r\n const useGeneric = !this._getModelLoadingConstraints();\r\n let loadingParams = this._getGenericFilenameAndPath();\r\n // Checking if GLB loader is present\r\n if (useGeneric) {\r\n Logger.Warn(\"Falling back to generic models\");\r\n } else {\r\n loadingParams = this._getFilenameAndPath();\r\n }\r\n return new Promise((resolve, reject) => {\r\n const meshesLoaded = (meshes: AbstractMesh[]) => {\r\n if (useGeneric) {\r\n this._getGenericParentMesh(meshes);\r\n } else {\r\n this._setRootMesh(meshes);\r\n }\r\n this._processLoadedModel(meshes);\r\n this._modelReady = true;\r\n this.onModelLoadedObservable.notifyObservers(this);\r\n resolve(true);\r\n };\r\n if (this._controllerCache) {\r\n // look for it in the cache\r\n const found = this._controllerCache.filter((c) => {\r\n return c.filename === loadingParams.filename && c.path === loadingParams.path;\r\n });\r\n if (found[0]) {\r\n found[0].meshes.forEach((mesh) => mesh.setEnabled(true));\r\n meshesLoaded(found[0].meshes);\r\n return;\r\n // found, don't continue to load\r\n }\r\n }\r\n SceneLoader.ImportMesh(\r\n \"\",\r\n loadingParams.path,\r\n loadingParams.filename,\r\n this.scene,\r\n (meshes) => {\r\n if (this._controllerCache) {\r\n this._controllerCache.push({\r\n ...loadingParams,\r\n meshes,\r\n });\r\n }\r\n meshesLoaded(meshes);\r\n },\r\n null,\r\n (_scene: Scene, message: string) => {\r\n Logger.Log(message);\r\n Logger.Warn(`Failed to retrieve controller model of type ${this.profileId} from the remote server: ${loadingParams.path}${loadingParams.filename}`);\r\n reject(message);\r\n }\r\n );\r\n });\r\n }\r\n\r\n /**\r\n * Update this model using the current XRFrame\r\n * @param xrFrame the current xr frame to use and update the model\r\n */\r\n public updateFromXRFrame(xrFrame: XRFrame): void {\r\n this.getComponentIds().forEach((id) => this.getComponent(id).update(this.gamepadObject));\r\n this.updateModel(xrFrame);\r\n }\r\n\r\n /**\r\n * Backwards compatibility due to a deeply-integrated typo\r\n */\r\n public get handness() {\r\n return this.handedness;\r\n }\r\n\r\n /**\r\n * Pulse (vibrate) this controller\r\n * If the controller does not support pulses, this function will fail silently and return Promise<false> directly after called\r\n * Consecutive calls to this function will cancel the last pulse call\r\n *\r\n * @param value the strength of the pulse in 0.0...1.0 range\r\n * @param duration Duration of the pulse in milliseconds\r\n * @param hapticActuatorIndex optional index of actuator (will usually be 0)\r\n * @returns a promise that will send true when the pulse has ended and false if the device doesn't support pulse or an error accrued\r\n */\r\n public pulse(value: number, duration: number, hapticActuatorIndex: number = 0): Promise<boolean> {\r\n if (this.gamepadObject.hapticActuators && this.gamepadObject.hapticActuators[hapticActuatorIndex]) {\r\n return this.gamepadObject.hapticActuators[hapticActuatorIndex].pulse(value, duration);\r\n } else {\r\n return Promise.resolve(false);\r\n }\r\n }\r\n\r\n // Look through all children recursively. This will return null if no mesh exists with the given name.\r\n protected _getChildByName(node: AbstractMesh, name: string): AbstractMesh | undefined {\r\n return <AbstractMesh | undefined>node.getChildren((n) => n.name === name, false)[0];\r\n }\r\n\r\n // Look through only immediate children. This will return null if no mesh exists with the given name.\r\n protected _getImmediateChildByName(node: AbstractMesh, name: string): AbstractMesh | undefined {\r\n return <AbstractMesh | undefined>node.getChildren((n) => n.name == name, true)[0];\r\n }\r\n\r\n /**\r\n * Moves the axis on the controller mesh based on its current state\r\n * @param axisMap\r\n * @param axisValue the value of the axis which determines the meshes new position\r\n * @internal\r\n */\r\n protected _lerpTransform(axisMap: IMotionControllerMeshMap, axisValue: number, fixValueCoordinates?: boolean): void {\r\n if (!axisMap.minMesh || !axisMap.maxMesh || !axisMap.valueMesh) {\r\n return;\r\n }\r\n\r\n if (!axisMap.minMesh.rotationQuaternion || !axisMap.maxMesh.rotationQuaternion || !axisMap.valueMesh.rotationQuaternion) {\r\n return;\r\n }\r\n\r\n // Convert from gamepad value range (-1 to +1) to lerp range (0 to 1)\r\n const lerpValue = fixValueCoordinates ? axisValue * 0.5 + 0.5 : axisValue;\r\n Quaternion.SlerpToRef(axisMap.minMesh.rotationQuaternion, axisMap.maxMesh.rotationQuaternion, lerpValue, axisMap.valueMesh.rotationQuaternion);\r\n Vector3.LerpToRef(axisMap.minMesh.position, axisMap.maxMesh.position, lerpValue, axisMap.valueMesh.position);\r\n }\r\n\r\n /**\r\n * Update the model itself with the current frame data\r\n * @param xrFrame the frame to use for updating the model mesh\r\n */\r\n // eslint-disable-next-line @typescript-eslint/naming-convention\r\n protected updateModel(xrFrame: XRFrame): void {\r\n if (!this._modelReady) {\r\n return;\r\n }\r\n this._updateModel(xrFrame);\r\n }\r\n\r\n /**\r\n * Get the filename and path for this controller's model\r\n * @returns a map of filename and path\r\n */\r\n protected abstract _getFilenameAndPath(): { filename: string; path: string };\r\n /**\r\n * This function is called before the mesh is loaded. It checks for loading constraints.\r\n * For example, this function can check if the GLB loader is available\r\n * If this function returns false, the generic controller will be loaded instead\r\n * @returns Is the client ready to load the mesh\r\n */\r\n protected abstract _getModelLoadingConstraints(): boolean;\r\n /**\r\n * This function will be called after the model was successfully loaded and can be used\r\n * for mesh transformations before it is available for the user\r\n * @param meshes the loaded meshes\r\n */\r\n protected abstract _processLoadedModel(meshes: AbstractMesh[]): void;\r\n /**\r\n * Set the root mesh for this controller. Important for the WebXR controller class\r\n * @param meshes the loaded meshes\r\n */\r\n protected abstract _setRootMesh(meshes: AbstractMesh[]): void;\r\n /**\r\n * A function executed each frame that updates the mesh (if needed)\r\n * @param xrFrame the current xrFrame\r\n */\r\n protected abstract _updateModel(xrFrame: XRFrame): void;\r\n\r\n private _getGenericFilenameAndPath(): { 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 private _getGenericParentMesh(meshes: AbstractMesh[]): void {\r\n this.rootMesh = new Mesh(this.profileId + \" \" + this.handedness, this.scene);\r\n\r\n meshes.forEach((mesh) => {\r\n if (!mesh.parent) {\r\n mesh.isPickable = false;\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"]}
@@ -1 +1 @@
1
- {"version":3,"file":"webXRControllerComponent.js","sourceRoot":"","sources":["../../../../../lts/core/generated/XR/motionController/webXRControllerComponent.ts"],"names":[],"mappings":"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","sourcesContent":["import type { IMinimalMotionControllerObject, MotionControllerComponentType } from \"./webXRAbstractMotionController\";\r\nimport { Observable } from \"../../Misc/observable\";\r\nimport type { IDisposable } from \"../../scene\";\r\n\r\n/**\r\n * X-Y values for axes in WebXR\r\n */\r\nexport interface IWebXRMotionControllerAxesValue {\r\n /**\r\n * The value of the x axis\r\n */\r\n x: number;\r\n /**\r\n * The value of the y-axis\r\n */\r\n y: number;\r\n}\r\n\r\n/**\r\n * changed / previous values for the values of this component\r\n */\r\nexport interface IWebXRMotionControllerComponentChangesValues<T> {\r\n /**\r\n * current (this frame) value\r\n */\r\n current: T;\r\n /**\r\n * previous (last change) value\r\n */\r\n previous: T;\r\n}\r\n\r\n/**\r\n * Represents changes in the component between current frame and last values recorded\r\n */\r\nexport interface IWebXRMotionControllerComponentChanges {\r\n /**\r\n * will be populated with previous and current values if axes changed\r\n */\r\n axes?: IWebXRMotionControllerComponentChangesValues<IWebXRMotionControllerAxesValue>;\r\n /**\r\n * will be populated with previous and current values if pressed changed\r\n */\r\n pressed?: IWebXRMotionControllerComponentChangesValues<boolean>;\r\n /**\r\n * will be populated with previous and current values if touched changed\r\n */\r\n touched?: IWebXRMotionControllerComponentChangesValues<boolean>;\r\n /**\r\n * will be populated with previous and current values if value changed\r\n */\r\n value?: IWebXRMotionControllerComponentChangesValues<number>;\r\n}\r\n/**\r\n * This class represents a single component (for example button or thumbstick) of a motion controller\r\n */\r\nexport class WebXRControllerComponent implements IDisposable {\r\n private _axes: IWebXRMotionControllerAxesValue = {\r\n x: 0,\r\n y: 0,\r\n };\r\n private _changes: IWebXRMotionControllerComponentChanges = {};\r\n private _currentValue: number = 0;\r\n private _hasChanges: boolean = false;\r\n private _pressed: boolean = false;\r\n private _touched: boolean = false;\r\n\r\n /**\r\n * button component type\r\n */\r\n public static BUTTON_TYPE: MotionControllerComponentType = \"button\";\r\n /**\r\n * squeeze component type\r\n */\r\n public static SQUEEZE_TYPE: MotionControllerComponentType = \"squeeze\";\r\n /**\r\n * Thumbstick component type\r\n */\r\n public static THUMBSTICK_TYPE: MotionControllerComponentType = \"thumbstick\";\r\n /**\r\n * Touchpad component type\r\n */\r\n public static TOUCHPAD_TYPE: MotionControllerComponentType = \"touchpad\";\r\n /**\r\n * trigger component type\r\n */\r\n public static TRIGGER_TYPE: MotionControllerComponentType = \"trigger\";\r\n\r\n /**\r\n * If axes are available for this component (like a touchpad or thumbstick) the observers will be notified when\r\n * the axes data changes\r\n */\r\n public onAxisValueChangedObservable: Observable<{ x: number; y: number }> = new Observable();\r\n /**\r\n * Observers registered here will be triggered when the state of a button changes\r\n * State change is either pressed / touched / value\r\n */\r\n public onButtonStateChangedObservable: Observable<WebXRControllerComponent> = new Observable();\r\n\r\n /**\r\n * Creates a new component for a motion controller.\r\n * It is created by the motion controller itself\r\n *\r\n * @param id the id of this component\r\n * @param type the type of the component\r\n * @param _buttonIndex index in the buttons array of the gamepad\r\n * @param _axesIndices indices of the values in the axes array of the gamepad\r\n */\r\n constructor(\r\n /**\r\n * the id of this component\r\n */\r\n public id: string,\r\n /**\r\n * the type of the component\r\n */\r\n public type: MotionControllerComponentType,\r\n private _buttonIndex: number = -1,\r\n private _axesIndices: number[] = []\r\n ) {}\r\n\r\n /**\r\n * The current axes data. If this component has no axes it will still return an object { x: 0, y: 0 }\r\n */\r\n public get axes(): IWebXRMotionControllerAxesValue {\r\n return this._axes;\r\n }\r\n\r\n /**\r\n * Get the changes. Elements will be populated only if they changed with their previous and current value\r\n */\r\n public get changes(): IWebXRMotionControllerComponentChanges {\r\n return this._changes;\r\n }\r\n\r\n /**\r\n * Return whether or not the component changed the last frame\r\n */\r\n public get hasChanges(): boolean {\r\n return this._hasChanges;\r\n }\r\n\r\n /**\r\n * is the button currently pressed\r\n */\r\n public get pressed(): boolean {\r\n return this._pressed;\r\n }\r\n\r\n /**\r\n * is the button currently touched\r\n */\r\n public get touched(): boolean {\r\n return this._touched;\r\n }\r\n\r\n /**\r\n * Get the current value of this component\r\n */\r\n public get value(): number {\r\n return this._currentValue;\r\n }\r\n\r\n /**\r\n * Dispose this component\r\n */\r\n public dispose(): void {\r\n this.onAxisValueChangedObservable.clear();\r\n this.onButtonStateChangedObservable.clear();\r\n }\r\n\r\n /**\r\n * Are there axes correlating to this component\r\n * @returns true is axes data is available\r\n */\r\n public isAxes(): boolean {\r\n return this._axesIndices.length !== 0;\r\n }\r\n\r\n /**\r\n * Is this component a button (hence - pressable)\r\n * @returns true if can be pressed\r\n */\r\n public isButton(): boolean {\r\n return this._buttonIndex !== -1;\r\n }\r\n\r\n /**\r\n * update this component using the gamepad object it is in. Called on every frame\r\n * @param nativeController the native gamepad controller object\r\n */\r\n public update(nativeController: IMinimalMotionControllerObject) {\r\n let buttonUpdated = false;\r\n let axesUpdate = false;\r\n this._hasChanges = false;\r\n this._changes = {};\r\n\r\n if (this.isButton()) {\r\n const button = nativeController.buttons[this._buttonIndex];\r\n // defensive, in case a profile was forced\r\n if (!button) {\r\n return;\r\n }\r\n if (this._currentValue !== button.value) {\r\n this.changes.value = {\r\n current: button.value,\r\n previous: this._currentValue,\r\n };\r\n buttonUpdated = true;\r\n this._currentValue = button.value;\r\n }\r\n if (this._touched !== button.touched) {\r\n this.changes.touched = {\r\n current: button.touched,\r\n previous: this._touched,\r\n };\r\n buttonUpdated = true;\r\n this._touched = button.touched;\r\n }\r\n if (this._pressed !== button.pressed) {\r\n this.changes.pressed = {\r\n current: button.pressed,\r\n previous: this._pressed,\r\n };\r\n buttonUpdated = true;\r\n this._pressed = button.pressed;\r\n }\r\n }\r\n\r\n if (this.isAxes()) {\r\n if (this._axes.x !== nativeController.axes[this._axesIndices[0]]) {\r\n this.changes.axes = {\r\n current: {\r\n x: nativeController.axes[this._axesIndices[0]],\r\n y: this._axes.y,\r\n },\r\n previous: {\r\n x: this._axes.x,\r\n y: this._axes.y,\r\n },\r\n };\r\n this._axes.x = nativeController.axes[this._axesIndices[0]];\r\n axesUpdate = true;\r\n }\r\n\r\n if (this._axes.y !== nativeController.axes[this._axesIndices[1]]) {\r\n if (this.changes.axes) {\r\n this.changes.axes.current.y = nativeController.axes[this._axesIndices[1]];\r\n } else {\r\n this.changes.axes = {\r\n current: {\r\n x: this._axes.x,\r\n y: nativeController.axes[this._axesIndices[1]],\r\n },\r\n previous: {\r\n x: this._axes.x,\r\n y: this._axes.y,\r\n },\r\n };\r\n }\r\n this._axes.y = nativeController.axes[this._axesIndices[1]];\r\n axesUpdate = true;\r\n }\r\n }\r\n\r\n if (buttonUpdated) {\r\n this._hasChanges = true;\r\n this.onButtonStateChangedObservable.notifyObservers(this);\r\n }\r\n if (axesUpdate) {\r\n this._hasChanges = true;\r\n this.onAxisValueChangedObservable.notifyObservers(this._axes);\r\n }\r\n }\r\n}\r\n"]}
1
+ {"version":3,"file":"webXRControllerComponent.js","sourceRoot":"","sources":["../../../../../lts/core/generated/XR/motionController/webXRControllerComponent.ts"],"names":[],"mappings":"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","sourcesContent":["import type { IMinimalMotionControllerObject, MotionControllerComponentType } from \"./webXRAbstractMotionController\";\r\nimport { Observable } from \"../../Misc/observable\";\r\nimport type { IDisposable } from \"../../scene\";\r\n\r\n/**\r\n * X-Y values for axes in WebXR\r\n */\r\nexport interface IWebXRMotionControllerAxesValue {\r\n /**\r\n * The value of the x axis\r\n */\r\n x: number;\r\n /**\r\n * The value of the y-axis\r\n */\r\n y: number;\r\n}\r\n\r\n/**\r\n * changed / previous values for the values of this component\r\n */\r\nexport interface IWebXRMotionControllerComponentChangesValues<T> {\r\n /**\r\n * current (this frame) value\r\n */\r\n current: T;\r\n /**\r\n * previous (last change) value\r\n */\r\n previous: T;\r\n}\r\n\r\n/**\r\n * Represents changes in the component between current frame and last values recorded\r\n */\r\nexport interface IWebXRMotionControllerComponentChanges {\r\n /**\r\n * will be populated with previous and current values if axes changed\r\n */\r\n axes?: IWebXRMotionControllerComponentChangesValues<IWebXRMotionControllerAxesValue>;\r\n /**\r\n * will be populated with previous and current values if pressed changed\r\n */\r\n pressed?: IWebXRMotionControllerComponentChangesValues<boolean>;\r\n /**\r\n * will be populated with previous and current values if touched changed\r\n */\r\n touched?: IWebXRMotionControllerComponentChangesValues<boolean>;\r\n /**\r\n * will be populated with previous and current values if value changed\r\n */\r\n value?: IWebXRMotionControllerComponentChangesValues<number>;\r\n}\r\n/**\r\n * This class represents a single component (for example button or thumbstick) of a motion controller\r\n */\r\nexport class WebXRControllerComponent implements IDisposable {\r\n private _axes: IWebXRMotionControllerAxesValue = {\r\n x: 0,\r\n y: 0,\r\n };\r\n private _changes: IWebXRMotionControllerComponentChanges = {};\r\n private _currentValue: number = 0;\r\n private _hasChanges: boolean = false;\r\n private _pressed: boolean = false;\r\n private _touched: boolean = false;\r\n\r\n /**\r\n * button component type\r\n */\r\n public static BUTTON_TYPE: MotionControllerComponentType = \"button\";\r\n /**\r\n * squeeze component type\r\n */\r\n public static SQUEEZE_TYPE: MotionControllerComponentType = \"squeeze\";\r\n /**\r\n * Thumbstick component type\r\n */\r\n public static THUMBSTICK_TYPE: MotionControllerComponentType = \"thumbstick\";\r\n /**\r\n * Touchpad component type\r\n */\r\n public static TOUCHPAD_TYPE: MotionControllerComponentType = \"touchpad\";\r\n /**\r\n * trigger component type\r\n */\r\n public static TRIGGER_TYPE: MotionControllerComponentType = \"trigger\";\r\n\r\n /**\r\n * If axes are available for this component (like a touchpad or thumbstick) the observers will be notified when\r\n * the axes data changes\r\n */\r\n public onAxisValueChangedObservable: Observable<{ x: number; y: number }> = new Observable();\r\n /**\r\n * Observers registered here will be triggered when the state of a button changes\r\n * State change is either pressed / touched / value\r\n */\r\n public onButtonStateChangedObservable: Observable<WebXRControllerComponent> = new Observable();\r\n\r\n /**\r\n * Creates a new component for a motion controller.\r\n * It is created by the motion controller itself\r\n *\r\n * @param id the id of this component\r\n * @param type the type of the component\r\n * @param _buttonIndex index in the buttons array of the gamepad\r\n * @param _axesIndices indices of the values in the axes array of the gamepad\r\n */\r\n constructor(\r\n /**\r\n * the id of this component\r\n */\r\n public id: string,\r\n /**\r\n * the type of the component\r\n */\r\n public type: MotionControllerComponentType,\r\n private _buttonIndex: number = -1,\r\n private _axesIndices: number[] = []\r\n ) {}\r\n\r\n /**\r\n * The current axes data. If this component has no axes it will still return an object { x: 0, y: 0 }\r\n */\r\n public get axes(): IWebXRMotionControllerAxesValue {\r\n return this._axes;\r\n }\r\n\r\n /**\r\n * Get the changes. Elements will be populated only if they changed with their previous and current value\r\n */\r\n public get changes(): IWebXRMotionControllerComponentChanges {\r\n return this._changes;\r\n }\r\n\r\n /**\r\n * Return whether or not the component changed the last frame\r\n */\r\n public get hasChanges(): boolean {\r\n return this._hasChanges;\r\n }\r\n\r\n /**\r\n * is the button currently pressed\r\n */\r\n public get pressed(): boolean {\r\n return this._pressed;\r\n }\r\n\r\n /**\r\n * is the button currently touched\r\n */\r\n public get touched(): boolean {\r\n return this._touched;\r\n }\r\n\r\n /**\r\n * Get the current value of this component\r\n */\r\n public get value(): number {\r\n return this._currentValue;\r\n }\r\n\r\n /**\r\n * Dispose this component\r\n */\r\n public dispose(): void {\r\n this.onAxisValueChangedObservable.clear();\r\n this.onButtonStateChangedObservable.clear();\r\n }\r\n\r\n /**\r\n * Are there axes correlating to this component\r\n * @returns true is axes data is available\r\n */\r\n public isAxes(): boolean {\r\n return this._axesIndices.length !== 0;\r\n }\r\n\r\n /**\r\n * Is this component a button (hence - pressable)\r\n * @returns true if can be pressed\r\n */\r\n public isButton(): boolean {\r\n return this._buttonIndex !== -1;\r\n }\r\n\r\n /**\r\n * update this component using the gamepad object it is in. Called on every frame\r\n * @param nativeController the native gamepad controller object\r\n */\r\n public update(nativeController: IMinimalMotionControllerObject) {\r\n let buttonUpdated = false;\r\n let axesUpdate = false;\r\n this._hasChanges = false;\r\n this._changes = {};\r\n\r\n if (this.isButton()) {\r\n const button = nativeController.buttons[this._buttonIndex];\r\n // defensive, in case a profile was forced\r\n if (!button) {\r\n return;\r\n }\r\n if (this._currentValue !== button.value) {\r\n this.changes.value = {\r\n current: button.value,\r\n previous: this._currentValue,\r\n };\r\n buttonUpdated = true;\r\n this._currentValue = button.value;\r\n }\r\n if (this._touched !== button.touched) {\r\n this.changes.touched = {\r\n current: button.touched,\r\n previous: this._touched,\r\n };\r\n buttonUpdated = true;\r\n this._touched = button.touched;\r\n }\r\n if (this._pressed !== button.pressed) {\r\n this.changes.pressed = {\r\n current: button.pressed,\r\n previous: this._pressed,\r\n };\r\n buttonUpdated = true;\r\n this._pressed = button.pressed;\r\n }\r\n }\r\n\r\n if (this.isAxes()) {\r\n if (this._axes.x !== nativeController.axes[this._axesIndices[0]]) {\r\n this.changes.axes = {\r\n current: {\r\n x: nativeController.axes[this._axesIndices[0]],\r\n y: this._axes.y,\r\n },\r\n previous: {\r\n x: this._axes.x,\r\n y: this._axes.y,\r\n },\r\n };\r\n this._axes.x = nativeController.axes[this._axesIndices[0]];\r\n axesUpdate = true;\r\n }\r\n\r\n if (this._axes.y !== nativeController.axes[this._axesIndices[1]]) {\r\n if (this.changes.axes) {\r\n this.changes.axes.current.y = nativeController.axes[this._axesIndices[1]];\r\n } else {\r\n this.changes.axes = {\r\n current: {\r\n x: this._axes.x,\r\n y: nativeController.axes[this._axesIndices[1]],\r\n },\r\n previous: {\r\n x: this._axes.x,\r\n y: this._axes.y,\r\n },\r\n };\r\n }\r\n this._axes.y = nativeController.axes[this._axesIndices[1]];\r\n axesUpdate = true;\r\n }\r\n }\r\n\r\n if (buttonUpdated) {\r\n this._hasChanges = true;\r\n this.onButtonStateChangedObservable.notifyObservers(this);\r\n }\r\n if (axesUpdate) {\r\n this._hasChanges = true;\r\n this.onAxisValueChangedObservable.notifyObservers(this._axes);\r\n }\r\n }\r\n}\r\n"]}
@@ -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":"AAEA,OAAO,EAAE,6BAA6B,EAAE,MAAM,iCAAiC,CAAC;AAChF,OAAO,EAAE,4BAA4B,EAAE,MAAM,gCAAgC,CAAC;AAG9E,OAAO,EAAE,IAAI,EAAE,MAAM,mBAAmB,CAAC;AACzC,OAAO,EAAE,UAAU,EAAE,MAAM,yBAAyB,CAAC;AACrD,OAAO,EAAE,WAAW,EAAE,MAAM,2BAA2B,CAAC;AACxD,OAAO,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAC;AAE3C;;GAEG;AACH,MAAM,OAAO,oCAAqC,SAAQ,6BAA6B;IAsEnF,YAAY,KAAY,EAAE,aAA6C,EAAE,UAAsC;QAC3G,KAAK,CAAC,KAAK,EAAE,mBAAmB,CAAC,YAAY,CAAC,EAAE,aAAa,EAAE,UAAU,CAAC,CAAC;QAtE/E,gIAAgI;QAC7G,aAAQ,GAAG;YAC1B,aAAa,EAAE;gBACX,aAAa,EAAE,OAAO;gBACtB,iBAAiB,EAAE,WAAW;gBAC9B,eAAe,EAAE,SAAS;aAC7B;YACD,WAAW,EAAE;gBACT,aAAa,EAAE,OAAO;gBACtB,WAAW,EAAE,KAAK;gBAClB,WAAW,EAAE,KAAK;aACrB;YACD,OAAO,EAAE;gBACL,qBAAqB,EAAE;oBACnB,YAAY,EAAE,QAAQ;oBACtB,iBAAiB,EAAE,QAAQ;oBAC3B,MAAM,EAAE,CAAC,SAAS,EAAE,SAAS,EAAE,SAAS,CAAC;iBAC5C;gBACD,qBAAqB,EAAE;oBACnB,YAAY,EAAE,OAAO;oBACrB,iBAAiB,EAAE,OAAO;oBAC1B,MAAM,EAAE,CAAC,SAAS,CAAC;iBACtB;gBACD,sBAAsB,EAAE;oBACpB,YAAY,EAAE,gBAAgB;oBAC9B,mBAAmB,EAAE,eAAe;oBACpC,kBAAkB,EAAE,OAAO,EAAE,sCAAsC;iBACtE;gBACD,wBAAwB,EAAE;oBACtB,YAAY,EAAE,kBAAkB;oBAChC,iBAAiB,EAAE,OAAO;oBAC1B,MAAM,EAAE,CAAC,SAAS,CAAC;iBACtB;aACJ;YACD,IAAI,EAAE;gBACF,sBAAsB,EAAE;oBACpB,QAAQ,EAAE;wBACN,YAAY,EAAE,kBAAkB;qBACnC;oBACD,QAAQ,EAAE;wBACN,YAAY,EAAE,kBAAkB;qBACnC;iBACJ;gBACD,wBAAwB,EAAE;oBACtB,QAAQ,EAAE;wBACN,YAAY,EAAE,cAAc;qBAC/B;oBACD,QAAQ,EAAE;wBACN,YAAY,EAAE,cAAc;qBAC/B;iBACJ;aACJ;SACJ,CAAC;QAeK,cAAS,GAAG,yBAAyB,CAAC;IAI7C,CAAC;IAES,mBAAmB;QACzB,IAAI,QAAQ,GAAG,EAAE,CAAC;QAClB,IAAI,IAAI,CAAC,UAAU,KAAK,MAAM,EAAE;YAC5B,QAAQ,GAAG,oCAAoC,CAAC,mBAAmB,CAAC;SACvE;aAAM;YACH,+CAA+C;YAC/C,QAAQ,GAAG,oCAAoC,CAAC,oBAAoB,CAAC;SACxE;QAED,MAAM,MAAM,GAAG,SAAS,CAAC;QACzB,MAAM,IAAI,GAAG,oCAAoC,CAAC,cAAc,GAAG,MAAM,GAAG,GAAG,CAAC;QAChF,OAAO;YACH,QAAQ;YACR,IAAI;SACP,CAAC;IACN,CAAC;IAES,2BAA2B;QACjC,MAAM,SAAS,GAAG,WAAW,CAAC,6BAA6B,CAAC,MAAM,CAAC,CAAC;QACpE,IAAI,CAAC,SAAS,EAAE;YACZ,MAAM,CAAC,IAAI,CAAC,wEAAwE,CAAC,CAAC;SACzF;QACD,OAAO,SAAS,CAAC;IACrB,CAAC;IAES,mBAAmB,CAAC,OAAuB;QACjD,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE;YAChB,OAAO;SACV;QAED,gBAAgB;QAChB,IAAI,CAAC,eAAe,EAAE,CAAC,OAAO,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE,EAAE;YACrC,IAAI,IAAI,CAAC,gBAAgB,EAAE;gBACvB,OAAO;aACV;YACD,IAAI,EAAE,IAAI,IAAI,CAAC,QAAQ,EAAE;gBACrB,MAAM,SAAS,GAAS,IAAI,CAAC,QAAQ,CAAC,OAAQ,CAAC,EAAE,CAAC,CAAC;gBACnD,MAAM,cAAc,GAAG,SAAS,CAAC,YAAY,CAAC;gBAC9C,IAAI,CAAC,cAAc,EAAE;oBACjB,MAAM,CAAC,GAAG,CAAC,oCAAoC,GAAG,CAAC,GAAG,qBAAqB,GAAG,EAAE,CAAC,CAAC;oBAClF,OAAO;iBACV;gBAED,MAAM,UAAU,GAAG,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,QAAQ,EAAE,cAAc,CAAC,CAAC;gBACvE,IAAI,CAAC,UAAU,EAAE;oBACb,MAAM,CAAC,IAAI,CAAC,iCAAiC,GAAG,cAAc,CAAC,CAAC;oBAChE,OAAO;iBACV;gBAED,SAAS,CAAC,SAAS,GAAG,IAAI,CAAC,wBAAwB,CAAC,UAAU,EAAE,IAAI,CAAC,QAAQ,CAAC,aAAa,CAAC,aAAa,CAAC,CAAC;gBAC3G,SAAS,CAAC,WAAW,GAAG,IAAI,CAAC,wBAAwB,CAAC,UAAU,EAAE,IAAI,CAAC,QAAQ,CAAC,aAAa,CAAC,eAAe,CAAC,CAAC;gBAC/G,SAAS,CAAC,aAAa,GAAG,IAAI,CAAC,wBAAwB,CAAC,UAAU,EAAE,IAAI,CAAC,QAAQ,CAAC,aAAa,CAAC,iBAAiB,CAAC,CAAC;gBAEnH,IAAI,SAAS,CAAC,SAAS,IAAI,SAAS,CAAC,WAAW,IAAI,SAAS,CAAC,aAAa,EAAE;oBACzE,MAAM,IAAI,GAAG,IAAI,CAAC,YAAY,CAAC,EAAE,CAAC,CAAC;oBACnC,IAAI,IAAI,EAAE;wBACN,IAAI,CAAC,8BAA8B,CAAC,GAAG,CACnC,CAAC,SAAS,EAAE,EAAE;4BACV,IAAI,CAAC,cAAc,CAAC,SAAS,EAAE,SAAS,CAAC,KAAK,CAAC,CAAC;wBACpD,CAAC,EACD,SAAS,EACT,IAAI,CACP,CAAC;qBACL;iBACJ;qBAAM;oBACH,wHAAwH;oBACxH,MAAM,CAAC,IAAI,CAAC,+CAA+C,GAAG,cAAc,CAAC,CAAC;iBACjF;aACJ;QACL,CAAC,CAAC,CAAC;QAEH,cAAc;QACd,IAAI,CAAC,eAAe,EAAE,CAAC,OAAO,CAAC,CAAC,EAAE,EAAE,EAAE;YAClC,MAAM,IAAI,GAAG,IAAI,CAAC,YAAY,CAAC,EAAE,CAAC,CAAC;YACnC,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,EAAE;gBAChB,OAAO;aACV;YAED,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,EAAE;gBAClC,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE;oBAChB,OAAO;iBACV;gBACD,MAAM,OAAO,GAAS,IAAI,CAAC,QAAQ,CAAC,IAAK,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC;gBAEpD,MAAM,QAAQ,GAAG,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,QAAQ,EAAE,OAAO,CAAC,YAAY,CAAC,CAAC;gBAC3E,IAAI,CAAC,QAAQ,EAAE;oBACX,MAAM,CAAC,IAAI,CAAC,+BAA+B,GAAG,OAAO,CAAC,YAAY,CAAC,CAAC;oBACpE,OAAO;iBACV;gBAED,OAAO,CAAC,SAAS,GAAG,IAAI,CAAC,wBAAwB,CAAC,QAAQ,EAAE,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,aAAa,CAAC,CAAC;gBACrG,OAAO,CAAC,OAAO,GAAG,IAAI,CAAC,wBAAwB,CAAC,QAAQ,EAAE,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,WAAW,CAAC,CAAC;gBACjG,OAAO,CAAC,OAAO,GAAG,IAAI,CAAC,wBAAwB,CAAC,QAAQ,EAAE,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,WAAW,CAAC,CAAC;gBAEjG,IAAI,OAAO,CAAC,SAAS,IAAI,OAAO,CAAC,OAAO,IAAI,OAAO,CAAC,OAAO,EAAE;oBACzD,IAAI,IAAI,EAAE;wBACN,IAAI,CAAC,4BAA4B,CAAC,GAAG,CACjC,CAAC,UAAU,EAAE,EAAE;4BACX,MAAM,KAAK,GAAG,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC;4BAC9D,IAAI,CAAC,cAAc,CAAC,OAAO,EAAE,KAAK,EAAE,IAAI,CAAC,CAAC;wBAC9C,CAAC,EACD,SAAS,EACT,IAAI,CACP,CAAC;qBACL;iBACJ;qBAAM;oBACH,wHAAwH;oBACxH,MAAM,CAAC,IAAI,CAAC,6CAA6C,GAAG,OAAO,CAAC,YAAY,CAAC,CAAC;iBACrF;YACL,CAAC,CAAC,CAAC;QACP,CAAC,CAAC,CAAC;IACP,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;QAC7E,IAAI,CAAC,QAAQ,CAAC,UAAU,GAAG,KAAK,CAAC;QACjC,IAAI,QAAQ,CAAC;QACb,wFAAwF;QACxF,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;YACpC,MAAM,IAAI,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;YAEvB,IAAI,CAAC,UAAU,GAAG,KAAK,CAAC;YAExB,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE;gBACd,iDAAiD;gBACjD,QAAQ,GAAG,IAAI,CAAC;aACnB;SACJ;QAED,IAAI,QAAQ,EAAE;YACV,QAAQ,CAAC,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;SACrC;QAED,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,oBAAoB,EAAE;YAClC,IAAI,CAAC,QAAQ,CAAC,kBAAkB,GAAG,UAAU,CAAC,eAAe,CAAC,CAAC,EAAE,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC;SAChF;IACL,CAAC;IAES,YAAY;QAClB,6CAA6C;IACjD,CAAC;;AA/JD;;GAEG;AACW,mDAAc,GAAW,8CAA8C,AAAzD,CAA0D;AACtF;;GAEG;AACW,wDAAmB,GAAW,UAAU,AAArB,CAAsB;AACvD;;GAEG;AACW,yDAAoB,GAAW,WAAW,AAAtB,CAAuB;AAuJ7D,uBAAuB;AACvB,4BAA4B,CAAC,kBAAkB,CAAC,uBAAuB,EAAE,CAAC,OAAsB,EAAE,KAAY,EAAE,EAAE;IAC9G,OAAO,IAAI,oCAAoC,CAAC,KAAK,EAAO,OAAO,CAAC,OAAO,EAAE,OAAO,CAAC,UAAU,CAAC,CAAC;AACrG,CAAC,CAAC,CAAC;AAEH,sIAAsI;AACtI,MAAM,mBAAmB,GAA+B;IACpD,IAAI,EAAE;QACF,iBAAiB,EAAE,qBAAqB;QACxC,UAAU,EAAE;YACR,qBAAqB,EAAE;gBACnB,IAAI,EAAE,SAAS;gBACf,cAAc,EAAE;oBACZ,MAAM,EAAE,CAAC;iBACZ;gBACD,YAAY,EAAE,qBAAqB;gBACnC,eAAe,EAAE;oBACb,2BAA2B,EAAE;wBACzB,iBAAiB,EAAE,QAAQ;wBAC3B,MAAM,EAAE,CAAC,SAAS,EAAE,SAAS,EAAE,SAAS,CAAC;wBACzC,iBAAiB,EAAE,WAAW;wBAC9B,aAAa,EAAE,mCAAmC;wBAClD,WAAW,EAAE,iCAAiC;wBAC9C,WAAW,EAAE,iCAAiC;qBACjD;iBACJ;aACJ;YACD,qBAAqB,EAAE;gBACnB,IAAI,EAAE,SAAS;gBACf,cAAc,EAAE;oBACZ,MAAM,EAAE,CAAC;iBACZ;gBACD,YAAY,EAAE,qBAAqB;gBACnC,eAAe,EAAE;oBACb,2BAA2B,EAAE;wBACzB,iBAAiB,EAAE,QAAQ;wBAC3B,MAAM,EAAE,CAAC,SAAS,EAAE,SAAS,EAAE,SAAS,CAAC;wBACzC,iBAAiB,EAAE,WAAW;wBAC9B,aAAa,EAAE,mCAAmC;wBAClD,WAAW,EAAE,iCAAiC;wBAC9C,WAAW,EAAE,iCAAiC;qBACjD;iBACJ;aACJ;YACD,sBAAsB,EAAE;gBACpB,IAAI,EAAE,UAAU;gBAChB,cAAc,EAAE;oBACZ,MAAM,EAAE,CAAC;oBACT,KAAK,EAAE,CAAC;oBACR,KAAK,EAAE,CAAC;iBACX;gBACD,YAAY,EAAE,sBAAsB;gBACpC,eAAe,EAAE;oBACb,4BAA4B,EAAE;wBAC1B,iBAAiB,EAAE,QAAQ;wBAC3B,MAAM,EAAE,CAAC,SAAS,EAAE,SAAS,EAAE,SAAS,CAAC;wBACzC,iBAAiB,EAAE,WAAW;wBAC9B,aAAa,EAAE,oCAAoC;wBACnD,WAAW,EAAE,kCAAkC;wBAC/C,WAAW,EAAE,kCAAkC;qBAClD;oBACD,kCAAkC,EAAE;wBAChC,iBAAiB,EAAE,OAAO;wBAC1B,MAAM,EAAE,CAAC,SAAS,EAAE,SAAS,EAAE,SAAS,CAAC;wBACzC,iBAAiB,EAAE,WAAW;wBAC9B,aAAa,EAAE,0CAA0C;wBACzD,WAAW,EAAE,wCAAwC;wBACrD,WAAW,EAAE,wCAAwC;qBACxD;oBACD,kCAAkC,EAAE;wBAChC,iBAAiB,EAAE,OAAO;wBAC1B,MAAM,EAAE,CAAC,SAAS,EAAE,SAAS,EAAE,SAAS,CAAC;wBACzC,iBAAiB,EAAE,WAAW;wBAC9B,aAAa,EAAE,0CAA0C;wBACzD,WAAW,EAAE,wCAAwC;wBACrD,WAAW,EAAE,wCAAwC;qBACxD;oBACD,kCAAkC,EAAE;wBAChC,iBAAiB,EAAE,OAAO;wBAC1B,MAAM,EAAE,CAAC,SAAS,EAAE,SAAS,EAAE,SAAS,CAAC;wBACzC,iBAAiB,EAAE,WAAW;wBAC9B,aAAa,EAAE,0CAA0C;wBACzD,WAAW,EAAE,wCAAwC;wBACrD,WAAW,EAAE,wCAAwC;qBACxD;oBACD,kCAAkC,EAAE;wBAChC,iBAAiB,EAAE,OAAO;wBAC1B,MAAM,EAAE,CAAC,SAAS,EAAE,SAAS,EAAE,SAAS,CAAC;wBACzC,iBAAiB,EAAE,WAAW;wBAC9B,aAAa,EAAE,0CAA0C;wBACzD,WAAW,EAAE,wCAAwC;wBACrD,WAAW,EAAE,wCAAwC;qBACxD;oBACD,iCAAiC,EAAE;wBAC/B,iBAAiB,EAAE,OAAO;wBAC1B,MAAM,EAAE,CAAC,SAAS,EAAE,SAAS,CAAC;wBAC9B,iBAAiB,EAAE,YAAY;wBAC/B,aAAa,EAAE,yCAAyC;qBAC3D;iBACJ;gBACD,kBAAkB,EAAE,yCAAyC;aAChE;YACD,wBAAwB,EAAE;gBACtB,IAAI,EAAE,YAAY;gBAClB,cAAc,EAAE;oBACZ,MAAM,EAAE,CAAC;oBACT,KAAK,EAAE,CAAC;oBACR,KAAK,EAAE,CAAC;iBACX;gBACD,YAAY,EAAE,wBAAwB;gBACtC,eAAe,EAAE;oBACb,8BAA8B,EAAE;wBAC5B,iBAAiB,EAAE,QAAQ;wBAC3B,MAAM,EAAE,CAAC,SAAS,EAAE,SAAS,EAAE,SAAS,CAAC;wBACzC,iBAAiB,EAAE,WAAW;wBAC9B,aAAa,EAAE,sCAAsC;wBACrD,WAAW,EAAE,oCAAoC;wBACjD,WAAW,EAAE,oCAAoC;qBACpD;oBACD,oCAAoC,EAAE;wBAClC,iBAAiB,EAAE,OAAO;wBAC1B,MAAM,EAAE,CAAC,SAAS,EAAE,SAAS,EAAE,SAAS,CAAC;wBACzC,iBAAiB,EAAE,WAAW;wBAC9B,aAAa,EAAE,4CAA4C;wBAC3D,WAAW,EAAE,0CAA0C;wBACvD,WAAW,EAAE,0CAA0C;qBAC1D;oBACD,oCAAoC,EAAE;wBAClC,iBAAiB,EAAE,OAAO;wBAC1B,MAAM,EAAE,CAAC,SAAS,EAAE,SAAS,EAAE,SAAS,CAAC;wBACzC,iBAAiB,EAAE,WAAW;wBAC9B,aAAa,EAAE,4CAA4C;wBAC3D,WAAW,EAAE,0CAA0C;wBACvD,WAAW,EAAE,0CAA0C;qBAC1D;iBACJ;aACJ;SACJ;QACD,cAAc,EAAE,aAAa;QAC7B,YAAY,EAAE,8BAA8B;QAC5C,SAAS,EAAE,UAAU;KACxB;IACD,KAAK,EAAE;QACH,iBAAiB,EAAE,qBAAqB;QACxC,UAAU,EAAE;YACR,qBAAqB,EAAE;gBACnB,IAAI,EAAE,SAAS;gBACf,cAAc,EAAE;oBACZ,MAAM,EAAE,CAAC;iBACZ;gBACD,YAAY,EAAE,qBAAqB;gBACnC,eAAe,EAAE;oBACb,2BAA2B,EAAE;wBACzB,iBAAiB,EAAE,QAAQ;wBAC3B,MAAM,EAAE,CAAC,SAAS,EAAE,SAAS,EAAE,SAAS,CAAC;wBACzC,iBAAiB,EAAE,WAAW;wBAC9B,aAAa,EAAE,mCAAmC;wBAClD,WAAW,EAAE,iCAAiC;wBAC9C,WAAW,EAAE,iCAAiC;qBACjD;iBACJ;aACJ;YACD,qBAAqB,EAAE;gBACnB,IAAI,EAAE,SAAS;gBACf,cAAc,EAAE;oBACZ,MAAM,EAAE,CAAC;iBACZ;gBACD,YAAY,EAAE,qBAAqB;gBACnC,eAAe,EAAE;oBACb,2BAA2B,EAAE;wBACzB,iBAAiB,EAAE,QAAQ;wBAC3B,MAAM,EAAE,CAAC,SAAS,EAAE,SAAS,EAAE,SAAS,CAAC;wBACzC,iBAAiB,EAAE,WAAW;wBAC9B,aAAa,EAAE,mCAAmC;wBAClD,WAAW,EAAE,iCAAiC;wBAC9C,WAAW,EAAE,iCAAiC;qBACjD;iBACJ;aACJ;YACD,sBAAsB,EAAE;gBACpB,IAAI,EAAE,UAAU;gBAChB,cAAc,EAAE;oBACZ,MAAM,EAAE,CAAC;oBACT,KAAK,EAAE,CAAC;oBACR,KAAK,EAAE,CAAC;iBACX;gBACD,YAAY,EAAE,sBAAsB;gBACpC,eAAe,EAAE;oBACb,4BAA4B,EAAE;wBAC1B,iBAAiB,EAAE,QAAQ;wBAC3B,MAAM,EAAE,CAAC,SAAS,EAAE,SAAS,EAAE,SAAS,CAAC;wBACzC,iBAAiB,EAAE,WAAW;wBAC9B,aAAa,EAAE,oCAAoC;wBACnD,WAAW,EAAE,kCAAkC;wBAC/C,WAAW,EAAE,kCAAkC;qBAClD;oBACD,kCAAkC,EAAE;wBAChC,iBAAiB,EAAE,OAAO;wBAC1B,MAAM,EAAE,CAAC,SAAS,EAAE,SAAS,EAAE,SAAS,CAAC;wBACzC,iBAAiB,EAAE,WAAW;wBAC9B,aAAa,EAAE,0CAA0C;wBACzD,WAAW,EAAE,wCAAwC;wBACrD,WAAW,EAAE,wCAAwC;qBACxD;oBACD,kCAAkC,EAAE;wBAChC,iBAAiB,EAAE,OAAO;wBAC1B,MAAM,EAAE,CAAC,SAAS,EAAE,SAAS,EAAE,SAAS,CAAC;wBACzC,iBAAiB,EAAE,WAAW;wBAC9B,aAAa,EAAE,0CAA0C;wBACzD,WAAW,EAAE,wCAAwC;wBACrD,WAAW,EAAE,wCAAwC;qBACxD;oBACD,kCAAkC,EAAE;wBAChC,iBAAiB,EAAE,OAAO;wBAC1B,MAAM,EAAE,CAAC,SAAS,EAAE,SAAS,EAAE,SAAS,CAAC;wBACzC,iBAAiB,EAAE,WAAW;wBAC9B,aAAa,EAAE,0CAA0C;wBACzD,WAAW,EAAE,wCAAwC;wBACrD,WAAW,EAAE,wCAAwC;qBACxD;oBACD,kCAAkC,EAAE;wBAChC,iBAAiB,EAAE,OAAO;wBAC1B,MAAM,EAAE,CAAC,SAAS,EAAE,SAAS,EAAE,SAAS,CAAC;wBACzC,iBAAiB,EAAE,WAAW;wBAC9B,aAAa,EAAE,0CAA0C;wBACzD,WAAW,EAAE,wCAAwC;wBACrD,WAAW,EAAE,wCAAwC;qBACxD;oBACD,iCAAiC,EAAE;wBAC/B,iBAAiB,EAAE,OAAO;wBAC1B,MAAM,EAAE,CAAC,SAAS,EAAE,SAAS,CAAC;wBAC9B,iBAAiB,EAAE,YAAY;wBAC/B,aAAa,EAAE,yCAAyC;qBAC3D;iBACJ;gBACD,kBAAkB,EAAE,yCAAyC;aAChE;YACD,wBAAwB,EAAE;gBACtB,IAAI,EAAE,YAAY;gBAClB,cAAc,EAAE;oBACZ,MAAM,EAAE,CAAC;oBACT,KAAK,EAAE,CAAC;oBACR,KAAK,EAAE,CAAC;iBACX;gBACD,YAAY,EAAE,wBAAwB;gBACtC,eAAe,EAAE;oBACb,8BAA8B,EAAE;wBAC5B,iBAAiB,EAAE,QAAQ;wBAC3B,MAAM,EAAE,CAAC,SAAS,EAAE,SAAS,EAAE,SAAS,CAAC;wBACzC,iBAAiB,EAAE,WAAW;wBAC9B,aAAa,EAAE,sCAAsC;wBACrD,WAAW,EAAE,oCAAoC;wBACjD,WAAW,EAAE,oCAAoC;qBACpD;oBACD,oCAAoC,EAAE;wBAClC,iBAAiB,EAAE,OAAO;wBAC1B,MAAM,EAAE,CAAC,SAAS,EAAE,SAAS,EAAE,SAAS,CAAC;wBACzC,iBAAiB,EAAE,WAAW;wBAC9B,aAAa,EAAE,4CAA4C;wBAC3D,WAAW,EAAE,0CAA0C;wBACvD,WAAW,EAAE,0CAA0C;qBAC1D;oBACD,oCAAoC,EAAE;wBAClC,iBAAiB,EAAE,OAAO;wBAC1B,MAAM,EAAE,CAAC,SAAS,EAAE,SAAS,EAAE,SAAS,CAAC;wBACzC,iBAAiB,EAAE,WAAW;wBAC9B,aAAa,EAAE,4CAA4C;wBAC3D,WAAW,EAAE,0CAA0C;wBACvD,WAAW,EAAE,0CAA0C;qBAC1D;iBACJ;aACJ;SACJ;QACD,cAAc,EAAE,aAAa;QAC7B,YAAY,EAAE,+BAA+B;QAC7C,SAAS,EAAE,WAAW;KACzB;CACJ,CAAC","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"]}