@babylonjs/core 5.45.2 → 5.47.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 (563) hide show
  1. package/Actions/actionManager.js +6 -1
  2. package/Actions/actionManager.js.map +1 -1
  3. package/Actions/condition.js +23 -23
  4. package/Actions/condition.js.map +1 -1
  5. package/Animations/animatable.js +48 -48
  6. package/Animations/animatable.js.map +1 -1
  7. package/Animations/animation.js +53 -53
  8. package/Animations/animation.js.map +1 -1
  9. package/Animations/animationGroup.js +53 -53
  10. package/Animations/animationGroup.js.map +1 -1
  11. package/Animations/runtimeAnimation.js +36 -36
  12. package/Animations/runtimeAnimation.js.map +1 -1
  13. package/Audio/audioEngine.js +14 -14
  14. package/Audio/audioEngine.js.map +1 -1
  15. package/Audio/audioSceneComponent.js +14 -14
  16. package/Audio/audioSceneComponent.js.map +1 -1
  17. package/Audio/sound.js +47 -47
  18. package/Audio/sound.js.map +1 -1
  19. package/Behaviors/Meshes/baseSixDofDragBehavior.d.ts +1 -1
  20. package/Behaviors/Meshes/fadeInOutBehavior.js +11 -11
  21. package/Behaviors/Meshes/fadeInOutBehavior.js.map +1 -1
  22. package/Behaviors/Meshes/pointerDragBehavior.js +34 -34
  23. package/Behaviors/Meshes/pointerDragBehavior.js.map +1 -1
  24. package/Bones/bone.js +15 -15
  25. package/Bones/bone.js.map +1 -1
  26. package/Bones/boneIKController.js +9 -9
  27. package/Bones/boneIKController.js.map +1 -1
  28. package/Bones/boneLookController.js +50 -50
  29. package/Bones/boneLookController.js.map +1 -1
  30. package/Bones/skeleton.js +35 -35
  31. package/Bones/skeleton.js.map +1 -1
  32. package/Buffers/buffer.js +14 -14
  33. package/Buffers/buffer.js.map +1 -1
  34. package/Buffers/dataBuffer.js +6 -6
  35. package/Buffers/dataBuffer.js.map +1 -1
  36. package/Cameras/Inputs/freeCameraDeviceOrientationInput.js +42 -42
  37. package/Cameras/Inputs/freeCameraDeviceOrientationInput.js.map +1 -1
  38. package/Cameras/Stereoscopic/stereoscopicScreenUniversalCamera.js +18 -18
  39. package/Cameras/Stereoscopic/stereoscopicScreenUniversalCamera.js.map +1 -1
  40. package/Cameras/VR/vrExperienceHelper.js +178 -178
  41. package/Cameras/VR/vrExperienceHelper.js.map +1 -1
  42. package/Cameras/arcRotateCamera.js +176 -176
  43. package/Cameras/arcRotateCamera.js.map +1 -1
  44. package/Cameras/camera.js +90 -90
  45. package/Cameras/camera.js.map +1 -1
  46. package/Cameras/flyCamera.js +82 -82
  47. package/Cameras/flyCamera.js.map +1 -1
  48. package/Cameras/freeCamera.js +54 -54
  49. package/Cameras/freeCamera.js.map +1 -1
  50. package/Compute/computeShader.js +12 -12
  51. package/Compute/computeShader.js.map +1 -1
  52. package/Culling/ray.d.ts +1 -1
  53. package/Debug/axesViewer.js +12 -12
  54. package/Debug/axesViewer.js.map +1 -1
  55. package/Debug/debugLayer.js +21 -21
  56. package/Debug/debugLayer.js.map +1 -1
  57. package/Debug/directionalLightFrustumViewer.js +20 -20
  58. package/Debug/directionalLightFrustumViewer.js.map +1 -1
  59. package/Debug/physicsViewer.js +3 -3
  60. package/Debug/physicsViewer.js.map +1 -1
  61. package/Debug/rayHelper.js +10 -10
  62. package/Debug/rayHelper.js.map +1 -1
  63. package/Debug/skeletonViewer.js +81 -81
  64. package/Debug/skeletonViewer.js.map +1 -1
  65. package/DeviceInput/InputDevices/deviceSource.d.ts +1 -1
  66. package/DeviceInput/InputDevices/deviceSourceManager.js +31 -31
  67. package/DeviceInput/InputDevices/deviceSourceManager.js.map +1 -1
  68. package/DeviceInput/InputDevices/deviceTypes.d.ts +1 -1
  69. package/DeviceInput/eventFactory.d.ts +1 -1
  70. package/DeviceInput/eventFactory.js +4 -4
  71. package/DeviceInput/eventFactory.js.map +1 -1
  72. package/DeviceInput/internalDeviceSourceManager.d.ts +2 -2
  73. package/DeviceInput/webDeviceInputSystem.js +2 -2
  74. package/DeviceInput/webDeviceInputSystem.js.map +1 -1
  75. package/Engines/Extensions/engine.computeShader.d.ts +3 -3
  76. package/Engines/Extensions/engine.multiRender.js +1 -1
  77. package/Engines/Extensions/engine.multiRender.js.map +1 -1
  78. package/Engines/Extensions/engine.query.d.ts +1 -1
  79. package/Engines/Extensions/engine.renderTarget.d.ts +1 -1
  80. package/Engines/Extensions/engine.renderTarget.js +1 -1
  81. package/Engines/Extensions/engine.renderTarget.js.map +1 -1
  82. package/Engines/Native/nativeDataStream.d.ts +1 -1
  83. package/Engines/Native/nativeHardwareTexture.js +3 -3
  84. package/Engines/Native/nativeHardwareTexture.js.map +1 -1
  85. package/Engines/Native/nativeInterfaces.d.ts +5 -5
  86. package/Engines/Native/nativePipelineContext.js +7 -7
  87. package/Engines/Native/nativePipelineContext.js.map +1 -1
  88. package/Engines/Native/nativeRenderTargetWrapper.js +6 -6
  89. package/Engines/Native/nativeRenderTargetWrapper.js.map +1 -1
  90. package/Engines/Processors/shaderCodeInliner.js +4 -4
  91. package/Engines/Processors/shaderCodeInliner.js.map +1 -1
  92. package/Engines/Processors/shaderProcessingOptions.d.ts +1 -1
  93. package/Engines/WebGL/webGLHardwareTexture.js +3 -3
  94. package/Engines/WebGL/webGLHardwareTexture.js.map +1 -1
  95. package/Engines/WebGPU/webgpuBufferManager.js +3 -3
  96. package/Engines/WebGPU/webgpuBufferManager.js.map +1 -1
  97. package/Engines/WebGPU/webgpuCacheBindGroups.js +6 -6
  98. package/Engines/WebGPU/webgpuCacheBindGroups.js.map +1 -1
  99. package/Engines/WebGPU/webgpuCacheRenderPipelineTree.js +5 -5
  100. package/Engines/WebGPU/webgpuCacheRenderPipelineTree.js.map +1 -1
  101. package/Engines/WebGPU/webgpuClearQuad.js +11 -11
  102. package/Engines/WebGPU/webgpuClearQuad.js.map +1 -1
  103. package/Engines/WebGPU/webgpuComputeContext.js +7 -7
  104. package/Engines/WebGPU/webgpuComputeContext.js.map +1 -1
  105. package/Engines/WebGPU/webgpuComputePipelineContext.js +4 -4
  106. package/Engines/WebGPU/webgpuComputePipelineContext.js.map +1 -1
  107. package/Engines/WebGPU/webgpuDrawContext.js +7 -7
  108. package/Engines/WebGPU/webgpuDrawContext.js.map +1 -1
  109. package/Engines/WebGPU/webgpuHardwareTexture.js +9 -9
  110. package/Engines/WebGPU/webgpuHardwareTexture.js.map +1 -1
  111. package/Engines/WebGPU/webgpuMaterialContext.js +5 -5
  112. package/Engines/WebGPU/webgpuMaterialContext.js.map +1 -1
  113. package/Engines/WebGPU/webgpuOcclusionQuery.js +10 -10
  114. package/Engines/WebGPU/webgpuOcclusionQuery.js.map +1 -1
  115. package/Engines/WebGPU/webgpuPipelineContext.js +6 -6
  116. package/Engines/WebGPU/webgpuPipelineContext.js.map +1 -1
  117. package/Engines/WebGPU/webgpuQuerySet.js +3 -3
  118. package/Engines/WebGPU/webgpuQuerySet.js.map +1 -1
  119. package/Engines/WebGPU/webgpuShaderProcessingContext.js +3 -3
  120. package/Engines/WebGPU/webgpuShaderProcessingContext.js.map +1 -1
  121. package/Engines/WebGPU/webgpuTextureHelper.js +3 -3
  122. package/Engines/WebGPU/webgpuTextureHelper.js.map +1 -1
  123. package/Engines/WebGPU/webgpuTimestampQuery.js +3 -3
  124. package/Engines/WebGPU/webgpuTimestampQuery.js.map +1 -1
  125. package/Engines/engine.js +134 -134
  126. package/Engines/engine.js.map +1 -1
  127. package/Engines/nativeEngine.js +6 -6
  128. package/Engines/nativeEngine.js.map +1 -1
  129. package/Engines/nullEngine.js +25 -25
  130. package/Engines/nullEngine.js.map +1 -1
  131. package/Engines/renderTargetWrapper.js +25 -25
  132. package/Engines/renderTargetWrapper.js.map +1 -1
  133. package/Engines/thinEngine.js +243 -243
  134. package/Engines/thinEngine.js.map +1 -1
  135. package/Engines/webgpuEngine.js +132 -132
  136. package/Engines/webgpuEngine.js.map +1 -1
  137. package/Events/keyboardEvents.js +10 -10
  138. package/Events/keyboardEvents.js.map +1 -1
  139. package/Events/pointerEvents.js +10 -10
  140. package/Events/pointerEvents.js.map +1 -1
  141. package/Gamepads/Controllers/poseEnabledController.js +9 -9
  142. package/Gamepads/Controllers/poseEnabledController.js.map +1 -1
  143. package/Gamepads/Controllers/webVRController.js +13 -13
  144. package/Gamepads/Controllers/webVRController.js.map +1 -1
  145. package/Gamepads/gamepad.js +20 -20
  146. package/Gamepads/gamepad.js.map +1 -1
  147. package/Gizmos/axisDragGizmo.js +45 -45
  148. package/Gizmos/axisDragGizmo.js.map +1 -1
  149. package/Gizmos/axisScaleGizmo.js +12 -12
  150. package/Gizmos/axisScaleGizmo.js.map +1 -1
  151. package/Gizmos/boundingBoxGizmo.js +74 -74
  152. package/Gizmos/boundingBoxGizmo.js.map +1 -1
  153. package/Gizmos/gizmo.js +34 -34
  154. package/Gizmos/gizmo.js.map +1 -1
  155. package/Gizmos/gizmoManager.js +40 -40
  156. package/Gizmos/gizmoManager.js.map +1 -1
  157. package/Gizmos/planeDragGizmo.js +23 -23
  158. package/Gizmos/planeDragGizmo.js.map +1 -1
  159. package/Gizmos/planeRotationGizmo.js +12 -12
  160. package/Gizmos/planeRotationGizmo.js.map +1 -1
  161. package/Gizmos/positionGizmo.js +40 -40
  162. package/Gizmos/positionGizmo.js.map +1 -1
  163. package/Gizmos/rotationGizmo.js +47 -47
  164. package/Gizmos/rotationGizmo.js.map +1 -1
  165. package/Gizmos/scaleGizmo.js +41 -41
  166. package/Gizmos/scaleGizmo.js.map +1 -1
  167. package/Helpers/environmentHelper.js +18 -18
  168. package/Helpers/environmentHelper.js.map +1 -1
  169. package/Helpers/textureDome.js +96 -96
  170. package/Helpers/textureDome.js.map +1 -1
  171. package/IAccessibilityTag.d.ts +2 -2
  172. package/Inputs/scene.inputManager.d.ts +4 -3
  173. package/Inputs/scene.inputManager.js +12 -11
  174. package/Inputs/scene.inputManager.js.map +1 -1
  175. package/Instrumentation/engineInstrumentation.js +21 -21
  176. package/Instrumentation/engineInstrumentation.js.map +1 -1
  177. package/Instrumentation/sceneInstrumentation.js +90 -90
  178. package/Instrumentation/sceneInstrumentation.js.map +1 -1
  179. package/Layers/effectLayer.js +48 -48
  180. package/Layers/effectLayer.js.map +1 -1
  181. package/Layers/glowLayer.js +32 -32
  182. package/Layers/glowLayer.js.map +1 -1
  183. package/Layers/highlightLayer.js +26 -26
  184. package/Layers/highlightLayer.js.map +1 -1
  185. package/Layers/layer.js +40 -40
  186. package/Layers/layer.js.map +1 -1
  187. package/LensFlares/lensFlare.js +15 -15
  188. package/LensFlares/lensFlare.js.map +1 -1
  189. package/LensFlares/lensFlareSystem.js +4 -4
  190. package/LensFlares/lensFlareSystem.js.map +1 -1
  191. package/Lights/Shadows/cascadedShadowGenerator.js +18 -18
  192. package/Lights/Shadows/cascadedShadowGenerator.js.map +1 -1
  193. package/Lights/Shadows/shadowGenerator.js +115 -115
  194. package/Lights/Shadows/shadowGenerator.js.map +1 -1
  195. package/Lights/directionalLight.js +31 -31
  196. package/Lights/directionalLight.js.map +1 -1
  197. package/Lights/light.js +72 -72
  198. package/Lights/light.js.map +1 -1
  199. package/Lights/pointLight.js +18 -18
  200. package/Lights/pointLight.js.map +1 -1
  201. package/Lights/spotLight.js +30 -30
  202. package/Lights/spotLight.js.map +1 -1
  203. package/Loading/sceneLoader.d.ts +1 -1
  204. package/Materials/Background/backgroundMaterial.js +124 -124
  205. package/Materials/Background/backgroundMaterial.js.map +1 -1
  206. package/Materials/Node/Blocks/Dual/imageSourceBlock.js +8 -8
  207. package/Materials/Node/Blocks/Dual/imageSourceBlock.js.map +1 -1
  208. package/Materials/Node/Blocks/Dual/lightBlock.js +14 -14
  209. package/Materials/Node/Blocks/Dual/lightBlock.js.map +1 -1
  210. package/Materials/Node/Blocks/Dual/reflectionTextureBaseBlock.js +9 -9
  211. package/Materials/Node/Blocks/Dual/reflectionTextureBaseBlock.js.map +1 -1
  212. package/Materials/Node/Blocks/Dual/textureBlock.js +26 -26
  213. package/Materials/Node/Blocks/Dual/textureBlock.js.map +1 -1
  214. package/Materials/Node/Blocks/Input/inputBlock.js +34 -34
  215. package/Materials/Node/Blocks/Input/inputBlock.js.map +1 -1
  216. package/Materials/Node/Blocks/PBR/pbrMetallicRoughnessBlock.js +14 -14
  217. package/Materials/Node/Blocks/PBR/pbrMetallicRoughnessBlock.js.map +1 -1
  218. package/Materials/Node/Blocks/PBR/reflectionBlock.js +16 -16
  219. package/Materials/Node/Blocks/PBR/reflectionBlock.js.map +1 -1
  220. package/Materials/Node/Blocks/customBlock.js +7 -7
  221. package/Materials/Node/Blocks/customBlock.js.map +1 -1
  222. package/Materials/Node/Blocks/gradientBlock.js +13 -13
  223. package/Materials/Node/Blocks/gradientBlock.js.map +1 -1
  224. package/Materials/Node/Blocks/triPlanarBlock.js +30 -30
  225. package/Materials/Node/Blocks/triPlanarBlock.js.map +1 -1
  226. package/Materials/Node/nodeMaterial.d.ts +1 -1
  227. package/Materials/Node/nodeMaterial.js +60 -60
  228. package/Materials/Node/nodeMaterial.js.map +1 -1
  229. package/Materials/Node/nodeMaterialBlock.js +35 -35
  230. package/Materials/Node/nodeMaterialBlock.js.map +1 -1
  231. package/Materials/Node/nodeMaterialBlockConnectionPoint.js +50 -50
  232. package/Materials/Node/nodeMaterialBlockConnectionPoint.js.map +1 -1
  233. package/Materials/PBR/pbrAnisotropicConfiguration.js +5 -5
  234. package/Materials/PBR/pbrAnisotropicConfiguration.js.map +1 -1
  235. package/Materials/PBR/pbrBRDFConfiguration.js +4 -4
  236. package/Materials/PBR/pbrBRDFConfiguration.js.map +1 -1
  237. package/Materials/PBR/pbrBaseMaterial.js +53 -55
  238. package/Materials/PBR/pbrBaseMaterial.js.map +1 -1
  239. package/Materials/PBR/pbrBaseSimpleMaterial.js +17 -17
  240. package/Materials/PBR/pbrBaseSimpleMaterial.js.map +1 -1
  241. package/Materials/PBR/pbrClearCoatConfiguration.js +5 -5
  242. package/Materials/PBR/pbrClearCoatConfiguration.js.map +1 -1
  243. package/Materials/PBR/pbrIridescenceConfiguration.js +5 -5
  244. package/Materials/PBR/pbrIridescenceConfiguration.js.map +1 -1
  245. package/Materials/PBR/pbrMaterial.js +209 -209
  246. package/Materials/PBR/pbrMaterial.js.map +1 -1
  247. package/Materials/PBR/pbrSheenConfiguration.js +5 -5
  248. package/Materials/PBR/pbrSheenConfiguration.js.map +1 -1
  249. package/Materials/PBR/pbrSpecularGlossinessMaterial.js +6 -6
  250. package/Materials/PBR/pbrSpecularGlossinessMaterial.js.map +1 -1
  251. package/Materials/PBR/pbrSubSurfaceConfiguration.js +51 -51
  252. package/Materials/PBR/pbrSubSurfaceConfiguration.js.map +1 -1
  253. package/Materials/Textures/baseTexture.js +99 -99
  254. package/Materials/Textures/baseTexture.js.map +1 -1
  255. package/Materials/Textures/cubeTexture.js +61 -61
  256. package/Materials/Textures/cubeTexture.js.map +1 -1
  257. package/Materials/Textures/externalTexture.js +16 -16
  258. package/Materials/Textures/externalTexture.js.map +1 -1
  259. package/Materials/Textures/hdrCubeTexture.js +44 -44
  260. package/Materials/Textures/hdrCubeTexture.js.map +1 -1
  261. package/Materials/Textures/internalTexture.js +31 -31
  262. package/Materials/Textures/internalTexture.js.map +1 -1
  263. package/Materials/Textures/mirrorTexture.js +73 -73
  264. package/Materials/Textures/mirrorTexture.js.map +1 -1
  265. package/Materials/Textures/multiRenderTarget.js +47 -47
  266. package/Materials/Textures/multiRenderTarget.js.map +1 -1
  267. package/Materials/Textures/rawTexture2DArray.js +6 -6
  268. package/Materials/Textures/rawTexture2DArray.js.map +1 -1
  269. package/Materials/Textures/renderTargetTexture.js +142 -142
  270. package/Materials/Textures/renderTargetTexture.js.map +1 -1
  271. package/Materials/Textures/texture.d.ts +1 -1
  272. package/Materials/Textures/texture.js +26 -26
  273. package/Materials/Textures/texture.js.map +1 -1
  274. package/Materials/Textures/textureCreationOptions.d.ts +1 -1
  275. package/Materials/Textures/textureSampler.js +20 -20
  276. package/Materials/Textures/textureSampler.js.map +1 -1
  277. package/Materials/Textures/thinRenderTargetTexture.js +6 -6
  278. package/Materials/Textures/thinRenderTargetTexture.js.map +1 -1
  279. package/Materials/Textures/thinTexture.js +39 -39
  280. package/Materials/Textures/thinTexture.js.map +1 -1
  281. package/Materials/Textures/videoTexture.js +41 -41
  282. package/Materials/Textures/videoTexture.js.map +1 -1
  283. package/Materials/drawWrapper.js +6 -6
  284. package/Materials/drawWrapper.js.map +1 -1
  285. package/Materials/effect.js +18 -18
  286. package/Materials/effect.js.map +1 -1
  287. package/Materials/effectRenderer.js +9 -9
  288. package/Materials/effectRenderer.js.map +1 -1
  289. package/Materials/fresnelParameters.d.ts +2 -2
  290. package/Materials/fresnelParameters.js +13 -13
  291. package/Materials/fresnelParameters.js.map +1 -1
  292. package/Materials/material.detailMapConfiguration.js +5 -5
  293. package/Materials/material.detailMapConfiguration.js.map +1 -1
  294. package/Materials/material.js +223 -223
  295. package/Materials/material.js.map +1 -1
  296. package/Materials/materialPluginBase.js +5 -5
  297. package/Materials/materialPluginBase.js.map +1 -1
  298. package/Materials/materialPluginEvent.d.ts +14 -14
  299. package/Materials/materialPluginManager.d.ts +1 -1
  300. package/Materials/multiMaterial.js +16 -16
  301. package/Materials/multiMaterial.js.map +1 -1
  302. package/Materials/shadowDepthWrapper.js +14 -14
  303. package/Materials/shadowDepthWrapper.js.map +1 -1
  304. package/Materials/standardMaterial.js +100 -100
  305. package/Materials/standardMaterial.js.map +1 -1
  306. package/Materials/uniformBufferEffectCommonAccessor.js +3 -3
  307. package/Materials/uniformBufferEffectCommonAccessor.js.map +1 -1
  308. package/Maths/math.functions.js +2 -0
  309. package/Maths/math.functions.js.map +1 -1
  310. package/Maths/math.path.js +11 -11
  311. package/Maths/math.path.js.map +1 -1
  312. package/Maths/math.vector.d.ts +27 -7
  313. package/Maths/math.vector.js +75 -48
  314. package/Maths/math.vector.js.map +1 -1
  315. package/Meshes/Builders/goldbergBuilder.d.ts +2 -2
  316. package/Meshes/Compression/dracoCompression.js +23 -23
  317. package/Meshes/Compression/dracoCompression.js.map +1 -1
  318. package/Meshes/Compression/meshoptCompression.js +9 -9
  319. package/Meshes/Compression/meshoptCompression.js.map +1 -1
  320. package/Meshes/abstractMesh.js +179 -179
  321. package/Meshes/abstractMesh.js.map +1 -1
  322. package/Meshes/geometry.js +32 -32
  323. package/Meshes/geometry.js.map +1 -1
  324. package/Meshes/goldbergMesh.d.ts +1 -1
  325. package/Meshes/linesMesh.js +3 -3
  326. package/Meshes/linesMesh.js.map +1 -1
  327. package/Meshes/mesh.js +166 -166
  328. package/Meshes/mesh.js.map +1 -1
  329. package/Meshes/mesh.vertexData.js.map +1 -1
  330. package/Meshes/polygonMesh.js +5 -5
  331. package/Meshes/polygonMesh.js.map +1 -1
  332. package/Meshes/subMesh.js +59 -59
  333. package/Meshes/subMesh.js.map +1 -1
  334. package/Meshes/transformNode.js +52 -52
  335. package/Meshes/transformNode.js.map +1 -1
  336. package/Misc/PerformanceViewer/performanceViewerCollectionStrategies.d.ts +1 -1
  337. package/Misc/PerformanceViewer/performanceViewerCollector.js +12 -12
  338. package/Misc/PerformanceViewer/performanceViewerCollector.js.map +1 -1
  339. package/Misc/arrayTools.d.ts +1 -1
  340. package/Misc/copyTextureToTexture.js +3 -3
  341. package/Misc/copyTextureToTexture.js.map +1 -1
  342. package/Misc/coroutine.d.ts +5 -5
  343. package/Misc/deferred.js +9 -9
  344. package/Misc/deferred.js.map +1 -1
  345. package/Misc/depthReducer.js +7 -7
  346. package/Misc/depthReducer.js.map +1 -1
  347. package/Misc/environmentTextureTools.d.ts +1 -1
  348. package/Misc/error.d.ts +1 -1
  349. package/Misc/fileTools.d.ts +5 -5
  350. package/Misc/filesInput.js +6 -6
  351. package/Misc/filesInput.js.map +1 -1
  352. package/Misc/khronosTextureContainer2.js +9 -9
  353. package/Misc/khronosTextureContainer2.js.map +1 -1
  354. package/Misc/observable.js +12 -12
  355. package/Misc/observable.js.map +1 -1
  356. package/Misc/perfCounter.js +16 -16
  357. package/Misc/perfCounter.js.map +1 -1
  358. package/Misc/sceneOptimizer.js +76 -76
  359. package/Misc/sceneOptimizer.js.map +1 -1
  360. package/Misc/stringDictionary.d.ts +1 -1
  361. package/Misc/trajectoryClassifier.js +67 -67
  362. package/Misc/trajectoryClassifier.js.map +1 -1
  363. package/Misc/videoRecorder.js +15 -15
  364. package/Misc/videoRecorder.js.map +1 -1
  365. package/Misc/virtualJoystick.js +12 -12
  366. package/Misc/virtualJoystick.js.map +1 -1
  367. package/Morph/morphTarget.js +28 -28
  368. package/Morph/morphTarget.js.map +1 -1
  369. package/Morph/morphTargetManager.js +18 -18
  370. package/Morph/morphTargetManager.js.map +1 -1
  371. package/Offline/database.js +12 -12
  372. package/Offline/database.js.map +1 -1
  373. package/Particles/EmitterTypes/coneParticleEmitter.js +25 -25
  374. package/Particles/EmitterTypes/coneParticleEmitter.js.map +1 -1
  375. package/Particles/EmitterTypes/meshParticleEmitter.js +20 -20
  376. package/Particles/EmitterTypes/meshParticleEmitter.js.map +1 -1
  377. package/Particles/baseParticleSystem.js +232 -232
  378. package/Particles/baseParticleSystem.js.map +1 -1
  379. package/Particles/cloudPoint.js +9 -9
  380. package/Particles/cloudPoint.js.map +1 -1
  381. package/Particles/gpuParticleSystem.js +123 -123
  382. package/Particles/gpuParticleSystem.js.map +1 -1
  383. package/Particles/particleSystem.js +102 -102
  384. package/Particles/particleSystem.js.map +1 -1
  385. package/Particles/particleSystemComponent.js +5 -0
  386. package/Particles/particleSystemComponent.js.map +1 -1
  387. package/Particles/pointsCloudSystem.js +18 -18
  388. package/Particles/pointsCloudSystem.js.map +1 -1
  389. package/Particles/solidParticle.js +23 -23
  390. package/Particles/solidParticle.js.map +1 -1
  391. package/Physics/index.d.ts +1 -0
  392. package/Physics/index.js +1 -0
  393. package/Physics/index.js.map +1 -1
  394. package/Physics/v1/physicsEngine.js +14 -14
  395. package/Physics/v1/physicsEngine.js.map +1 -1
  396. package/Physics/v1/physicsImpostor.js +149 -149
  397. package/Physics/v1/physicsImpostor.js.map +1 -1
  398. package/Physics/v2/IPhysicsEnginePlugin.d.ts +6 -8
  399. package/Physics/v2/IPhysicsEnginePlugin.js +1 -0
  400. package/Physics/v2/IPhysicsEnginePlugin.js.map +1 -1
  401. package/Physics/v2/physicsBody.d.ts +10 -1
  402. package/Physics/v2/physicsBody.js +13 -1
  403. package/Physics/v2/physicsBody.js.map +1 -1
  404. package/Physics/v2/physicsConstraint.d.ts +139 -66
  405. package/Physics/v2/physicsConstraint.js +145 -78
  406. package/Physics/v2/physicsConstraint.js.map +1 -1
  407. package/Physics/v2/physicsEngine.js +14 -14
  408. package/Physics/v2/physicsEngine.js.map +1 -1
  409. package/PostProcesses/RenderPipeline/Pipelines/defaultRenderingPipeline.js +137 -129
  410. package/PostProcesses/RenderPipeline/Pipelines/defaultRenderingPipeline.js.map +1 -1
  411. package/PostProcesses/RenderPipeline/Pipelines/ssao2RenderingPipeline.js +68 -68
  412. package/PostProcesses/RenderPipeline/Pipelines/ssao2RenderingPipeline.js.map +1 -1
  413. package/PostProcesses/RenderPipeline/Pipelines/ssaoRenderingPipeline.js +6 -6
  414. package/PostProcesses/RenderPipeline/Pipelines/ssaoRenderingPipeline.js.map +1 -1
  415. package/PostProcesses/RenderPipeline/Pipelines/standardRenderingPipeline.js +226 -225
  416. package/PostProcesses/RenderPipeline/Pipelines/standardRenderingPipeline.js.map +1 -1
  417. package/PostProcesses/RenderPipeline/postProcessRenderPipeline.js +10 -10
  418. package/PostProcesses/RenderPipeline/postProcessRenderPipeline.js.map +1 -1
  419. package/PostProcesses/anaglyphPostProcess.js +7 -7
  420. package/PostProcesses/anaglyphPostProcess.js.map +1 -1
  421. package/PostProcesses/blackAndWhitePostProcess.js +7 -7
  422. package/PostProcesses/blackAndWhitePostProcess.js.map +1 -1
  423. package/PostProcesses/bloomEffect.js +28 -28
  424. package/PostProcesses/bloomEffect.js.map +1 -1
  425. package/PostProcesses/bloomMergePostProcess.js +7 -7
  426. package/PostProcesses/bloomMergePostProcess.js.map +1 -1
  427. package/PostProcesses/blurPostProcess.js +32 -32
  428. package/PostProcesses/blurPostProcess.js.map +1 -1
  429. package/PostProcesses/chromaticAberrationPostProcess.js +7 -7
  430. package/PostProcesses/chromaticAberrationPostProcess.js.map +1 -1
  431. package/PostProcesses/circleOfConfusionPostProcess.js +7 -7
  432. package/PostProcesses/circleOfConfusionPostProcess.js.map +1 -1
  433. package/PostProcesses/colorCorrectionPostProcess.js +7 -7
  434. package/PostProcesses/colorCorrectionPostProcess.js.map +1 -1
  435. package/PostProcesses/convolutionPostProcess.js +7 -7
  436. package/PostProcesses/convolutionPostProcess.js.map +1 -1
  437. package/PostProcesses/depthOfFieldBlurPostProcess.js +7 -7
  438. package/PostProcesses/depthOfFieldBlurPostProcess.js.map +1 -1
  439. package/PostProcesses/depthOfFieldEffect.js +36 -36
  440. package/PostProcesses/depthOfFieldEffect.js.map +1 -1
  441. package/PostProcesses/depthOfFieldMergePostProcess.js +7 -7
  442. package/PostProcesses/depthOfFieldMergePostProcess.js.map +1 -1
  443. package/PostProcesses/extractHighlightsPostProcess.js +7 -7
  444. package/PostProcesses/extractHighlightsPostProcess.js.map +1 -1
  445. package/PostProcesses/filterPostProcess.js +7 -7
  446. package/PostProcesses/filterPostProcess.js.map +1 -1
  447. package/PostProcesses/grainPostProcess.js +7 -7
  448. package/PostProcesses/grainPostProcess.js.map +1 -1
  449. package/PostProcesses/imageProcessingPostProcess.js +42 -42
  450. package/PostProcesses/imageProcessingPostProcess.js.map +1 -1
  451. package/PostProcesses/motionBlurPostProcess.js +41 -41
  452. package/PostProcesses/motionBlurPostProcess.js.map +1 -1
  453. package/PostProcesses/passPostProcess.js +15 -15
  454. package/PostProcesses/passPostProcess.js.map +1 -1
  455. package/PostProcesses/postProcess.d.ts +2 -2
  456. package/PostProcesses/postProcess.js +123 -123
  457. package/PostProcesses/postProcess.js.map +1 -1
  458. package/PostProcesses/refractionPostProcess.js +21 -21
  459. package/PostProcesses/refractionPostProcess.js.map +1 -1
  460. package/PostProcesses/screenSpaceCurvaturePostProcess.js +7 -7
  461. package/PostProcesses/screenSpaceCurvaturePostProcess.js.map +1 -1
  462. package/PostProcesses/screenSpaceReflectionPostProcess.js +19 -19
  463. package/PostProcesses/screenSpaceReflectionPostProcess.js.map +1 -1
  464. package/PostProcesses/sharpenPostProcess.js +7 -7
  465. package/PostProcesses/sharpenPostProcess.js.map +1 -1
  466. package/PostProcesses/stereoscopicInterlacePostProcess.js +14 -14
  467. package/PostProcesses/stereoscopicInterlacePostProcess.js.map +1 -1
  468. package/PostProcesses/tonemapPostProcess.js +7 -7
  469. package/PostProcesses/tonemapPostProcess.js.map +1 -1
  470. package/PostProcesses/volumetricLightScatteringPostProcess.js +11 -11
  471. package/PostProcesses/volumetricLightScatteringPostProcess.js.map +1 -1
  472. package/PostProcesses/vrDistortionCorrectionPostProcess.js +7 -7
  473. package/PostProcesses/vrDistortionCorrectionPostProcess.js.map +1 -1
  474. package/Rendering/depthPeelingRenderer.js +36 -36
  475. package/Rendering/depthPeelingRenderer.js.map +1 -1
  476. package/Rendering/depthRenderer.js +8 -8
  477. package/Rendering/depthRenderer.js.map +1 -1
  478. package/Rendering/edgesRenderer.js +34 -34
  479. package/Rendering/edgesRenderer.js.map +1 -1
  480. package/Rendering/fluidRenderer/fluidRenderer.js +8 -8
  481. package/Rendering/fluidRenderer/fluidRenderer.js.map +1 -1
  482. package/Rendering/fluidRenderer/fluidRenderingDepthTextureCopy.js +3 -3
  483. package/Rendering/fluidRenderer/fluidRenderingDepthTextureCopy.js.map +1 -1
  484. package/Rendering/fluidRenderer/fluidRenderingObject.js +22 -19
  485. package/Rendering/fluidRenderer/fluidRenderingObject.js.map +1 -1
  486. package/Rendering/fluidRenderer/fluidRenderingObjectCustomParticles.js +12 -12
  487. package/Rendering/fluidRenderer/fluidRenderingObjectCustomParticles.js.map +1 -1
  488. package/Rendering/fluidRenderer/fluidRenderingObjectParticleSystem.js +18 -18
  489. package/Rendering/fluidRenderer/fluidRenderingObjectParticleSystem.js.map +1 -1
  490. package/Rendering/fluidRenderer/fluidRenderingTargetRenderer.js +71 -68
  491. package/Rendering/fluidRenderer/fluidRenderingTargetRenderer.js.map +1 -1
  492. package/Rendering/fluidRenderer/fluidRenderingTextures.js +29 -29
  493. package/Rendering/fluidRenderer/fluidRenderingTextures.js.map +1 -1
  494. package/Rendering/geometryBufferRenderer.js +173 -168
  495. package/Rendering/geometryBufferRenderer.js.map +1 -1
  496. package/Rendering/prePassRenderer.js +51 -51
  497. package/Rendering/prePassRenderer.js.map +1 -1
  498. package/Rendering/renderingGroup.js +25 -25
  499. package/Rendering/renderingGroup.js.map +1 -1
  500. package/Rendering/renderingManager.js +21 -21
  501. package/Rendering/renderingManager.js.map +1 -1
  502. package/Rendering/subSurfaceConfiguration.js +18 -18
  503. package/Rendering/subSurfaceConfiguration.js.map +1 -1
  504. package/Rendering/utilityLayerRenderer.js +76 -76
  505. package/Rendering/utilityLayerRenderer.js.map +1 -1
  506. package/Shaders/ShadersInclude/pbrBlockSubSurface.js +1 -1
  507. package/Shaders/ShadersInclude/pbrBlockSubSurface.js.map +1 -1
  508. package/Shaders/fluidRenderingParticleDepth.fragment.js +5 -1
  509. package/Shaders/fluidRenderingParticleDepth.fragment.js.map +1 -1
  510. package/Shaders/fluidRenderingRender.fragment.js +7 -2
  511. package/Shaders/fluidRenderingRender.fragment.js.map +1 -1
  512. package/Shaders/geometry.fragment.d.ts +2 -0
  513. package/Shaders/geometry.fragment.js +5 -1
  514. package/Shaders/geometry.fragment.js.map +1 -1
  515. package/Shaders/geometry.vertex.d.ts +2 -0
  516. package/Shaders/geometry.vertex.js +8 -4
  517. package/Shaders/geometry.vertex.js.map +1 -1
  518. package/Sprites/sprite.js +16 -16
  519. package/Sprites/sprite.js.map +1 -1
  520. package/Sprites/spriteManager.js +81 -81
  521. package/Sprites/spriteManager.js.map +1 -1
  522. package/Sprites/spriteMap.js +32 -32
  523. package/Sprites/spriteMap.js.map +1 -1
  524. package/Sprites/spriteRenderer.js +6 -6
  525. package/Sprites/spriteRenderer.js.map +1 -1
  526. package/Sprites/thinSprite.js +22 -22
  527. package/Sprites/thinSprite.js.map +1 -1
  528. package/States/stencilStateComposer.js +10 -10
  529. package/States/stencilStateComposer.js.map +1 -1
  530. package/XR/features/WebXRAnchorSystem.js +7 -7
  531. package/XR/features/WebXRAnchorSystem.js.map +1 -1
  532. package/XR/features/WebXRControllerMovement.d.ts +3 -3
  533. package/XR/features/WebXRControllerMovement.js +97 -97
  534. package/XR/features/WebXRControllerMovement.js.map +1 -1
  535. package/XR/features/WebXRControllerPhysics.js +24 -24
  536. package/XR/features/WebXRControllerPhysics.js.map +1 -1
  537. package/XR/features/WebXRControllerTeleportation.js +26 -26
  538. package/XR/features/WebXRControllerTeleportation.js.map +1 -1
  539. package/XR/features/WebXRDOMOverlay.d.ts +1 -1
  540. package/XR/features/WebXRFeaturePointSystem.js +6 -6
  541. package/XR/features/WebXRFeaturePointSystem.js.map +1 -1
  542. package/XR/features/WebXRHandTracking.d.ts +1 -1
  543. package/XR/features/WebXRHandTracking.js +95 -95
  544. package/XR/features/WebXRHandTracking.js.map +1 -1
  545. package/XR/features/WebXRWalkingLocomotion.js +21 -21
  546. package/XR/features/WebXRWalkingLocomotion.js.map +1 -1
  547. package/XR/motionController/webXRAbstractMotionController.d.ts +3 -3
  548. package/XR/motionController/webXRMotionControllerManager.d.ts +1 -1
  549. package/XR/native/nativeXRFrame.js +3 -3
  550. package/XR/native/nativeXRFrame.js.map +1 -1
  551. package/XR/webXRFeaturesManager.d.ts +1 -1
  552. package/XR/webXRLayerWrapper.d.ts +2 -2
  553. package/XR/webXRLayerWrapper.js +17 -17
  554. package/XR/webXRLayerWrapper.js.map +1 -1
  555. package/abstractScene.d.ts +2 -2
  556. package/node.d.ts +1 -1
  557. package/node.js +71 -71
  558. package/node.js.map +1 -1
  559. package/package.json +1 -1
  560. package/scene.js +777 -777
  561. package/scene.js.map +1 -1
  562. package/sceneComponent.d.ts +12 -12
  563. package/types.d.ts +11 -11
@@ -39,6 +39,16 @@ export class KeyboardInfo {
39
39
  * Set the skipOnKeyboardObservable property to true if you want the engine to stop any process after this event is triggered, even not calling onKeyboardObservable
40
40
  */
41
41
  export class KeyboardInfoPre extends KeyboardInfo {
42
+ /**
43
+ * Defines whether the engine should skip the next onKeyboardObservable associated to this pre.
44
+ * @deprecated use skipOnKeyboardObservable property instead
45
+ */
46
+ get skipOnPointerObservable() {
47
+ return this.skipOnKeyboardObservable;
48
+ }
49
+ set skipOnPointerObservable(value) {
50
+ this.skipOnKeyboardObservable = value;
51
+ }
42
52
  /**
43
53
  * Instantiates a new keyboard pre info.
44
54
  * This class is used to store keyboard related info for the onPreKeyboardObservable event.
@@ -59,15 +69,5 @@ export class KeyboardInfoPre extends KeyboardInfo {
59
69
  this.event = event;
60
70
  this.skipOnKeyboardObservable = false;
61
71
  }
62
- /**
63
- * Defines whether the engine should skip the next onKeyboardObservable associated to this pre.
64
- * @deprecated use skipOnKeyboardObservable property instead
65
- */
66
- get skipOnPointerObservable() {
67
- return this.skipOnKeyboardObservable;
68
- }
69
- set skipOnPointerObservable(value) {
70
- this.skipOnKeyboardObservable = value;
71
- }
72
72
  }
73
73
  //# sourceMappingURL=keyboardEvents.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"keyboardEvents.js","sourceRoot":"","sources":["../../../../lts/core/generated/Events/keyboardEvents.ts"],"names":[],"mappings":"AAEA;;GAEG;AACH,MAAM,OAAO,kBAAkB;;AAC3B;;GAEG;AACoB,0BAAO,GAAG,IAAI,CAAC;AACtC;;GAEG;AACoB,wBAAK,GAAG,IAAI,CAAC;AAGxC;;GAEG;AACH,MAAM,OAAO,YAAY;IACrB;;;;;OAKG;IACH;IACI;;OAEG;IACI,IAAY;IACnB;;OAEG;IACI,KAAqB;QAJrB,SAAI,GAAJ,IAAI,CAAQ;QAIZ,UAAK,GAAL,KAAK,CAAgB;IAC7B,CAAC;CACP;AAED;;;GAGG;AACH,MAAM,OAAO,eAAgB,SAAQ,YAAY;IAiB7C;;;;;OAKG;IACH;IACI;;OAEG;IACI,IAAY;IACnB;;OAEG;IACI,KAAqB;QAE5B,KAAK,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;QANZ,SAAI,GAAJ,IAAI,CAAQ;QAIZ,UAAK,GAAL,KAAK,CAAgB;QAG5B,IAAI,CAAC,wBAAwB,GAAG,KAAK,CAAC;IAC1C,CAAC;IA7BD;;;OAGG;IACH,IAAW,uBAAuB;QAC9B,OAAO,IAAI,CAAC,wBAAwB,CAAC;IACzC,CAAC;IACD,IAAW,uBAAuB,CAAC,KAAK;QACpC,IAAI,CAAC,wBAAwB,GAAG,KAAK,CAAC;IAC1C,CAAC;CAqBJ","sourcesContent":["import type { IKeyboardEvent } from \"./deviceInputEvents\";\r\n\r\n/**\r\n * Gather the list of keyboard event types as constants.\r\n */\r\nexport class KeyboardEventTypes {\r\n /**\r\n * The keydown event is fired when a key becomes active (pressed).\r\n */\r\n public static readonly KEYDOWN = 0x01;\r\n /**\r\n * The keyup event is fired when a key has been released.\r\n */\r\n public static readonly KEYUP = 0x02;\r\n}\r\n\r\n/**\r\n * This class is used to store keyboard related info for the onKeyboardObservable event.\r\n */\r\nexport class KeyboardInfo {\r\n /**\r\n * Instantiates a new keyboard info.\r\n * This class is used to store keyboard related info for the onKeyboardObservable event.\r\n * @param type Defines the type of event (KeyboardEventTypes)\r\n * @param event Defines the related dom event\r\n */\r\n constructor(\r\n /**\r\n * Defines the type of event (KeyboardEventTypes)\r\n */\r\n public type: number,\r\n /**\r\n * Defines the related dom event\r\n */\r\n public event: IKeyboardEvent\r\n ) {}\r\n}\r\n\r\n/**\r\n * This class is used to store keyboard related info for the onPreKeyboardObservable event.\r\n * Set the skipOnKeyboardObservable property to true if you want the engine to stop any process after this event is triggered, even not calling onKeyboardObservable\r\n */\r\nexport class KeyboardInfoPre extends KeyboardInfo {\r\n /**\r\n * Defines whether the engine should skip the next onKeyboardObservable associated to this pre.\r\n */\r\n public skipOnKeyboardObservable: boolean;\r\n\r\n /**\r\n * Defines whether the engine should skip the next onKeyboardObservable associated to this pre.\r\n * @deprecated use skipOnKeyboardObservable property instead\r\n */\r\n public get skipOnPointerObservable() {\r\n return this.skipOnKeyboardObservable;\r\n }\r\n public set skipOnPointerObservable(value) {\r\n this.skipOnKeyboardObservable = value;\r\n }\r\n\r\n /**\r\n * Instantiates a new keyboard pre info.\r\n * This class is used to store keyboard related info for the onPreKeyboardObservable event.\r\n * @param type Defines the type of event (KeyboardEventTypes)\r\n * @param event Defines the related dom event\r\n */\r\n constructor(\r\n /**\r\n * Defines the type of event (KeyboardEventTypes)\r\n */\r\n public type: number,\r\n /**\r\n * Defines the related dom event\r\n */\r\n public event: IKeyboardEvent\r\n ) {\r\n super(type, event);\r\n this.skipOnKeyboardObservable = false;\r\n }\r\n}\r\n"]}
1
+ {"version":3,"file":"keyboardEvents.js","sourceRoot":"","sources":["../../../../lts/core/generated/Events/keyboardEvents.ts"],"names":[],"mappings":"AAEA;;GAEG;AACH,MAAM,OAAO,kBAAkB;;AAC3B;;GAEG;AACoB,0BAAO,GAAG,IAAI,CAAC;AACtC;;GAEG;AACoB,wBAAK,GAAG,IAAI,CAAC;AAGxC;;GAEG;AACH,MAAM,OAAO,YAAY;IACrB;;;;;OAKG;IACH;IACI;;OAEG;IACI,IAAY;IACnB;;OAEG;IACI,KAAqB;QAJrB,SAAI,GAAJ,IAAI,CAAQ;QAIZ,UAAK,GAAL,KAAK,CAAgB;IAC7B,CAAC;CACP;AAED;;;GAGG;AACH,MAAM,OAAO,eAAgB,SAAQ,YAAY;IAM7C;;;OAGG;IACH,IAAW,uBAAuB;QAC9B,OAAO,IAAI,CAAC,wBAAwB,CAAC;IACzC,CAAC;IACD,IAAW,uBAAuB,CAAC,KAAK;QACpC,IAAI,CAAC,wBAAwB,GAAG,KAAK,CAAC;IAC1C,CAAC;IAED;;;;;OAKG;IACH;IACI;;OAEG;IACI,IAAY;IACnB;;OAEG;IACI,KAAqB;QAE5B,KAAK,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;QANZ,SAAI,GAAJ,IAAI,CAAQ;QAIZ,UAAK,GAAL,KAAK,CAAgB;QAG5B,IAAI,CAAC,wBAAwB,GAAG,KAAK,CAAC;IAC1C,CAAC;CACJ","sourcesContent":["import type { IKeyboardEvent } from \"./deviceInputEvents\";\r\n\r\n/**\r\n * Gather the list of keyboard event types as constants.\r\n */\r\nexport class KeyboardEventTypes {\r\n /**\r\n * The keydown event is fired when a key becomes active (pressed).\r\n */\r\n public static readonly KEYDOWN = 0x01;\r\n /**\r\n * The keyup event is fired when a key has been released.\r\n */\r\n public static readonly KEYUP = 0x02;\r\n}\r\n\r\n/**\r\n * This class is used to store keyboard related info for the onKeyboardObservable event.\r\n */\r\nexport class KeyboardInfo {\r\n /**\r\n * Instantiates a new keyboard info.\r\n * This class is used to store keyboard related info for the onKeyboardObservable event.\r\n * @param type Defines the type of event (KeyboardEventTypes)\r\n * @param event Defines the related dom event\r\n */\r\n constructor(\r\n /**\r\n * Defines the type of event (KeyboardEventTypes)\r\n */\r\n public type: number,\r\n /**\r\n * Defines the related dom event\r\n */\r\n public event: IKeyboardEvent\r\n ) {}\r\n}\r\n\r\n/**\r\n * This class is used to store keyboard related info for the onPreKeyboardObservable event.\r\n * Set the skipOnKeyboardObservable property to true if you want the engine to stop any process after this event is triggered, even not calling onKeyboardObservable\r\n */\r\nexport class KeyboardInfoPre extends KeyboardInfo {\r\n /**\r\n * Defines whether the engine should skip the next onKeyboardObservable associated to this pre.\r\n */\r\n public skipOnKeyboardObservable: boolean;\r\n\r\n /**\r\n * Defines whether the engine should skip the next onKeyboardObservable associated to this pre.\r\n * @deprecated use skipOnKeyboardObservable property instead\r\n */\r\n public get skipOnPointerObservable() {\r\n return this.skipOnKeyboardObservable;\r\n }\r\n public set skipOnPointerObservable(value) {\r\n this.skipOnKeyboardObservable = value;\r\n }\r\n\r\n /**\r\n * Instantiates a new keyboard pre info.\r\n * This class is used to store keyboard related info for the onPreKeyboardObservable event.\r\n * @param type Defines the type of event (KeyboardEventTypes)\r\n * @param event Defines the related dom event\r\n */\r\n constructor(\r\n /**\r\n * Defines the type of event (KeyboardEventTypes)\r\n */\r\n public type: number,\r\n /**\r\n * Defines the related dom event\r\n */\r\n public event: IKeyboardEvent\r\n ) {\r\n super(type, event);\r\n this.skipOnKeyboardObservable = false;\r\n }\r\n}\r\n"]}
@@ -85,6 +85,15 @@ export class PointerInfoPre extends PointerInfoBase {
85
85
  * The event member is an instance of PointerEvent for all types except PointerWheel and is of type MouseWheelEvent when type equals PointerWheel. The different event types can be found in the PointerEventTypes class.
86
86
  */
87
87
  export class PointerInfo extends PointerInfoBase {
88
+ /**
89
+ * Defines the picking info associated with this PointerInfo object (if applicable)
90
+ */
91
+ get pickInfo() {
92
+ if (!this._pickInfo) {
93
+ this._generatePickInfo();
94
+ }
95
+ return this._pickInfo;
96
+ }
88
97
  /**
89
98
  * Instantiates a PointerInfo to store pointer related info to the onPointerObservable event.
90
99
  * @param type Defines the type of event (PointerEventTypes)
@@ -97,22 +106,13 @@ export class PointerInfo extends PointerInfoBase {
97
106
  this._pickInfo = pickInfo;
98
107
  this._inputManager = inputManager;
99
108
  }
100
- /**
101
- * Defines the picking info associated with this PointerInfo object (if applicable)
102
- */
103
- get pickInfo() {
104
- if (!this._pickInfo) {
105
- this._generatePickInfo();
106
- }
107
- return this._pickInfo;
108
- }
109
109
  /**
110
110
  * Generates the picking info if needed
111
111
  */
112
112
  /** @internal */
113
113
  _generatePickInfo() {
114
114
  if (this._inputManager) {
115
- this._pickInfo = this._inputManager._pickMove(this.event.pointerId);
115
+ this._pickInfo = this._inputManager._pickMove(this.event);
116
116
  this._inputManager._setRayOnPointerInfo(this._pickInfo, this.event);
117
117
  this._inputManager = null;
118
118
  }
@@ -1 +1 @@
1
- {"version":3,"file":"pointerEvents.js","sourceRoot":"","sources":["../../../../lts/core/generated/Events/pointerEvents.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,OAAO,EAAE,MAAM,sBAAsB,CAAC;AAO/C;;GAEG;AACH,MAAM,OAAO,iBAAiB;;AAC1B;;GAEG;AACoB,6BAAW,GAAG,IAAI,CAAC;AAC1C;;GAEG;AACoB,2BAAS,GAAG,IAAI,CAAC;AACxC;;GAEG;AACoB,6BAAW,GAAG,IAAI,CAAC;AAC1C;;GAEG;AACoB,8BAAY,GAAG,IAAI,CAAC;AAC3C;;GAEG;AACoB,6BAAW,GAAG,IAAI,CAAC;AAC1C;;GAEG;AACoB,4BAAU,GAAG,IAAI,CAAC;AACzC;;GAEG;AACoB,kCAAgB,GAAG,IAAI,CAAC;AAGnD;;GAEG;AACH,MAAM,OAAO,eAAe;IACxB;;;;OAIG;IACH;IACI;;OAEG;IACI,IAAY;IACnB;;OAEG;IACI,KAAkB;QAJlB,SAAI,GAAJ,IAAI,CAAQ;QAIZ,UAAK,GAAL,KAAK,CAAa;IAC1B,CAAC;CACP;AAED;;;GAGG;AACH,MAAM,OAAO,cAAe,SAAQ,eAAe;IA0B/C;;;;;;OAMG;IACH,YAAY,IAAY,EAAE,KAAkB,EAAE,MAAc,EAAE,MAAc;QACxE,KAAK,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;QAjCvB;;WAEG;QACI,QAAG,GAAkB,IAAI,CAAC;QAOjC;;WAEG;QACI,wBAAmB,GAA0B,IAAI,CAAC;QAqBrD,IAAI,CAAC,uBAAuB,GAAG,KAAK,CAAC;QACrC,IAAI,CAAC,aAAa,GAAG,IAAI,OAAO,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACrD,CAAC;CACJ;AAED;;;GAGG;AACH,MAAM,OAAO,WAAY,SAAQ,eAAe;IAc5C;;;;;;OAMG;IACH,YAAY,IAAY,EAAE,KAAkB,EAAE,QAA+B,EAAE,eAAuC,IAAI;QACtH,KAAK,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;QACnB,IAAI,CAAC,SAAS,GAAG,QAAQ,CAAC;QAC1B,IAAI,CAAC,aAAa,GAAG,YAAY,CAAC;IACtC,CAAC;IArBD;;OAEG;IACH,IAAW,QAAQ;QACf,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE;YACjB,IAAI,CAAC,iBAAiB,EAAE,CAAC;SAC5B;QAED,OAAO,IAAI,CAAC,SAAS,CAAC;IAC1B,CAAC;IAcD;;OAEG;IACH,gBAAgB;IACT,iBAAiB;QACpB,IAAI,IAAI,CAAC,aAAa,EAAE;YACpB,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,aAAa,CAAC,SAAS,CAAE,IAAI,CAAC,KAAuB,CAAC,SAAS,CAAC,CAAC;YACvF,IAAI,CAAC,aAAa,CAAC,oBAAoB,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC;YACpE,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC;SAC7B;IACL,CAAC;CACJ","sourcesContent":["import type { Nullable } from \"../types\";\r\nimport { Vector2 } from \"../Maths/math.vector\";\r\nimport type { PickingInfo } from \"../Collisions/pickingInfo\";\r\nimport type { IMouseEvent, IPointerEvent } from \"./deviceInputEvents\";\r\nimport type { InputManager } from \"../Inputs/scene.inputManager\";\r\n\r\ndeclare type Ray = import(\"../Culling/ray\").Ray;\r\n\r\n/**\r\n * Gather the list of pointer event types as constants.\r\n */\r\nexport class PointerEventTypes {\r\n /**\r\n * The pointerdown event is fired when a pointer becomes active. For mouse, it is fired when the device transitions from no buttons depressed to at least one button depressed. For touch, it is fired when physical contact is made with the digitizer. For pen, it is fired when the stylus makes physical contact with the digitizer.\r\n */\r\n public static readonly POINTERDOWN = 0x01;\r\n /**\r\n * The pointerup event is fired when a pointer is no longer active.\r\n */\r\n public static readonly POINTERUP = 0x02;\r\n /**\r\n * The pointermove event is fired when a pointer changes coordinates.\r\n */\r\n public static readonly POINTERMOVE = 0x04;\r\n /**\r\n * The pointerwheel event is fired when a mouse wheel has been rotated.\r\n */\r\n public static readonly POINTERWHEEL = 0x08;\r\n /**\r\n * The pointerpick event is fired when a mesh or sprite has been picked by the pointer.\r\n */\r\n public static readonly POINTERPICK = 0x10;\r\n /**\r\n * The pointertap event is fired when a the object has been touched and released without drag.\r\n */\r\n public static readonly POINTERTAP = 0x20;\r\n /**\r\n * The pointerdoubletap event is fired when a the object has been touched and released twice without drag.\r\n */\r\n public static readonly POINTERDOUBLETAP = 0x40;\r\n}\r\n\r\n/**\r\n * Base class of pointer info types.\r\n */\r\nexport class PointerInfoBase {\r\n /**\r\n * Instantiates the base class of pointers info.\r\n * @param type Defines the type of event (PointerEventTypes)\r\n * @param event Defines the related dom event\r\n */\r\n constructor(\r\n /**\r\n * Defines the type of event (PointerEventTypes)\r\n */\r\n public type: number,\r\n /**\r\n * Defines the related dom event\r\n */\r\n public event: IMouseEvent\r\n ) {}\r\n}\r\n\r\n/**\r\n * This class is used to store pointer related info for the onPrePointerObservable event.\r\n * Set the skipOnPointerObservable property to true if you want the engine to stop any process after this event is triggered, even not calling onPointerObservable\r\n */\r\nexport class PointerInfoPre extends PointerInfoBase {\r\n /**\r\n * Ray from a pointer if available (eg. 6dof controller)\r\n */\r\n public ray: Nullable<Ray> = null;\r\n\r\n /**\r\n * Defines picking info coming from a near interaction (proximity instead of ray-based picking)\r\n */\r\n public nearInteractionPickingInfo: Nullable<PickingInfo>;\r\n\r\n /**\r\n * The original picking info that was used to trigger the pointer event\r\n */\r\n public originalPickingInfo: Nullable<PickingInfo> = null;\r\n\r\n /**\r\n * Defines the local position of the pointer on the canvas.\r\n */\r\n public localPosition: Vector2;\r\n\r\n /**\r\n * Defines whether the engine should skip the next OnPointerObservable associated to this pre.\r\n */\r\n public skipOnPointerObservable: boolean;\r\n\r\n /**\r\n * Instantiates a PointerInfoPre to store pointer related info to the onPrePointerObservable event.\r\n * @param type Defines the type of event (PointerEventTypes)\r\n * @param event Defines the related dom event\r\n * @param localX Defines the local x coordinates of the pointer when the event occured\r\n * @param localY Defines the local y coordinates of the pointer when the event occured\r\n */\r\n constructor(type: number, event: IMouseEvent, localX: number, localY: number) {\r\n super(type, event);\r\n this.skipOnPointerObservable = false;\r\n this.localPosition = new Vector2(localX, localY);\r\n }\r\n}\r\n\r\n/**\r\n * This type contains all the data related to a pointer event in Babylon.js.\r\n * The event member is an instance of PointerEvent for all types except PointerWheel and is of type MouseWheelEvent when type equals PointerWheel. The different event types can be found in the PointerEventTypes class.\r\n */\r\nexport class PointerInfo extends PointerInfoBase {\r\n private _pickInfo: Nullable<PickingInfo>;\r\n private _inputManager: Nullable<InputManager>;\r\n\r\n /**\r\n * Defines the picking info associated with this PointerInfo object (if applicable)\r\n */\r\n public get pickInfo(): Nullable<PickingInfo> {\r\n if (!this._pickInfo) {\r\n this._generatePickInfo();\r\n }\r\n\r\n return this._pickInfo;\r\n }\r\n /**\r\n * Instantiates a PointerInfo to store pointer related info to the onPointerObservable event.\r\n * @param type Defines the type of event (PointerEventTypes)\r\n * @param event Defines the related dom event\r\n * @param pickInfo Defines the picking info associated to the info (if any)\r\n * @param inputManager Defines the InputManager to use if there is no pickInfo\r\n */\r\n constructor(type: number, event: IMouseEvent, pickInfo: Nullable<PickingInfo>, inputManager: Nullable<InputManager> = null) {\r\n super(type, event);\r\n this._pickInfo = pickInfo;\r\n this._inputManager = inputManager;\r\n }\r\n\r\n /**\r\n * Generates the picking info if needed\r\n */\r\n /** @internal */\r\n public _generatePickInfo(): void {\r\n if (this._inputManager) {\r\n this._pickInfo = this._inputManager._pickMove((this.event as IPointerEvent).pointerId);\r\n this._inputManager._setRayOnPointerInfo(this._pickInfo, this.event);\r\n this._inputManager = null;\r\n }\r\n }\r\n}\r\n\r\n/**\r\n * Data relating to a touch event on the screen.\r\n */\r\nexport interface PointerTouch {\r\n /**\r\n * X coordinate of touch.\r\n */\r\n x: number;\r\n /**\r\n * Y coordinate of touch.\r\n */\r\n y: number;\r\n /**\r\n * Id of touch. Unique for each finger.\r\n */\r\n pointerId: number;\r\n /**\r\n * Event type passed from DOM.\r\n */\r\n type: any;\r\n}\r\n"]}
1
+ {"version":3,"file":"pointerEvents.js","sourceRoot":"","sources":["../../../../lts/core/generated/Events/pointerEvents.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,OAAO,EAAE,MAAM,sBAAsB,CAAC;AAO/C;;GAEG;AACH,MAAM,OAAO,iBAAiB;;AAC1B;;GAEG;AACoB,6BAAW,GAAG,IAAI,CAAC;AAC1C;;GAEG;AACoB,2BAAS,GAAG,IAAI,CAAC;AACxC;;GAEG;AACoB,6BAAW,GAAG,IAAI,CAAC;AAC1C;;GAEG;AACoB,8BAAY,GAAG,IAAI,CAAC;AAC3C;;GAEG;AACoB,6BAAW,GAAG,IAAI,CAAC;AAC1C;;GAEG;AACoB,4BAAU,GAAG,IAAI,CAAC;AACzC;;GAEG;AACoB,kCAAgB,GAAG,IAAI,CAAC;AAGnD;;GAEG;AACH,MAAM,OAAO,eAAe;IACxB;;;;OAIG;IACH;IACI;;OAEG;IACI,IAAY;IACnB;;OAEG;IACI,KAAkB;QAJlB,SAAI,GAAJ,IAAI,CAAQ;QAIZ,UAAK,GAAL,KAAK,CAAa;IAC1B,CAAC;CACP;AAED;;;GAGG;AACH,MAAM,OAAO,cAAe,SAAQ,eAAe;IA0B/C;;;;;;OAMG;IACH,YAAY,IAAY,EAAE,KAAkB,EAAE,MAAc,EAAE,MAAc;QACxE,KAAK,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;QAjCvB;;WAEG;QACI,QAAG,GAAkB,IAAI,CAAC;QAOjC;;WAEG;QACI,wBAAmB,GAA0B,IAAI,CAAC;QAqBrD,IAAI,CAAC,uBAAuB,GAAG,KAAK,CAAC;QACrC,IAAI,CAAC,aAAa,GAAG,IAAI,OAAO,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACrD,CAAC;CACJ;AAED;;;GAGG;AACH,MAAM,OAAO,WAAY,SAAQ,eAAe;IAI5C;;OAEG;IACH,IAAW,QAAQ;QACf,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE;YACjB,IAAI,CAAC,iBAAiB,EAAE,CAAC;SAC5B;QAED,OAAO,IAAI,CAAC,SAAS,CAAC;IAC1B,CAAC;IACD;;;;;;OAMG;IACH,YAAY,IAAY,EAAE,KAAkB,EAAE,QAA+B,EAAE,eAAuC,IAAI;QACtH,KAAK,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;QACnB,IAAI,CAAC,SAAS,GAAG,QAAQ,CAAC;QAC1B,IAAI,CAAC,aAAa,GAAG,YAAY,CAAC;IACtC,CAAC;IAED;;OAEG;IACH,gBAAgB;IACT,iBAAiB;QACpB,IAAI,IAAI,CAAC,aAAa,EAAE;YACpB,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,aAAa,CAAC,SAAS,CAAC,IAAI,CAAC,KAAsB,CAAC,CAAC;YAC3E,IAAI,CAAC,aAAa,CAAC,oBAAoB,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC;YACpE,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC;SAC7B;IACL,CAAC;CACJ","sourcesContent":["import type { Nullable } from \"../types\";\r\nimport { Vector2 } from \"../Maths/math.vector\";\r\nimport type { PickingInfo } from \"../Collisions/pickingInfo\";\r\nimport type { IMouseEvent, IPointerEvent } from \"./deviceInputEvents\";\r\nimport type { InputManager } from \"../Inputs/scene.inputManager\";\r\n\r\ndeclare type Ray = import(\"../Culling/ray\").Ray;\r\n\r\n/**\r\n * Gather the list of pointer event types as constants.\r\n */\r\nexport class PointerEventTypes {\r\n /**\r\n * The pointerdown event is fired when a pointer becomes active. For mouse, it is fired when the device transitions from no buttons depressed to at least one button depressed. For touch, it is fired when physical contact is made with the digitizer. For pen, it is fired when the stylus makes physical contact with the digitizer.\r\n */\r\n public static readonly POINTERDOWN = 0x01;\r\n /**\r\n * The pointerup event is fired when a pointer is no longer active.\r\n */\r\n public static readonly POINTERUP = 0x02;\r\n /**\r\n * The pointermove event is fired when a pointer changes coordinates.\r\n */\r\n public static readonly POINTERMOVE = 0x04;\r\n /**\r\n * The pointerwheel event is fired when a mouse wheel has been rotated.\r\n */\r\n public static readonly POINTERWHEEL = 0x08;\r\n /**\r\n * The pointerpick event is fired when a mesh or sprite has been picked by the pointer.\r\n */\r\n public static readonly POINTERPICK = 0x10;\r\n /**\r\n * The pointertap event is fired when a the object has been touched and released without drag.\r\n */\r\n public static readonly POINTERTAP = 0x20;\r\n /**\r\n * The pointerdoubletap event is fired when a the object has been touched and released twice without drag.\r\n */\r\n public static readonly POINTERDOUBLETAP = 0x40;\r\n}\r\n\r\n/**\r\n * Base class of pointer info types.\r\n */\r\nexport class PointerInfoBase {\r\n /**\r\n * Instantiates the base class of pointers info.\r\n * @param type Defines the type of event (PointerEventTypes)\r\n * @param event Defines the related dom event\r\n */\r\n constructor(\r\n /**\r\n * Defines the type of event (PointerEventTypes)\r\n */\r\n public type: number,\r\n /**\r\n * Defines the related dom event\r\n */\r\n public event: IMouseEvent\r\n ) {}\r\n}\r\n\r\n/**\r\n * This class is used to store pointer related info for the onPrePointerObservable event.\r\n * Set the skipOnPointerObservable property to true if you want the engine to stop any process after this event is triggered, even not calling onPointerObservable\r\n */\r\nexport class PointerInfoPre extends PointerInfoBase {\r\n /**\r\n * Ray from a pointer if available (eg. 6dof controller)\r\n */\r\n public ray: Nullable<Ray> = null;\r\n\r\n /**\r\n * Defines picking info coming from a near interaction (proximity instead of ray-based picking)\r\n */\r\n public nearInteractionPickingInfo: Nullable<PickingInfo>;\r\n\r\n /**\r\n * The original picking info that was used to trigger the pointer event\r\n */\r\n public originalPickingInfo: Nullable<PickingInfo> = null;\r\n\r\n /**\r\n * Defines the local position of the pointer on the canvas.\r\n */\r\n public localPosition: Vector2;\r\n\r\n /**\r\n * Defines whether the engine should skip the next OnPointerObservable associated to this pre.\r\n */\r\n public skipOnPointerObservable: boolean;\r\n\r\n /**\r\n * Instantiates a PointerInfoPre to store pointer related info to the onPrePointerObservable event.\r\n * @param type Defines the type of event (PointerEventTypes)\r\n * @param event Defines the related dom event\r\n * @param localX Defines the local x coordinates of the pointer when the event occured\r\n * @param localY Defines the local y coordinates of the pointer when the event occured\r\n */\r\n constructor(type: number, event: IMouseEvent, localX: number, localY: number) {\r\n super(type, event);\r\n this.skipOnPointerObservable = false;\r\n this.localPosition = new Vector2(localX, localY);\r\n }\r\n}\r\n\r\n/**\r\n * This type contains all the data related to a pointer event in Babylon.js.\r\n * The event member is an instance of PointerEvent for all types except PointerWheel and is of type MouseWheelEvent when type equals PointerWheel. The different event types can be found in the PointerEventTypes class.\r\n */\r\nexport class PointerInfo extends PointerInfoBase {\r\n private _pickInfo: Nullable<PickingInfo>;\r\n private _inputManager: Nullable<InputManager>;\r\n\r\n /**\r\n * Defines the picking info associated with this PointerInfo object (if applicable)\r\n */\r\n public get pickInfo(): Nullable<PickingInfo> {\r\n if (!this._pickInfo) {\r\n this._generatePickInfo();\r\n }\r\n\r\n return this._pickInfo;\r\n }\r\n /**\r\n * Instantiates a PointerInfo to store pointer related info to the onPointerObservable event.\r\n * @param type Defines the type of event (PointerEventTypes)\r\n * @param event Defines the related dom event\r\n * @param pickInfo Defines the picking info associated to the info (if any)\r\n * @param inputManager Defines the InputManager to use if there is no pickInfo\r\n */\r\n constructor(type: number, event: IMouseEvent, pickInfo: Nullable<PickingInfo>, inputManager: Nullable<InputManager> = null) {\r\n super(type, event);\r\n this._pickInfo = pickInfo;\r\n this._inputManager = inputManager;\r\n }\r\n\r\n /**\r\n * Generates the picking info if needed\r\n */\r\n /** @internal */\r\n public _generatePickInfo(): void {\r\n if (this._inputManager) {\r\n this._pickInfo = this._inputManager._pickMove(this.event as IPointerEvent);\r\n this._inputManager._setRayOnPointerInfo(this._pickInfo, this.event);\r\n this._inputManager = null;\r\n }\r\n }\r\n}\r\n\r\n/**\r\n * Data relating to a touch event on the screen.\r\n */\r\nexport interface PointerTouch {\r\n /**\r\n * X coordinate of touch.\r\n */\r\n x: number;\r\n /**\r\n * Y coordinate of touch.\r\n */\r\n y: number;\r\n /**\r\n * Id of touch. Unique for each finger.\r\n */\r\n pointerId: number;\r\n /**\r\n * Event type passed from DOM.\r\n */\r\n type: any;\r\n}\r\n"]}
@@ -62,6 +62,15 @@ PoseEnabledControllerHelper._DefaultControllerFactory = null;
62
62
  * Defines the PoseEnabledController object that contains state of a vr capable controller
63
63
  */
64
64
  export class PoseEnabledController extends Gamepad {
65
+ /**
66
+ * @internal
67
+ */
68
+ _disableTrackPosition(fixedPosition) {
69
+ if (this._trackPosition) {
70
+ this._calculatedPosition.copyFrom(fixedPosition);
71
+ this._trackPosition = false;
72
+ }
73
+ }
65
74
  /**
66
75
  * Creates a new PoseEnabledController from a gamepad
67
76
  * @param browserGamepad the gamepad that the PoseEnabledController should be created from
@@ -115,15 +124,6 @@ export class PoseEnabledController extends Gamepad {
115
124
  this._calculatedRotation = new Quaternion();
116
125
  Quaternion.RotationYawPitchRollToRef(Math.PI, 0, 0, this._leftHandSystemQuaternion);
117
126
  }
118
- /**
119
- * @internal
120
- */
121
- _disableTrackPosition(fixedPosition) {
122
- if (this._trackPosition) {
123
- this._calculatedPosition.copyFrom(fixedPosition);
124
- this._trackPosition = false;
125
- }
126
- }
127
127
  /**
128
128
  * Updates the state of the pose enabled controller and mesh based on the current position and rotation of the controller
129
129
  */
@@ -1 +1 @@
1
- {"version":3,"file":"poseEnabledController.js","sourceRoot":"","sources":["../../../../../lts/core/generated/Gamepads/Controllers/poseEnabledController.ts"],"names":[],"mappings":"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","sourcesContent":["import { Observable } from \"../../Misc/observable\";\r\nimport type { Nullable } from \"../../types\";\r\nimport { Quaternion, Matrix, Vector3, TmpVectors } from \"../../Maths/math.vector\";\r\nimport type { Node } from \"../../node\";\r\nimport type { TransformNode } from \"../../Meshes/transformNode\";\r\nimport type { AbstractMesh } from \"../../Meshes/abstractMesh\";\r\nimport { Ray } from \"../../Culling/ray\";\r\nimport { EngineStore } from \"../../Engines/engineStore\";\r\n\r\nimport { Gamepad } from \"../../Gamepads/gamepad\";\r\nimport type { WebVRFreeCamera, PoseControlled, DevicePose } from \"../../Cameras/VR/webVRCamera\";\r\nimport type { TargetCamera } from \"../../Cameras/targetCamera\";\r\n\r\n/**\r\n * Defines the types of pose enabled controllers that are supported\r\n */\r\nexport enum PoseEnabledControllerType {\r\n /**\r\n * HTC Vive\r\n */\r\n VIVE,\r\n /**\r\n * Oculus Rift\r\n */\r\n OCULUS,\r\n /**\r\n * Windows mixed reality\r\n */\r\n WINDOWS,\r\n /**\r\n * Samsung gear VR\r\n */\r\n GEAR_VR,\r\n /**\r\n * Google Daydream\r\n */\r\n DAYDREAM,\r\n /**\r\n * Generic\r\n */\r\n GENERIC,\r\n}\r\n\r\n/**\r\n * Defines the MutableGamepadButton interface for the state of a gamepad button\r\n */\r\nexport interface MutableGamepadButton {\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 * Defines the ExtendedGamepadButton interface for a gamepad button which includes state provided by a pose controller\r\n * @internal\r\n */\r\nexport interface ExtendedGamepadButton extends GamepadButton {\r\n /**\r\n * If the button/trigger is currently pressed\r\n */\r\n readonly pressed: boolean;\r\n /**\r\n * If the button/trigger is currently touched\r\n */\r\n readonly touched: boolean;\r\n /**\r\n * Value of the button/trigger\r\n */\r\n readonly value: number;\r\n}\r\n\r\n/** @internal */\r\n// eslint-disable-next-line @typescript-eslint/naming-convention\r\nexport interface _GamePadFactory {\r\n /**\r\n * Returns whether or not the current gamepad can be created for this type of controller.\r\n * @param gamepadInfo Defines the gamepad info as received from the controller APIs.\r\n * @returns true if it can be created, otherwise false\r\n */\r\n canCreate(gamepadInfo: any): boolean;\r\n\r\n /**\r\n * Creates a new instance of the Gamepad.\r\n * @param gamepadInfo Defines the gamepad info as received from the controller APIs.\r\n * @returns the new gamepad instance\r\n */\r\n create(gamepadInfo: any): Gamepad;\r\n}\r\n\r\n/**\r\n * Defines the PoseEnabledControllerHelper object that is used initialize a gamepad as the controller type it is specified as (eg. windows mixed reality controller)\r\n */\r\nexport class PoseEnabledControllerHelper {\r\n /** @internal */\r\n public static _ControllerFactories: _GamePadFactory[] = [];\r\n\r\n /** @internal */\r\n public static _DefaultControllerFactory: Nullable<(gamepadInfo: any) => Gamepad> = null;\r\n\r\n /**\r\n * Initializes a gamepad as the controller type it is specified as (eg. windows mixed reality controller)\r\n * @param vrGamepad the gamepad to initialized\r\n * @returns a vr controller of the type the gamepad identified as\r\n */\r\n public static InitiateController(vrGamepad: any) {\r\n for (const factory of this._ControllerFactories) {\r\n if (factory.canCreate(vrGamepad)) {\r\n return factory.create(vrGamepad);\r\n }\r\n }\r\n\r\n if (this._DefaultControllerFactory) {\r\n return this._DefaultControllerFactory(vrGamepad);\r\n }\r\n\r\n throw \"The type of gamepad you are trying to load needs to be imported first or is not supported.\";\r\n }\r\n}\r\n\r\n/**\r\n * Defines the PoseEnabledController object that contains state of a vr capable controller\r\n */\r\nexport class PoseEnabledController extends Gamepad implements PoseControlled {\r\n /**\r\n * If the controller is used in a webXR session\r\n */\r\n public isXR = false;\r\n // Represents device position and rotation in room space. Should only be used to help calculate babylon space values\r\n private _deviceRoomPosition = Vector3.Zero();\r\n private _deviceRoomRotationQuaternion = new Quaternion();\r\n\r\n /**\r\n * The device position in babylon space\r\n */\r\n public devicePosition = Vector3.Zero();\r\n /**\r\n * The device rotation in babylon space\r\n */\r\n public deviceRotationQuaternion = new Quaternion();\r\n /**\r\n * The scale factor of the device in babylon space\r\n */\r\n public deviceScaleFactor: number = 1;\r\n\r\n /**\r\n * (Likely devicePosition should be used instead) The device position in its room space\r\n */\r\n public position: Vector3;\r\n /**\r\n * (Likely deviceRotationQuaternion should be used instead) The device rotation in its room space\r\n */\r\n public rotationQuaternion: Quaternion;\r\n /**\r\n * The type of controller (Eg. Windows mixed reality)\r\n */\r\n public controllerType: PoseEnabledControllerType;\r\n\r\n protected _calculatedPosition: Vector3;\r\n private _calculatedRotation: Quaternion;\r\n\r\n /**\r\n * The raw pose from the device\r\n */\r\n public rawPose: DevicePose; //GamepadPose;\r\n\r\n // Used to convert 6dof controllers to 3dof\r\n private _trackPosition = true;\r\n private _maxRotationDistFromHeadset = Math.PI / 5;\r\n private _draggedRoomRotation = 0;\r\n /**\r\n * @internal\r\n */\r\n public _disableTrackPosition(fixedPosition: Vector3) {\r\n if (this._trackPosition) {\r\n this._calculatedPosition.copyFrom(fixedPosition);\r\n this._trackPosition = false;\r\n }\r\n }\r\n\r\n /**\r\n * Internal, the mesh attached to the controller\r\n * @internal\r\n */\r\n public _mesh: Nullable<AbstractMesh>; // a node that will be attached to this Gamepad\r\n private _poseControlledCamera: TargetCamera;\r\n\r\n private _leftHandSystemQuaternion: Quaternion = new Quaternion();\r\n\r\n /**\r\n * Internal, matrix used to convert room space to babylon space\r\n * @internal\r\n */\r\n public _deviceToWorld = Matrix.Identity();\r\n\r\n /**\r\n * Node to be used when casting a ray from the controller\r\n * @internal\r\n */\r\n public _pointingPoseNode: Nullable<TransformNode> = null;\r\n /**\r\n * Name of the child mesh that can be used to cast a ray from the controller\r\n */\r\n public static readonly POINTING_POSE = \"POINTING_POSE\";\r\n /**\r\n * Creates a new PoseEnabledController from a gamepad\r\n * @param browserGamepad the gamepad that the PoseEnabledController should be created from\r\n */\r\n constructor(browserGamepad: any) {\r\n super(browserGamepad.id, browserGamepad.index, browserGamepad);\r\n this.type = Gamepad.POSE_ENABLED;\r\n this.controllerType = PoseEnabledControllerType.GENERIC;\r\n this.position = Vector3.Zero();\r\n this.rotationQuaternion = new Quaternion();\r\n\r\n this._calculatedPosition = Vector3.Zero();\r\n this._calculatedRotation = new Quaternion();\r\n Quaternion.RotationYawPitchRollToRef(Math.PI, 0, 0, this._leftHandSystemQuaternion);\r\n }\r\n\r\n private _workingMatrix = Matrix.Identity();\r\n /**\r\n * Updates the state of the pose enabled controller and mesh based on the current position and rotation of the controller\r\n */\r\n public update() {\r\n super.update();\r\n this._updatePoseAndMesh();\r\n }\r\n\r\n /**\r\n * Updates only the pose device and mesh without doing any button event checking\r\n */\r\n protected _updatePoseAndMesh() {\r\n if (this.isXR) {\r\n return;\r\n }\r\n const pose: DevicePose = this.browserGamepad.pose;\r\n this.updateFromDevice(pose);\r\n\r\n if (\r\n !this._trackPosition &&\r\n EngineStore.LastCreatedScene &&\r\n EngineStore.LastCreatedScene.activeCamera &&\r\n (<WebVRFreeCamera>EngineStore.LastCreatedScene.activeCamera).devicePosition\r\n ) {\r\n const camera = <WebVRFreeCamera>EngineStore.LastCreatedScene.activeCamera;\r\n camera._computeDevicePosition();\r\n\r\n this._deviceToWorld.setTranslation(camera.devicePosition);\r\n if (camera.deviceRotationQuaternion) {\r\n camera._deviceRoomRotationQuaternion.toEulerAnglesToRef(TmpVectors.Vector3[0]);\r\n\r\n // Find the radian distance away that the headset is from the controllers rotation\r\n const distanceAway = Math.atan2(Math.sin(TmpVectors.Vector3[0].y - this._draggedRoomRotation), Math.cos(TmpVectors.Vector3[0].y - this._draggedRoomRotation));\r\n if (Math.abs(distanceAway) > this._maxRotationDistFromHeadset) {\r\n // Only rotate enouph to be within the _maxRotationDistFromHeadset\r\n const rotationAmount = distanceAway - (distanceAway < 0 ? -this._maxRotationDistFromHeadset : this._maxRotationDistFromHeadset);\r\n this._draggedRoomRotation += rotationAmount;\r\n\r\n // Rotate controller around headset\r\n const sin = Math.sin(-rotationAmount);\r\n const cos = Math.cos(-rotationAmount);\r\n this._calculatedPosition.x = this._calculatedPosition.x * cos - this._calculatedPosition.z * sin;\r\n this._calculatedPosition.z = this._calculatedPosition.x * sin + this._calculatedPosition.z * cos;\r\n }\r\n }\r\n }\r\n\r\n Vector3.TransformCoordinatesToRef(this._calculatedPosition, this._deviceToWorld, this.devicePosition);\r\n this._deviceToWorld.getRotationMatrixToRef(this._workingMatrix);\r\n Quaternion.FromRotationMatrixToRef(this._workingMatrix, this.deviceRotationQuaternion);\r\n this.deviceRotationQuaternion.multiplyInPlace(this._calculatedRotation);\r\n\r\n if (this._mesh) {\r\n this._mesh.position.copyFrom(this.devicePosition);\r\n\r\n if (this._mesh.rotationQuaternion) {\r\n this._mesh.rotationQuaternion.copyFrom(this.deviceRotationQuaternion);\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * Updates the state of the pose enbaled controller based on the raw pose data from the device\r\n * @param poseData raw pose fromthe device\r\n */\r\n updateFromDevice(poseData: DevicePose) {\r\n if (this.isXR) {\r\n return;\r\n }\r\n if (poseData) {\r\n this.rawPose = poseData;\r\n if (poseData.position) {\r\n this._deviceRoomPosition.copyFromFloats(poseData.position[0], poseData.position[1], -poseData.position[2]);\r\n if (this._mesh && this._mesh.getScene().useRightHandedSystem) {\r\n this._deviceRoomPosition.z *= -1;\r\n }\r\n if (this._trackPosition) {\r\n this._deviceRoomPosition.scaleToRef(this.deviceScaleFactor, this._calculatedPosition);\r\n }\r\n this._calculatedPosition.addInPlace(this.position);\r\n }\r\n const pose = this.rawPose;\r\n if (poseData.orientation && pose.orientation && pose.orientation.length === 4) {\r\n this._deviceRoomRotationQuaternion.copyFromFloats(pose.orientation[0], pose.orientation[1], -pose.orientation[2], -pose.orientation[3]);\r\n if (this._mesh) {\r\n if (this._mesh.getScene().useRightHandedSystem) {\r\n this._deviceRoomRotationQuaternion.z *= -1;\r\n this._deviceRoomRotationQuaternion.w *= -1;\r\n } else {\r\n this._deviceRoomRotationQuaternion.multiplyToRef(this._leftHandSystemQuaternion, this._deviceRoomRotationQuaternion);\r\n }\r\n }\r\n\r\n // if the camera is set, rotate to the camera's rotation\r\n this._deviceRoomRotationQuaternion.multiplyToRef(this.rotationQuaternion, this._calculatedRotation);\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * @internal\r\n */\r\n public _meshAttachedObservable = new Observable<AbstractMesh>();\r\n\r\n /**\r\n * Attaches a mesh to the controller\r\n * @param mesh the mesh to be attached\r\n */\r\n public attachToMesh(mesh: AbstractMesh) {\r\n if (this._mesh) {\r\n this._mesh.parent = null;\r\n }\r\n this._mesh = mesh;\r\n if (this._poseControlledCamera) {\r\n this._mesh.parent = this._poseControlledCamera;\r\n }\r\n if (!this._mesh.rotationQuaternion) {\r\n this._mesh.rotationQuaternion = new Quaternion();\r\n }\r\n\r\n // Sync controller mesh and pointing pose node's state with controller, this is done to avoid a frame where position is 0,0,0 when attaching mesh\r\n if (!this.isXR) {\r\n this._updatePoseAndMesh();\r\n if (this._pointingPoseNode) {\r\n const parents = [];\r\n let obj: Node = this._pointingPoseNode;\r\n while (obj.parent) {\r\n parents.push(obj.parent);\r\n obj = obj.parent;\r\n }\r\n parents.reverse().forEach((p) => {\r\n p.computeWorldMatrix(true);\r\n });\r\n }\r\n }\r\n\r\n this._meshAttachedObservable.notifyObservers(mesh);\r\n }\r\n\r\n /**\r\n * Attaches the controllers mesh to a camera\r\n * @param camera the camera the mesh should be attached to\r\n */\r\n public attachToPoseControlledCamera(camera: TargetCamera) {\r\n this._poseControlledCamera = camera;\r\n if (this._mesh) {\r\n this._mesh.parent = this._poseControlledCamera;\r\n }\r\n }\r\n\r\n /**\r\n * Disposes of the controller\r\n */\r\n public dispose() {\r\n if (this._mesh) {\r\n this._mesh.dispose();\r\n }\r\n this._mesh = null;\r\n\r\n super.dispose();\r\n }\r\n\r\n /**\r\n * The mesh that is attached to the controller\r\n */\r\n public get mesh(): Nullable<AbstractMesh> {\r\n return this._mesh;\r\n }\r\n\r\n /**\r\n * Gets the ray of the controller in the direction the controller is pointing\r\n * @param length the length the resulting ray should be\r\n * @returns a ray in the direction the controller is pointing\r\n */\r\n public getForwardRay(length = 100): Ray {\r\n if (!this.mesh) {\r\n return new Ray(Vector3.Zero(), new Vector3(0, 0, 1), length);\r\n }\r\n\r\n const m = this._pointingPoseNode ? this._pointingPoseNode.getWorldMatrix() : this.mesh.getWorldMatrix();\r\n const origin = m.getTranslation();\r\n\r\n const forward = new Vector3(0, 0, -1);\r\n const forwardWorld = Vector3.TransformNormal(forward, m);\r\n\r\n const direction = Vector3.Normalize(forwardWorld);\r\n\r\n return new Ray(origin, direction, length);\r\n }\r\n}\r\n"]}
1
+ {"version":3,"file":"poseEnabledController.js","sourceRoot":"","sources":["../../../../../lts/core/generated/Gamepads/Controllers/poseEnabledController.ts"],"names":[],"mappings":"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","sourcesContent":["import { Observable } from \"../../Misc/observable\";\r\nimport type { Nullable } from \"../../types\";\r\nimport { Quaternion, Matrix, Vector3, TmpVectors } from \"../../Maths/math.vector\";\r\nimport type { Node } from \"../../node\";\r\nimport type { TransformNode } from \"../../Meshes/transformNode\";\r\nimport type { AbstractMesh } from \"../../Meshes/abstractMesh\";\r\nimport { Ray } from \"../../Culling/ray\";\r\nimport { EngineStore } from \"../../Engines/engineStore\";\r\n\r\nimport { Gamepad } from \"../../Gamepads/gamepad\";\r\nimport type { WebVRFreeCamera, PoseControlled, DevicePose } from \"../../Cameras/VR/webVRCamera\";\r\nimport type { TargetCamera } from \"../../Cameras/targetCamera\";\r\n\r\n/**\r\n * Defines the types of pose enabled controllers that are supported\r\n */\r\nexport enum PoseEnabledControllerType {\r\n /**\r\n * HTC Vive\r\n */\r\n VIVE,\r\n /**\r\n * Oculus Rift\r\n */\r\n OCULUS,\r\n /**\r\n * Windows mixed reality\r\n */\r\n WINDOWS,\r\n /**\r\n * Samsung gear VR\r\n */\r\n GEAR_VR,\r\n /**\r\n * Google Daydream\r\n */\r\n DAYDREAM,\r\n /**\r\n * Generic\r\n */\r\n GENERIC,\r\n}\r\n\r\n/**\r\n * Defines the MutableGamepadButton interface for the state of a gamepad button\r\n */\r\nexport interface MutableGamepadButton {\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 * Defines the ExtendedGamepadButton interface for a gamepad button which includes state provided by a pose controller\r\n * @internal\r\n */\r\nexport interface ExtendedGamepadButton extends GamepadButton {\r\n /**\r\n * If the button/trigger is currently pressed\r\n */\r\n readonly pressed: boolean;\r\n /**\r\n * If the button/trigger is currently touched\r\n */\r\n readonly touched: boolean;\r\n /**\r\n * Value of the button/trigger\r\n */\r\n readonly value: number;\r\n}\r\n\r\n/** @internal */\r\n// eslint-disable-next-line @typescript-eslint/naming-convention\r\nexport interface _GamePadFactory {\r\n /**\r\n * Returns whether or not the current gamepad can be created for this type of controller.\r\n * @param gamepadInfo Defines the gamepad info as received from the controller APIs.\r\n * @returns true if it can be created, otherwise false\r\n */\r\n canCreate(gamepadInfo: any): boolean;\r\n\r\n /**\r\n * Creates a new instance of the Gamepad.\r\n * @param gamepadInfo Defines the gamepad info as received from the controller APIs.\r\n * @returns the new gamepad instance\r\n */\r\n create(gamepadInfo: any): Gamepad;\r\n}\r\n\r\n/**\r\n * Defines the PoseEnabledControllerHelper object that is used initialize a gamepad as the controller type it is specified as (eg. windows mixed reality controller)\r\n */\r\nexport class PoseEnabledControllerHelper {\r\n /** @internal */\r\n public static _ControllerFactories: _GamePadFactory[] = [];\r\n\r\n /** @internal */\r\n public static _DefaultControllerFactory: Nullable<(gamepadInfo: any) => Gamepad> = null;\r\n\r\n /**\r\n * Initializes a gamepad as the controller type it is specified as (eg. windows mixed reality controller)\r\n * @param vrGamepad the gamepad to initialized\r\n * @returns a vr controller of the type the gamepad identified as\r\n */\r\n public static InitiateController(vrGamepad: any) {\r\n for (const factory of this._ControllerFactories) {\r\n if (factory.canCreate(vrGamepad)) {\r\n return factory.create(vrGamepad);\r\n }\r\n }\r\n\r\n if (this._DefaultControllerFactory) {\r\n return this._DefaultControllerFactory(vrGamepad);\r\n }\r\n\r\n throw \"The type of gamepad you are trying to load needs to be imported first or is not supported.\";\r\n }\r\n}\r\n\r\n/**\r\n * Defines the PoseEnabledController object that contains state of a vr capable controller\r\n */\r\nexport class PoseEnabledController extends Gamepad implements PoseControlled {\r\n /**\r\n * If the controller is used in a webXR session\r\n */\r\n public isXR = false;\r\n // Represents device position and rotation in room space. Should only be used to help calculate babylon space values\r\n private _deviceRoomPosition = Vector3.Zero();\r\n private _deviceRoomRotationQuaternion = new Quaternion();\r\n\r\n /**\r\n * The device position in babylon space\r\n */\r\n public devicePosition = Vector3.Zero();\r\n /**\r\n * The device rotation in babylon space\r\n */\r\n public deviceRotationQuaternion = new Quaternion();\r\n /**\r\n * The scale factor of the device in babylon space\r\n */\r\n public deviceScaleFactor: number = 1;\r\n\r\n /**\r\n * (Likely devicePosition should be used instead) The device position in its room space\r\n */\r\n public position: Vector3;\r\n /**\r\n * (Likely deviceRotationQuaternion should be used instead) The device rotation in its room space\r\n */\r\n public rotationQuaternion: Quaternion;\r\n /**\r\n * The type of controller (Eg. Windows mixed reality)\r\n */\r\n public controllerType: PoseEnabledControllerType;\r\n\r\n protected _calculatedPosition: Vector3;\r\n private _calculatedRotation: Quaternion;\r\n\r\n /**\r\n * The raw pose from the device\r\n */\r\n public rawPose: DevicePose; //GamepadPose;\r\n\r\n // Used to convert 6dof controllers to 3dof\r\n private _trackPosition = true;\r\n private _maxRotationDistFromHeadset = Math.PI / 5;\r\n private _draggedRoomRotation = 0;\r\n /**\r\n * @internal\r\n */\r\n public _disableTrackPosition(fixedPosition: Vector3) {\r\n if (this._trackPosition) {\r\n this._calculatedPosition.copyFrom(fixedPosition);\r\n this._trackPosition = false;\r\n }\r\n }\r\n\r\n /**\r\n * Internal, the mesh attached to the controller\r\n * @internal\r\n */\r\n public _mesh: Nullable<AbstractMesh>; // a node that will be attached to this Gamepad\r\n private _poseControlledCamera: TargetCamera;\r\n\r\n private _leftHandSystemQuaternion: Quaternion = new Quaternion();\r\n\r\n /**\r\n * Internal, matrix used to convert room space to babylon space\r\n * @internal\r\n */\r\n public _deviceToWorld = Matrix.Identity();\r\n\r\n /**\r\n * Node to be used when casting a ray from the controller\r\n * @internal\r\n */\r\n public _pointingPoseNode: Nullable<TransformNode> = null;\r\n /**\r\n * Name of the child mesh that can be used to cast a ray from the controller\r\n */\r\n public static readonly POINTING_POSE = \"POINTING_POSE\";\r\n /**\r\n * Creates a new PoseEnabledController from a gamepad\r\n * @param browserGamepad the gamepad that the PoseEnabledController should be created from\r\n */\r\n constructor(browserGamepad: any) {\r\n super(browserGamepad.id, browserGamepad.index, browserGamepad);\r\n this.type = Gamepad.POSE_ENABLED;\r\n this.controllerType = PoseEnabledControllerType.GENERIC;\r\n this.position = Vector3.Zero();\r\n this.rotationQuaternion = new Quaternion();\r\n\r\n this._calculatedPosition = Vector3.Zero();\r\n this._calculatedRotation = new Quaternion();\r\n Quaternion.RotationYawPitchRollToRef(Math.PI, 0, 0, this._leftHandSystemQuaternion);\r\n }\r\n\r\n private _workingMatrix = Matrix.Identity();\r\n /**\r\n * Updates the state of the pose enabled controller and mesh based on the current position and rotation of the controller\r\n */\r\n public update() {\r\n super.update();\r\n this._updatePoseAndMesh();\r\n }\r\n\r\n /**\r\n * Updates only the pose device and mesh without doing any button event checking\r\n */\r\n protected _updatePoseAndMesh() {\r\n if (this.isXR) {\r\n return;\r\n }\r\n const pose: DevicePose = this.browserGamepad.pose;\r\n this.updateFromDevice(pose);\r\n\r\n if (\r\n !this._trackPosition &&\r\n EngineStore.LastCreatedScene &&\r\n EngineStore.LastCreatedScene.activeCamera &&\r\n (<WebVRFreeCamera>EngineStore.LastCreatedScene.activeCamera).devicePosition\r\n ) {\r\n const camera = <WebVRFreeCamera>EngineStore.LastCreatedScene.activeCamera;\r\n camera._computeDevicePosition();\r\n\r\n this._deviceToWorld.setTranslation(camera.devicePosition);\r\n if (camera.deviceRotationQuaternion) {\r\n camera._deviceRoomRotationQuaternion.toEulerAnglesToRef(TmpVectors.Vector3[0]);\r\n\r\n // Find the radian distance away that the headset is from the controllers rotation\r\n const distanceAway = Math.atan2(Math.sin(TmpVectors.Vector3[0].y - this._draggedRoomRotation), Math.cos(TmpVectors.Vector3[0].y - this._draggedRoomRotation));\r\n if (Math.abs(distanceAway) > this._maxRotationDistFromHeadset) {\r\n // Only rotate enouph to be within the _maxRotationDistFromHeadset\r\n const rotationAmount = distanceAway - (distanceAway < 0 ? -this._maxRotationDistFromHeadset : this._maxRotationDistFromHeadset);\r\n this._draggedRoomRotation += rotationAmount;\r\n\r\n // Rotate controller around headset\r\n const sin = Math.sin(-rotationAmount);\r\n const cos = Math.cos(-rotationAmount);\r\n this._calculatedPosition.x = this._calculatedPosition.x * cos - this._calculatedPosition.z * sin;\r\n this._calculatedPosition.z = this._calculatedPosition.x * sin + this._calculatedPosition.z * cos;\r\n }\r\n }\r\n }\r\n\r\n Vector3.TransformCoordinatesToRef(this._calculatedPosition, this._deviceToWorld, this.devicePosition);\r\n this._deviceToWorld.getRotationMatrixToRef(this._workingMatrix);\r\n Quaternion.FromRotationMatrixToRef(this._workingMatrix, this.deviceRotationQuaternion);\r\n this.deviceRotationQuaternion.multiplyInPlace(this._calculatedRotation);\r\n\r\n if (this._mesh) {\r\n this._mesh.position.copyFrom(this.devicePosition);\r\n\r\n if (this._mesh.rotationQuaternion) {\r\n this._mesh.rotationQuaternion.copyFrom(this.deviceRotationQuaternion);\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * Updates the state of the pose enbaled controller based on the raw pose data from the device\r\n * @param poseData raw pose fromthe device\r\n */\r\n updateFromDevice(poseData: DevicePose) {\r\n if (this.isXR) {\r\n return;\r\n }\r\n if (poseData) {\r\n this.rawPose = poseData;\r\n if (poseData.position) {\r\n this._deviceRoomPosition.copyFromFloats(poseData.position[0], poseData.position[1], -poseData.position[2]);\r\n if (this._mesh && this._mesh.getScene().useRightHandedSystem) {\r\n this._deviceRoomPosition.z *= -1;\r\n }\r\n if (this._trackPosition) {\r\n this._deviceRoomPosition.scaleToRef(this.deviceScaleFactor, this._calculatedPosition);\r\n }\r\n this._calculatedPosition.addInPlace(this.position);\r\n }\r\n const pose = this.rawPose;\r\n if (poseData.orientation && pose.orientation && pose.orientation.length === 4) {\r\n this._deviceRoomRotationQuaternion.copyFromFloats(pose.orientation[0], pose.orientation[1], -pose.orientation[2], -pose.orientation[3]);\r\n if (this._mesh) {\r\n if (this._mesh.getScene().useRightHandedSystem) {\r\n this._deviceRoomRotationQuaternion.z *= -1;\r\n this._deviceRoomRotationQuaternion.w *= -1;\r\n } else {\r\n this._deviceRoomRotationQuaternion.multiplyToRef(this._leftHandSystemQuaternion, this._deviceRoomRotationQuaternion);\r\n }\r\n }\r\n\r\n // if the camera is set, rotate to the camera's rotation\r\n this._deviceRoomRotationQuaternion.multiplyToRef(this.rotationQuaternion, this._calculatedRotation);\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * @internal\r\n */\r\n public _meshAttachedObservable = new Observable<AbstractMesh>();\r\n\r\n /**\r\n * Attaches a mesh to the controller\r\n * @param mesh the mesh to be attached\r\n */\r\n public attachToMesh(mesh: AbstractMesh) {\r\n if (this._mesh) {\r\n this._mesh.parent = null;\r\n }\r\n this._mesh = mesh;\r\n if (this._poseControlledCamera) {\r\n this._mesh.parent = this._poseControlledCamera;\r\n }\r\n if (!this._mesh.rotationQuaternion) {\r\n this._mesh.rotationQuaternion = new Quaternion();\r\n }\r\n\r\n // Sync controller mesh and pointing pose node's state with controller, this is done to avoid a frame where position is 0,0,0 when attaching mesh\r\n if (!this.isXR) {\r\n this._updatePoseAndMesh();\r\n if (this._pointingPoseNode) {\r\n const parents = [];\r\n let obj: Node = this._pointingPoseNode;\r\n while (obj.parent) {\r\n parents.push(obj.parent);\r\n obj = obj.parent;\r\n }\r\n parents.reverse().forEach((p) => {\r\n p.computeWorldMatrix(true);\r\n });\r\n }\r\n }\r\n\r\n this._meshAttachedObservable.notifyObservers(mesh);\r\n }\r\n\r\n /**\r\n * Attaches the controllers mesh to a camera\r\n * @param camera the camera the mesh should be attached to\r\n */\r\n public attachToPoseControlledCamera(camera: TargetCamera) {\r\n this._poseControlledCamera = camera;\r\n if (this._mesh) {\r\n this._mesh.parent = this._poseControlledCamera;\r\n }\r\n }\r\n\r\n /**\r\n * Disposes of the controller\r\n */\r\n public dispose() {\r\n if (this._mesh) {\r\n this._mesh.dispose();\r\n }\r\n this._mesh = null;\r\n\r\n super.dispose();\r\n }\r\n\r\n /**\r\n * The mesh that is attached to the controller\r\n */\r\n public get mesh(): Nullable<AbstractMesh> {\r\n return this._mesh;\r\n }\r\n\r\n /**\r\n * Gets the ray of the controller in the direction the controller is pointing\r\n * @param length the length the resulting ray should be\r\n * @returns a ray in the direction the controller is pointing\r\n */\r\n public getForwardRay(length = 100): Ray {\r\n if (!this.mesh) {\r\n return new Ray(Vector3.Zero(), new Vector3(0, 0, 1), length);\r\n }\r\n\r\n const m = this._pointingPoseNode ? this._pointingPoseNode.getWorldMatrix() : this.mesh.getWorldMatrix();\r\n const origin = m.getTranslation();\r\n\r\n const forward = new Vector3(0, 0, -1);\r\n const forwardWorld = Vector3.TransformNormal(forward, m);\r\n\r\n const direction = Vector3.Normalize(forwardWorld);\r\n\r\n return new Ray(origin, direction, length);\r\n }\r\n}\r\n"]}
@@ -5,6 +5,19 @@ import { PoseEnabledController } from "./poseEnabledController.js";
5
5
  * @deprecated Use WebXR instead
6
6
  */
7
7
  export class WebVRController extends PoseEnabledController {
8
+ /**
9
+ * Fired when a controller button's state has changed
10
+ * @param callback the callback containing the button that was modified
11
+ */
12
+ onButtonStateChange(callback) {
13
+ this._onButtonStateChange = callback;
14
+ }
15
+ /**
16
+ * The default controller model for the controller
17
+ */
18
+ get defaultModel() {
19
+ return this._defaultModel;
20
+ }
8
21
  /**
9
22
  * Creates a new WebVRController from a gamepad
10
23
  * @param vrGamepad the gamepad that the WebVRController should be created from
@@ -46,19 +59,6 @@ export class WebVRController extends PoseEnabledController {
46
59
  this._buttons = new Array(vrGamepad.buttons.length);
47
60
  this.hand = vrGamepad.hand;
48
61
  }
49
- /**
50
- * Fired when a controller button's state has changed
51
- * @param callback the callback containing the button that was modified
52
- */
53
- onButtonStateChange(callback) {
54
- this._onButtonStateChange = callback;
55
- }
56
- /**
57
- * The default controller model for the controller
58
- */
59
- get defaultModel() {
60
- return this._defaultModel;
61
- }
62
62
  /**
63
63
  * Updates the state of the controller and mesh based on the current position and rotation of the controller
64
64
  */
@@ -1 +1 @@
1
- {"version":3,"file":"webVRController.js","sourceRoot":"","sources":["../../../../../lts/core/generated/Gamepads/Controllers/webVRController.ts"],"names":[],"mappings":"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","sourcesContent":["import { Observable } from \"../../Misc/observable\";\r\nimport type { Scene } from \"../../scene\";\r\nimport type { AbstractMesh } from \"../../Meshes/abstractMesh\";\r\nimport type { ExtendedGamepadButton, MutableGamepadButton } from \"./poseEnabledController\";\r\nimport { PoseEnabledController } from \"./poseEnabledController\";\r\nimport type { StickValues, GamepadButtonChanges } from \"../../Gamepads/gamepad\";\r\nimport type { Nullable } from \"../../types\";\r\n\r\n/**\r\n * Defines the WebVRController object that represents controllers tracked in 3D space\r\n * @deprecated Use WebXR instead\r\n */\r\nexport abstract class WebVRController extends PoseEnabledController {\r\n /**\r\n * Internal, the default controller model for the controller\r\n */\r\n protected _defaultModel: Nullable<AbstractMesh>;\r\n\r\n // Observables\r\n /**\r\n * Fired when the trigger state has changed\r\n */\r\n public onTriggerStateChangedObservable = new Observable<ExtendedGamepadButton>();\r\n /**\r\n * Fired when the main button state has changed\r\n */\r\n public onMainButtonStateChangedObservable = new Observable<ExtendedGamepadButton>();\r\n /**\r\n * Fired when the secondary button state has changed\r\n */\r\n public onSecondaryButtonStateChangedObservable = new Observable<ExtendedGamepadButton>();\r\n /**\r\n * Fired when the pad state has changed\r\n */\r\n public onPadStateChangedObservable = new Observable<ExtendedGamepadButton>();\r\n /**\r\n * Fired when controllers stick values have changed\r\n */\r\n public onPadValuesChangedObservable = new Observable<StickValues>();\r\n\r\n /**\r\n * Array of button available on the controller\r\n */\r\n protected _buttons: Array<MutableGamepadButton>;\r\n\r\n private _onButtonStateChange: (controlledIndex: number, buttonIndex: number, state: ExtendedGamepadButton) => void;\r\n\r\n /**\r\n * Fired when a controller button's state has changed\r\n * @param callback the callback containing the button that was modified\r\n */\r\n public onButtonStateChange(callback: (controlledIndex: number, buttonIndex: number, state: ExtendedGamepadButton) => void) {\r\n this._onButtonStateChange = callback;\r\n }\r\n\r\n /**\r\n * X and Y axis corresponding to the controllers joystick\r\n */\r\n public pad: StickValues = { x: 0, y: 0 };\r\n\r\n /**\r\n * 'left' or 'right', see https://w3c.github.io/gamepad/extensions.html#gamepadhand-enum\r\n */\r\n public hand: string;\r\n\r\n /**\r\n * The default controller model for the controller\r\n */\r\n public get defaultModel(): Nullable<AbstractMesh> {\r\n return this._defaultModel;\r\n }\r\n\r\n /**\r\n * Creates a new WebVRController from a gamepad\r\n * @param vrGamepad the gamepad that the WebVRController should be created from\r\n */\r\n constructor(vrGamepad: any) {\r\n super(vrGamepad);\r\n this._buttons = new Array<ExtendedGamepadButton>(vrGamepad.buttons.length);\r\n this.hand = vrGamepad.hand;\r\n }\r\n\r\n /**\r\n * Updates the state of the controller and mesh based on the current position and rotation of the controller\r\n */\r\n public update() {\r\n super.update();\r\n for (let index = 0; index < this._buttons.length; index++) {\r\n this._setButtonValue(this.browserGamepad.buttons[index], this._buttons[index], index);\r\n }\r\n if (this.leftStick.x !== this.pad.x || this.leftStick.y !== this.pad.y) {\r\n this.pad.x = this.leftStick.x;\r\n this.pad.y = this.leftStick.y;\r\n this.onPadValuesChangedObservable.notifyObservers(this.pad);\r\n }\r\n }\r\n\r\n /**\r\n * Function to be called when a button is modified\r\n */\r\n protected abstract _handleButtonChange(buttonIdx: number, value: ExtendedGamepadButton, changes: GamepadButtonChanges): void;\r\n\r\n /**\r\n * Loads a mesh and attaches it to the controller\r\n * @param scene the scene the mesh should be added to\r\n * @param meshLoaded callback for when the mesh has been loaded\r\n */\r\n public abstract initControllerMesh(scene: Scene, meshLoaded?: (mesh: AbstractMesh) => void): void;\r\n\r\n private _setButtonValue(newState: ExtendedGamepadButton, currentState: ExtendedGamepadButton, buttonIndex: number) {\r\n if (!newState) {\r\n newState = {\r\n pressed: false,\r\n touched: false,\r\n value: 0,\r\n };\r\n }\r\n if (!currentState) {\r\n this._buttons[buttonIndex] = {\r\n pressed: newState.pressed,\r\n touched: newState.touched,\r\n value: newState.value,\r\n };\r\n return;\r\n }\r\n this._checkChanges(newState, currentState);\r\n if (this._changes.changed) {\r\n this._onButtonStateChange && this._onButtonStateChange(this.index, buttonIndex, newState);\r\n\r\n this._handleButtonChange(buttonIndex, newState, this._changes);\r\n }\r\n this._buttons[buttonIndex].pressed = newState.pressed;\r\n this._buttons[buttonIndex].touched = newState.touched;\r\n // oculus triggers are never 0, thou not touched.\r\n this._buttons[buttonIndex].value = newState.value < 0.00000001 ? 0 : newState.value;\r\n }\r\n\r\n // avoid GC, store state in a tmp object\r\n private _changes: GamepadButtonChanges = {\r\n pressChanged: false,\r\n touchChanged: false,\r\n valueChanged: false,\r\n changed: false,\r\n };\r\n\r\n private _checkChanges(newState: ExtendedGamepadButton, currentState: ExtendedGamepadButton) {\r\n this._changes.pressChanged = newState.pressed !== currentState.pressed;\r\n this._changes.touchChanged = newState.touched !== currentState.touched;\r\n this._changes.valueChanged = newState.value !== currentState.value;\r\n this._changes.changed = this._changes.pressChanged || this._changes.touchChanged || this._changes.valueChanged;\r\n return this._changes;\r\n }\r\n\r\n /**\r\n * Disposes of th webVRController\r\n */\r\n public dispose(): void {\r\n super.dispose();\r\n\r\n this._defaultModel = null;\r\n\r\n this.onTriggerStateChangedObservable.clear();\r\n this.onMainButtonStateChangedObservable.clear();\r\n this.onSecondaryButtonStateChangedObservable.clear();\r\n this.onPadStateChangedObservable.clear();\r\n this.onPadValuesChangedObservable.clear();\r\n }\r\n}\r\n"]}
1
+ {"version":3,"file":"webVRController.js","sourceRoot":"","sources":["../../../../../lts/core/generated/Gamepads/Controllers/webVRController.ts"],"names":[],"mappings":"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","sourcesContent":["import { Observable } from \"../../Misc/observable\";\r\nimport type { Scene } from \"../../scene\";\r\nimport type { AbstractMesh } from \"../../Meshes/abstractMesh\";\r\nimport type { ExtendedGamepadButton, MutableGamepadButton } from \"./poseEnabledController\";\r\nimport { PoseEnabledController } from \"./poseEnabledController\";\r\nimport type { StickValues, GamepadButtonChanges } from \"../../Gamepads/gamepad\";\r\nimport type { Nullable } from \"../../types\";\r\n\r\n/**\r\n * Defines the WebVRController object that represents controllers tracked in 3D space\r\n * @deprecated Use WebXR instead\r\n */\r\nexport abstract class WebVRController extends PoseEnabledController {\r\n /**\r\n * Internal, the default controller model for the controller\r\n */\r\n protected _defaultModel: Nullable<AbstractMesh>;\r\n\r\n // Observables\r\n /**\r\n * Fired when the trigger state has changed\r\n */\r\n public onTriggerStateChangedObservable = new Observable<ExtendedGamepadButton>();\r\n /**\r\n * Fired when the main button state has changed\r\n */\r\n public onMainButtonStateChangedObservable = new Observable<ExtendedGamepadButton>();\r\n /**\r\n * Fired when the secondary button state has changed\r\n */\r\n public onSecondaryButtonStateChangedObservable = new Observable<ExtendedGamepadButton>();\r\n /**\r\n * Fired when the pad state has changed\r\n */\r\n public onPadStateChangedObservable = new Observable<ExtendedGamepadButton>();\r\n /**\r\n * Fired when controllers stick values have changed\r\n */\r\n public onPadValuesChangedObservable = new Observable<StickValues>();\r\n\r\n /**\r\n * Array of button available on the controller\r\n */\r\n protected _buttons: Array<MutableGamepadButton>;\r\n\r\n private _onButtonStateChange: (controlledIndex: number, buttonIndex: number, state: ExtendedGamepadButton) => void;\r\n\r\n /**\r\n * Fired when a controller button's state has changed\r\n * @param callback the callback containing the button that was modified\r\n */\r\n public onButtonStateChange(callback: (controlledIndex: number, buttonIndex: number, state: ExtendedGamepadButton) => void) {\r\n this._onButtonStateChange = callback;\r\n }\r\n\r\n /**\r\n * X and Y axis corresponding to the controllers joystick\r\n */\r\n public pad: StickValues = { x: 0, y: 0 };\r\n\r\n /**\r\n * 'left' or 'right', see https://w3c.github.io/gamepad/extensions.html#gamepadhand-enum\r\n */\r\n public hand: string;\r\n\r\n /**\r\n * The default controller model for the controller\r\n */\r\n public get defaultModel(): Nullable<AbstractMesh> {\r\n return this._defaultModel;\r\n }\r\n\r\n /**\r\n * Creates a new WebVRController from a gamepad\r\n * @param vrGamepad the gamepad that the WebVRController should be created from\r\n */\r\n constructor(vrGamepad: any) {\r\n super(vrGamepad);\r\n this._buttons = new Array<ExtendedGamepadButton>(vrGamepad.buttons.length);\r\n this.hand = vrGamepad.hand;\r\n }\r\n\r\n /**\r\n * Updates the state of the controller and mesh based on the current position and rotation of the controller\r\n */\r\n public update() {\r\n super.update();\r\n for (let index = 0; index < this._buttons.length; index++) {\r\n this._setButtonValue(this.browserGamepad.buttons[index], this._buttons[index], index);\r\n }\r\n if (this.leftStick.x !== this.pad.x || this.leftStick.y !== this.pad.y) {\r\n this.pad.x = this.leftStick.x;\r\n this.pad.y = this.leftStick.y;\r\n this.onPadValuesChangedObservable.notifyObservers(this.pad);\r\n }\r\n }\r\n\r\n /**\r\n * Function to be called when a button is modified\r\n */\r\n protected abstract _handleButtonChange(buttonIdx: number, value: ExtendedGamepadButton, changes: GamepadButtonChanges): void;\r\n\r\n /**\r\n * Loads a mesh and attaches it to the controller\r\n * @param scene the scene the mesh should be added to\r\n * @param meshLoaded callback for when the mesh has been loaded\r\n */\r\n public abstract initControllerMesh(scene: Scene, meshLoaded?: (mesh: AbstractMesh) => void): void;\r\n\r\n private _setButtonValue(newState: ExtendedGamepadButton, currentState: ExtendedGamepadButton, buttonIndex: number) {\r\n if (!newState) {\r\n newState = {\r\n pressed: false,\r\n touched: false,\r\n value: 0,\r\n };\r\n }\r\n if (!currentState) {\r\n this._buttons[buttonIndex] = {\r\n pressed: newState.pressed,\r\n touched: newState.touched,\r\n value: newState.value,\r\n };\r\n return;\r\n }\r\n this._checkChanges(newState, currentState);\r\n if (this._changes.changed) {\r\n this._onButtonStateChange && this._onButtonStateChange(this.index, buttonIndex, newState);\r\n\r\n this._handleButtonChange(buttonIndex, newState, this._changes);\r\n }\r\n this._buttons[buttonIndex].pressed = newState.pressed;\r\n this._buttons[buttonIndex].touched = newState.touched;\r\n // oculus triggers are never 0, thou not touched.\r\n this._buttons[buttonIndex].value = newState.value < 0.00000001 ? 0 : newState.value;\r\n }\r\n\r\n // avoid GC, store state in a tmp object\r\n private _changes: GamepadButtonChanges = {\r\n pressChanged: false,\r\n touchChanged: false,\r\n valueChanged: false,\r\n changed: false,\r\n };\r\n\r\n private _checkChanges(newState: ExtendedGamepadButton, currentState: ExtendedGamepadButton) {\r\n this._changes.pressChanged = newState.pressed !== currentState.pressed;\r\n this._changes.touchChanged = newState.touched !== currentState.touched;\r\n this._changes.valueChanged = newState.value !== currentState.value;\r\n this._changes.changed = this._changes.pressChanged || this._changes.touchChanged || this._changes.valueChanged;\r\n return this._changes;\r\n }\r\n\r\n /**\r\n * Disposes of th webVRController\r\n */\r\n public dispose(): void {\r\n super.dispose();\r\n\r\n this._defaultModel = null;\r\n\r\n this.onTriggerStateChangedObservable.clear();\r\n this.onMainButtonStateChangedObservable.clear();\r\n this.onSecondaryButtonStateChangedObservable.clear();\r\n this.onPadStateChangedObservable.clear();\r\n this.onPadValuesChangedObservable.clear();\r\n }\r\n}\r\n"]}
@@ -25,6 +25,12 @@ export class StickValues {
25
25
  * Represents a gamepad
26
26
  */
27
27
  export class Gamepad {
28
+ /**
29
+ * Specifies if the gamepad has been connected
30
+ */
31
+ get isConnected() {
32
+ return this._isConnected;
33
+ }
28
34
  /**
29
35
  * Initializes the gamepad
30
36
  * @param id The id of the gamepad
@@ -71,12 +77,6 @@ export class Gamepad {
71
77
  this._rightStick = { x: this.browserGamepad.axes[this._rightStickAxisX], y: this.browserGamepad.axes[this._rightStickAxisY] };
72
78
  }
73
79
  }
74
- /**
75
- * Specifies if the gamepad has been connected
76
- */
77
- get isConnected() {
78
- return this._isConnected;
79
- }
80
80
  /**
81
81
  * Callback triggered when the left joystick has changed
82
82
  * @param callback
@@ -164,6 +164,20 @@ Gamepad.DUALSHOCK = 4;
164
164
  * Represents a generic gamepad
165
165
  */
166
166
  export class GenericPad extends Gamepad {
167
+ /**
168
+ * Callback triggered when a button has been pressed
169
+ * @param callback Called when a button has been pressed
170
+ */
171
+ onbuttondown(callback) {
172
+ this._onbuttondown = callback;
173
+ }
174
+ /**
175
+ * Callback triggered when a button has been released
176
+ * @param callback Called when a button has been released
177
+ */
178
+ onbuttonup(callback) {
179
+ this._onbuttonup = callback;
180
+ }
167
181
  /**
168
182
  * Initializes the generic gamepad
169
183
  * @param id The id of the generic gamepad
@@ -183,20 +197,6 @@ export class GenericPad extends Gamepad {
183
197
  this.type = Gamepad.GENERIC;
184
198
  this._buttons = new Array(browserGamepad.buttons.length);
185
199
  }
186
- /**
187
- * Callback triggered when a button has been pressed
188
- * @param callback Called when a button has been pressed
189
- */
190
- onbuttondown(callback) {
191
- this._onbuttondown = callback;
192
- }
193
- /**
194
- * Callback triggered when a button has been released
195
- * @param callback Called when a button has been released
196
- */
197
- onbuttonup(callback) {
198
- this._onbuttonup = callback;
199
- }
200
200
  _setButtonValue(newValue, currentValue, buttonIndex) {
201
201
  if (newValue !== currentValue) {
202
202
  if (newValue === 1) {
@@ -1 +1 @@
1
- {"version":3,"file":"gamepad.js","sourceRoot":"","sources":["../../../../lts/core/generated/Gamepads/gamepad.ts"],"names":[],"mappings":"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","sourcesContent":["import { Observable } from \"../Misc/observable\";\r\n\r\n/**\r\n * Represents a gamepad control stick position\r\n */\r\nexport class StickValues {\r\n /**\r\n * Initializes the gamepad x and y control stick values\r\n * @param x The x component of the gamepad control stick value\r\n * @param y The y component of the gamepad control stick value\r\n */\r\n constructor(\r\n /**\r\n * The x component of the control stick\r\n */\r\n public x: number,\r\n /**\r\n * The y component of the control stick\r\n */\r\n public y: number\r\n ) {}\r\n}\r\n\r\n/**\r\n * An interface which manages callbacks for gamepad button changes\r\n */\r\nexport interface GamepadButtonChanges {\r\n /**\r\n * Called when a gamepad has been changed\r\n */\r\n changed: boolean;\r\n /**\r\n * Called when a gamepad press event has been triggered\r\n */\r\n pressChanged: boolean;\r\n /**\r\n * Called when a touch event has been triggered\r\n */\r\n touchChanged: boolean;\r\n /**\r\n * Called when a value has changed\r\n */\r\n valueChanged: boolean;\r\n}\r\n\r\n/**\r\n * Represents a gamepad\r\n */\r\nexport class Gamepad {\r\n /**\r\n * Specifies what type of gamepad this represents\r\n */\r\n public type: number;\r\n\r\n private _leftStick: StickValues = { x: 0, y: 0 };\r\n private _rightStick: StickValues = { x: 0, y: 0 };\r\n\r\n /** @internal */\r\n public _isConnected = true;\r\n\r\n private _leftStickAxisX: number;\r\n private _leftStickAxisY: number;\r\n private _rightStickAxisX: number;\r\n private _rightStickAxisY: number;\r\n\r\n /**\r\n * Triggered when the left control stick has been changed\r\n */\r\n private _onleftstickchanged: (values: StickValues) => void;\r\n\r\n /**\r\n * Triggered when the right control stick has been changed\r\n */\r\n private _onrightstickchanged: (values: StickValues) => void;\r\n\r\n /**\r\n * Represents a gamepad controller\r\n */\r\n public static GAMEPAD = 0;\r\n /**\r\n * Represents a generic controller\r\n */\r\n public static GENERIC = 1;\r\n /**\r\n * Represents an XBox controller\r\n */\r\n public static XBOX = 2;\r\n /**\r\n * Represents a pose-enabled controller\r\n */\r\n public static POSE_ENABLED = 3;\r\n /**\r\n * Represents an Dual Shock controller\r\n */\r\n public static DUALSHOCK = 4;\r\n\r\n /**\r\n * Specifies whether the left control stick should be Y-inverted\r\n */\r\n protected _invertLeftStickY: boolean = false;\r\n\r\n /**\r\n * Specifies if the gamepad has been connected\r\n */\r\n public get isConnected(): boolean {\r\n return this._isConnected;\r\n }\r\n\r\n /**\r\n * Initializes the gamepad\r\n * @param id The id of the gamepad\r\n * @param index The index of the gamepad\r\n * @param browserGamepad The browser gamepad\r\n * @param leftStickX The x component of the left joystick\r\n * @param leftStickY The y component of the left joystick\r\n * @param rightStickX The x component of the right joystick\r\n * @param rightStickY The y component of the right joystick\r\n */\r\n constructor(\r\n /**\r\n * The id of the gamepad\r\n */\r\n public id: string,\r\n /**\r\n * The index of the gamepad\r\n */\r\n public index: number,\r\n /**\r\n * The browser gamepad\r\n */\r\n public browserGamepad: any,\r\n leftStickX: number = 0,\r\n leftStickY: number = 1,\r\n rightStickX: number = 2,\r\n rightStickY: number = 3\r\n ) {\r\n this.type = Gamepad.GAMEPAD;\r\n this._leftStickAxisX = leftStickX;\r\n this._leftStickAxisY = leftStickY;\r\n this._rightStickAxisX = rightStickX;\r\n this._rightStickAxisY = rightStickY;\r\n if (this.browserGamepad.axes.length >= 2) {\r\n this._leftStick = { x: this.browserGamepad.axes[this._leftStickAxisX], y: this.browserGamepad.axes[this._leftStickAxisY] };\r\n }\r\n if (this.browserGamepad.axes.length >= 4) {\r\n this._rightStick = { x: this.browserGamepad.axes[this._rightStickAxisX], y: this.browserGamepad.axes[this._rightStickAxisY] };\r\n }\r\n }\r\n\r\n /**\r\n * Callback triggered when the left joystick has changed\r\n * @param callback\r\n */\r\n public onleftstickchanged(callback: (values: StickValues) => void) {\r\n this._onleftstickchanged = callback;\r\n }\r\n\r\n /**\r\n * Callback triggered when the right joystick has changed\r\n * @param callback\r\n */\r\n public onrightstickchanged(callback: (values: StickValues) => void) {\r\n this._onrightstickchanged = callback;\r\n }\r\n\r\n /**\r\n * Gets the left joystick\r\n */\r\n public get leftStick(): StickValues {\r\n return this._leftStick;\r\n }\r\n /**\r\n * Sets the left joystick values\r\n */\r\n public set leftStick(newValues: StickValues) {\r\n if (this._onleftstickchanged && (this._leftStick.x !== newValues.x || this._leftStick.y !== newValues.y)) {\r\n this._onleftstickchanged(newValues);\r\n }\r\n this._leftStick = newValues;\r\n }\r\n /**\r\n * Gets the right joystick\r\n */\r\n public get rightStick(): StickValues {\r\n return this._rightStick;\r\n }\r\n /**\r\n * Sets the right joystick value\r\n */\r\n public set rightStick(newValues: StickValues) {\r\n if (this._onrightstickchanged && (this._rightStick.x !== newValues.x || this._rightStick.y !== newValues.y)) {\r\n this._onrightstickchanged(newValues);\r\n }\r\n this._rightStick = newValues;\r\n }\r\n\r\n /**\r\n * Updates the gamepad joystick positions\r\n */\r\n\r\n public update() {\r\n if (this._leftStick) {\r\n this.leftStick = { x: this.browserGamepad.axes[this._leftStickAxisX], y: this.browserGamepad.axes[this._leftStickAxisY] };\r\n if (this._invertLeftStickY) {\r\n this.leftStick.y *= -1;\r\n }\r\n }\r\n if (this._rightStick) {\r\n this.rightStick = { x: this.browserGamepad.axes[this._rightStickAxisX], y: this.browserGamepad.axes[this._rightStickAxisY] };\r\n }\r\n }\r\n\r\n /**\r\n * Disposes the gamepad\r\n */\r\n public dispose() {}\r\n}\r\n\r\n/**\r\n * Represents a generic gamepad\r\n */\r\nexport class GenericPad extends Gamepad {\r\n private _buttons: Array<number>;\r\n private _onbuttondown: (buttonPressed: number) => void;\r\n private _onbuttonup: (buttonReleased: number) => void;\r\n\r\n /**\r\n * Observable triggered when a button has been pressed\r\n */\r\n public onButtonDownObservable = new Observable<number>();\r\n /**\r\n * Observable triggered when a button has been released\r\n */\r\n public onButtonUpObservable = new Observable<number>();\r\n\r\n /**\r\n * Callback triggered when a button has been pressed\r\n * @param callback Called when a button has been pressed\r\n */\r\n public onbuttondown(callback: (buttonPressed: number) => void) {\r\n this._onbuttondown = callback;\r\n }\r\n /**\r\n * Callback triggered when a button has been released\r\n * @param callback Called when a button has been released\r\n */\r\n public onbuttonup(callback: (buttonReleased: number) => void) {\r\n this._onbuttonup = callback;\r\n }\r\n\r\n /**\r\n * Initializes the generic gamepad\r\n * @param id The id of the generic gamepad\r\n * @param index The index of the generic gamepad\r\n * @param browserGamepad The browser gamepad\r\n */\r\n constructor(id: string, index: number, browserGamepad: any) {\r\n super(id, index, browserGamepad);\r\n this.type = Gamepad.GENERIC;\r\n this._buttons = new Array(browserGamepad.buttons.length);\r\n }\r\n\r\n private _setButtonValue(newValue: number, currentValue: number, buttonIndex: number): number {\r\n if (newValue !== currentValue) {\r\n if (newValue === 1) {\r\n if (this._onbuttondown) {\r\n this._onbuttondown(buttonIndex);\r\n }\r\n\r\n this.onButtonDownObservable.notifyObservers(buttonIndex);\r\n }\r\n if (newValue === 0) {\r\n if (this._onbuttonup) {\r\n this._onbuttonup(buttonIndex);\r\n }\r\n\r\n this.onButtonUpObservable.notifyObservers(buttonIndex);\r\n }\r\n }\r\n return newValue;\r\n }\r\n\r\n /**\r\n * Updates the generic gamepad\r\n */\r\n public update() {\r\n super.update();\r\n for (let index = 0; index < this._buttons.length; index++) {\r\n this._buttons[index] = this._setButtonValue(this.browserGamepad.buttons[index].value, this._buttons[index], index);\r\n }\r\n }\r\n\r\n /**\r\n * Disposes the generic gamepad\r\n */\r\n public dispose() {\r\n super.dispose();\r\n this.onButtonDownObservable.clear();\r\n this.onButtonUpObservable.clear();\r\n }\r\n}\r\n"]}
1
+ {"version":3,"file":"gamepad.js","sourceRoot":"","sources":["../../../../lts/core/generated/Gamepads/gamepad.ts"],"names":[],"mappings":"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","sourcesContent":["import { Observable } from \"../Misc/observable\";\r\n\r\n/**\r\n * Represents a gamepad control stick position\r\n */\r\nexport class StickValues {\r\n /**\r\n * Initializes the gamepad x and y control stick values\r\n * @param x The x component of the gamepad control stick value\r\n * @param y The y component of the gamepad control stick value\r\n */\r\n constructor(\r\n /**\r\n * The x component of the control stick\r\n */\r\n public x: number,\r\n /**\r\n * The y component of the control stick\r\n */\r\n public y: number\r\n ) {}\r\n}\r\n\r\n/**\r\n * An interface which manages callbacks for gamepad button changes\r\n */\r\nexport interface GamepadButtonChanges {\r\n /**\r\n * Called when a gamepad has been changed\r\n */\r\n changed: boolean;\r\n /**\r\n * Called when a gamepad press event has been triggered\r\n */\r\n pressChanged: boolean;\r\n /**\r\n * Called when a touch event has been triggered\r\n */\r\n touchChanged: boolean;\r\n /**\r\n * Called when a value has changed\r\n */\r\n valueChanged: boolean;\r\n}\r\n\r\n/**\r\n * Represents a gamepad\r\n */\r\nexport class Gamepad {\r\n /**\r\n * Specifies what type of gamepad this represents\r\n */\r\n public type: number;\r\n\r\n private _leftStick: StickValues = { x: 0, y: 0 };\r\n private _rightStick: StickValues = { x: 0, y: 0 };\r\n\r\n /** @internal */\r\n public _isConnected = true;\r\n\r\n private _leftStickAxisX: number;\r\n private _leftStickAxisY: number;\r\n private _rightStickAxisX: number;\r\n private _rightStickAxisY: number;\r\n\r\n /**\r\n * Triggered when the left control stick has been changed\r\n */\r\n private _onleftstickchanged: (values: StickValues) => void;\r\n\r\n /**\r\n * Triggered when the right control stick has been changed\r\n */\r\n private _onrightstickchanged: (values: StickValues) => void;\r\n\r\n /**\r\n * Represents a gamepad controller\r\n */\r\n public static GAMEPAD = 0;\r\n /**\r\n * Represents a generic controller\r\n */\r\n public static GENERIC = 1;\r\n /**\r\n * Represents an XBox controller\r\n */\r\n public static XBOX = 2;\r\n /**\r\n * Represents a pose-enabled controller\r\n */\r\n public static POSE_ENABLED = 3;\r\n /**\r\n * Represents an Dual Shock controller\r\n */\r\n public static DUALSHOCK = 4;\r\n\r\n /**\r\n * Specifies whether the left control stick should be Y-inverted\r\n */\r\n protected _invertLeftStickY: boolean = false;\r\n\r\n /**\r\n * Specifies if the gamepad has been connected\r\n */\r\n public get isConnected(): boolean {\r\n return this._isConnected;\r\n }\r\n\r\n /**\r\n * Initializes the gamepad\r\n * @param id The id of the gamepad\r\n * @param index The index of the gamepad\r\n * @param browserGamepad The browser gamepad\r\n * @param leftStickX The x component of the left joystick\r\n * @param leftStickY The y component of the left joystick\r\n * @param rightStickX The x component of the right joystick\r\n * @param rightStickY The y component of the right joystick\r\n */\r\n constructor(\r\n /**\r\n * The id of the gamepad\r\n */\r\n public id: string,\r\n /**\r\n * The index of the gamepad\r\n */\r\n public index: number,\r\n /**\r\n * The browser gamepad\r\n */\r\n public browserGamepad: any,\r\n leftStickX: number = 0,\r\n leftStickY: number = 1,\r\n rightStickX: number = 2,\r\n rightStickY: number = 3\r\n ) {\r\n this.type = Gamepad.GAMEPAD;\r\n this._leftStickAxisX = leftStickX;\r\n this._leftStickAxisY = leftStickY;\r\n this._rightStickAxisX = rightStickX;\r\n this._rightStickAxisY = rightStickY;\r\n if (this.browserGamepad.axes.length >= 2) {\r\n this._leftStick = { x: this.browserGamepad.axes[this._leftStickAxisX], y: this.browserGamepad.axes[this._leftStickAxisY] };\r\n }\r\n if (this.browserGamepad.axes.length >= 4) {\r\n this._rightStick = { x: this.browserGamepad.axes[this._rightStickAxisX], y: this.browserGamepad.axes[this._rightStickAxisY] };\r\n }\r\n }\r\n\r\n /**\r\n * Callback triggered when the left joystick has changed\r\n * @param callback\r\n */\r\n public onleftstickchanged(callback: (values: StickValues) => void) {\r\n this._onleftstickchanged = callback;\r\n }\r\n\r\n /**\r\n * Callback triggered when the right joystick has changed\r\n * @param callback\r\n */\r\n public onrightstickchanged(callback: (values: StickValues) => void) {\r\n this._onrightstickchanged = callback;\r\n }\r\n\r\n /**\r\n * Gets the left joystick\r\n */\r\n public get leftStick(): StickValues {\r\n return this._leftStick;\r\n }\r\n /**\r\n * Sets the left joystick values\r\n */\r\n public set leftStick(newValues: StickValues) {\r\n if (this._onleftstickchanged && (this._leftStick.x !== newValues.x || this._leftStick.y !== newValues.y)) {\r\n this._onleftstickchanged(newValues);\r\n }\r\n this._leftStick = newValues;\r\n }\r\n /**\r\n * Gets the right joystick\r\n */\r\n public get rightStick(): StickValues {\r\n return this._rightStick;\r\n }\r\n /**\r\n * Sets the right joystick value\r\n */\r\n public set rightStick(newValues: StickValues) {\r\n if (this._onrightstickchanged && (this._rightStick.x !== newValues.x || this._rightStick.y !== newValues.y)) {\r\n this._onrightstickchanged(newValues);\r\n }\r\n this._rightStick = newValues;\r\n }\r\n\r\n /**\r\n * Updates the gamepad joystick positions\r\n */\r\n\r\n public update() {\r\n if (this._leftStick) {\r\n this.leftStick = { x: this.browserGamepad.axes[this._leftStickAxisX], y: this.browserGamepad.axes[this._leftStickAxisY] };\r\n if (this._invertLeftStickY) {\r\n this.leftStick.y *= -1;\r\n }\r\n }\r\n if (this._rightStick) {\r\n this.rightStick = { x: this.browserGamepad.axes[this._rightStickAxisX], y: this.browserGamepad.axes[this._rightStickAxisY] };\r\n }\r\n }\r\n\r\n /**\r\n * Disposes the gamepad\r\n */\r\n public dispose() {}\r\n}\r\n\r\n/**\r\n * Represents a generic gamepad\r\n */\r\nexport class GenericPad extends Gamepad {\r\n private _buttons: Array<number>;\r\n private _onbuttondown: (buttonPressed: number) => void;\r\n private _onbuttonup: (buttonReleased: number) => void;\r\n\r\n /**\r\n * Observable triggered when a button has been pressed\r\n */\r\n public onButtonDownObservable = new Observable<number>();\r\n /**\r\n * Observable triggered when a button has been released\r\n */\r\n public onButtonUpObservable = new Observable<number>();\r\n\r\n /**\r\n * Callback triggered when a button has been pressed\r\n * @param callback Called when a button has been pressed\r\n */\r\n public onbuttondown(callback: (buttonPressed: number) => void) {\r\n this._onbuttondown = callback;\r\n }\r\n /**\r\n * Callback triggered when a button has been released\r\n * @param callback Called when a button has been released\r\n */\r\n public onbuttonup(callback: (buttonReleased: number) => void) {\r\n this._onbuttonup = callback;\r\n }\r\n\r\n /**\r\n * Initializes the generic gamepad\r\n * @param id The id of the generic gamepad\r\n * @param index The index of the generic gamepad\r\n * @param browserGamepad The browser gamepad\r\n */\r\n constructor(id: string, index: number, browserGamepad: any) {\r\n super(id, index, browserGamepad);\r\n this.type = Gamepad.GENERIC;\r\n this._buttons = new Array(browserGamepad.buttons.length);\r\n }\r\n\r\n private _setButtonValue(newValue: number, currentValue: number, buttonIndex: number): number {\r\n if (newValue !== currentValue) {\r\n if (newValue === 1) {\r\n if (this._onbuttondown) {\r\n this._onbuttondown(buttonIndex);\r\n }\r\n\r\n this.onButtonDownObservable.notifyObservers(buttonIndex);\r\n }\r\n if (newValue === 0) {\r\n if (this._onbuttonup) {\r\n this._onbuttonup(buttonIndex);\r\n }\r\n\r\n this.onButtonUpObservable.notifyObservers(buttonIndex);\r\n }\r\n }\r\n return newValue;\r\n }\r\n\r\n /**\r\n * Updates the generic gamepad\r\n */\r\n public update() {\r\n super.update();\r\n for (let index = 0; index < this._buttons.length; index++) {\r\n this._buttons[index] = this._setButtonValue(this.browserGamepad.buttons[index].value, this._buttons[index], index);\r\n }\r\n }\r\n\r\n /**\r\n * Disposes the generic gamepad\r\n */\r\n public dispose() {\r\n super.dispose();\r\n this.onButtonDownObservable.clear();\r\n this.onButtonUpObservable.clear();\r\n }\r\n}\r\n"]}
@@ -12,6 +12,51 @@ import { TmpVectors } from "../Maths/math.vector.js";
12
12
  * Single axis drag gizmo
13
13
  */
14
14
  export class AxisDragGizmo extends Gizmo {
15
+ /** Default material used to render when gizmo is not disabled or hovered */
16
+ get coloredMaterial() {
17
+ return this._coloredMaterial;
18
+ }
19
+ /** Material used to render when gizmo is hovered with mouse*/
20
+ get hoverMaterial() {
21
+ return this._hoverMaterial;
22
+ }
23
+ /** Material used to render when gizmo is disabled. typically grey.*/
24
+ get disableMaterial() {
25
+ return this._disableMaterial;
26
+ }
27
+ /**
28
+ * @internal
29
+ */
30
+ static _CreateArrow(scene, material, thickness = 1, isCollider = false) {
31
+ const arrow = new TransformNode("arrow", scene);
32
+ const cylinder = CreateCylinder("cylinder", { diameterTop: 0, height: 0.075, diameterBottom: 0.0375 * (1 + (thickness - 1) / 4), tessellation: 96 }, scene);
33
+ const line = CreateCylinder("cylinder", { diameterTop: 0.005 * thickness, height: 0.275, diameterBottom: 0.005 * thickness, tessellation: 96 }, scene);
34
+ // Position arrow pointing in its drag axis
35
+ cylinder.parent = arrow;
36
+ cylinder.material = material;
37
+ cylinder.rotation.x = Math.PI / 2;
38
+ cylinder.position.z += 0.3;
39
+ line.parent = arrow;
40
+ line.material = material;
41
+ line.position.z += 0.275 / 2;
42
+ line.rotation.x = Math.PI / 2;
43
+ if (isCollider) {
44
+ line.visibility = 0;
45
+ cylinder.visibility = 0;
46
+ }
47
+ return arrow;
48
+ }
49
+ /**
50
+ * @internal
51
+ */
52
+ static _CreateArrowInstance(scene, arrow) {
53
+ const instance = new TransformNode("arrow", scene);
54
+ for (const mesh of arrow.getChildMeshes()) {
55
+ const childInstance = mesh.createInstance(mesh.name);
56
+ childInstance.parent = instance;
57
+ }
58
+ return instance;
59
+ }
15
60
  /**
16
61
  * Creates an AxisDragGizmo
17
62
  * @param dragAxis The axis which the gizmo will be able to drag on
@@ -141,51 +186,6 @@ export class AxisDragGizmo extends Gizmo {
141
186
  this._setGizmoMeshMaterial(cache.gizmoMeshes, newState ? cache.material : cache.disableMaterial);
142
187
  });
143
188
  }
144
- /** Default material used to render when gizmo is not disabled or hovered */
145
- get coloredMaterial() {
146
- return this._coloredMaterial;
147
- }
148
- /** Material used to render when gizmo is hovered with mouse*/
149
- get hoverMaterial() {
150
- return this._hoverMaterial;
151
- }
152
- /** Material used to render when gizmo is disabled. typically grey.*/
153
- get disableMaterial() {
154
- return this._disableMaterial;
155
- }
156
- /**
157
- * @internal
158
- */
159
- static _CreateArrow(scene, material, thickness = 1, isCollider = false) {
160
- const arrow = new TransformNode("arrow", scene);
161
- const cylinder = CreateCylinder("cylinder", { diameterTop: 0, height: 0.075, diameterBottom: 0.0375 * (1 + (thickness - 1) / 4), tessellation: 96 }, scene);
162
- const line = CreateCylinder("cylinder", { diameterTop: 0.005 * thickness, height: 0.275, diameterBottom: 0.005 * thickness, tessellation: 96 }, scene);
163
- // Position arrow pointing in its drag axis
164
- cylinder.parent = arrow;
165
- cylinder.material = material;
166
- cylinder.rotation.x = Math.PI / 2;
167
- cylinder.position.z += 0.3;
168
- line.parent = arrow;
169
- line.material = material;
170
- line.position.z += 0.275 / 2;
171
- line.rotation.x = Math.PI / 2;
172
- if (isCollider) {
173
- line.visibility = 0;
174
- cylinder.visibility = 0;
175
- }
176
- return arrow;
177
- }
178
- /**
179
- * @internal
180
- */
181
- static _CreateArrowInstance(scene, arrow) {
182
- const instance = new TransformNode("arrow", scene);
183
- for (const mesh of arrow.getChildMeshes()) {
184
- const childInstance = mesh.createInstance(mesh.name);
185
- childInstance.parent = instance;
186
- }
187
- return instance;
188
- }
189
189
  _attachedNodeChanged(value) {
190
190
  if (this.dragBehavior) {
191
191
  this.dragBehavior.enabled = value ? true : false;