@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
@@ -1 +1 @@
1
- {"version":3,"file":"WebXRWalkingLocomotion.js","sourceRoot":"","sources":["../../../../../lts/core/generated/XR/features/WebXRWalkingLocomotion.ts"],"names":[],"mappings":"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","sourcesContent":["import type { Engine } from \"../../Engines/engine\";\r\nimport { TmpVectors, Vector2, Vector3 } from \"../../Maths/math.vector\";\r\nimport type { TransformNode } from \"../../Meshes/transformNode\";\r\nimport { Logger } from \"../../Misc/logger\";\r\nimport { Observable } from \"../../Misc/observable\";\r\nimport type { Nullable } from \"../../types\";\r\nimport type { WebXRCamera } from \"../webXRCamera\";\r\nimport { WebXRFeatureName, WebXRFeaturesManager } from \"../webXRFeaturesManager\";\r\nimport type { WebXRSessionManager } from \"../webXRSessionManager\";\r\nimport { WebXRAbstractFeature } from \"./WebXRAbstractFeature\";\r\n\r\nclass CircleBuffer {\r\n private _samples: Array<Vector2> = [];\r\n private _idx: number = 0;\r\n\r\n constructor(numSamples: number, initializer?: () => Vector2) {\r\n for (let idx = 0; idx < numSamples; ++idx) {\r\n this._samples.push(initializer ? initializer() : Vector2.Zero());\r\n }\r\n }\r\n\r\n public get length() {\r\n return this._samples.length;\r\n }\r\n\r\n public push(x: number, y: number) {\r\n this._idx = (this._idx + this._samples.length - 1) % this._samples.length;\r\n this.at(0).copyFromFloats(x, y);\r\n }\r\n\r\n public at(idx: number) {\r\n if (idx >= this._samples.length) {\r\n throw new Error(\"Index out of bounds\");\r\n }\r\n return this._samples[(this._idx + idx) % this._samples.length];\r\n }\r\n}\r\n\r\ninterface IDetectedStep {\r\n leftApex: Vector2;\r\n rightApex: Vector2;\r\n currentPosition: Vector2;\r\n currentStepDirection: \"left\" | \"right\";\r\n}\r\n\r\nclass FirstStepDetector {\r\n private _samples = new CircleBuffer(20);\r\n private _entropy = 0;\r\n\r\n public onFirstStepDetected: Observable<IDetectedStep> = new Observable<IDetectedStep>();\r\n\r\n public update(posX: number, posY: number, forwardX: number, forwardY: number) {\r\n this._samples.push(posX, posY);\r\n const origin = this._samples.at(0);\r\n\r\n this._entropy *= this._entropyDecayFactor;\r\n this._entropy += Vector2.Distance(origin, this._samples.at(1));\r\n if (this._entropy > this._entropyThreshold) {\r\n return;\r\n }\r\n\r\n let samePointIdx;\r\n for (samePointIdx = this._samePointCheckStartIdx; samePointIdx < this._samples.length; ++samePointIdx) {\r\n if (Vector2.DistanceSquared(origin, this._samples.at(samePointIdx)) < this._samePointSquaredDistanceThreshold) {\r\n break;\r\n }\r\n }\r\n\r\n if (samePointIdx === this._samples.length) {\r\n return;\r\n }\r\n\r\n let apexDistSquared = -1;\r\n let apexIdx = 0;\r\n for (let distSquared, idx = 1; idx < samePointIdx; ++idx) {\r\n distSquared = Vector2.DistanceSquared(origin, this._samples.at(idx));\r\n if (distSquared > apexDistSquared) {\r\n apexIdx = idx;\r\n apexDistSquared = distSquared;\r\n }\r\n }\r\n\r\n if (apexDistSquared < this._apexSquaredDistanceThreshold) {\r\n return;\r\n }\r\n\r\n const apex = this._samples.at(apexIdx);\r\n const axis = apex.subtract(origin);\r\n axis.normalize();\r\n\r\n const vec = TmpVectors.Vector2[0];\r\n let dot;\r\n let sample;\r\n let sumSquaredProjectionDistances = 0;\r\n for (let idx = 1; idx < samePointIdx; ++idx) {\r\n sample = this._samples.at(idx);\r\n sample.subtractToRef(origin, vec);\r\n dot = Vector2.Dot(axis, vec);\r\n sumSquaredProjectionDistances += vec.lengthSquared() - dot * dot;\r\n }\r\n\r\n if (sumSquaredProjectionDistances > samePointIdx * this._squaredProjectionDistanceThreshold) {\r\n return;\r\n }\r\n\r\n const forwardVec = TmpVectors.Vector3[0];\r\n forwardVec.set(forwardX, forwardY, 0);\r\n const axisVec = TmpVectors.Vector3[1];\r\n axisVec.set(axis.x, axis.y, 0);\r\n const isApexLeft = Vector3.Cross(forwardVec, axisVec).z > 0;\r\n const leftApex = origin.clone();\r\n const rightApex = origin.clone();\r\n apex.subtractToRef(origin, axis);\r\n if (isApexLeft) {\r\n axis.scaleAndAddToRef(this._axisToApexShrinkFactor, leftApex);\r\n axis.scaleAndAddToRef(this._axisToApexExtendFactor, rightApex);\r\n } else {\r\n axis.scaleAndAddToRef(this._axisToApexExtendFactor, leftApex);\r\n axis.scaleAndAddToRef(this._axisToApexShrinkFactor, rightApex);\r\n }\r\n this.onFirstStepDetected.notifyObservers({\r\n leftApex: leftApex,\r\n rightApex: rightApex,\r\n currentPosition: origin,\r\n currentStepDirection: isApexLeft ? \"right\" : \"left\",\r\n });\r\n }\r\n\r\n public reset() {\r\n for (let idx = 0; idx < this._samples.length; ++idx) {\r\n this._samples.at(idx).copyFromFloats(0, 0);\r\n }\r\n }\r\n\r\n private get _samePointCheckStartIdx() {\r\n return Math.floor(this._samples.length / 3);\r\n }\r\n\r\n private get _samePointSquaredDistanceThreshold() {\r\n return 0.03 * 0.03;\r\n }\r\n\r\n private get _apexSquaredDistanceThreshold() {\r\n return 0.09 * 0.09;\r\n }\r\n\r\n private get _squaredProjectionDistanceThreshold() {\r\n return 0.03 * 0.03;\r\n }\r\n\r\n private get _axisToApexShrinkFactor() {\r\n return 0.8;\r\n }\r\n\r\n private get _axisToApexExtendFactor() {\r\n return -1.6;\r\n }\r\n\r\n private get _entropyDecayFactor() {\r\n return 0.93;\r\n }\r\n\r\n private get _entropyThreshold() {\r\n return 0.4;\r\n }\r\n}\r\n\r\nclass WalkingTracker {\r\n private _leftApex = new Vector2();\r\n private _rightApex = new Vector2();\r\n private _currentPosition = new Vector2();\r\n private _axis = new Vector2();\r\n private _axisLength = -1;\r\n private _forward = new Vector2();\r\n private _steppingLeft = false;\r\n private _t = -1;\r\n private _maxT = -1;\r\n private _maxTPosition = new Vector2();\r\n private _vitality = 0;\r\n\r\n public onMovement = new Observable<{ deltaT: number }>();\r\n public onFootfall = new Observable<{ foot: \"left\" | \"right\" }>();\r\n\r\n constructor(leftApex: Vector2, rightApex: Vector2, currentPosition: Vector2, currentStepDirection: \"left\" | \"right\") {\r\n this._reset(leftApex, rightApex, currentPosition, currentStepDirection === \"left\");\r\n }\r\n\r\n private _reset(leftApex: Vector2, rightApex: Vector2, currentPosition: Vector2, steppingLeft: boolean) {\r\n this._leftApex.copyFrom(leftApex);\r\n this._rightApex.copyFrom(rightApex);\r\n this._steppingLeft = steppingLeft;\r\n\r\n if (this._steppingLeft) {\r\n this._leftApex.subtractToRef(this._rightApex, this._axis);\r\n this._forward.copyFromFloats(-this._axis.y, this._axis.x);\r\n } else {\r\n this._rightApex.subtractToRef(this._leftApex, this._axis);\r\n this._forward.copyFromFloats(this._axis.y, -this._axis.x);\r\n }\r\n this._axisLength = this._axis.length();\r\n this._forward.scaleInPlace(1 / this._axisLength);\r\n\r\n this._updateTAndVitality(currentPosition.x, currentPosition.y);\r\n this._maxT = this._t;\r\n this._maxTPosition.copyFrom(currentPosition);\r\n\r\n this._vitality = 1;\r\n }\r\n\r\n private _updateTAndVitality(x: number, y: number) {\r\n this._currentPosition.copyFromFloats(x, y);\r\n\r\n if (this._steppingLeft) {\r\n this._currentPosition.subtractInPlace(this._rightApex);\r\n } else {\r\n this._currentPosition.subtractInPlace(this._leftApex);\r\n }\r\n const priorT = this._t;\r\n const dot = Vector2.Dot(this._currentPosition, this._axis);\r\n this._t = dot / (this._axisLength * this._axisLength);\r\n const projDistSquared = this._currentPosition.lengthSquared() - (dot / this._axisLength) * (dot / this._axisLength);\r\n\r\n // TODO: Extricate the magic.\r\n this._vitality *= 0.92 - 100 * Math.max(projDistSquared - 0.0016, 0) + Math.max(this._t - priorT, 0);\r\n }\r\n\r\n public update(x: number, y: number) {\r\n if (this._vitality < this._vitalityThreshold) {\r\n return false;\r\n }\r\n\r\n const priorT = this._t;\r\n this._updateTAndVitality(x, y);\r\n\r\n if (this._t > this._maxT) {\r\n this._maxT = this._t;\r\n this._maxTPosition.copyFromFloats(x, y);\r\n }\r\n\r\n if (this._vitality < this._vitalityThreshold) {\r\n return false;\r\n }\r\n\r\n if (this._t > priorT) {\r\n this.onMovement.notifyObservers({ deltaT: this._t - priorT });\r\n\r\n if (priorT < 0.5 && this._t >= 0.5) {\r\n this.onFootfall.notifyObservers({ foot: this._steppingLeft ? \"left\" : \"right\" });\r\n }\r\n }\r\n\r\n if (this._t < 0.95 * this._maxT) {\r\n this._currentPosition.copyFromFloats(x, y);\r\n if (this._steppingLeft) {\r\n this._leftApex.copyFrom(this._maxTPosition);\r\n } else {\r\n this._rightApex.copyFrom(this._maxTPosition);\r\n }\r\n this._reset(this._leftApex, this._rightApex, this._currentPosition, !this._steppingLeft);\r\n }\r\n\r\n if (this._axisLength < 0.03) {\r\n return false;\r\n }\r\n\r\n return true;\r\n }\r\n\r\n private get _vitalityThreshold() {\r\n return 0.1;\r\n }\r\n\r\n get forward() {\r\n return this._forward;\r\n }\r\n}\r\n\r\nclass Walker {\r\n private _engine: Engine;\r\n private _detector = new FirstStepDetector();\r\n private _walker: Nullable<WalkingTracker> = null;\r\n private _movement = new Vector2();\r\n private _millisecondsSinceLastUpdate: number = Walker._MillisecondsPerUpdate;\r\n\r\n private static get _MillisecondsPerUpdate(): number {\r\n // 15 FPS\r\n return 1000 / 15;\r\n }\r\n\r\n public movementThisFrame: Vector3 = Vector3.Zero();\r\n\r\n constructor(engine: Engine) {\r\n this._engine = engine;\r\n this._detector.onFirstStepDetected.add((event) => {\r\n if (!this._walker) {\r\n this._walker = new WalkingTracker(event.leftApex, event.rightApex, event.currentPosition, event.currentStepDirection);\r\n this._walker.onFootfall.add(() => {\r\n console.log(\"Footfall!\");\r\n });\r\n this._walker.onMovement.add((event) => {\r\n this._walker!.forward.scaleAndAddToRef(0.024 * event.deltaT, this._movement);\r\n });\r\n }\r\n });\r\n }\r\n\r\n public update(position: Vector3, forward: Vector3) {\r\n forward.y = 0;\r\n forward.normalize();\r\n\r\n // Enforce reduced framerate\r\n this._millisecondsSinceLastUpdate += this._engine.getDeltaTime();\r\n if (this._millisecondsSinceLastUpdate >= Walker._MillisecondsPerUpdate) {\r\n this._millisecondsSinceLastUpdate -= Walker._MillisecondsPerUpdate;\r\n this._detector.update(position.x, position.z, forward.x, forward.z);\r\n if (this._walker) {\r\n const updated = this._walker.update(position.x, position.z);\r\n if (!updated) {\r\n this._walker = null;\r\n }\r\n }\r\n this._movement.scaleInPlace(0.85);\r\n }\r\n\r\n this.movementThisFrame.set(this._movement.x, 0, this._movement.y);\r\n }\r\n}\r\n\r\n/**\r\n * Options for the walking locomotion feature.\r\n */\r\nexport interface IWebXRWalkingLocomotionOptions {\r\n /**\r\n * The target to be moved by walking locomotion. This should be the transform node\r\n * which is the root of the XR space (i.e., the WebXRCamera's parent node). However,\r\n * for simple cases and legacy purposes, articulating the WebXRCamera itself is also\r\n * supported as a deprecated feature.\r\n */\r\n locomotionTarget: WebXRCamera | TransformNode;\r\n}\r\n\r\n/**\r\n * A module that will enable VR locomotion by detecting when the user walks in place.\r\n */\r\nexport class WebXRWalkingLocomotion extends WebXRAbstractFeature {\r\n /**\r\n * The module's name.\r\n */\r\n public static get Name(): string {\r\n return WebXRFeatureName.WALKING_LOCOMOTION;\r\n }\r\n\r\n /**\r\n * The (Babylon) version of this module.\r\n * This is an integer representing the implementation version.\r\n * This number has no external basis.\r\n */\r\n public static get Version(): number {\r\n return 1;\r\n }\r\n\r\n private _sessionManager: WebXRSessionManager;\r\n private _up: Vector3 = new Vector3();\r\n private _forward: Vector3 = new Vector3();\r\n private _position: Vector3 = new Vector3();\r\n private _movement: Vector3 = new Vector3();\r\n private _walker: Nullable<Walker>;\r\n\r\n private _locomotionTarget: WebXRCamera | TransformNode;\r\n private _isLocomotionTargetWebXRCamera: boolean;\r\n\r\n /**\r\n * The target to be articulated by walking locomotion.\r\n * When the walking locomotion feature detects walking in place, this element's\r\n * X and Z coordinates will be modified to reflect locomotion. This target should\r\n * be either the XR space's origin (i.e., the parent node of the WebXRCamera) or\r\n * the WebXRCamera itself. Note that the WebXRCamera path will modify the position\r\n * of the WebXRCamera directly and is thus discouraged.\r\n */\r\n public get locomotionTarget(): WebXRCamera | TransformNode {\r\n return this._locomotionTarget;\r\n }\r\n\r\n /**\r\n * The target to be articulated by walking locomotion.\r\n * When the walking locomotion feature detects walking in place, this element's\r\n * X and Z coordinates will be modified to reflect locomotion. This target should\r\n * be either the XR space's origin (i.e., the parent node of the WebXRCamera) or\r\n * the WebXRCamera itself. Note that the WebXRCamera path will modify the position\r\n * of the WebXRCamera directly and is thus discouraged.\r\n */\r\n public set locomotionTarget(locomotionTarget: WebXRCamera | TransformNode) {\r\n this._locomotionTarget = locomotionTarget;\r\n this._isLocomotionTargetWebXRCamera = this._locomotionTarget.getClassName() === \"WebXRCamera\";\r\n }\r\n\r\n /**\r\n * Construct a new Walking Locomotion feature.\r\n * @param sessionManager manager for the current XR session\r\n * @param options creation options, prominently including the vector target for locomotion\r\n */\r\n public constructor(sessionManager: WebXRSessionManager, options: IWebXRWalkingLocomotionOptions) {\r\n super(sessionManager);\r\n this._sessionManager = sessionManager;\r\n this.locomotionTarget = options.locomotionTarget;\r\n if (this._isLocomotionTargetWebXRCamera) {\r\n Logger.Warn(\r\n \"Using walking locomotion directly on a WebXRCamera may have unintended interactions with other XR techniques. Using an XR space parent is highly recommended\"\r\n );\r\n }\r\n }\r\n\r\n /**\r\n * Checks whether this feature is compatible with the current WebXR session.\r\n * Walking locomotion is only compatible with \"immersive-vr\" sessions.\r\n * @returns true if compatible, false otherwise\r\n */\r\n public isCompatible(): boolean {\r\n return this._sessionManager.sessionMode === undefined || this._sessionManager.sessionMode === \"immersive-vr\";\r\n }\r\n\r\n /**\r\n * Attaches the feature.\r\n * Typically called automatically by the features manager.\r\n * @returns true if attach succeeded, false otherwise\r\n */\r\n public attach(): boolean {\r\n if (!this.isCompatible || !super.attach()) {\r\n return false;\r\n }\r\n\r\n this._walker = new Walker(this._sessionManager.scene.getEngine());\r\n return true;\r\n }\r\n\r\n /**\r\n * Detaches the feature.\r\n * Typically called automatically by the features manager.\r\n * @returns true if detach succeeded, false otherwise\r\n */\r\n public detach(): boolean {\r\n if (!super.detach()) {\r\n return false;\r\n }\r\n\r\n this._walker = null;\r\n return true;\r\n }\r\n\r\n protected _onXRFrame(frame: XRFrame): void {\r\n const pose = frame.getViewerPose(this._sessionManager.baseReferenceSpace);\r\n if (!pose) {\r\n return;\r\n }\r\n\r\n const handednessScalar = this.locomotionTarget.getScene().useRightHandedSystem ? 1 : -1;\r\n\r\n const m = pose.transform.matrix;\r\n this._up.copyFromFloats(m[4], m[5], handednessScalar * m[6]);\r\n this._forward.copyFromFloats(m[8], m[9], handednessScalar * m[10]);\r\n this._position.copyFromFloats(m[12], m[13], handednessScalar * m[14]);\r\n\r\n // Compute the nape position\r\n this._forward.scaleAndAddToRef(0.05, this._position);\r\n this._up.scaleAndAddToRef(-0.05, this._position);\r\n this._walker!.update(this._position, this._forward);\r\n this._movement.copyFrom(this._walker!.movementThisFrame);\r\n if (!this._isLocomotionTargetWebXRCamera) {\r\n Vector3.TransformNormalToRef(this._movement, this.locomotionTarget.getWorldMatrix(), this._movement);\r\n }\r\n this.locomotionTarget.position.addInPlace(this._movement);\r\n }\r\n}\r\n\r\n//register the plugin\r\nWebXRFeaturesManager.AddWebXRFeature(\r\n WebXRWalkingLocomotion.Name,\r\n (xrSessionManager, options) => {\r\n return () => new WebXRWalkingLocomotion(xrSessionManager, options);\r\n },\r\n WebXRWalkingLocomotion.Version,\r\n false\r\n);\r\n"]}
1
+ {"version":3,"file":"WebXRWalkingLocomotion.js","sourceRoot":"","sources":["../../../../../lts/core/generated/XR/features/WebXRWalkingLocomotion.ts"],"names":[],"mappings":"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","sourcesContent":["import type { Engine } from \"../../Engines/engine\";\r\nimport { TmpVectors, Vector2, Vector3 } from \"../../Maths/math.vector\";\r\nimport type { TransformNode } from \"../../Meshes/transformNode\";\r\nimport { Logger } from \"../../Misc/logger\";\r\nimport { Observable } from \"../../Misc/observable\";\r\nimport type { Nullable } from \"../../types\";\r\nimport type { WebXRCamera } from \"../webXRCamera\";\r\nimport { WebXRFeatureName, WebXRFeaturesManager } from \"../webXRFeaturesManager\";\r\nimport type { WebXRSessionManager } from \"../webXRSessionManager\";\r\nimport { WebXRAbstractFeature } from \"./WebXRAbstractFeature\";\r\n\r\nclass CircleBuffer {\r\n private _samples: Array<Vector2> = [];\r\n private _idx: number = 0;\r\n\r\n constructor(numSamples: number, initializer?: () => Vector2) {\r\n for (let idx = 0; idx < numSamples; ++idx) {\r\n this._samples.push(initializer ? initializer() : Vector2.Zero());\r\n }\r\n }\r\n\r\n public get length() {\r\n return this._samples.length;\r\n }\r\n\r\n public push(x: number, y: number) {\r\n this._idx = (this._idx + this._samples.length - 1) % this._samples.length;\r\n this.at(0).copyFromFloats(x, y);\r\n }\r\n\r\n public at(idx: number) {\r\n if (idx >= this._samples.length) {\r\n throw new Error(\"Index out of bounds\");\r\n }\r\n return this._samples[(this._idx + idx) % this._samples.length];\r\n }\r\n}\r\n\r\ninterface IDetectedStep {\r\n leftApex: Vector2;\r\n rightApex: Vector2;\r\n currentPosition: Vector2;\r\n currentStepDirection: \"left\" | \"right\";\r\n}\r\n\r\nclass FirstStepDetector {\r\n private _samples = new CircleBuffer(20);\r\n private _entropy = 0;\r\n\r\n public onFirstStepDetected: Observable<IDetectedStep> = new Observable<IDetectedStep>();\r\n\r\n public update(posX: number, posY: number, forwardX: number, forwardY: number) {\r\n this._samples.push(posX, posY);\r\n const origin = this._samples.at(0);\r\n\r\n this._entropy *= this._entropyDecayFactor;\r\n this._entropy += Vector2.Distance(origin, this._samples.at(1));\r\n if (this._entropy > this._entropyThreshold) {\r\n return;\r\n }\r\n\r\n let samePointIdx;\r\n for (samePointIdx = this._samePointCheckStartIdx; samePointIdx < this._samples.length; ++samePointIdx) {\r\n if (Vector2.DistanceSquared(origin, this._samples.at(samePointIdx)) < this._samePointSquaredDistanceThreshold) {\r\n break;\r\n }\r\n }\r\n\r\n if (samePointIdx === this._samples.length) {\r\n return;\r\n }\r\n\r\n let apexDistSquared = -1;\r\n let apexIdx = 0;\r\n for (let distSquared, idx = 1; idx < samePointIdx; ++idx) {\r\n distSquared = Vector2.DistanceSquared(origin, this._samples.at(idx));\r\n if (distSquared > apexDistSquared) {\r\n apexIdx = idx;\r\n apexDistSquared = distSquared;\r\n }\r\n }\r\n\r\n if (apexDistSquared < this._apexSquaredDistanceThreshold) {\r\n return;\r\n }\r\n\r\n const apex = this._samples.at(apexIdx);\r\n const axis = apex.subtract(origin);\r\n axis.normalize();\r\n\r\n const vec = TmpVectors.Vector2[0];\r\n let dot;\r\n let sample;\r\n let sumSquaredProjectionDistances = 0;\r\n for (let idx = 1; idx < samePointIdx; ++idx) {\r\n sample = this._samples.at(idx);\r\n sample.subtractToRef(origin, vec);\r\n dot = Vector2.Dot(axis, vec);\r\n sumSquaredProjectionDistances += vec.lengthSquared() - dot * dot;\r\n }\r\n\r\n if (sumSquaredProjectionDistances > samePointIdx * this._squaredProjectionDistanceThreshold) {\r\n return;\r\n }\r\n\r\n const forwardVec = TmpVectors.Vector3[0];\r\n forwardVec.set(forwardX, forwardY, 0);\r\n const axisVec = TmpVectors.Vector3[1];\r\n axisVec.set(axis.x, axis.y, 0);\r\n const isApexLeft = Vector3.Cross(forwardVec, axisVec).z > 0;\r\n const leftApex = origin.clone();\r\n const rightApex = origin.clone();\r\n apex.subtractToRef(origin, axis);\r\n if (isApexLeft) {\r\n axis.scaleAndAddToRef(this._axisToApexShrinkFactor, leftApex);\r\n axis.scaleAndAddToRef(this._axisToApexExtendFactor, rightApex);\r\n } else {\r\n axis.scaleAndAddToRef(this._axisToApexExtendFactor, leftApex);\r\n axis.scaleAndAddToRef(this._axisToApexShrinkFactor, rightApex);\r\n }\r\n this.onFirstStepDetected.notifyObservers({\r\n leftApex: leftApex,\r\n rightApex: rightApex,\r\n currentPosition: origin,\r\n currentStepDirection: isApexLeft ? \"right\" : \"left\",\r\n });\r\n }\r\n\r\n public reset() {\r\n for (let idx = 0; idx < this._samples.length; ++idx) {\r\n this._samples.at(idx).copyFromFloats(0, 0);\r\n }\r\n }\r\n\r\n private get _samePointCheckStartIdx() {\r\n return Math.floor(this._samples.length / 3);\r\n }\r\n\r\n private get _samePointSquaredDistanceThreshold() {\r\n return 0.03 * 0.03;\r\n }\r\n\r\n private get _apexSquaredDistanceThreshold() {\r\n return 0.09 * 0.09;\r\n }\r\n\r\n private get _squaredProjectionDistanceThreshold() {\r\n return 0.03 * 0.03;\r\n }\r\n\r\n private get _axisToApexShrinkFactor() {\r\n return 0.8;\r\n }\r\n\r\n private get _axisToApexExtendFactor() {\r\n return -1.6;\r\n }\r\n\r\n private get _entropyDecayFactor() {\r\n return 0.93;\r\n }\r\n\r\n private get _entropyThreshold() {\r\n return 0.4;\r\n }\r\n}\r\n\r\nclass WalkingTracker {\r\n private _leftApex = new Vector2();\r\n private _rightApex = new Vector2();\r\n private _currentPosition = new Vector2();\r\n private _axis = new Vector2();\r\n private _axisLength = -1;\r\n private _forward = new Vector2();\r\n private _steppingLeft = false;\r\n private _t = -1;\r\n private _maxT = -1;\r\n private _maxTPosition = new Vector2();\r\n private _vitality = 0;\r\n\r\n public onMovement = new Observable<{ deltaT: number }>();\r\n public onFootfall = new Observable<{ foot: \"left\" | \"right\" }>();\r\n\r\n constructor(leftApex: Vector2, rightApex: Vector2, currentPosition: Vector2, currentStepDirection: \"left\" | \"right\") {\r\n this._reset(leftApex, rightApex, currentPosition, currentStepDirection === \"left\");\r\n }\r\n\r\n private _reset(leftApex: Vector2, rightApex: Vector2, currentPosition: Vector2, steppingLeft: boolean) {\r\n this._leftApex.copyFrom(leftApex);\r\n this._rightApex.copyFrom(rightApex);\r\n this._steppingLeft = steppingLeft;\r\n\r\n if (this._steppingLeft) {\r\n this._leftApex.subtractToRef(this._rightApex, this._axis);\r\n this._forward.copyFromFloats(-this._axis.y, this._axis.x);\r\n } else {\r\n this._rightApex.subtractToRef(this._leftApex, this._axis);\r\n this._forward.copyFromFloats(this._axis.y, -this._axis.x);\r\n }\r\n this._axisLength = this._axis.length();\r\n this._forward.scaleInPlace(1 / this._axisLength);\r\n\r\n this._updateTAndVitality(currentPosition.x, currentPosition.y);\r\n this._maxT = this._t;\r\n this._maxTPosition.copyFrom(currentPosition);\r\n\r\n this._vitality = 1;\r\n }\r\n\r\n private _updateTAndVitality(x: number, y: number) {\r\n this._currentPosition.copyFromFloats(x, y);\r\n\r\n if (this._steppingLeft) {\r\n this._currentPosition.subtractInPlace(this._rightApex);\r\n } else {\r\n this._currentPosition.subtractInPlace(this._leftApex);\r\n }\r\n const priorT = this._t;\r\n const dot = Vector2.Dot(this._currentPosition, this._axis);\r\n this._t = dot / (this._axisLength * this._axisLength);\r\n const projDistSquared = this._currentPosition.lengthSquared() - (dot / this._axisLength) * (dot / this._axisLength);\r\n\r\n // TODO: Extricate the magic.\r\n this._vitality *= 0.92 - 100 * Math.max(projDistSquared - 0.0016, 0) + Math.max(this._t - priorT, 0);\r\n }\r\n\r\n public update(x: number, y: number) {\r\n if (this._vitality < this._vitalityThreshold) {\r\n return false;\r\n }\r\n\r\n const priorT = this._t;\r\n this._updateTAndVitality(x, y);\r\n\r\n if (this._t > this._maxT) {\r\n this._maxT = this._t;\r\n this._maxTPosition.copyFromFloats(x, y);\r\n }\r\n\r\n if (this._vitality < this._vitalityThreshold) {\r\n return false;\r\n }\r\n\r\n if (this._t > priorT) {\r\n this.onMovement.notifyObservers({ deltaT: this._t - priorT });\r\n\r\n if (priorT < 0.5 && this._t >= 0.5) {\r\n this.onFootfall.notifyObservers({ foot: this._steppingLeft ? \"left\" : \"right\" });\r\n }\r\n }\r\n\r\n if (this._t < 0.95 * this._maxT) {\r\n this._currentPosition.copyFromFloats(x, y);\r\n if (this._steppingLeft) {\r\n this._leftApex.copyFrom(this._maxTPosition);\r\n } else {\r\n this._rightApex.copyFrom(this._maxTPosition);\r\n }\r\n this._reset(this._leftApex, this._rightApex, this._currentPosition, !this._steppingLeft);\r\n }\r\n\r\n if (this._axisLength < 0.03) {\r\n return false;\r\n }\r\n\r\n return true;\r\n }\r\n\r\n private get _vitalityThreshold() {\r\n return 0.1;\r\n }\r\n\r\n get forward() {\r\n return this._forward;\r\n }\r\n}\r\n\r\nclass Walker {\r\n private _engine: Engine;\r\n private _detector = new FirstStepDetector();\r\n private _walker: Nullable<WalkingTracker> = null;\r\n private _movement = new Vector2();\r\n private _millisecondsSinceLastUpdate: number = Walker._MillisecondsPerUpdate;\r\n\r\n private static get _MillisecondsPerUpdate(): number {\r\n // 15 FPS\r\n return 1000 / 15;\r\n }\r\n\r\n public movementThisFrame: Vector3 = Vector3.Zero();\r\n\r\n constructor(engine: Engine) {\r\n this._engine = engine;\r\n this._detector.onFirstStepDetected.add((event) => {\r\n if (!this._walker) {\r\n this._walker = new WalkingTracker(event.leftApex, event.rightApex, event.currentPosition, event.currentStepDirection);\r\n this._walker.onFootfall.add(() => {\r\n console.log(\"Footfall!\");\r\n });\r\n this._walker.onMovement.add((event) => {\r\n this._walker!.forward.scaleAndAddToRef(0.024 * event.deltaT, this._movement);\r\n });\r\n }\r\n });\r\n }\r\n\r\n public update(position: Vector3, forward: Vector3) {\r\n forward.y = 0;\r\n forward.normalize();\r\n\r\n // Enforce reduced framerate\r\n this._millisecondsSinceLastUpdate += this._engine.getDeltaTime();\r\n if (this._millisecondsSinceLastUpdate >= Walker._MillisecondsPerUpdate) {\r\n this._millisecondsSinceLastUpdate -= Walker._MillisecondsPerUpdate;\r\n this._detector.update(position.x, position.z, forward.x, forward.z);\r\n if (this._walker) {\r\n const updated = this._walker.update(position.x, position.z);\r\n if (!updated) {\r\n this._walker = null;\r\n }\r\n }\r\n this._movement.scaleInPlace(0.85);\r\n }\r\n\r\n this.movementThisFrame.set(this._movement.x, 0, this._movement.y);\r\n }\r\n}\r\n\r\n/**\r\n * Options for the walking locomotion feature.\r\n */\r\nexport interface IWebXRWalkingLocomotionOptions {\r\n /**\r\n * The target to be moved by walking locomotion. This should be the transform node\r\n * which is the root of the XR space (i.e., the WebXRCamera's parent node). However,\r\n * for simple cases and legacy purposes, articulating the WebXRCamera itself is also\r\n * supported as a deprecated feature.\r\n */\r\n locomotionTarget: WebXRCamera | TransformNode;\r\n}\r\n\r\n/**\r\n * A module that will enable VR locomotion by detecting when the user walks in place.\r\n */\r\nexport class WebXRWalkingLocomotion extends WebXRAbstractFeature {\r\n /**\r\n * The module's name.\r\n */\r\n public static get Name(): string {\r\n return WebXRFeatureName.WALKING_LOCOMOTION;\r\n }\r\n\r\n /**\r\n * The (Babylon) version of this module.\r\n * This is an integer representing the implementation version.\r\n * This number has no external basis.\r\n */\r\n public static get Version(): number {\r\n return 1;\r\n }\r\n\r\n private _sessionManager: WebXRSessionManager;\r\n private _up: Vector3 = new Vector3();\r\n private _forward: Vector3 = new Vector3();\r\n private _position: Vector3 = new Vector3();\r\n private _movement: Vector3 = new Vector3();\r\n private _walker: Nullable<Walker>;\r\n\r\n private _locomotionTarget: WebXRCamera | TransformNode;\r\n private _isLocomotionTargetWebXRCamera: boolean;\r\n\r\n /**\r\n * The target to be articulated by walking locomotion.\r\n * When the walking locomotion feature detects walking in place, this element's\r\n * X and Z coordinates will be modified to reflect locomotion. This target should\r\n * be either the XR space's origin (i.e., the parent node of the WebXRCamera) or\r\n * the WebXRCamera itself. Note that the WebXRCamera path will modify the position\r\n * of the WebXRCamera directly and is thus discouraged.\r\n */\r\n public get locomotionTarget(): WebXRCamera | TransformNode {\r\n return this._locomotionTarget;\r\n }\r\n\r\n /**\r\n * The target to be articulated by walking locomotion.\r\n * When the walking locomotion feature detects walking in place, this element's\r\n * X and Z coordinates will be modified to reflect locomotion. This target should\r\n * be either the XR space's origin (i.e., the parent node of the WebXRCamera) or\r\n * the WebXRCamera itself. Note that the WebXRCamera path will modify the position\r\n * of the WebXRCamera directly and is thus discouraged.\r\n */\r\n public set locomotionTarget(locomotionTarget: WebXRCamera | TransformNode) {\r\n this._locomotionTarget = locomotionTarget;\r\n this._isLocomotionTargetWebXRCamera = this._locomotionTarget.getClassName() === \"WebXRCamera\";\r\n }\r\n\r\n /**\r\n * Construct a new Walking Locomotion feature.\r\n * @param sessionManager manager for the current XR session\r\n * @param options creation options, prominently including the vector target for locomotion\r\n */\r\n public constructor(sessionManager: WebXRSessionManager, options: IWebXRWalkingLocomotionOptions) {\r\n super(sessionManager);\r\n this._sessionManager = sessionManager;\r\n this.locomotionTarget = options.locomotionTarget;\r\n if (this._isLocomotionTargetWebXRCamera) {\r\n Logger.Warn(\r\n \"Using walking locomotion directly on a WebXRCamera may have unintended interactions with other XR techniques. Using an XR space parent is highly recommended\"\r\n );\r\n }\r\n }\r\n\r\n /**\r\n * Checks whether this feature is compatible with the current WebXR session.\r\n * Walking locomotion is only compatible with \"immersive-vr\" sessions.\r\n * @returns true if compatible, false otherwise\r\n */\r\n public isCompatible(): boolean {\r\n return this._sessionManager.sessionMode === undefined || this._sessionManager.sessionMode === \"immersive-vr\";\r\n }\r\n\r\n /**\r\n * Attaches the feature.\r\n * Typically called automatically by the features manager.\r\n * @returns true if attach succeeded, false otherwise\r\n */\r\n public attach(): boolean {\r\n if (!this.isCompatible || !super.attach()) {\r\n return false;\r\n }\r\n\r\n this._walker = new Walker(this._sessionManager.scene.getEngine());\r\n return true;\r\n }\r\n\r\n /**\r\n * Detaches the feature.\r\n * Typically called automatically by the features manager.\r\n * @returns true if detach succeeded, false otherwise\r\n */\r\n public detach(): boolean {\r\n if (!super.detach()) {\r\n return false;\r\n }\r\n\r\n this._walker = null;\r\n return true;\r\n }\r\n\r\n protected _onXRFrame(frame: XRFrame): void {\r\n const pose = frame.getViewerPose(this._sessionManager.baseReferenceSpace);\r\n if (!pose) {\r\n return;\r\n }\r\n\r\n const handednessScalar = this.locomotionTarget.getScene().useRightHandedSystem ? 1 : -1;\r\n\r\n const m = pose.transform.matrix;\r\n this._up.copyFromFloats(m[4], m[5], handednessScalar * m[6]);\r\n this._forward.copyFromFloats(m[8], m[9], handednessScalar * m[10]);\r\n this._position.copyFromFloats(m[12], m[13], handednessScalar * m[14]);\r\n\r\n // Compute the nape position\r\n this._forward.scaleAndAddToRef(0.05, this._position);\r\n this._up.scaleAndAddToRef(-0.05, this._position);\r\n this._walker!.update(this._position, this._forward);\r\n this._movement.copyFrom(this._walker!.movementThisFrame);\r\n if (!this._isLocomotionTargetWebXRCamera) {\r\n Vector3.TransformNormalToRef(this._movement, this.locomotionTarget.getWorldMatrix(), this._movement);\r\n }\r\n this.locomotionTarget.position.addInPlace(this._movement);\r\n }\r\n}\r\n\r\n//register the plugin\r\nWebXRFeaturesManager.AddWebXRFeature(\r\n WebXRWalkingLocomotion.Name,\r\n (xrSessionManager, options) => {\r\n return () => new WebXRWalkingLocomotion(xrSessionManager, options);\r\n },\r\n WebXRWalkingLocomotion.Version,\r\n false\r\n);\r\n"]}
@@ -6,16 +6,16 @@ import type { Nullable } from "../../types";
6
6
  /**
7
7
  * Handedness type in xrInput profiles. These can be used to define layouts in the Layout Map.
8
8
  */
9
- export declare type MotionControllerHandedness = "none" | "left" | "right";
9
+ export type MotionControllerHandedness = "none" | "left" | "right";
10
10
  /**
11
11
  * The type of components available in motion controllers.
12
12
  * This is not the name of the component.
13
13
  */
14
- export declare type MotionControllerComponentType = "trigger" | "squeeze" | "touchpad" | "thumbstick" | "button";
14
+ export type MotionControllerComponentType = "trigger" | "squeeze" | "touchpad" | "thumbstick" | "button";
15
15
  /**
16
16
  * The state of a controller component
17
17
  */
18
- export declare type MotionControllerComponentStateType = "default" | "touched" | "pressed";
18
+ export type MotionControllerComponentStateType = "default" | "touched" | "pressed";
19
19
  /**
20
20
  * The schema of motion controller layout.
21
21
  * No object will be initialized using this interface
@@ -3,7 +3,7 @@ import type { Scene } from "../../scene";
3
3
  /**
4
4
  * A construction function type to create a new controller based on an xrInput object
5
5
  */
6
- export declare type MotionControllerConstructor = (xrInput: XRInputSource, scene: Scene) => WebXRAbstractMotionController;
6
+ export type MotionControllerConstructor = (xrInput: XRInputSource, scene: Scene) => WebXRAbstractMotionController;
7
7
  /**
8
8
  * Motion controller manager is managing the different webxr profiles and makes sure the right
9
9
  * controller is being loaded.
@@ -1,6 +1,9 @@
1
1
  import { RegisterNativeTypeAsync } from "../../Engines/nativeEngine.js";
2
2
  /** @internal */
3
3
  export class NativeXRFrame {
4
+ get session() {
5
+ return this._nativeImpl.session;
6
+ }
4
7
  constructor(_nativeImpl) {
5
8
  this._nativeImpl = _nativeImpl;
6
9
  this._xrTransform = new XRRigidTransform();
@@ -27,9 +30,6 @@ export class NativeXRFrame {
27
30
  return (_a = this._nativeImpl._imageTrackingResults) !== null && _a !== void 0 ? _a : [];
28
31
  };
29
32
  }
30
- get session() {
31
- return this._nativeImpl.session;
32
- }
33
33
  getPose(space, baseSpace) {
34
34
  if (!this._nativeImpl.getPoseData(space, baseSpace, this._xrPoseVectorData.buffer, this._xrTransform.matrix.buffer)) {
35
35
  return undefined;
@@ -1 +1 @@
1
- {"version":3,"file":"nativeXRFrame.js","sourceRoot":"","sources":["../../../../../lts/core/generated/XR/native/nativeXRFrame.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,uBAAuB,EAAE,MAAM,4BAA4B,CAAC;AASrE,gBAAgB;AAChB,MAAM,OAAO,aAAa;IAatB,YAAoB,WAA2B;QAA3B,gBAAW,GAAX,WAAW,CAAgB;QAZ9B,iBAAY,GAAG,IAAI,gBAAgB,EAAE,CAAC;QACtC,YAAO,GAAW;YAC/B,SAAS,EAAE,IAAI,CAAC,YAAY;YAC5B,gBAAgB,EAAE,KAAK;SAC1B,CAAC;QACF,yCAAyC;QACxB,sBAAiB,GAAG,IAAI,YAAY,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;QA0B7C,cAAS,GAAG,IAAI,CAAC,WAAW,CAAC,SAAU,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;QAE/D,kBAAa,GAAG,IAAI,CAAC,WAAW,CAAC,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;QAEtE,sBAAiB,GAAG,IAAI,CAAC,WAAW,CAAC,iBAAiB,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;QAE9E,uCAAkC,GAAG,GAAG,EAAE;YACtD,MAAM,IAAI,KAAK,CAAC,qEAAqE,CAAC,CAAC;QAC3F,CAAC,CAAC;QAMc,iBAAY,GAAG,IAAI,CAAC,WAAW,CAAC,YAAa,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;QAUrE,iBAAY,GAAG,IAAI,CAAC,WAAW,CAAC,YAAa,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;QAErE,mBAAc,GAAG,IAAI,CAAC,WAAW,CAAC,cAAe,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;QAEzE,qBAAgB,GAAG,GAAG,EAAE;YACpC,MAAM,IAAI,KAAK,CAAC,mDAAmD,CAAC,CAAC;QACzE,CAAC,CAAC;QAMc,4BAAuB,GAAG,GAA4B,EAAE;;YACpE,OAAO,MAAA,IAAI,CAAC,WAAW,CAAC,qBAAqB,mCAAI,EAAE,CAAC;QACxD,CAAC,CAAC;IA1DgD,CAAC;IAJnD,IAAW,OAAO;QACd,OAAO,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC;IACpC,CAAC;IAIM,OAAO,CAAC,KAAc,EAAE,SAA2B;QACtD,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,WAAW,CAAC,KAAK,EAAE,SAAS,EAAE,IAAI,CAAC,iBAAiB,CAAC,MAAM,EAAE,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE;YACjH,OAAO,SAAS,CAAC;SACpB;QACD,MAAM,QAAQ,GAAG,IAAI,CAAC,YAAY,CAAC,QAAoB,CAAC;QACxD,QAAQ,CAAC,CAAC,GAAG,IAAI,CAAC,iBAAiB,CAAC,CAAC,CAAC,CAAC;QACvC,QAAQ,CAAC,CAAC,GAAG,IAAI,CAAC,iBAAiB,CAAC,CAAC,CAAC,CAAC;QACvC,QAAQ,CAAC,CAAC,GAAG,IAAI,CAAC,iBAAiB,CAAC,CAAC,CAAC,CAAC;QACvC,QAAQ,CAAC,CAAC,GAAG,IAAI,CAAC,iBAAiB,CAAC,CAAC,CAAC,CAAC;QAEvC,MAAM,WAAW,GAAG,IAAI,CAAC,YAAY,CAAC,WAAuB,CAAC;QAC9D,WAAW,CAAC,CAAC,GAAG,IAAI,CAAC,iBAAiB,CAAC,CAAC,CAAC,CAAC;QAC1C,WAAW,CAAC,CAAC,GAAG,IAAI,CAAC,iBAAiB,CAAC,CAAC,CAAC,CAAC;QAC1C,WAAW,CAAC,CAAC,GAAG,IAAI,CAAC,iBAAiB,CAAC,CAAC,CAAC,CAAC;QAC1C,WAAW,CAAC,CAAC,GAAG,IAAI,CAAC,iBAAiB,CAAC,CAAC,CAAC,CAAC;QAC1C,OAAO,IAAI,CAAC,OAAO,CAAC;IACxB,CAAC;IAYD,IAAW,cAAc;QACrB,OAAO,IAAI,CAAC,WAAW,CAAC,cAAc,CAAC;IAC3C,CAAC;IAID,IAAW,gBAAgB;QACvB,OAAO,IAAI,CAAC,WAAW,CAAC,gBAAgB,CAAC;IAC7C,CAAC;IAED,IAAW,cAAc;QACrB,OAAO,IAAI,CAAC,WAAW,CAAC,cAAc,CAAC;IAC3C,CAAC;IAUD,IAAW,iBAAiB;QACxB,OAAO,IAAI,CAAC,WAAW,CAAC,iBAAiB,CAAC;IAC9C,CAAC;CAKJ;AAED,uBAAuB,CAAC,eAAe,EAAE,aAAa,CAAC,CAAC","sourcesContent":["import { RegisterNativeTypeAsync } from \"../../Engines/nativeEngine\";\r\n\r\n/** @internal */\r\ninterface INativeXRFrame extends XRFrame {\r\n // Native-only helper functions\r\n getPoseData: (space: XRSpace, baseSpace: XRReferenceSpace, vectorBuffer: ArrayBuffer, matrixBuffer: ArrayBuffer) => XRPose;\r\n _imageTrackingResults?: XRImageTrackingResult[];\r\n}\r\n\r\n/** @internal */\r\nexport class NativeXRFrame implements XRFrame {\r\n private readonly _xrTransform = new XRRigidTransform();\r\n private readonly _xrPose: XRPose = {\r\n transform: this._xrTransform,\r\n emulatedPosition: false,\r\n };\r\n // Enough space for position, orientation\r\n private readonly _xrPoseVectorData = new Float32Array(4 + 4);\r\n\r\n public get session(): XRSession {\r\n return this._nativeImpl.session;\r\n }\r\n\r\n constructor(private _nativeImpl: INativeXRFrame) {}\r\n\r\n public getPose(space: XRSpace, baseSpace: XRReferenceSpace): XRPose | undefined {\r\n if (!this._nativeImpl.getPoseData(space, baseSpace, this._xrPoseVectorData.buffer, this._xrTransform.matrix.buffer)) {\r\n return undefined;\r\n }\r\n const position = this._xrTransform.position as DOMPoint;\r\n position.x = this._xrPoseVectorData[0];\r\n position.y = this._xrPoseVectorData[1];\r\n position.z = this._xrPoseVectorData[2];\r\n position.w = this._xrPoseVectorData[3];\r\n\r\n const orientation = this._xrTransform.orientation as DOMPoint;\r\n orientation.x = this._xrPoseVectorData[4];\r\n orientation.y = this._xrPoseVectorData[5];\r\n orientation.z = this._xrPoseVectorData[6];\r\n orientation.w = this._xrPoseVectorData[7];\r\n return this._xrPose;\r\n }\r\n\r\n public readonly fillPoses = this._nativeImpl.fillPoses!.bind(this._nativeImpl);\r\n\r\n public readonly getViewerPose = this._nativeImpl.getViewerPose.bind(this._nativeImpl);\r\n\r\n public readonly getHitTestResults = this._nativeImpl.getHitTestResults.bind(this._nativeImpl);\r\n\r\n public readonly getHitTestResultsForTransientInput = () => {\r\n throw new Error(\"XRFrame.getHitTestResultsForTransientInput not supported on native.\");\r\n };\r\n\r\n public get trackedAnchors(): XRAnchorSet | undefined {\r\n return this._nativeImpl.trackedAnchors;\r\n }\r\n\r\n public readonly createAnchor = this._nativeImpl.createAnchor!.bind(this._nativeImpl);\r\n\r\n public get worldInformation(): XRWorldInformation | undefined {\r\n return this._nativeImpl.worldInformation;\r\n }\r\n\r\n public get detectedPlanes(): XRPlaneSet | undefined {\r\n return this._nativeImpl.detectedPlanes;\r\n }\r\n\r\n public readonly getJointPose = this._nativeImpl.getJointPose!.bind(this._nativeImpl);\r\n\r\n public readonly fillJointRadii = this._nativeImpl.fillJointRadii!.bind(this._nativeImpl);\r\n\r\n public readonly getLightEstimate = () => {\r\n throw new Error(\"XRFrame.getLightEstimate not supported on native.\");\r\n };\r\n\r\n public get featurePointCloud(): number[] | undefined {\r\n return this._nativeImpl.featurePointCloud;\r\n }\r\n\r\n public readonly getImageTrackingResults = (): XRImageTrackingResult[] => {\r\n return this._nativeImpl._imageTrackingResults ?? [];\r\n };\r\n}\r\n\r\nRegisterNativeTypeAsync(\"NativeXRFrame\", NativeXRFrame);\r\n"]}
1
+ {"version":3,"file":"nativeXRFrame.js","sourceRoot":"","sources":["../../../../../lts/core/generated/XR/native/nativeXRFrame.ts"],"names":[],"mappings":"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","sourcesContent":["import { RegisterNativeTypeAsync } from \"../../Engines/nativeEngine\";\r\n\r\n/** @internal */\r\ninterface INativeXRFrame extends XRFrame {\r\n // Native-only helper functions\r\n getPoseData: (space: XRSpace, baseSpace: XRReferenceSpace, vectorBuffer: ArrayBuffer, matrixBuffer: ArrayBuffer) => XRPose;\r\n _imageTrackingResults?: XRImageTrackingResult[];\r\n}\r\n\r\n/** @internal */\r\nexport class NativeXRFrame implements XRFrame {\r\n private readonly _xrTransform = new XRRigidTransform();\r\n private readonly _xrPose: XRPose = {\r\n transform: this._xrTransform,\r\n emulatedPosition: false,\r\n };\r\n // Enough space for position, orientation\r\n private readonly _xrPoseVectorData = new Float32Array(4 + 4);\r\n\r\n public get session(): XRSession {\r\n return this._nativeImpl.session;\r\n }\r\n\r\n constructor(private _nativeImpl: INativeXRFrame) {}\r\n\r\n public getPose(space: XRSpace, baseSpace: XRReferenceSpace): XRPose | undefined {\r\n if (!this._nativeImpl.getPoseData(space, baseSpace, this._xrPoseVectorData.buffer, this._xrTransform.matrix.buffer)) {\r\n return undefined;\r\n }\r\n const position = this._xrTransform.position as DOMPoint;\r\n position.x = this._xrPoseVectorData[0];\r\n position.y = this._xrPoseVectorData[1];\r\n position.z = this._xrPoseVectorData[2];\r\n position.w = this._xrPoseVectorData[3];\r\n\r\n const orientation = this._xrTransform.orientation as DOMPoint;\r\n orientation.x = this._xrPoseVectorData[4];\r\n orientation.y = this._xrPoseVectorData[5];\r\n orientation.z = this._xrPoseVectorData[6];\r\n orientation.w = this._xrPoseVectorData[7];\r\n return this._xrPose;\r\n }\r\n\r\n public readonly fillPoses = this._nativeImpl.fillPoses!.bind(this._nativeImpl);\r\n\r\n public readonly getViewerPose = this._nativeImpl.getViewerPose.bind(this._nativeImpl);\r\n\r\n public readonly getHitTestResults = this._nativeImpl.getHitTestResults.bind(this._nativeImpl);\r\n\r\n public readonly getHitTestResultsForTransientInput = () => {\r\n throw new Error(\"XRFrame.getHitTestResultsForTransientInput not supported on native.\");\r\n };\r\n\r\n public get trackedAnchors(): XRAnchorSet | undefined {\r\n return this._nativeImpl.trackedAnchors;\r\n }\r\n\r\n public readonly createAnchor = this._nativeImpl.createAnchor!.bind(this._nativeImpl);\r\n\r\n public get worldInformation(): XRWorldInformation | undefined {\r\n return this._nativeImpl.worldInformation;\r\n }\r\n\r\n public get detectedPlanes(): XRPlaneSet | undefined {\r\n return this._nativeImpl.detectedPlanes;\r\n }\r\n\r\n public readonly getJointPose = this._nativeImpl.getJointPose!.bind(this._nativeImpl);\r\n\r\n public readonly fillJointRadii = this._nativeImpl.fillJointRadii!.bind(this._nativeImpl);\r\n\r\n public readonly getLightEstimate = () => {\r\n throw new Error(\"XRFrame.getLightEstimate not supported on native.\");\r\n };\r\n\r\n public get featurePointCloud(): number[] | undefined {\r\n return this._nativeImpl.featurePointCloud;\r\n }\r\n\r\n public readonly getImageTrackingResults = (): XRImageTrackingResult[] => {\r\n return this._nativeImpl._imageTrackingResults ?? [];\r\n };\r\n}\r\n\r\nRegisterNativeTypeAsync(\"NativeXRFrame\", NativeXRFrame);\r\n"]}
@@ -131,7 +131,7 @@ export declare class WebXRFeatureName {
131
131
  /**
132
132
  * Defining the constructor of a feature. Used to register the modules.
133
133
  */
134
- export declare type WebXRFeatureConstructor = (xrSessionManager: WebXRSessionManager, options?: any) => () => IWebXRFeature;
134
+ export type WebXRFeatureConstructor = (xrSessionManager: WebXRSessionManager, options?: any) => () => IWebXRFeature;
135
135
  /**
136
136
  * The WebXR features manager is responsible of enabling or disabling features required for the current XR session.
137
137
  * It is mainly used in AR sessions.
@@ -2,9 +2,9 @@ import type { Nullable } from "../types";
2
2
  import type { WebXRLayerRenderTargetTextureProvider } from "./webXRRenderTargetTextureProvider";
3
3
  import type { WebXRSessionManager } from "./webXRSessionManager";
4
4
  /** Covers all supported subclasses of WebXR's XRCompositionLayer */
5
- export declare type WebXRCompositionLayerType = "XRProjectionLayer";
5
+ export type WebXRCompositionLayerType = "XRProjectionLayer";
6
6
  /** Covers all supported subclasses of WebXR's XRLayer */
7
- export declare type WebXRLayerType = "XRWebGLLayer" | WebXRCompositionLayerType;
7
+ export type WebXRLayerType = "XRWebGLLayer" | WebXRCompositionLayerType;
8
8
  /**
9
9
  * Wrapper over subclasses of XRLayer.
10
10
  * @internal
@@ -3,23 +3,6 @@
3
3
  * @internal
4
4
  */
5
5
  export class WebXRLayerWrapper {
6
- constructor(
7
- /** The width of the layer's framebuffer. */
8
- getWidth,
9
- /** The height of the layer's framebuffer. */
10
- getHeight,
11
- /** The XR layer that this WebXRLayerWrapper wraps. */
12
- layer,
13
- /** The type of XR layer that is being wrapped. */
14
- layerType,
15
- /** Create a render target provider for the wrapped layer. */
16
- createRenderTargetTextureProvider) {
17
- this.getWidth = getWidth;
18
- this.getHeight = getHeight;
19
- this.layer = layer;
20
- this.layerType = layerType;
21
- this.createRenderTargetTextureProvider = createRenderTargetTextureProvider;
22
- }
23
6
  /**
24
7
  * Check if fixed foveation is supported on this device
25
8
  */
@@ -46,5 +29,22 @@ export class WebXRLayerWrapper {
46
29
  this.layer.fixedFoveation = val;
47
30
  }
48
31
  }
32
+ constructor(
33
+ /** The width of the layer's framebuffer. */
34
+ getWidth,
35
+ /** The height of the layer's framebuffer. */
36
+ getHeight,
37
+ /** The XR layer that this WebXRLayerWrapper wraps. */
38
+ layer,
39
+ /** The type of XR layer that is being wrapped. */
40
+ layerType,
41
+ /** Create a render target provider for the wrapped layer. */
42
+ createRenderTargetTextureProvider) {
43
+ this.getWidth = getWidth;
44
+ this.getHeight = getHeight;
45
+ this.layer = layer;
46
+ this.layerType = layerType;
47
+ this.createRenderTargetTextureProvider = createRenderTargetTextureProvider;
48
+ }
49
49
  }
50
50
  //# sourceMappingURL=webXRLayerWrapper.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"webXRLayerWrapper.js","sourceRoot":"","sources":["../../../../lts/core/generated/XR/webXRLayerWrapper.ts"],"names":[],"mappings":"AAWA;;;GAGG;AACH,MAAM,OAAO,iBAAiB;IA8B1B;IACI,4CAA4C;IACrC,QAAsB;IAC7B,6CAA6C;IACtC,SAAuB;IAC9B,sDAAsD;IACtC,KAAc;IAC9B,kDAAkD;IAClC,SAAyB;IACzC,6DAA6D;IACtD,iCAAmH;QARnH,aAAQ,GAAR,QAAQ,CAAc;QAEtB,cAAS,GAAT,SAAS,CAAc;QAEd,UAAK,GAAL,KAAK,CAAS;QAEd,cAAS,GAAT,SAAS,CAAgB;QAElC,sCAAiC,GAAjC,iCAAiC,CAAkF;IAC3H,CAAC;IAxCJ;;OAEG;IACH,IAAW,yBAAyB;QAChC,OAAO,IAAI,CAAC,SAAS,IAAI,cAAc,IAAI,OAAQ,IAAI,CAAC,KAAsB,CAAC,cAAc,IAAI,QAAQ,CAAC;IAC9G,CAAC;IAED;;;OAGG;IACH,IAAW,cAAc;QACrB,IAAI,IAAI,CAAC,yBAAyB,EAAE;YAChC,OAAQ,IAAI,CAAC,KAAsB,CAAC,cAAe,CAAC;SACvD;QACD,OAAO,IAAI,CAAC;IAChB,CAAC;IAED;;;OAGG;IACH,IAAW,cAAc,CAAC,KAAuB;QAC7C,IAAI,IAAI,CAAC,yBAAyB,EAAE;YAChC,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,KAAK,IAAI,CAAC,CAAC,CAAC,CAAC;YAChD,IAAI,CAAC,KAAsB,CAAC,cAAc,GAAG,GAAG,CAAC;SACrD;IACL,CAAC;CAcJ","sourcesContent":["import type { Nullable } from \"../types\";\r\nimport type { WebXRLayerRenderTargetTextureProvider } from \"./webXRRenderTargetTextureProvider\";\r\nimport type { WebXRSessionManager } from \"./webXRSessionManager\";\r\n\r\n/** Covers all supported subclasses of WebXR's XRCompositionLayer */\r\n// TODO (rgerd): Extend for all other subclasses of XRCompositionLayer.\r\nexport type WebXRCompositionLayerType = \"XRProjectionLayer\";\r\n\r\n/** Covers all supported subclasses of WebXR's XRLayer */\r\nexport type WebXRLayerType = \"XRWebGLLayer\" | WebXRCompositionLayerType;\r\n\r\n/**\r\n * Wrapper over subclasses of XRLayer.\r\n * @internal\r\n */\r\nexport class WebXRLayerWrapper {\r\n /**\r\n * Check if fixed foveation is supported on this device\r\n */\r\n public get isFixedFoveationSupported(): boolean {\r\n return this.layerType == \"XRWebGLLayer\" && typeof (this.layer as XRWebGLLayer).fixedFoveation == \"number\";\r\n }\r\n\r\n /**\r\n * Get the fixed foveation currently set, as specified by the webxr specs\r\n * If this returns null, then fixed foveation is not supported\r\n */\r\n public get fixedFoveation(): Nullable<number> {\r\n if (this.isFixedFoveationSupported) {\r\n return (this.layer as XRWebGLLayer).fixedFoveation!;\r\n }\r\n return null;\r\n }\r\n\r\n /**\r\n * Set the fixed foveation to the specified value, as specified by the webxr specs\r\n * This value will be normalized to be between 0 and 1, 1 being max foveation, 0 being no foveation\r\n */\r\n public set fixedFoveation(value: Nullable<number>) {\r\n if (this.isFixedFoveationSupported) {\r\n const val = Math.max(0, Math.min(1, value || 0));\r\n (this.layer as XRWebGLLayer).fixedFoveation = val;\r\n }\r\n }\r\n\r\n protected constructor(\r\n /** The width of the layer's framebuffer. */\r\n public getWidth: () => number,\r\n /** The height of the layer's framebuffer. */\r\n public getHeight: () => number,\r\n /** The XR layer that this WebXRLayerWrapper wraps. */\r\n public readonly layer: XRLayer,\r\n /** The type of XR layer that is being wrapped. */\r\n public readonly layerType: WebXRLayerType,\r\n /** Create a render target provider for the wrapped layer. */\r\n public createRenderTargetTextureProvider: (xrSessionManager: WebXRSessionManager) => WebXRLayerRenderTargetTextureProvider\r\n ) {}\r\n}\r\n"]}
1
+ {"version":3,"file":"webXRLayerWrapper.js","sourceRoot":"","sources":["../../../../lts/core/generated/XR/webXRLayerWrapper.ts"],"names":[],"mappings":"AAWA;;;GAGG;AACH,MAAM,OAAO,iBAAiB;IAC1B;;OAEG;IACH,IAAW,yBAAyB;QAChC,OAAO,IAAI,CAAC,SAAS,IAAI,cAAc,IAAI,OAAQ,IAAI,CAAC,KAAsB,CAAC,cAAc,IAAI,QAAQ,CAAC;IAC9G,CAAC;IAED;;;OAGG;IACH,IAAW,cAAc;QACrB,IAAI,IAAI,CAAC,yBAAyB,EAAE;YAChC,OAAQ,IAAI,CAAC,KAAsB,CAAC,cAAe,CAAC;SACvD;QACD,OAAO,IAAI,CAAC;IAChB,CAAC;IAED;;;OAGG;IACH,IAAW,cAAc,CAAC,KAAuB;QAC7C,IAAI,IAAI,CAAC,yBAAyB,EAAE;YAChC,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,KAAK,IAAI,CAAC,CAAC,CAAC,CAAC;YAChD,IAAI,CAAC,KAAsB,CAAC,cAAc,GAAG,GAAG,CAAC;SACrD;IACL,CAAC;IAED;IACI,4CAA4C;IACrC,QAAsB;IAC7B,6CAA6C;IACtC,SAAuB;IAC9B,sDAAsD;IACtC,KAAc;IAC9B,kDAAkD;IAClC,SAAyB;IACzC,6DAA6D;IACtD,iCAAmH;QARnH,aAAQ,GAAR,QAAQ,CAAc;QAEtB,cAAS,GAAT,SAAS,CAAc;QAEd,UAAK,GAAL,KAAK,CAAS;QAEd,cAAS,GAAT,SAAS,CAAgB;QAElC,sCAAiC,GAAjC,iCAAiC,CAAkF;IAC3H,CAAC;CACP","sourcesContent":["import type { Nullable } from \"../types\";\r\nimport type { WebXRLayerRenderTargetTextureProvider } from \"./webXRRenderTargetTextureProvider\";\r\nimport type { WebXRSessionManager } from \"./webXRSessionManager\";\r\n\r\n/** Covers all supported subclasses of WebXR's XRCompositionLayer */\r\n// TODO (rgerd): Extend for all other subclasses of XRCompositionLayer.\r\nexport type WebXRCompositionLayerType = \"XRProjectionLayer\";\r\n\r\n/** Covers all supported subclasses of WebXR's XRLayer */\r\nexport type WebXRLayerType = \"XRWebGLLayer\" | WebXRCompositionLayerType;\r\n\r\n/**\r\n * Wrapper over subclasses of XRLayer.\r\n * @internal\r\n */\r\nexport class WebXRLayerWrapper {\r\n /**\r\n * Check if fixed foveation is supported on this device\r\n */\r\n public get isFixedFoveationSupported(): boolean {\r\n return this.layerType == \"XRWebGLLayer\" && typeof (this.layer as XRWebGLLayer).fixedFoveation == \"number\";\r\n }\r\n\r\n /**\r\n * Get the fixed foveation currently set, as specified by the webxr specs\r\n * If this returns null, then fixed foveation is not supported\r\n */\r\n public get fixedFoveation(): Nullable<number> {\r\n if (this.isFixedFoveationSupported) {\r\n return (this.layer as XRWebGLLayer).fixedFoveation!;\r\n }\r\n return null;\r\n }\r\n\r\n /**\r\n * Set the fixed foveation to the specified value, as specified by the webxr specs\r\n * This value will be normalized to be between 0 and 1, 1 being max foveation, 0 being no foveation\r\n */\r\n public set fixedFoveation(value: Nullable<number>) {\r\n if (this.isFixedFoveationSupported) {\r\n const val = Math.max(0, Math.min(1, value || 0));\r\n (this.layer as XRWebGLLayer).fixedFoveation = val;\r\n }\r\n }\r\n\r\n protected constructor(\r\n /** The width of the layer's framebuffer. */\r\n public getWidth: () => number,\r\n /** The height of the layer's framebuffer. */\r\n public getHeight: () => number,\r\n /** The XR layer that this WebXRLayerWrapper wraps. */\r\n public readonly layer: XRLayer,\r\n /** The type of XR layer that is being wrapped. */\r\n public readonly layerType: WebXRLayerType,\r\n /** Create a render target provider for the wrapped layer. */\r\n public createRenderTargetTextureProvider: (xrSessionManager: WebXRSessionManager) => WebXRLayerRenderTargetTextureProvider\r\n ) {}\r\n}\r\n"]}
@@ -20,12 +20,12 @@ declare type Animation = import("./Animations/animation").Animation;
20
20
  * Defines how the parser contract is defined.
21
21
  * These parsers are used to parse a list of specific assets (like particle systems, etc..)
22
22
  */
23
- export declare type BabylonFileParser = (parsedData: any, scene: Scene, container: AssetContainer, rootUrl: string) => void;
23
+ export type BabylonFileParser = (parsedData: any, scene: Scene, container: AssetContainer, rootUrl: string) => void;
24
24
  /**
25
25
  * Defines how the individual parser contract is defined.
26
26
  * These parser can parse an individual asset
27
27
  */
28
- export declare type IndividualBabylonFileParser = (parsedData: any, scene: Scene, rootUrl: string) => any;
28
+ export type IndividualBabylonFileParser = (parsedData: any, scene: Scene, rootUrl: string) => any;
29
29
  /**
30
30
  * Base class of the scene acting as a container for the different elements composing a scene.
31
31
  * This class is dynamically extended by the different components of the scene increasing
package/node.d.ts CHANGED
@@ -16,7 +16,7 @@ declare type AbstractMesh = import("./Meshes/abstractMesh").AbstractMesh;
16
16
  /**
17
17
  * Defines how a node can be built from a string name.
18
18
  */
19
- export declare type NodeConstructor = (name: string, scene: Scene, options?: any) => () => Node;
19
+ export type NodeConstructor = (name: string, scene: Scene, options?: any) => () => Node;
20
20
  /**
21
21
  * Node is the basic class for all scene objects (Mesh, Light, Camera.)
22
22
  */
package/node.js CHANGED
@@ -21,77 +21,6 @@ class _InternalNodeDataInfo {
21
21
  * Node is the basic class for all scene objects (Mesh, Light, Camera.)
22
22
  */
23
23
  export class Node {
24
- /**
25
- * Creates a new Node
26
- * @param name the name and id to be given to this node
27
- * @param scene the scene this node will be added to
28
- */
29
- constructor(name, scene = null) {
30
- this._isDirty = false;
31
- this._nodeDataStorage = new _InternalNodeDataInfo();
32
- /**
33
- * Gets or sets a string used to store user defined state for the node
34
- */
35
- this.state = "";
36
- /**
37
- * Gets or sets an object used to store user defined information for the node
38
- */
39
- this.metadata = null;
40
- /**
41
- * For internal use only. Please do not use.
42
- */
43
- this.reservedDataStore = null;
44
- this._accessibilityTag = null;
45
- this.onAccessibilityTagChangedObservable = new Observable();
46
- /** @internal */
47
- this._parentContainer = null;
48
- /**
49
- * Gets a list of Animations associated with the node
50
- */
51
- this.animations = new Array();
52
- this._ranges = {};
53
- /**
54
- * Callback raised when the node is ready to be used
55
- */
56
- this.onReady = null;
57
- /** @internal */
58
- this._currentRenderId = -1;
59
- this._parentUpdateId = -1;
60
- /** @internal */
61
- this._childUpdateId = -1;
62
- /** @internal */
63
- this._waitingParentId = null;
64
- /** @internal */
65
- this._waitingParentInstanceIndex = null;
66
- /** @internal */
67
- this._waitingParsedUniqueId = null;
68
- /** @internal */
69
- this._cache = {};
70
- this._parentNode = null;
71
- /** @internal */
72
- this._children = null;
73
- /** @internal */
74
- this._worldMatrix = Matrix.Identity();
75
- /** @internal */
76
- this._worldMatrixDeterminant = 0;
77
- /** @internal */
78
- this._worldMatrixDeterminantIsDirty = true;
79
- this._animationPropertiesOverride = null;
80
- /** @internal */
81
- this._isNode = true;
82
- /**
83
- * An event triggered when the mesh is disposed
84
- */
85
- this.onDisposeObservable = new Observable();
86
- this._onDisposeObserver = null;
87
- // Behaviors
88
- this._behaviors = new Array();
89
- this.name = name;
90
- this.id = name;
91
- this._scene = (scene || EngineStore.LastCreatedScene);
92
- this.uniqueId = this._scene.getUniqueId();
93
- this._initCache();
94
- }
95
24
  /**
96
25
  * Add a new node constructor
97
26
  * @param type defines the type name of the node to construct
@@ -248,6 +177,77 @@ export class Node {
248
177
  get onClonedObservable() {
249
178
  return this._nodeDataStorage._onClonedObservable;
250
179
  }
180
+ /**
181
+ * Creates a new Node
182
+ * @param name the name and id to be given to this node
183
+ * @param scene the scene this node will be added to
184
+ */
185
+ constructor(name, scene = null) {
186
+ this._isDirty = false;
187
+ this._nodeDataStorage = new _InternalNodeDataInfo();
188
+ /**
189
+ * Gets or sets a string used to store user defined state for the node
190
+ */
191
+ this.state = "";
192
+ /**
193
+ * Gets or sets an object used to store user defined information for the node
194
+ */
195
+ this.metadata = null;
196
+ /**
197
+ * For internal use only. Please do not use.
198
+ */
199
+ this.reservedDataStore = null;
200
+ this._accessibilityTag = null;
201
+ this.onAccessibilityTagChangedObservable = new Observable();
202
+ /** @internal */
203
+ this._parentContainer = null;
204
+ /**
205
+ * Gets a list of Animations associated with the node
206
+ */
207
+ this.animations = new Array();
208
+ this._ranges = {};
209
+ /**
210
+ * Callback raised when the node is ready to be used
211
+ */
212
+ this.onReady = null;
213
+ /** @internal */
214
+ this._currentRenderId = -1;
215
+ this._parentUpdateId = -1;
216
+ /** @internal */
217
+ this._childUpdateId = -1;
218
+ /** @internal */
219
+ this._waitingParentId = null;
220
+ /** @internal */
221
+ this._waitingParentInstanceIndex = null;
222
+ /** @internal */
223
+ this._waitingParsedUniqueId = null;
224
+ /** @internal */
225
+ this._cache = {};
226
+ this._parentNode = null;
227
+ /** @internal */
228
+ this._children = null;
229
+ /** @internal */
230
+ this._worldMatrix = Matrix.Identity();
231
+ /** @internal */
232
+ this._worldMatrixDeterminant = 0;
233
+ /** @internal */
234
+ this._worldMatrixDeterminantIsDirty = true;
235
+ this._animationPropertiesOverride = null;
236
+ /** @internal */
237
+ this._isNode = true;
238
+ /**
239
+ * An event triggered when the mesh is disposed
240
+ */
241
+ this.onDisposeObservable = new Observable();
242
+ this._onDisposeObserver = null;
243
+ // Behaviors
244
+ this._behaviors = new Array();
245
+ this.name = name;
246
+ this.id = name;
247
+ this._scene = (scene || EngineStore.LastCreatedScene);
248
+ this.uniqueId = this._scene.getUniqueId();
249
+ this._initCache();
250
+ }
251
251
  /**
252
252
  * Gets the scene of the node
253
253
  * @returns a scene