@babylonjs/core 8.36.1 → 8.37.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (296) hide show
  1. package/Animations/animationGroup.js +1 -4
  2. package/Animations/animationGroup.js.map +1 -1
  3. package/AudioV2/abstractAudio/audioEngineV2.d.ts +0 -4
  4. package/AudioV2/abstractAudio/audioEngineV2.js +0 -4
  5. package/AudioV2/abstractAudio/audioEngineV2.js.map +1 -1
  6. package/AudioV2/abstractAudio/subNodes/volumeAudioSubNode.js +1 -1
  7. package/AudioV2/abstractAudio/subNodes/volumeAudioSubNode.js.map +1 -1
  8. package/AudioV2/audioParameter.d.ts +5 -1
  9. package/AudioV2/audioParameter.js +4 -0
  10. package/AudioV2/audioParameter.js.map +1 -1
  11. package/AudioV2/webAudio/components/webAudioParameterComponent.d.ts +0 -18
  12. package/AudioV2/webAudio/components/webAudioParameterComponent.js +7 -67
  13. package/AudioV2/webAudio/components/webAudioParameterComponent.js.map +1 -1
  14. package/Behaviors/Cameras/interpolatingBehavior.d.ts +58 -0
  15. package/Behaviors/Cameras/interpolatingBehavior.js +157 -0
  16. package/Behaviors/Cameras/interpolatingBehavior.js.map +1 -0
  17. package/Cameras/Inputs/arcRotateCameraPointersInput.d.ts +5 -20
  18. package/Cameras/Inputs/arcRotateCameraPointersInput.js +9 -69
  19. package/Cameras/Inputs/arcRotateCameraPointersInput.js.map +1 -1
  20. package/Cameras/Inputs/geospatialCameraKeyboardInput.d.ts +81 -0
  21. package/Cameras/Inputs/geospatialCameraKeyboardInput.js +223 -0
  22. package/Cameras/Inputs/geospatialCameraKeyboardInput.js.map +1 -0
  23. package/Cameras/Inputs/geospatialCameraMouseWheelInput.js +1 -1
  24. package/Cameras/Inputs/geospatialCameraMouseWheelInput.js.map +1 -1
  25. package/Cameras/Inputs/geospatialCameraPointersInput.d.ts +17 -21
  26. package/Cameras/Inputs/geospatialCameraPointersInput.js +49 -71
  27. package/Cameras/Inputs/geospatialCameraPointersInput.js.map +1 -1
  28. package/Cameras/Inputs/orbitCameraPointersInput.d.ts +49 -0
  29. package/Cameras/Inputs/orbitCameraPointersInput.js +105 -0
  30. package/Cameras/Inputs/orbitCameraPointersInput.js.map +1 -0
  31. package/Cameras/Limits/geospatialLimits.d.ts +60 -0
  32. package/Cameras/Limits/geospatialLimits.js +89 -0
  33. package/Cameras/Limits/geospatialLimits.js.map +1 -0
  34. package/Cameras/camera.js +1 -0
  35. package/Cameras/camera.js.map +1 -1
  36. package/Cameras/cameraMovement.d.ts +150 -0
  37. package/Cameras/cameraMovement.js +190 -0
  38. package/Cameras/cameraMovement.js.map +1 -0
  39. package/Cameras/geospatialCamera.d.ts +78 -49
  40. package/Cameras/geospatialCamera.js +210 -191
  41. package/Cameras/geospatialCamera.js.map +1 -1
  42. package/Cameras/geospatialCameraInputsManager.d.ts +5 -0
  43. package/Cameras/geospatialCameraInputsManager.js +9 -0
  44. package/Cameras/geospatialCameraInputsManager.js.map +1 -1
  45. package/Cameras/geospatialCameraMovement.d.ts +66 -0
  46. package/Cameras/geospatialCameraMovement.js +199 -0
  47. package/Cameras/geospatialCameraMovement.js.map +1 -0
  48. package/Cameras/targetCamera.js +0 -4
  49. package/Cameras/targetCamera.js.map +1 -1
  50. package/Culling/ray.core.js +1 -1
  51. package/Culling/ray.core.js.map +1 -1
  52. package/Debug/debugLayer.d.ts +1 -1
  53. package/Debug/debugLayer.js.map +1 -1
  54. package/Decorators/nodeDecorator.d.ts +9 -7
  55. package/Decorators/nodeDecorator.js +9 -7
  56. package/Decorators/nodeDecorator.js.map +1 -1
  57. package/Engines/Native/nativeInterfaces.d.ts +14 -6
  58. package/Engines/Native/nativeInterfaces.js +6 -1
  59. package/Engines/Native/nativeInterfaces.js.map +1 -1
  60. package/Engines/WebGPU/webgpuCacheSampler.js +4 -0
  61. package/Engines/WebGPU/webgpuCacheSampler.js.map +1 -1
  62. package/Engines/WebGPU/webgpuTextureManager.js +2 -2
  63. package/Engines/WebGPU/webgpuTextureManager.js.map +1 -1
  64. package/Engines/abstractEngine.js +2 -2
  65. package/Engines/abstractEngine.js.map +1 -1
  66. package/Engines/nativeEngine.js +2 -2
  67. package/Engines/nativeEngine.js.map +1 -1
  68. package/FlowGraph/Blocks/Data/Math/flowGraphVectorMathBlocks.js +1 -1
  69. package/FlowGraph/Blocks/Data/Math/flowGraphVectorMathBlocks.js.map +1 -1
  70. package/FlowGraph/flowGraphMath.d.ts +25 -0
  71. package/FlowGraph/flowGraphMath.js +40 -0
  72. package/FlowGraph/flowGraphMath.js.map +1 -0
  73. package/FrameGraph/Node/Blocks/Layers/glowLayerBlock.js +1 -1
  74. package/FrameGraph/Node/Blocks/Layers/glowLayerBlock.js.map +1 -1
  75. package/FrameGraph/Node/Blocks/Layers/highlightLayerBlock.js +1 -1
  76. package/FrameGraph/Node/Blocks/Layers/highlightLayerBlock.js.map +1 -1
  77. package/FrameGraph/Node/Blocks/PostProcesses/basePostProcessBlock.d.ts +1 -1
  78. package/FrameGraph/Node/Blocks/PostProcesses/basePostProcessBlock.js +2 -2
  79. package/FrameGraph/Node/Blocks/PostProcesses/basePostProcessBlock.js.map +1 -1
  80. package/FrameGraph/Node/Blocks/PostProcesses/baseWithPropertiesPostProcessBlock.d.ts +1 -1
  81. package/FrameGraph/Node/Blocks/PostProcesses/baseWithPropertiesPostProcessBlock.js +2 -2
  82. package/FrameGraph/Node/Blocks/PostProcesses/baseWithPropertiesPostProcessBlock.js.map +1 -1
  83. package/FrameGraph/Node/Blocks/PostProcesses/circleOfConfusionPostProcessBlock.js +1 -1
  84. package/FrameGraph/Node/Blocks/PostProcesses/colorCorrectionPostProcessBlock.js +1 -1
  85. package/FrameGraph/Node/Blocks/PostProcesses/depthOfFieldPostProcessBlock.js +1 -1
  86. package/FrameGraph/Node/Blocks/PostProcesses/filterPostProcessBlock.js +1 -1
  87. package/FrameGraph/Node/Blocks/PostProcesses/imageProcessingPostProcessBlock.js +1 -1
  88. package/FrameGraph/Node/Blocks/PostProcesses/ssao2PostProcessBlock.js +1 -1
  89. package/FrameGraph/Node/Blocks/PostProcesses/ssao2PostProcessBlock.js.map +1 -1
  90. package/FrameGraph/Node/Blocks/PostProcesses/ssrPostProcessBlock.js +1 -1
  91. package/FrameGraph/Node/Blocks/PostProcesses/ssrPostProcessBlock.js.map +1 -1
  92. package/FrameGraph/Node/Blocks/Rendering/baseObjectRendererBlock.d.ts +6 -0
  93. package/FrameGraph/Node/Blocks/Rendering/baseObjectRendererBlock.js +26 -0
  94. package/FrameGraph/Node/Blocks/Rendering/baseObjectRendererBlock.js.map +1 -1
  95. package/FrameGraph/Node/Blocks/Rendering/csmShadowGeneratorBlock.js +1 -1
  96. package/FrameGraph/Node/Blocks/Rendering/csmShadowGeneratorBlock.js.map +1 -1
  97. package/FrameGraph/Node/Blocks/Rendering/geometryRendererBlock.d.ts +6 -0
  98. package/FrameGraph/Node/Blocks/Rendering/geometryRendererBlock.js +48 -22
  99. package/FrameGraph/Node/Blocks/Rendering/geometryRendererBlock.js.map +1 -1
  100. package/FrameGraph/Node/Blocks/Rendering/shadowGeneratorBlock.js +1 -1
  101. package/FrameGraph/Node/Blocks/Rendering/shadowGeneratorBlock.js.map +1 -1
  102. package/FrameGraph/Node/Blocks/Textures/clearBlock.js +3 -3
  103. package/FrameGraph/Node/Blocks/Textures/clearBlock.js.map +1 -1
  104. package/FrameGraph/Node/Blocks/Textures/copyTextureBlock.d.ts +3 -0
  105. package/FrameGraph/Node/Blocks/Textures/copyTextureBlock.js +14 -1
  106. package/FrameGraph/Node/Blocks/Textures/copyTextureBlock.js.map +1 -1
  107. package/FrameGraph/Node/Blocks/Textures/generateMipmapsBlock.js +1 -1
  108. package/FrameGraph/Node/Blocks/Textures/generateMipmapsBlock.js.map +1 -1
  109. package/FrameGraph/Node/Blocks/index.d.ts +1 -0
  110. package/FrameGraph/Node/Blocks/index.js +1 -0
  111. package/FrameGraph/Node/Blocks/index.js.map +1 -1
  112. package/FrameGraph/Node/nodeRenderGraph.js +2 -1
  113. package/FrameGraph/Node/nodeRenderGraph.js.map +1 -1
  114. package/FrameGraph/Passes/{cullPass.d.ts → objectListPass.d.ts} +8 -8
  115. package/FrameGraph/Passes/{cullPass.js → objectListPass.js} +9 -9
  116. package/FrameGraph/Passes/objectListPass.js.map +1 -0
  117. package/FrameGraph/Passes/renderPass.d.ts +6 -2
  118. package/FrameGraph/Passes/renderPass.js +14 -2
  119. package/FrameGraph/Passes/renderPass.js.map +1 -1
  120. package/FrameGraph/Tasks/Misc/cullObjectsTask.js +2 -2
  121. package/FrameGraph/Tasks/Misc/cullObjectsTask.js.map +1 -1
  122. package/FrameGraph/Tasks/Rendering/csmShadowGeneratorTask.d.ts +4 -4
  123. package/FrameGraph/Tasks/Rendering/csmShadowGeneratorTask.js +3 -4
  124. package/FrameGraph/Tasks/Rendering/csmShadowGeneratorTask.js.map +1 -1
  125. package/FrameGraph/Tasks/Rendering/geometryRendererTask.d.ts +8 -0
  126. package/FrameGraph/Tasks/Rendering/geometryRendererTask.js +10 -0
  127. package/FrameGraph/Tasks/Rendering/geometryRendererTask.js.map +1 -1
  128. package/FrameGraph/Tasks/Rendering/objectRendererTask.d.ts +8 -0
  129. package/FrameGraph/Tasks/Rendering/objectRendererTask.js +13 -0
  130. package/FrameGraph/Tasks/Rendering/objectRendererTask.js.map +1 -1
  131. package/FrameGraph/Tasks/Rendering/shadowGeneratorTask.d.ts +2 -3
  132. package/FrameGraph/Tasks/Rendering/shadowGeneratorTask.js +1 -2
  133. package/FrameGraph/Tasks/Rendering/shadowGeneratorTask.js.map +1 -1
  134. package/FrameGraph/Tasks/Rendering/utilityLayerRendererTask.d.ts +3 -1
  135. package/FrameGraph/Tasks/Rendering/utilityLayerRendererTask.js +11 -1
  136. package/FrameGraph/Tasks/Rendering/utilityLayerRendererTask.js.map +1 -1
  137. package/FrameGraph/Tasks/Texture/clearTextureTask.d.ts +1 -1
  138. package/FrameGraph/Tasks/Texture/clearTextureTask.js +7 -5
  139. package/FrameGraph/Tasks/Texture/clearTextureTask.js.map +1 -1
  140. package/FrameGraph/Tasks/Texture/copyToTextureTask.d.ts +4 -0
  141. package/FrameGraph/Tasks/Texture/copyToTextureTask.js +7 -1
  142. package/FrameGraph/Tasks/Texture/copyToTextureTask.js.map +1 -1
  143. package/FrameGraph/frameGraph.d.ts +10 -4
  144. package/FrameGraph/frameGraph.js +22 -9
  145. package/FrameGraph/frameGraph.js.map +1 -1
  146. package/FrameGraph/frameGraphRenderContext.d.ts +2 -1
  147. package/FrameGraph/frameGraphRenderContext.js +22 -3
  148. package/FrameGraph/frameGraphRenderContext.js.map +1 -1
  149. package/FrameGraph/frameGraphTask.js +3 -3
  150. package/FrameGraph/frameGraphTask.js.map +1 -1
  151. package/FrameGraph/index.d.ts +1 -1
  152. package/FrameGraph/index.js +1 -1
  153. package/FrameGraph/index.js.map +1 -1
  154. package/Materials/GaussianSplatting/gaussianSplattingMaterial.js +1 -1
  155. package/Materials/GaussianSplatting/gaussianSplattingMaterial.js.map +1 -1
  156. package/Materials/Node/Blocks/GaussianSplatting/gaussianSplattingBlock.js +5 -1
  157. package/Materials/Node/Blocks/GaussianSplatting/gaussianSplattingBlock.js.map +1 -1
  158. package/Materials/Node/Blocks/GaussianSplatting/splatReaderBlock.js +6 -5
  159. package/Materials/Node/Blocks/GaussianSplatting/splatReaderBlock.js.map +1 -1
  160. package/Materials/PBR/openpbrMaterial.js +2 -1
  161. package/Materials/PBR/openpbrMaterial.js.map +1 -1
  162. package/Materials/floatingOriginMatrixOverrides.js +19 -0
  163. package/Materials/floatingOriginMatrixOverrides.js.map +1 -1
  164. package/Materials/shaderMaterial.d.ts +9 -0
  165. package/Materials/shaderMaterial.js +39 -2
  166. package/Materials/shaderMaterial.js.map +1 -1
  167. package/Maths/math.vector.functions.d.ts +5 -24
  168. package/Maths/math.vector.functions.js +32 -35
  169. package/Maths/math.vector.functions.js.map +1 -1
  170. package/Meshes/GaussianSplatting/gaussianSplattingMesh.d.ts +1 -0
  171. package/Meshes/GaussianSplatting/gaussianSplattingMesh.js +51 -16
  172. package/Meshes/GaussianSplatting/gaussianSplattingMesh.js.map +1 -1
  173. package/Meshes/Node/Blocks/randomBlock.js +11 -11
  174. package/Meshes/Node/Blocks/randomBlock.js.map +1 -1
  175. package/Meshes/csg2.js +1 -1
  176. package/Meshes/csg2.js.map +1 -1
  177. package/Meshes/thinInstanceMesh.js +15 -0
  178. package/Meshes/thinInstanceMesh.js.map +1 -1
  179. package/Misc/copyTextureToTexture.d.ts +8 -1
  180. package/Misc/copyTextureToTexture.js +16 -2
  181. package/Misc/copyTextureToTexture.js.map +1 -1
  182. package/Misc/fileTools.js.map +1 -1
  183. package/Misc/tools.d.ts +3 -0
  184. package/Misc/tools.js +43 -4
  185. package/Misc/tools.js.map +1 -1
  186. package/Particles/EmitterTypes/coneParticleEmitter.d.ts +6 -4
  187. package/Particles/EmitterTypes/coneParticleEmitter.js +18 -12
  188. package/Particles/EmitterTypes/coneParticleEmitter.js.map +1 -1
  189. package/Particles/EmitterTypes/customParticleEmitter.d.ts +5 -3
  190. package/Particles/EmitterTypes/customParticleEmitter.js +8 -6
  191. package/Particles/EmitterTypes/customParticleEmitter.js.map +1 -1
  192. package/Particles/EmitterTypes/sphereParticleEmitter.d.ts +3 -1
  193. package/Particles/EmitterTypes/sphereParticleEmitter.js +7 -1
  194. package/Particles/EmitterTypes/sphereParticleEmitter.js.map +1 -1
  195. package/Particles/Node/Blocks/Emitters/boxShapeBlock.d.ts +1 -1
  196. package/Particles/Node/Blocks/Emitters/boxShapeBlock.js +2 -1
  197. package/Particles/Node/Blocks/Emitters/boxShapeBlock.js.map +1 -1
  198. package/Particles/Node/Blocks/Emitters/coneShapeBlock.d.ts +15 -4
  199. package/Particles/Node/Blocks/Emitters/coneShapeBlock.js +66 -36
  200. package/Particles/Node/Blocks/Emitters/coneShapeBlock.js.map +1 -1
  201. package/Particles/Node/Blocks/Emitters/createParticleBlock.d.ts +0 -4
  202. package/Particles/Node/Blocks/Emitters/createParticleBlock.js +1 -8
  203. package/Particles/Node/Blocks/Emitters/createParticleBlock.js.map +1 -1
  204. package/Particles/Node/Blocks/Emitters/customShapeBlock.d.ts +13 -9
  205. package/Particles/Node/Blocks/Emitters/customShapeBlock.js +36 -23
  206. package/Particles/Node/Blocks/Emitters/customShapeBlock.js.map +1 -1
  207. package/Particles/Node/Blocks/Emitters/cylinderShapeBlock.d.ts +10 -1
  208. package/Particles/Node/Blocks/Emitters/cylinderShapeBlock.js +50 -17
  209. package/Particles/Node/Blocks/Emitters/cylinderShapeBlock.js.map +1 -1
  210. package/Particles/Node/Blocks/Emitters/emitters.functions.d.ts +6 -0
  211. package/Particles/Node/Blocks/Emitters/emitters.functions.js +13 -0
  212. package/Particles/Node/Blocks/Emitters/emitters.functions.js.map +1 -0
  213. package/Particles/Node/Blocks/Emitters/meshShapeBlock.d.ts +2 -2
  214. package/Particles/Node/Blocks/Emitters/meshShapeBlock.js +5 -1
  215. package/Particles/Node/Blocks/Emitters/meshShapeBlock.js.map +1 -1
  216. package/Particles/Node/Blocks/Emitters/pointShapeBlock.d.ts +1 -1
  217. package/Particles/Node/Blocks/Emitters/pointShapeBlock.js +3 -1
  218. package/Particles/Node/Blocks/Emitters/pointShapeBlock.js.map +1 -1
  219. package/Particles/Node/Blocks/Emitters/sphereShapeBlock.d.ts +16 -1
  220. package/Particles/Node/Blocks/Emitters/sphereShapeBlock.js +67 -14
  221. package/Particles/Node/Blocks/Emitters/sphereShapeBlock.js.map +1 -1
  222. package/Particles/Node/Blocks/Update/basicColorUpdateBlock.d.ts +1 -1
  223. package/Particles/Node/Blocks/Update/basicColorUpdateBlock.js +1 -1
  224. package/Particles/Node/Blocks/Update/basicColorUpdateBlock.js.map +1 -1
  225. package/Particles/Node/Blocks/Update/basicPositionUpdateBlock.d.ts +1 -1
  226. package/Particles/Node/Blocks/Update/basicPositionUpdateBlock.js +3 -3
  227. package/Particles/Node/Blocks/Update/basicPositionUpdateBlock.js.map +1 -1
  228. package/Particles/Node/Blocks/Update/updateSizeBlock.d.ts +35 -0
  229. package/Particles/Node/Blocks/Update/updateSizeBlock.js +73 -0
  230. package/Particles/Node/Blocks/Update/updateSizeBlock.js.map +1 -0
  231. package/Particles/Node/Blocks/index.d.ts +1 -0
  232. package/Particles/Node/Blocks/index.js +1 -0
  233. package/Particles/Node/Blocks/index.js.map +1 -1
  234. package/Particles/Node/Blocks/particleInputBlock.js +3 -0
  235. package/Particles/Node/Blocks/particleInputBlock.js.map +1 -1
  236. package/Particles/Node/Blocks/particleRandomBlock.d.ts +5 -2
  237. package/Particles/Node/Blocks/particleRandomBlock.js +40 -22
  238. package/Particles/Node/Blocks/particleRandomBlock.js.map +1 -1
  239. package/Particles/Node/Blocks/systemBlock.d.ts +21 -9
  240. package/Particles/Node/Blocks/systemBlock.js +37 -22
  241. package/Particles/Node/Blocks/systemBlock.js.map +1 -1
  242. package/Particles/Node/Enums/nodeParticleContextualSources.d.ts +7 -1
  243. package/Particles/Node/Enums/nodeParticleContextualSources.js +6 -0
  244. package/Particles/Node/Enums/nodeParticleContextualSources.js.map +1 -1
  245. package/Particles/Node/nodeParticleBuildState.d.ts +5 -5
  246. package/Particles/Node/nodeParticleBuildState.js +14 -5
  247. package/Particles/Node/nodeParticleBuildState.js.map +1 -1
  248. package/Particles/Node/nodeParticleSystemSet.helper.d.ts +0 -2
  249. package/Particles/Node/nodeParticleSystemSet.helper.js +586 -148
  250. package/Particles/Node/nodeParticleSystemSet.helper.js.map +1 -1
  251. package/Particles/Node/nodeParticleSystemSet.js +1 -1
  252. package/Particles/Node/nodeParticleSystemSet.js.map +1 -1
  253. package/Particles/particle.d.ts +4 -0
  254. package/Particles/particle.js +2 -0
  255. package/Particles/particle.js.map +1 -1
  256. package/Particles/thinParticleSystem.d.ts +3 -7
  257. package/Particles/thinParticleSystem.function.d.ts +3 -3
  258. package/Particles/thinParticleSystem.function.js +11 -8
  259. package/Particles/thinParticleSystem.function.js.map +1 -1
  260. package/Particles/thinParticleSystem.js +5 -7
  261. package/Particles/thinParticleSystem.js.map +1 -1
  262. package/Rendering/IBLShadows/iblShadowsRenderPipeline.js +2 -1
  263. package/Rendering/IBLShadows/iblShadowsRenderPipeline.js.map +1 -1
  264. package/Rendering/prePassRenderer.js +4 -1
  265. package/Rendering/prePassRenderer.js.map +1 -1
  266. package/Shaders/ShadersInclude/gaussianSplatting.js +5 -1
  267. package/Shaders/ShadersInclude/gaussianSplatting.js.map +1 -1
  268. package/Shaders/ShadersInclude/gaussianSplattingUboDeclaration.js +2 -1
  269. package/Shaders/ShadersInclude/gaussianSplattingUboDeclaration.js.map +1 -1
  270. package/Shaders/ShadersInclude/gaussianSplattingVertexDeclaration.js +1 -1
  271. package/Shaders/ShadersInclude/gaussianSplattingVertexDeclaration.js.map +1 -1
  272. package/Shaders/copyTextureToTexture.fragment.js +2 -2
  273. package/Shaders/copyTextureToTexture.fragment.js.map +1 -1
  274. package/Shaders/gaussianSplatting.vertex.js +3 -3
  275. package/Shaders/gaussianSplatting.vertex.js.map +1 -1
  276. package/Shaders/gaussianSplattingDepth.vertex.js +2 -2
  277. package/Shaders/gaussianSplattingDepth.vertex.js.map +1 -1
  278. package/ShadersWGSL/ShadersInclude/gaussianSplatting.js +35 -1
  279. package/ShadersWGSL/ShadersInclude/gaussianSplatting.js.map +1 -1
  280. package/ShadersWGSL/ShadersInclude/gaussianSplattingUboDeclaration.js +2 -1
  281. package/ShadersWGSL/ShadersInclude/gaussianSplattingUboDeclaration.js.map +1 -1
  282. package/ShadersWGSL/ShadersInclude/gaussianSplattingVertexDeclaration.js +1 -2
  283. package/ShadersWGSL/ShadersInclude/gaussianSplattingVertexDeclaration.js.map +1 -1
  284. package/ShadersWGSL/copyTextureToTexture.fragment.js +3 -3
  285. package/ShadersWGSL/copyTextureToTexture.fragment.js.map +1 -1
  286. package/ShadersWGSL/gaussianSplatting.vertex.js +3 -3
  287. package/ShadersWGSL/gaussianSplatting.vertex.js.map +1 -1
  288. package/ShadersWGSL/gaussianSplattingDepth.vertex.js +2 -2
  289. package/ShadersWGSL/gaussianSplattingDepth.vertex.js.map +1 -1
  290. package/XR/webXRSessionManager.js +4 -0
  291. package/XR/webXRSessionManager.js.map +1 -1
  292. package/package.json +1 -1
  293. package/scene.d.ts +1 -3
  294. package/scene.js +8 -7
  295. package/scene.js.map +1 -1
  296. package/FrameGraph/Passes/cullPass.js.map +0 -1
@@ -3,9 +3,6 @@ import type { IAudioParameterRampOptions } from "../../audioParameter.js";
3
3
  import type { _WebAudioEngine } from "../webAudioEngine.js";
4
4
  /** @internal */
5
5
  export declare class _WebAudioParameterComponent {
6
- private _deferredRampOptions;
7
- private _deferredTargetValue;
8
- private _isObservingUpdates;
9
6
  private _rampEndTime;
10
7
  private _engine;
11
8
  private _param;
@@ -24,22 +21,7 @@ export declare class _WebAudioParameterComponent {
24
21
  /**
25
22
  * Sets the target value of the audio parameter with an optional ramping duration and shape.
26
23
  *
27
- * If a ramp is close to finishing, it will wait for the ramp to finish before setting the new value; otherwise it
28
- * will throw an error because of a bug in Firefox that prevents active ramps from being cancelled with
29
- * `cancelScheduledValues`. See https://bugzilla.mozilla.org/show_bug.cgi?id=1752775. Other browsers do not have
30
- * this issue, but we throw an error in all browsers to ensure consistent behavior.
31
- *
32
- * There are other similar WebAudio APIs for ramping parameters, (e.g. `linearRampToValueAtTime` and
33
- * `exponentialRampToValueAtTime`) but they don't work in Firefox and Meta Quest Chrome.
34
- *
35
- * It may be better in the long run to implement our own ramping logic with a WASM audio worklet instead of using
36
- * `setValueCurveAtTime`. Another alternative is to use `setValueAtTime` wtih a custom shape, but that will
37
- * probably be a performance hit to maintain quality at audio rates.
38
- *
39
24
  * @internal
40
25
  */
41
26
  setTargetValue(value: number, options?: Nullable<Partial<IAudioParameterRampOptions>>): void;
42
- private _deferRamp;
43
- private _applyDeferredRamp;
44
- private _clearDeferredRamp;
45
27
  }
@@ -1,16 +1,4 @@
1
1
  import { _GetAudioParamCurveValues } from "../../audioUtils.js";
2
- /**
3
- * Maximum time in seconds to wait for an active ramp to finish before starting a new ramp.
4
- *
5
- * New ramps will throw an error if the active ramp has more than this amount of time remaining.
6
- *
7
- * This is needed because short ramps are used to avoid pops and clicks when setting audio parameters, and we
8
- * don't want to throw an error if a short ramp is active.
9
- *
10
- * This constant is set to 11 milliseconds, which is short enough to avoid perceptual differences in most cases, but
11
- * long enough to allow for short ramps to be completed in a reasonable time frame.
12
- */
13
- const MaxWaitTime = 0.011;
14
2
  /**
15
3
  * Minimum duration in seconds for a ramp to be considered valid.
16
4
  *
@@ -22,18 +10,7 @@ const MinRampDuration = 0.000001;
22
10
  export class _WebAudioParameterComponent {
23
11
  /** @internal */
24
12
  constructor(engine, param) {
25
- this._deferredRampOptions = {
26
- duration: 0,
27
- shape: "linear" /* AudioParameterRampShape.Linear */,
28
- };
29
- this._deferredTargetValue = -1;
30
- this._isObservingUpdates = false;
31
13
  this._rampEndTime = 0;
32
- this._applyDeferredRamp = () => {
33
- if (0 < this._deferredRampOptions.duration && this._rampEndTime < this._engine.currentTime) {
34
- this.setTargetValue(this._deferredTargetValue, this._deferredRampOptions);
35
- }
36
- };
37
14
  this._engine = engine;
38
15
  this._param = param;
39
16
  this._targetValue = param.value;
@@ -55,68 +32,31 @@ export class _WebAudioParameterComponent {
55
32
  }
56
33
  /** @internal */
57
34
  dispose() {
58
- this._clearDeferredRamp();
59
35
  this._param = null;
60
36
  this._engine = null;
61
37
  }
62
38
  /**
63
39
  * Sets the target value of the audio parameter with an optional ramping duration and shape.
64
40
  *
65
- * If a ramp is close to finishing, it will wait for the ramp to finish before setting the new value; otherwise it
66
- * will throw an error because of a bug in Firefox that prevents active ramps from being cancelled with
67
- * `cancelScheduledValues`. See https://bugzilla.mozilla.org/show_bug.cgi?id=1752775. Other browsers do not have
68
- * this issue, but we throw an error in all browsers to ensure consistent behavior.
69
- *
70
- * There are other similar WebAudio APIs for ramping parameters, (e.g. `linearRampToValueAtTime` and
71
- * `exponentialRampToValueAtTime`) but they don't work in Firefox and Meta Quest Chrome.
72
- *
73
- * It may be better in the long run to implement our own ramping logic with a WASM audio worklet instead of using
74
- * `setValueCurveAtTime`. Another alternative is to use `setValueAtTime` wtih a custom shape, but that will
75
- * probably be a performance hit to maintain quality at audio rates.
76
- *
77
41
  * @internal
78
42
  */
79
43
  setTargetValue(value, options = null) {
80
- if (this._targetValue === value) {
81
- return;
82
- }
83
44
  const shape = typeof options?.shape === "string" ? options.shape : "linear" /* AudioParameterRampShape.Linear */;
84
- let duration = typeof options?.duration === "number" ? Math.max(options.duration, this._engine.parameterRampDuration) : this._engine.parameterRampDuration;
85
45
  const startTime = this._engine.currentTime;
86
- if (startTime < this._rampEndTime) {
87
- const timeLeft = this._rampEndTime - startTime;
88
- if (MaxWaitTime < timeLeft) {
89
- throw new Error("Audio parameter not set. Wait for current ramp to finish.");
90
- }
91
- else {
92
- this._deferRamp(value, duration, shape);
93
- return;
94
- }
46
+ if (shape === "none" /* AudioParameterRampShape.None */) {
47
+ this._param.cancelScheduledValues(startTime);
48
+ this._param.value = this._targetValue = value;
49
+ this._rampEndTime = startTime;
50
+ return;
95
51
  }
52
+ let duration = typeof options?.duration === "number" ? Math.max(options.duration, this._engine.parameterRampDuration) : this._engine.parameterRampDuration;
96
53
  if ((duration = Math.max(this._engine.parameterRampDuration, duration)) < MinRampDuration) {
97
54
  this._param.setValueAtTime((this._targetValue = value), startTime);
98
55
  return;
99
56
  }
100
57
  this._param.cancelScheduledValues(startTime);
101
- this._param.setValueCurveAtTime(_GetAudioParamCurveValues(shape, this._targetValue, (this._targetValue = value)), startTime, duration);
102
- this._clearDeferredRamp();
58
+ this._param.setValueCurveAtTime(_GetAudioParamCurveValues(shape, this._param.value, (this._targetValue = value)), startTime, duration);
103
59
  this._rampEndTime = startTime + duration;
104
60
  }
105
- _deferRamp(value, duration, shape) {
106
- this._deferredRampOptions.duration = duration;
107
- this._deferredRampOptions.shape = shape;
108
- this._deferredTargetValue = value;
109
- if (!this._isObservingUpdates) {
110
- this._engine._addUpdateObserver(this._applyDeferredRamp);
111
- this._isObservingUpdates = true;
112
- }
113
- }
114
- _clearDeferredRamp() {
115
- this._deferredRampOptions.duration = 0;
116
- if (this._isObservingUpdates) {
117
- this._engine._removeUpdateObserver(this._applyDeferredRamp);
118
- this._isObservingUpdates = false;
119
- }
120
- }
121
61
  }
122
62
  //# sourceMappingURL=webAudioParameterComponent.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"webAudioParameterComponent.js","sourceRoot":"","sources":["../../../../../../dev/core/src/AudioV2/webAudio/components/webAudioParameterComponent.ts"],"names":[],"mappings":"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","sourcesContent":["import type { Nullable } from \"../../../types\";\nimport type { IAudioParameterRampOptions } from \"../../audioParameter\";\nimport { AudioParameterRampShape } from \"../../audioParameter\";\nimport { _GetAudioParamCurveValues } from \"../../audioUtils\";\nimport type { _WebAudioEngine } from \"../webAudioEngine\";\n\n/**\n * Maximum time in seconds to wait for an active ramp to finish before starting a new ramp.\n *\n * New ramps will throw an error if the active ramp has more than this amount of time remaining.\n *\n * This is needed because short ramps are used to avoid pops and clicks when setting audio parameters, and we\n * don't want to throw an error if a short ramp is active.\n *\n * This constant is set to 11 milliseconds, which is short enough to avoid perceptual differences in most cases, but\n * long enough to allow for short ramps to be completed in a reasonable time frame.\n */\nconst MaxWaitTime = 0.011;\n\n/**\n * Minimum duration in seconds for a ramp to be considered valid.\n *\n * If the duration is less than this value, the value will be set immediately instead of being ramped smoothly since\n * there is no perceptual difference for such short durations, so a ramp is not needed.\n */\nconst MinRampDuration = 0.000001;\n\n/** @internal */\nexport class _WebAudioParameterComponent {\n private _deferredRampOptions = {\n duration: 0,\n shape: AudioParameterRampShape.Linear,\n };\n private _deferredTargetValue = -1;\n private _isObservingUpdates = false;\n private _rampEndTime: number = 0;\n private _engine: _WebAudioEngine;\n private _param: AudioParam;\n private _targetValue: number;\n\n /** @internal */\n constructor(engine: _WebAudioEngine, param: AudioParam) {\n this._engine = engine;\n this._param = param;\n this._targetValue = param.value;\n }\n\n /** @internal */\n public get isRamping(): boolean {\n return this._engine.currentTime < this._rampEndTime;\n }\n\n /** @internal */\n public get targetValue(): number {\n return this._targetValue;\n }\n\n public set targetValue(value: number) {\n this.setTargetValue(value);\n }\n\n /** @internal */\n public get value(): number {\n return this._param.value;\n }\n\n /** @internal */\n public dispose(): void {\n this._clearDeferredRamp();\n\n this._param = null!;\n this._engine = null!;\n }\n\n /**\n * Sets the target value of the audio parameter with an optional ramping duration and shape.\n *\n * If a ramp is close to finishing, it will wait for the ramp to finish before setting the new value; otherwise it\n * will throw an error because of a bug in Firefox that prevents active ramps from being cancelled with\n * `cancelScheduledValues`. See https://bugzilla.mozilla.org/show_bug.cgi?id=1752775. Other browsers do not have\n * this issue, but we throw an error in all browsers to ensure consistent behavior.\n *\n * There are other similar WebAudio APIs for ramping parameters, (e.g. `linearRampToValueAtTime` and\n * `exponentialRampToValueAtTime`) but they don't work in Firefox and Meta Quest Chrome.\n *\n * It may be better in the long run to implement our own ramping logic with a WASM audio worklet instead of using\n * `setValueCurveAtTime`. Another alternative is to use `setValueAtTime` wtih a custom shape, but that will\n * probably be a performance hit to maintain quality at audio rates.\n *\n * @internal\n */\n public setTargetValue(value: number, options: Nullable<Partial<IAudioParameterRampOptions>> = null): void {\n if (this._targetValue === value) {\n return;\n }\n\n const shape = typeof options?.shape === \"string\" ? options.shape : AudioParameterRampShape.Linear;\n\n let duration = typeof options?.duration === \"number\" ? Math.max(options.duration, this._engine.parameterRampDuration) : this._engine.parameterRampDuration;\n const startTime = this._engine.currentTime;\n\n if (startTime < this._rampEndTime) {\n const timeLeft = this._rampEndTime - startTime;\n\n if (MaxWaitTime < timeLeft) {\n throw new Error(\"Audio parameter not set. Wait for current ramp to finish.\");\n } else {\n this._deferRamp(value, duration, shape);\n return;\n }\n }\n\n if ((duration = Math.max(this._engine.parameterRampDuration, duration)) < MinRampDuration) {\n this._param.setValueAtTime((this._targetValue = value), startTime);\n return;\n }\n\n this._param.cancelScheduledValues(startTime);\n this._param.setValueCurveAtTime(_GetAudioParamCurveValues(shape, this._targetValue, (this._targetValue = value)), startTime, duration);\n\n this._clearDeferredRamp();\n\n this._rampEndTime = startTime + duration;\n }\n\n private _deferRamp(value: number, duration: number, shape: AudioParameterRampShape): void {\n this._deferredRampOptions.duration = duration;\n this._deferredRampOptions.shape = shape;\n this._deferredTargetValue = value;\n\n if (!this._isObservingUpdates) {\n this._engine._addUpdateObserver(this._applyDeferredRamp);\n this._isObservingUpdates = true;\n }\n }\n\n private _applyDeferredRamp = () => {\n if (0 < this._deferredRampOptions.duration && this._rampEndTime < this._engine.currentTime) {\n this.setTargetValue(this._deferredTargetValue, this._deferredRampOptions);\n }\n };\n\n private _clearDeferredRamp(): void {\n this._deferredRampOptions.duration = 0;\n\n if (this._isObservingUpdates) {\n this._engine._removeUpdateObserver(this._applyDeferredRamp);\n this._isObservingUpdates = false;\n }\n }\n}\n"]}
1
+ {"version":3,"file":"webAudioParameterComponent.js","sourceRoot":"","sources":["../../../../../../dev/core/src/AudioV2/webAudio/components/webAudioParameterComponent.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,yBAAyB,EAAE,MAAM,kBAAkB,CAAC;AAG7D;;;;;GAKG;AACH,MAAM,eAAe,GAAG,QAAQ,CAAC;AAEjC,gBAAgB;AAChB,MAAM,OAAO,2BAA2B;IAMpC,gBAAgB;IAChB,YAAY,MAAuB,EAAE,KAAiB;QAN9C,iBAAY,GAAW,CAAC,CAAC;QAO7B,IAAI,CAAC,OAAO,GAAG,MAAM,CAAC;QACtB,IAAI,CAAC,MAAM,GAAG,KAAK,CAAC;QACpB,IAAI,CAAC,YAAY,GAAG,KAAK,CAAC,KAAK,CAAC;IACpC,CAAC;IAED,gBAAgB;IAChB,IAAW,SAAS;QAChB,OAAO,IAAI,CAAC,OAAO,CAAC,WAAW,GAAG,IAAI,CAAC,YAAY,CAAC;IACxD,CAAC;IAED,gBAAgB;IAChB,IAAW,WAAW;QAClB,OAAO,IAAI,CAAC,YAAY,CAAC;IAC7B,CAAC;IAED,IAAW,WAAW,CAAC,KAAa;QAChC,IAAI,CAAC,cAAc,CAAC,KAAK,CAAC,CAAC;IAC/B,CAAC;IAED,gBAAgB;IAChB,IAAW,KAAK;QACZ,OAAO,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC;IAC7B,CAAC;IAED,gBAAgB;IACT,OAAO;QACV,IAAI,CAAC,MAAM,GAAG,IAAK,CAAC;QACpB,IAAI,CAAC,OAAO,GAAG,IAAK,CAAC;IACzB,CAAC;IAED;;;;OAIG;IACI,cAAc,CAAC,KAAa,EAAE,UAAyD,IAAI;QAC9F,MAAM,KAAK,GAAG,OAAO,OAAO,EAAE,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,8CAA+B,CAAC;QAElG,MAAM,SAAS,GAAG,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC;QAE3C,IAAI,KAAK,8CAAiC,EAAE,CAAC;YACzC,IAAI,CAAC,MAAM,CAAC,qBAAqB,CAAC,SAAS,CAAC,CAAC;YAC7C,IAAI,CAAC,MAAM,CAAC,KAAK,GAAG,IAAI,CAAC,YAAY,GAAG,KAAK,CAAC;YAC9C,IAAI,CAAC,YAAY,GAAG,SAAS,CAAC;YAC9B,OAAO;QACX,CAAC;QAED,IAAI,QAAQ,GAAG,OAAO,OAAO,EAAE,QAAQ,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,QAAQ,EAAE,IAAI,CAAC,OAAO,CAAC,qBAAqB,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,qBAAqB,CAAC;QAE3J,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,qBAAqB,EAAE,QAAQ,CAAC,CAAC,GAAG,eAAe,EAAE,CAAC;YACxF,IAAI,CAAC,MAAM,CAAC,cAAc,CAAC,CAAC,IAAI,CAAC,YAAY,GAAG,KAAK,CAAC,EAAE,SAAS,CAAC,CAAC;YACnE,OAAO;QACX,CAAC;QAED,IAAI,CAAC,MAAM,CAAC,qBAAqB,CAAC,SAAS,CAAC,CAAC;QAC7C,IAAI,CAAC,MAAM,CAAC,mBAAmB,CAAC,yBAAyB,CAAC,KAAK,EAAE,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,IAAI,CAAC,YAAY,GAAG,KAAK,CAAC,CAAC,EAAE,SAAS,EAAE,QAAQ,CAAC,CAAC;QAEvI,IAAI,CAAC,YAAY,GAAG,SAAS,GAAG,QAAQ,CAAC;IAC7C,CAAC;CACJ","sourcesContent":["import type { Nullable } from \"../../../types\";\nimport type { IAudioParameterRampOptions } from \"../../audioParameter\";\nimport { AudioParameterRampShape } from \"../../audioParameter\";\nimport { _GetAudioParamCurveValues } from \"../../audioUtils\";\nimport type { _WebAudioEngine } from \"../webAudioEngine\";\n\n/**\n * Minimum duration in seconds for a ramp to be considered valid.\n *\n * If the duration is less than this value, the value will be set immediately instead of being ramped smoothly since\n * there is no perceptual difference for such short durations, so a ramp is not needed.\n */\nconst MinRampDuration = 0.000001;\n\n/** @internal */\nexport class _WebAudioParameterComponent {\n private _rampEndTime: number = 0;\n private _engine: _WebAudioEngine;\n private _param: AudioParam;\n private _targetValue: number;\n\n /** @internal */\n constructor(engine: _WebAudioEngine, param: AudioParam) {\n this._engine = engine;\n this._param = param;\n this._targetValue = param.value;\n }\n\n /** @internal */\n public get isRamping(): boolean {\n return this._engine.currentTime < this._rampEndTime;\n }\n\n /** @internal */\n public get targetValue(): number {\n return this._targetValue;\n }\n\n public set targetValue(value: number) {\n this.setTargetValue(value);\n }\n\n /** @internal */\n public get value(): number {\n return this._param.value;\n }\n\n /** @internal */\n public dispose(): void {\n this._param = null!;\n this._engine = null!;\n }\n\n /**\n * Sets the target value of the audio parameter with an optional ramping duration and shape.\n *\n * @internal\n */\n public setTargetValue(value: number, options: Nullable<Partial<IAudioParameterRampOptions>> = null): void {\n const shape = typeof options?.shape === \"string\" ? options.shape : AudioParameterRampShape.Linear;\n\n const startTime = this._engine.currentTime;\n\n if (shape === AudioParameterRampShape.None) {\n this._param.cancelScheduledValues(startTime);\n this._param.value = this._targetValue = value;\n this._rampEndTime = startTime;\n return;\n }\n\n let duration = typeof options?.duration === \"number\" ? Math.max(options.duration, this._engine.parameterRampDuration) : this._engine.parameterRampDuration;\n\n if ((duration = Math.max(this._engine.parameterRampDuration, duration)) < MinRampDuration) {\n this._param.setValueAtTime((this._targetValue = value), startTime);\n return;\n }\n\n this._param.cancelScheduledValues(startTime);\n this._param.setValueCurveAtTime(_GetAudioParamCurveValues(shape, this._param.value, (this._targetValue = value)), startTime, duration);\n\n this._rampEndTime = startTime + duration;\n }\n}\n"]}
@@ -0,0 +1,58 @@
1
+ import type { Behavior } from "../behavior.js";
2
+ import { EasingFunction } from "../../Animations/easing.js";
3
+ import type { Camera } from "../../Cameras/camera.js";
4
+ import type { IColor3Like, IColor4Like, IMatrixLike, IQuaternionLike, IVector2Like, IVector3Like } from "../../Maths/math.like.js";
5
+ export type AllowedAnimValue = number | IVector2Like | IVector3Like | IQuaternionLike | IMatrixLike | IColor3Like | IColor4Like | SizeLike | undefined;
6
+ /**
7
+ * Animate camera property changes with an interpolation effect
8
+ * @see https://doc.babylonjs.com/features/featuresDeepDive/behaviors/cameraBehaviors
9
+ */
10
+ export declare class InterpolatingBehavior<C extends Camera = Camera> implements Behavior<C> {
11
+ /**
12
+ * Gets the name of the behavior.
13
+ */
14
+ get name(): string;
15
+ /**
16
+ * The easing function to use for interpolation
17
+ */
18
+ easingFunction: EasingFunction;
19
+ /**
20
+ * The easing mode (default is EASINGMODE_EASEINOUT)
21
+ */
22
+ easingMode: number;
23
+ /**
24
+ * Duration of the animation in milliseconds
25
+ */
26
+ transitionDuration: number;
27
+ private _attachedCamera;
28
+ private _animatables;
29
+ private _promiseResolve?;
30
+ /**
31
+ * Initializes the behavior
32
+ */
33
+ constructor();
34
+ /**
35
+ * Initializes the behavior
36
+ */
37
+ init(): void;
38
+ /**
39
+ * Attaches the behavior to a camera
40
+ * @param camera The camera to attach to
41
+ */
42
+ attach(camera: C): void;
43
+ /**
44
+ * Detaches the behavior from the camera
45
+ */
46
+ detach(): void;
47
+ get isInterpolating(): boolean;
48
+ /**
49
+ * Stops and removes all animations
50
+ */
51
+ stopAllAnimations(): void;
52
+ updateProperties<K extends keyof C>(properties: Map<K, AllowedAnimValue>): void;
53
+ animatePropertiesAsync<K extends keyof C>(properties: Map<K, AllowedAnimValue>, transitionDuration?: number, easingFn?: EasingFunction): Promise<void>;
54
+ }
55
+ export type SizeLike = {
56
+ width: number;
57
+ height: number;
58
+ };
@@ -0,0 +1,157 @@
1
+ import { CubicEase, EasingFunction } from "../../Animations/easing.js";
2
+ import { Animation } from "../../Animations/animation.js";
3
+ /**
4
+ * Animate camera property changes with an interpolation effect
5
+ * @see https://doc.babylonjs.com/features/featuresDeepDive/behaviors/cameraBehaviors
6
+ */
7
+ export class InterpolatingBehavior {
8
+ /**
9
+ * Gets the name of the behavior.
10
+ */
11
+ get name() {
12
+ return "Interpolating";
13
+ }
14
+ /**
15
+ * Initializes the behavior
16
+ */
17
+ constructor() {
18
+ /**
19
+ * The easing function to use for interpolation
20
+ */
21
+ this.easingFunction = new CubicEase();
22
+ /**
23
+ * The easing mode (default is EASINGMODE_EASEINOUT)
24
+ */
25
+ this.easingMode = EasingFunction.EASINGMODE_EASEINOUT;
26
+ /**
27
+ * Duration of the animation in milliseconds
28
+ */
29
+ this.transitionDuration = 450;
30
+ this._attachedCamera = null;
31
+ this._animatables = new Map();
32
+ this.easingFunction.setEasingMode(this.easingMode);
33
+ }
34
+ /**
35
+ * Initializes the behavior
36
+ */
37
+ init() {
38
+ // Nothing to do on init
39
+ }
40
+ /**
41
+ * Attaches the behavior to a camera
42
+ * @param camera The camera to attach to
43
+ */
44
+ attach(camera) {
45
+ this._attachedCamera = camera;
46
+ }
47
+ /**
48
+ * Detaches the behavior from the camera
49
+ */
50
+ detach() {
51
+ if (!this._attachedCamera) {
52
+ return;
53
+ }
54
+ this.stopAllAnimations();
55
+ this._attachedCamera = null;
56
+ }
57
+ get isInterpolating() {
58
+ return this._animatables.size > 0;
59
+ }
60
+ /**
61
+ * Stops and removes all animations
62
+ */
63
+ stopAllAnimations() {
64
+ if (this._attachedCamera) {
65
+ this._animatables.forEach((animatable) => animatable.stop());
66
+ }
67
+ this._animatables.clear();
68
+ this._promiseResolve?.();
69
+ this._promiseResolve = undefined;
70
+ }
71
+ updateProperties(properties) {
72
+ properties.forEach((value, key) => {
73
+ if (value !== undefined) {
74
+ const animatable = this._animatables.get(String(key));
75
+ animatable && (animatable.target = value);
76
+ }
77
+ });
78
+ }
79
+ async animatePropertiesAsync(properties, transitionDuration = this.transitionDuration, easingFn = this.easingFunction) {
80
+ const promise = new Promise((resolve) => {
81
+ this._promiseResolve = resolve;
82
+ this.stopAllAnimations();
83
+ if (!this._attachedCamera) {
84
+ this._promiseResolve = undefined;
85
+ return resolve();
86
+ }
87
+ const camera = this._attachedCamera;
88
+ const scene = camera.getScene();
89
+ const checkClear = (animation) => {
90
+ this._animatables.delete(animation);
91
+ if (this._animatables.size === 0) {
92
+ this._promiseResolve = undefined;
93
+ resolve();
94
+ }
95
+ };
96
+ properties.forEach((value, key) => {
97
+ if (value !== undefined) {
98
+ const propertyName = String(key);
99
+ const animation = Animation.CreateAnimation(propertyName, GetAnimationType(value), 60, easingFn);
100
+ const animatable = Animation.TransitionTo(propertyName, value, camera, scene, 60, animation, transitionDuration, () => checkClear(propertyName));
101
+ if (animatable) {
102
+ this._animatables.set(propertyName, animatable);
103
+ }
104
+ }
105
+ });
106
+ });
107
+ return await promise;
108
+ }
109
+ }
110
+ // Structural type-guards (no instanceof)
111
+ function IsQuaternionLike(v) {
112
+ return v != null && typeof v.x === "number" && typeof v.y === "number" && typeof v.z === "number" && typeof v.w === "number";
113
+ }
114
+ function IsMatrixLike(v) {
115
+ return v != null && (Array.isArray(v.m) || typeof v.m === "object");
116
+ }
117
+ function IsVector3Like(v) {
118
+ return v != null && typeof v.x === "number" && typeof v.y === "number" && typeof v.z === "number";
119
+ }
120
+ function IsVector2Like(v) {
121
+ return v != null && typeof v.x === "number" && typeof v.y === "number";
122
+ }
123
+ function IsColor3Like(v) {
124
+ return v != null && typeof v.r === "number" && typeof v.g === "number" && typeof v.b === "number";
125
+ }
126
+ function IsColor4Like(v) {
127
+ return v != null && typeof v.r === "number" && typeof v.g === "number" && typeof v.b === "number" && typeof v.a === "number";
128
+ }
129
+ function IsSizeLike(v) {
130
+ return v != null && typeof v.width === "number" && typeof v.height === "number";
131
+ }
132
+ const GetAnimationType = (value) => {
133
+ if (IsQuaternionLike(value)) {
134
+ return Animation.ANIMATIONTYPE_QUATERNION;
135
+ }
136
+ if (IsMatrixLike(value)) {
137
+ return Animation.ANIMATIONTYPE_MATRIX;
138
+ }
139
+ if (IsVector3Like(value)) {
140
+ return Animation.ANIMATIONTYPE_VECTOR3;
141
+ }
142
+ if (IsVector2Like(value)) {
143
+ return Animation.ANIMATIONTYPE_VECTOR2;
144
+ }
145
+ if (IsColor3Like(value)) {
146
+ return Animation.ANIMATIONTYPE_COLOR3;
147
+ }
148
+ if (IsColor4Like(value)) {
149
+ return Animation.ANIMATIONTYPE_COLOR4;
150
+ }
151
+ if (IsSizeLike(value)) {
152
+ return Animation.ANIMATIONTYPE_SIZE;
153
+ }
154
+ // Fallback to float for numbers and unknown shapes
155
+ return Animation.ANIMATIONTYPE_FLOAT;
156
+ };
157
+ //# sourceMappingURL=interpolatingBehavior.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"interpolatingBehavior.js","sourceRoot":"","sources":["../../../../../dev/core/src/Behaviors/Cameras/interpolatingBehavior.ts"],"names":[],"mappings":"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","sourcesContent":["import type { Behavior } from \"../behavior\";\r\nimport { CubicEase, EasingFunction } from \"../../Animations/easing\";\r\nimport type { Nullable } from \"../../types\";\r\nimport type { Animatable } from \"../../Animations/animatable.core\";\r\nimport { Animation } from \"../../Animations/animation\";\r\nimport type { Camera } from \"../../Cameras/camera\";\r\nimport type { IColor3Like, IColor4Like, IMatrixLike, IQuaternionLike, IVector2Like, IVector3Like } from \"../../Maths/math.like\";\r\n\r\nexport type AllowedAnimValue = number | IVector2Like | IVector3Like | IQuaternionLike | IMatrixLike | IColor3Like | IColor4Like | SizeLike | undefined;\r\n\r\n/**\r\n * Animate camera property changes with an interpolation effect\r\n * @see https://doc.babylonjs.com/features/featuresDeepDive/behaviors/cameraBehaviors\r\n */\r\nexport class InterpolatingBehavior<C extends Camera = Camera> implements Behavior<C> {\r\n /**\r\n * Gets the name of the behavior.\r\n */\r\n public get name(): string {\r\n return \"Interpolating\";\r\n }\r\n\r\n /**\r\n * The easing function to use for interpolation\r\n */\r\n public easingFunction: EasingFunction = new CubicEase();\r\n\r\n /**\r\n * The easing mode (default is EASINGMODE_EASEINOUT)\r\n */\r\n public easingMode = EasingFunction.EASINGMODE_EASEINOUT;\r\n\r\n /**\r\n * Duration of the animation in milliseconds\r\n */\r\n public transitionDuration = 450;\r\n\r\n private _attachedCamera: Nullable<C> = null;\r\n private _animatables: Map<string, Animatable> = new Map<string, Animatable>();\r\n private _promiseResolve?: () => void;\r\n\r\n /**\r\n * Initializes the behavior\r\n */\r\n constructor() {\r\n this.easingFunction.setEasingMode(this.easingMode);\r\n }\r\n\r\n /**\r\n * Initializes the behavior\r\n */\r\n public init(): void {\r\n // Nothing to do on init\r\n }\r\n\r\n /**\r\n * Attaches the behavior to a camera\r\n * @param camera The camera to attach to\r\n */\r\n public attach(camera: C): void {\r\n this._attachedCamera = camera;\r\n }\r\n\r\n /**\r\n * Detaches the behavior from the camera\r\n */\r\n public detach(): void {\r\n if (!this._attachedCamera) {\r\n return;\r\n }\r\n\r\n this.stopAllAnimations();\r\n this._attachedCamera = null;\r\n }\r\n\r\n public get isInterpolating(): boolean {\r\n return this._animatables.size > 0;\r\n }\r\n\r\n /**\r\n * Stops and removes all animations\r\n */\r\n public stopAllAnimations(): void {\r\n if (this._attachedCamera) {\r\n this._animatables.forEach((animatable) => animatable.stop());\r\n }\r\n this._animatables.clear();\r\n this._promiseResolve?.();\r\n this._promiseResolve = undefined;\r\n }\r\n\r\n public updateProperties<K extends keyof C>(properties: Map<K, AllowedAnimValue>): void {\r\n properties.forEach((value, key) => {\r\n if (value !== undefined) {\r\n const animatable = this._animatables.get(String(key));\r\n animatable && (animatable.target = value as unknown as any);\r\n }\r\n });\r\n }\r\n\r\n public async animatePropertiesAsync<K extends keyof C>(\r\n properties: Map<K, AllowedAnimValue>,\r\n transitionDuration: number = this.transitionDuration,\r\n easingFn: EasingFunction = this.easingFunction\r\n ): Promise<void> {\r\n const promise = new Promise<void>((resolve) => {\r\n this._promiseResolve = resolve;\r\n this.stopAllAnimations();\r\n if (!this._attachedCamera) {\r\n this._promiseResolve = undefined;\r\n return resolve();\r\n }\r\n const camera = this._attachedCamera;\r\n const scene = camera.getScene();\r\n\r\n const checkClear = (animation: string) => {\r\n this._animatables.delete(animation);\r\n if (this._animatables.size === 0) {\r\n this._promiseResolve = undefined;\r\n resolve();\r\n }\r\n };\r\n\r\n properties.forEach((value, key) => {\r\n if (value !== undefined) {\r\n const propertyName = String(key);\r\n const animation = Animation.CreateAnimation(propertyName, GetAnimationType(value), 60, easingFn);\r\n const animatable = Animation.TransitionTo(propertyName, value, camera, scene, 60, animation, transitionDuration, () => checkClear(propertyName));\r\n if (animatable) {\r\n this._animatables.set(propertyName, animatable);\r\n }\r\n }\r\n });\r\n });\r\n return await promise;\r\n }\r\n}\r\n\r\n// Structural type-guards (no instanceof)\r\nfunction IsQuaternionLike(v: any): v is IQuaternionLike {\r\n return v != null && typeof v.x === \"number\" && typeof v.y === \"number\" && typeof v.z === \"number\" && typeof v.w === \"number\";\r\n}\r\n\r\nfunction IsMatrixLike(v: any): v is IMatrixLike {\r\n return v != null && (Array.isArray((v as any).m) || typeof (v as any).m === \"object\");\r\n}\r\n\r\nfunction IsVector3Like(v: any): v is IVector3Like {\r\n return v != null && typeof v.x === \"number\" && typeof v.y === \"number\" && typeof v.z === \"number\";\r\n}\r\n\r\nfunction IsVector2Like(v: any): v is IVector2Like {\r\n return v != null && typeof v.x === \"number\" && typeof v.y === \"number\";\r\n}\r\n\r\nfunction IsColor3Like(v: any): v is IColor3Like {\r\n return v != null && typeof v.r === \"number\" && typeof v.g === \"number\" && typeof v.b === \"number\";\r\n}\r\n\r\nfunction IsColor4Like(v: any): v is IColor4Like {\r\n return v != null && typeof v.r === \"number\" && typeof v.g === \"number\" && typeof v.b === \"number\" && typeof v.a === \"number\";\r\n}\r\n\r\nexport type SizeLike = { width: number; height: number };\r\n\r\nfunction IsSizeLike(v: any): v is SizeLike {\r\n return v != null && typeof v.width === \"number\" && typeof v.height === \"number\";\r\n}\r\n\r\nconst GetAnimationType = (value: AllowedAnimValue): number => {\r\n if (IsQuaternionLike(value)) {\r\n return Animation.ANIMATIONTYPE_QUATERNION;\r\n }\r\n if (IsMatrixLike(value)) {\r\n return Animation.ANIMATIONTYPE_MATRIX;\r\n }\r\n if (IsVector3Like(value)) {\r\n return Animation.ANIMATIONTYPE_VECTOR3;\r\n }\r\n if (IsVector2Like(value)) {\r\n return Animation.ANIMATIONTYPE_VECTOR2;\r\n }\r\n if (IsColor3Like(value)) {\r\n return Animation.ANIMATIONTYPE_COLOR3;\r\n }\r\n if (IsColor4Like(value)) {\r\n return Animation.ANIMATIONTYPE_COLOR4;\r\n }\r\n if (IsSizeLike(value)) {\r\n return Animation.ANIMATIONTYPE_SIZE;\r\n }\r\n\r\n // Fallback to float for numbers and unknown shapes\r\n return Animation.ANIMATIONTYPE_FLOAT;\r\n};\r\n"]}
@@ -1,13 +1,13 @@
1
1
  import type { Nullable } from "../../types.js";
2
2
  import type { ArcRotateCamera } from "../../Cameras/arcRotateCamera.js";
3
- import { BaseCameraPointersInput } from "../../Cameras/Inputs/BaseCameraPointersInput.js";
3
+ import { OrbitCameraPointersInput } from "../../Cameras/Inputs/orbitCameraPointersInput.js";
4
4
  import type { PointerTouch } from "../../Events/pointerEvents.js";
5
5
  import type { IPointerEvent } from "../../Events/deviceInputEvents.js";
6
6
  /**
7
7
  * Manage the pointers inputs to control an arc rotate camera.
8
8
  * @see https://doc.babylonjs.com/features/featuresDeepDive/cameras/customizingCameraInputs
9
9
  */
10
- export declare class ArcRotateCameraPointersInput extends BaseCameraPointersInput {
10
+ export declare class ArcRotateCameraPointersInput extends OrbitCameraPointersInput {
11
11
  /**
12
12
  * Defines the camera the input is attached to.
13
13
  */
@@ -53,42 +53,27 @@ export declare class ArcRotateCameraPointersInput extends BaseCameraPointersInpu
53
53
  * Overrides pinchDeltaPercentage and pinchPrecision.
54
54
  */
55
55
  useNaturalPinchZoom: boolean;
56
- /**
57
- * Defines whether zoom (2 fingers pinch) is enabled through multitouch
58
- */
59
- pinchZoom: boolean;
60
56
  /**
61
57
  * Defines the pointer panning sensibility or how fast is the camera moving.
62
58
  */
63
59
  panningSensibility: number;
64
- /**
65
- * Defines whether panning (2 fingers swipe) is enabled through multitouch.
66
- */
67
- multiTouchPanning: boolean;
68
- /**
69
- * Defines whether panning is enabled for both pan (2 fingers swipe) and
70
- * zoom (pinch) through multitouch.
71
- */
72
- multiTouchPanAndZoom: boolean;
73
60
  /**
74
61
  * Revers pinch action direction.
75
62
  */
76
63
  pinchInwards: boolean;
77
64
  private _isPanClick;
78
- private _twoFingerActivityCount;
79
- private _isPinching;
80
65
  /**
81
66
  * Move camera from multi touch panning positions.
82
67
  * @param previousMultiTouchPanPosition
83
68
  * @param multiTouchPanPosition
84
69
  */
85
- private _computeMultiTouchPanning;
70
+ protected _computeMultiTouchPanning(previousMultiTouchPanPosition: Nullable<PointerTouch>, multiTouchPanPosition: Nullable<PointerTouch>): void;
86
71
  /**
87
- * Move camera from pinch zoom distances.
72
+ * Move camera from multitouch (pinch) zoom distances.
88
73
  * @param previousPinchSquaredDistance
89
74
  * @param pinchSquaredDistance
90
75
  */
91
- private _computePinchZoom;
76
+ protected _computePinchZoom(previousPinchSquaredDistance: number, pinchSquaredDistance: number): void;
92
77
  /**
93
78
  * Called on pointer POINTERMOVE event if only a single touch is active.
94
79
  * @param point current touch point
@@ -1,12 +1,12 @@
1
1
  import { __decorate } from "../../tslib.es6.js";
2
2
  import { serialize } from "../../Misc/decorators.js";
3
3
  import { CameraInputTypes } from "../../Cameras/cameraInputsManager.js";
4
- import { BaseCameraPointersInput } from "../../Cameras/Inputs/BaseCameraPointersInput.js";
4
+ import { OrbitCameraPointersInput } from "../../Cameras/Inputs/orbitCameraPointersInput.js";
5
5
  /**
6
6
  * Manage the pointers inputs to control an arc rotate camera.
7
7
  * @see https://doc.babylonjs.com/features/featuresDeepDive/cameras/customizingCameraInputs
8
8
  */
9
- export class ArcRotateCameraPointersInput extends BaseCameraPointersInput {
9
+ export class ArcRotateCameraPointersInput extends OrbitCameraPointersInput {
10
10
  constructor() {
11
11
  super(...arguments);
12
12
  /**
@@ -41,30 +41,15 @@ export class ArcRotateCameraPointersInput extends BaseCameraPointersInput {
41
41
  * Overrides pinchDeltaPercentage and pinchPrecision.
42
42
  */
43
43
  this.useNaturalPinchZoom = false;
44
- /**
45
- * Defines whether zoom (2 fingers pinch) is enabled through multitouch
46
- */
47
- this.pinchZoom = true;
48
44
  /**
49
45
  * Defines the pointer panning sensibility or how fast is the camera moving.
50
46
  */
51
47
  this.panningSensibility = 1000.0;
52
- /**
53
- * Defines whether panning (2 fingers swipe) is enabled through multitouch.
54
- */
55
- this.multiTouchPanning = true;
56
- /**
57
- * Defines whether panning is enabled for both pan (2 fingers swipe) and
58
- * zoom (pinch) through multitouch.
59
- */
60
- this.multiTouchPanAndZoom = true;
61
48
  /**
62
49
  * Revers pinch action direction.
63
50
  */
64
51
  this.pinchInwards = true;
65
52
  this._isPanClick = false;
66
- this._twoFingerActivityCount = 0;
67
- this._isPinching = false;
68
53
  }
69
54
  /**
70
55
  * Gets the class name of the current input.
@@ -87,7 +72,7 @@ export class ArcRotateCameraPointersInput extends BaseCameraPointersInput {
87
72
  }
88
73
  }
89
74
  /**
90
- * Move camera from pinch zoom distances.
75
+ * Move camera from multitouch (pinch) zoom distances.
91
76
  * @param previousPinchSquaredDistance
92
77
  * @param pinchSquaredDistance
93
78
  */
@@ -139,44 +124,9 @@ export class ArcRotateCameraPointersInput extends BaseCameraPointersInput {
139
124
  * @param multiTouchPanPosition multi-touch position in current step
140
125
  */
141
126
  onMultiTouch(pointA, pointB, previousPinchSquaredDistance, pinchSquaredDistance, previousMultiTouchPanPosition, multiTouchPanPosition) {
142
- if (previousPinchSquaredDistance === 0 && previousMultiTouchPanPosition === null) {
143
- // First time this method is called for new pinch.
144
- // Next time this is called there will be a
145
- // previousPinchSquaredDistance and pinchSquaredDistance to compare.
146
- return;
147
- }
148
- if (pinchSquaredDistance === 0 && multiTouchPanPosition === null) {
149
- // Last time this method is called at the end of a pinch.
150
- return;
151
- }
152
- // Zoom and panning enabled together
153
- if (this.multiTouchPanAndZoom) {
154
- this._computePinchZoom(previousPinchSquaredDistance, pinchSquaredDistance);
155
- this._computeMultiTouchPanning(previousMultiTouchPanPosition, multiTouchPanPosition);
156
- // Zoom and panning enabled but only one at a time
157
- }
158
- else if (this.multiTouchPanning && this.pinchZoom) {
159
- this._twoFingerActivityCount++;
160
- if (this._isPinching ||
161
- (this._twoFingerActivityCount < 20 && Math.abs(Math.sqrt(pinchSquaredDistance) - Math.sqrt(previousPinchSquaredDistance)) > this.camera.pinchToPanMaxDistance)) {
162
- // Since pinch has not been active long, assume we intend to zoom.
163
- this._computePinchZoom(previousPinchSquaredDistance, pinchSquaredDistance);
164
- // Since we are pinching, remain pinching on next iteration.
165
- this._isPinching = true;
166
- }
167
- else {
168
- // Pause between pinch starting and moving implies not a zoom event. Pan instead.
169
- this._computeMultiTouchPanning(previousMultiTouchPanPosition, multiTouchPanPosition);
170
- }
171
- // Panning enabled, zoom disabled
172
- }
173
- else if (this.multiTouchPanning) {
174
- this._computeMultiTouchPanning(previousMultiTouchPanPosition, multiTouchPanPosition);
175
- // Zoom enabled, panning disabled
176
- }
177
- else if (this.pinchZoom) {
178
- this._computePinchZoom(previousPinchSquaredDistance, pinchSquaredDistance);
179
- }
127
+ this._shouldStartPinchZoom =
128
+ this._twoFingerActivityCount < 20 && Math.abs(Math.sqrt(pinchSquaredDistance) - Math.sqrt(previousPinchSquaredDistance)) > this.camera.pinchToPanMaxDistance;
129
+ super.onMultiTouch(pointA, pointB, previousPinchSquaredDistance, pinchSquaredDistance, previousMultiTouchPanPosition, multiTouchPanPosition);
180
130
  }
181
131
  /**
182
132
  * Called each time a new POINTERDOWN event occurs. Ie, for each button
@@ -185,6 +135,7 @@ export class ArcRotateCameraPointersInput extends BaseCameraPointersInput {
185
135
  */
186
136
  onButtonDown(evt) {
187
137
  this._isPanClick = evt.button === this.camera._panningMouseButton;
138
+ super.onButtonDown(evt);
188
139
  }
189
140
  /**
190
141
  * Called each time a new POINTERUP event occurs. Ie, for each button
@@ -192,16 +143,14 @@ export class ArcRotateCameraPointersInput extends BaseCameraPointersInput {
192
143
  * @param _evt Defines the event to track
193
144
  */
194
145
  onButtonUp(_evt) {
195
- this._twoFingerActivityCount = 0;
196
- this._isPinching = false;
146
+ super.onButtonUp(_evt);
197
147
  }
198
148
  /**
199
149
  * Called when window becomes inactive.
200
150
  */
201
151
  onLostFocus() {
202
152
  this._isPanClick = false;
203
- this._twoFingerActivityCount = 0;
204
- this._isPinching = false;
153
+ super.onLostFocus();
205
154
  }
206
155
  }
207
156
  /**
@@ -226,17 +175,8 @@ __decorate([
226
175
  __decorate([
227
176
  serialize()
228
177
  ], ArcRotateCameraPointersInput.prototype, "useNaturalPinchZoom", void 0);
229
- __decorate([
230
- serialize()
231
- ], ArcRotateCameraPointersInput.prototype, "pinchZoom", void 0);
232
178
  __decorate([
233
179
  serialize()
234
180
  ], ArcRotateCameraPointersInput.prototype, "panningSensibility", void 0);
235
- __decorate([
236
- serialize()
237
- ], ArcRotateCameraPointersInput.prototype, "multiTouchPanning", void 0);
238
- __decorate([
239
- serialize()
240
- ], ArcRotateCameraPointersInput.prototype, "multiTouchPanAndZoom", void 0);
241
181
  CameraInputTypes["ArcRotateCameraPointersInput"] = ArcRotateCameraPointersInput;
242
182
  //# sourceMappingURL=arcRotateCameraPointersInput.js.map