@babylonjs/core 5.0.0-alpha.54 → 5.0.0-alpha.58

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 (393) hide show
  1. package/Bones/boneIKController.d.ts +1 -2
  2. package/Bones/boneIKController.js +12 -37
  3. package/Bones/boneIKController.js.map +1 -1
  4. package/Cameras/Inputs/BaseCameraPointersInput.d.ts +0 -1
  5. package/Cameras/Inputs/BaseCameraPointersInput.js +5 -5
  6. package/Cameras/Inputs/BaseCameraPointersInput.js.map +1 -1
  7. package/Cameras/Inputs/freeCameraMouseInput.d.ts +0 -1
  8. package/Cameras/Inputs/freeCameraMouseInput.js +27 -28
  9. package/Cameras/Inputs/freeCameraMouseInput.js.map +1 -1
  10. package/Cameras/camera.d.ts +4 -0
  11. package/Cameras/camera.js +2 -0
  12. package/Cameras/camera.js.map +1 -1
  13. package/Culling/boundingBox.d.ts +7 -1
  14. package/Culling/boundingBox.js +4 -0
  15. package/Culling/boundingBox.js.map +1 -1
  16. package/DeviceInput/Helpers/eventFactory.js +1 -2
  17. package/DeviceInput/Helpers/eventFactory.js.map +1 -1
  18. package/DeviceInput/Implementations/webDeviceInputSystem.d.ts +1 -0
  19. package/DeviceInput/Implementations/webDeviceInputSystem.js +5 -12
  20. package/DeviceInput/Implementations/webDeviceInputSystem.js.map +1 -1
  21. package/DeviceInput/InputDevices/deviceEnums.d.ts +1 -3
  22. package/DeviceInput/InputDevices/deviceEnums.js +0 -2
  23. package/DeviceInput/InputDevices/deviceEnums.js.map +1 -1
  24. package/DeviceInput/deviceInputSystem.js +1 -1
  25. package/DeviceInput/deviceInputSystem.js.map +1 -1
  26. package/Engines/Extensions/engine.alpha.js +5 -0
  27. package/Engines/Extensions/engine.alpha.js.map +1 -1
  28. package/Engines/Extensions/engine.cubeTexture.d.ts +1 -1
  29. package/Engines/Extensions/engine.cubeTexture.js.map +1 -1
  30. package/Engines/Extensions/engine.multiRender.d.ts +2 -2
  31. package/Engines/Extensions/engine.multiRender.js.map +1 -1
  32. package/Engines/Extensions/engine.renderTarget.d.ts +7 -15
  33. package/Engines/Extensions/engine.renderTarget.js +6 -63
  34. package/Engines/Extensions/engine.renderTarget.js.map +1 -1
  35. package/Engines/Extensions/engine.renderTargetCube.d.ts +1 -1
  36. package/Engines/Extensions/engine.renderTargetCube.js.map +1 -1
  37. package/Engines/IDrawContext.d.ts +3 -0
  38. package/Engines/IDrawContext.js.map +1 -1
  39. package/Engines/Native/index.d.ts +2 -0
  40. package/Engines/Native/index.js +3 -0
  41. package/Engines/Native/index.js.map +1 -0
  42. package/Engines/Native/nativeDataStream.d.ts +23 -0
  43. package/Engines/Native/nativeDataStream.js +67 -0
  44. package/Engines/Native/nativeDataStream.js.map +1 -0
  45. package/Engines/Native/nativeInterfaces.d.ts +217 -0
  46. package/Engines/Native/nativeInterfaces.js +2 -0
  47. package/Engines/Native/nativeInterfaces.js.map +1 -0
  48. package/Engines/Native/validatedNativeDataStream.d.ts +1 -0
  49. package/Engines/Native/validatedNativeDataStream.js +51 -0
  50. package/Engines/Native/validatedNativeDataStream.js.map +1 -0
  51. package/Engines/WebGL/webGLRenderTargetWrapper.d.ts +24 -2
  52. package/Engines/WebGL/webGLRenderTargetWrapper.js +53 -0
  53. package/Engines/WebGL/webGLRenderTargetWrapper.js.map +1 -1
  54. package/Engines/WebGPU/Extensions/engine.alpha.js +1 -1
  55. package/Engines/WebGPU/Extensions/engine.alpha.js.map +1 -1
  56. package/Engines/WebGPU/Extensions/engine.cubeTexture.js.map +1 -1
  57. package/Engines/WebGPU/Extensions/engine.multiRender.js.map +1 -1
  58. package/Engines/WebGPU/Extensions/engine.renderTarget.js +1 -2
  59. package/Engines/WebGPU/Extensions/engine.renderTarget.js.map +1 -1
  60. package/Engines/WebGPU/Extensions/engine.renderTargetCube.js.map +1 -1
  61. package/Engines/WebGPU/Extensions/engine.storageBuffer.js +1 -1
  62. package/Engines/WebGPU/Extensions/engine.storageBuffer.js.map +1 -1
  63. package/Engines/WebGPU/Extensions/engine.uniformBuffer.js +1 -1
  64. package/Engines/WebGPU/Extensions/engine.uniformBuffer.js.map +1 -1
  65. package/Engines/WebGPU/webgpuBufferManager.d.ts +1 -0
  66. package/Engines/WebGPU/webgpuBufferManager.js +3 -0
  67. package/Engines/WebGPU/webgpuBufferManager.js.map +1 -1
  68. package/Engines/WebGPU/webgpuCacheBindGroups.d.ts +3 -2
  69. package/Engines/WebGPU/webgpuCacheBindGroups.js +15 -14
  70. package/Engines/WebGPU/webgpuCacheBindGroups.js.map +1 -1
  71. package/Engines/WebGPU/webgpuCacheRenderPipelineTree.d.ts +2 -0
  72. package/Engines/WebGPU/webgpuCacheRenderPipelineTree.js +17 -0
  73. package/Engines/WebGPU/webgpuCacheRenderPipelineTree.js.map +1 -1
  74. package/Engines/WebGPU/webgpuDrawContext.d.ts +21 -2
  75. package/Engines/WebGPU/webgpuDrawContext.js +67 -1
  76. package/Engines/WebGPU/webgpuDrawContext.js.map +1 -1
  77. package/Engines/WebGPU/webgpuMaterialContext.d.ts +0 -6
  78. package/Engines/WebGPU/webgpuMaterialContext.js +0 -6
  79. package/Engines/WebGPU/webgpuMaterialContext.js.map +1 -1
  80. package/Engines/WebGPU/webgpuShaderProcessor.d.ts +1 -0
  81. package/Engines/WebGPU/webgpuShaderProcessor.js +2 -1
  82. package/Engines/WebGPU/webgpuShaderProcessor.js.map +1 -1
  83. package/Engines/WebGPU/webgpuTextureHelper.js +1 -1
  84. package/Engines/WebGPU/webgpuTextureHelper.js.map +1 -1
  85. package/Engines/constants.d.ts +7 -8
  86. package/Engines/constants.js +7 -8
  87. package/Engines/constants.js.map +1 -1
  88. package/Engines/engine.d.ts +37 -2
  89. package/Engines/engine.js +68 -0
  90. package/Engines/engine.js.map +1 -1
  91. package/Engines/engineFeatures.d.ts +2 -0
  92. package/Engines/engineFeatures.js.map +1 -1
  93. package/Engines/index.d.ts +1 -0
  94. package/Engines/index.js +1 -0
  95. package/Engines/index.js.map +1 -1
  96. package/Engines/nativeEngine.d.ts +22 -12
  97. package/Engines/nativeEngine.js +436 -203
  98. package/Engines/nativeEngine.js.map +1 -1
  99. package/Engines/nullEngine.d.ts +1 -1
  100. package/Engines/nullEngine.js +2 -2
  101. package/Engines/nullEngine.js.map +1 -1
  102. package/Engines/renderTargetWrapper.d.ts +10 -3
  103. package/Engines/renderTargetWrapper.js +29 -10
  104. package/Engines/renderTargetWrapper.js.map +1 -1
  105. package/Engines/thinEngine.d.ts +13 -0
  106. package/Engines/thinEngine.js +82 -3
  107. package/Engines/thinEngine.js.map +1 -1
  108. package/Engines/webgpuEngine.d.ts +14 -6
  109. package/Engines/webgpuEngine.js +107 -57
  110. package/Engines/webgpuEngine.js.map +1 -1
  111. package/Inputs/scene.inputManager.js +2 -3
  112. package/Inputs/scene.inputManager.js.map +1 -1
  113. package/Layers/effectLayer.d.ts +0 -2
  114. package/Layers/effectLayer.js +12 -11
  115. package/Layers/effectLayer.js.map +1 -1
  116. package/Layers/effectLayerSceneComponent.js +5 -0
  117. package/Layers/effectLayerSceneComponent.js.map +1 -1
  118. package/Layers/glowLayer.js +2 -0
  119. package/Layers/glowLayer.js.map +1 -1
  120. package/Layers/highlightLayer.js +2 -0
  121. package/Layers/highlightLayer.js.map +1 -1
  122. package/LensFlares/lensFlare.d.ts +3 -0
  123. package/LensFlares/lensFlare.js +5 -0
  124. package/LensFlares/lensFlare.js.map +1 -1
  125. package/LensFlares/lensFlareSystem.d.ts +2 -1
  126. package/LensFlares/lensFlareSystem.js +15 -12
  127. package/LensFlares/lensFlareSystem.js.map +1 -1
  128. package/Lights/Shadows/cascadedShadowGenerator.d.ts +0 -2
  129. package/Lights/Shadows/cascadedShadowGenerator.js +3 -12
  130. package/Lights/Shadows/cascadedShadowGenerator.js.map +1 -1
  131. package/Lights/Shadows/shadowGenerator.d.ts +0 -3
  132. package/Lights/Shadows/shadowGenerator.js +8 -14
  133. package/Lights/Shadows/shadowGenerator.js.map +1 -1
  134. package/Lights/light.js +3 -0
  135. package/Lights/light.js.map +1 -1
  136. package/Loading/Plugins/babylonFileLoader.js +3 -0
  137. package/Loading/Plugins/babylonFileLoader.js.map +1 -1
  138. package/Materials/Background/backgroundMaterial.js +8 -11
  139. package/Materials/Background/backgroundMaterial.js.map +1 -1
  140. package/Materials/Node/Blocks/Dual/lightBlock.js +1 -1
  141. package/Materials/Node/Blocks/Dual/lightBlock.js.map +1 -1
  142. package/Materials/Node/Blocks/PBR/pbrMetallicRoughnessBlock.js +1 -1
  143. package/Materials/Node/Blocks/PBR/pbrMetallicRoughnessBlock.js.map +1 -1
  144. package/Materials/Node/Blocks/PBR/reflectionBlock.js +1 -1
  145. package/Materials/Node/Blocks/PBR/reflectionBlock.js.map +1 -1
  146. package/Materials/Node/Blocks/cloudBlock.d.ts +49 -0
  147. package/Materials/Node/Blocks/cloudBlock.js +154 -0
  148. package/Materials/Node/Blocks/cloudBlock.js.map +1 -0
  149. package/Materials/Node/Blocks/colorMergerBlock.d.ts +21 -0
  150. package/Materials/Node/Blocks/colorMergerBlock.js +48 -4
  151. package/Materials/Node/Blocks/colorMergerBlock.js.map +1 -1
  152. package/Materials/Node/Blocks/index.d.ts +1 -0
  153. package/Materials/Node/Blocks/index.js +1 -0
  154. package/Materials/Node/Blocks/index.js.map +1 -1
  155. package/Materials/Node/Blocks/vectorMergerBlock.d.ts +25 -0
  156. package/Materials/Node/Blocks/vectorMergerBlock.js +93 -23
  157. package/Materials/Node/Blocks/vectorMergerBlock.js.map +1 -1
  158. package/Materials/Node/nodeMaterial.js +17 -7
  159. package/Materials/Node/nodeMaterial.js.map +1 -1
  160. package/Materials/Node/nodeMaterialBuildStateSharedData.d.ts +5 -1
  161. package/Materials/Node/nodeMaterialBuildStateSharedData.js +5 -1
  162. package/Materials/Node/nodeMaterialBuildStateSharedData.js.map +1 -1
  163. package/Materials/Node/nodeMaterialDecorator.d.ts +4 -2
  164. package/Materials/Node/nodeMaterialDecorator.js +4 -2
  165. package/Materials/Node/nodeMaterialDecorator.js.map +1 -1
  166. package/Materials/PBR/pbrBaseMaterial.d.ts +3 -2
  167. package/Materials/PBR/pbrBaseMaterial.js +21 -8
  168. package/Materials/PBR/pbrBaseMaterial.js.map +1 -1
  169. package/Materials/PBR/pbrClearCoatConfiguration.js +1 -1
  170. package/Materials/PBR/pbrClearCoatConfiguration.js.map +1 -1
  171. package/Materials/PBR/pbrSheenConfiguration.js +1 -1
  172. package/Materials/PBR/pbrSheenConfiguration.js.map +1 -1
  173. package/Materials/PBR/pbrSubSurfaceConfiguration.js +1 -1
  174. package/Materials/PBR/pbrSubSurfaceConfiguration.js.map +1 -1
  175. package/Materials/Textures/Procedurals/proceduralTexture.d.ts +3 -3
  176. package/Materials/Textures/Procedurals/proceduralTexture.js.map +1 -1
  177. package/Materials/Textures/baseTexture.d.ts +2 -0
  178. package/Materials/Textures/baseTexture.js +2 -0
  179. package/Materials/Textures/baseTexture.js.map +1 -1
  180. package/Materials/Textures/multiRenderTarget.d.ts +6 -4
  181. package/Materials/Textures/multiRenderTarget.js +28 -12
  182. package/Materials/Textures/multiRenderTarget.js.map +1 -1
  183. package/Materials/Textures/renderTargetTexture.d.ts +29 -3
  184. package/Materials/Textures/renderTargetTexture.js +127 -14
  185. package/Materials/Textures/renderTargetTexture.js.map +1 -1
  186. package/Materials/Textures/texture.js +11 -4
  187. package/Materials/Textures/texture.js.map +1 -1
  188. package/Materials/Textures/textureCreationOptions.d.ts +57 -0
  189. package/Materials/Textures/textureCreationOptions.js +2 -0
  190. package/Materials/Textures/textureCreationOptions.js.map +1 -0
  191. package/Materials/Textures/thinRenderTargetTexture.d.ts +3 -4
  192. package/Materials/Textures/thinRenderTargetTexture.js.map +1 -1
  193. package/Materials/Textures/videoTexture.d.ts +10 -7
  194. package/Materials/Textures/videoTexture.js +17 -11
  195. package/Materials/Textures/videoTexture.js.map +1 -1
  196. package/Materials/drawWrapper.d.ts +2 -1
  197. package/Materials/drawWrapper.js +10 -1
  198. package/Materials/drawWrapper.js.map +1 -1
  199. package/Materials/effectRenderer.js +1 -1
  200. package/Materials/effectRenderer.js.map +1 -1
  201. package/Materials/material.d.ts +3 -1
  202. package/Materials/material.detailMapConfiguration.d.ts +1 -1
  203. package/Materials/material.detailMapConfiguration.js +2 -2
  204. package/Materials/material.detailMapConfiguration.js.map +1 -1
  205. package/Materials/material.js +18 -9
  206. package/Materials/material.js.map +1 -1
  207. package/Materials/materialHelper.d.ts +7 -0
  208. package/Materials/materialHelper.js +15 -2
  209. package/Materials/materialHelper.js.map +1 -1
  210. package/Materials/pushMaterial.js +1 -1
  211. package/Materials/pushMaterial.js.map +1 -1
  212. package/Materials/shaderMaterial.d.ts +1 -1
  213. package/Materials/shaderMaterial.js +5 -5
  214. package/Materials/shaderMaterial.js.map +1 -1
  215. package/Materials/shadowDepthWrapper.d.ts +4 -4
  216. package/Materials/shadowDepthWrapper.js +16 -15
  217. package/Materials/shadowDepthWrapper.js.map +1 -1
  218. package/Materials/standardMaterial.d.ts +3 -2
  219. package/Materials/standardMaterial.js +21 -8
  220. package/Materials/standardMaterial.js.map +1 -1
  221. package/Materials/uniformBuffer.d.ts +10 -2
  222. package/Materials/uniformBuffer.js +17 -11
  223. package/Materials/uniformBuffer.js.map +1 -1
  224. package/Meshes/Builders/capsuleBuilder.d.ts +5 -5
  225. package/Meshes/Builders/capsuleBuilder.js.map +1 -1
  226. package/Meshes/abstractMesh.d.ts +13 -0
  227. package/Meshes/abstractMesh.js +22 -2
  228. package/Meshes/abstractMesh.js.map +1 -1
  229. package/Meshes/buffer.d.ts +5 -0
  230. package/Meshes/buffer.js +6 -0
  231. package/Meshes/buffer.js.map +1 -0
  232. package/Meshes/linesMesh.js +1 -1
  233. package/Meshes/linesMesh.js.map +1 -1
  234. package/Meshes/mesh.js +17 -1
  235. package/Meshes/mesh.js.map +1 -1
  236. package/Meshes/mesh.lts.d.ts +5 -1
  237. package/Meshes/mesh.lts.js +1 -2
  238. package/Meshes/mesh.lts.js.map +1 -1
  239. package/Meshes/subMesh.d.ts +10 -9
  240. package/Meshes/subMesh.js +44 -43
  241. package/Meshes/subMesh.js.map +1 -1
  242. package/Misc/environmentTextureTools.js +1 -0
  243. package/Misc/environmentTextureTools.js.map +1 -1
  244. package/Misc/fileTools.d.ts +1 -3
  245. package/Misc/fileTools.js +12 -13
  246. package/Misc/fileTools.js.map +1 -1
  247. package/Misc/fileTools.lts.d.ts +16 -1
  248. package/Misc/fileTools.lts.js +1 -2
  249. package/Misc/fileTools.lts.js.map +1 -1
  250. package/Misc/rgbdTextureTools.js +1 -0
  251. package/Misc/rgbdTextureTools.js.map +1 -1
  252. package/Misc/sceneSerializer.js +17 -17
  253. package/Misc/sceneSerializer.js.map +1 -1
  254. package/Misc/textureTools.js +2 -0
  255. package/Misc/textureTools.js.map +1 -1
  256. package/Misc/webRequest.js.map +1 -1
  257. package/Particles/EmitterTypes/IParticleEmitterType.d.ts +2 -1
  258. package/Particles/EmitterTypes/IParticleEmitterType.js.map +1 -1
  259. package/Particles/EmitterTypes/cylinderParticleEmitter.d.ts +3 -1
  260. package/Particles/EmitterTypes/cylinderParticleEmitter.js +13 -9
  261. package/Particles/EmitterTypes/cylinderParticleEmitter.js.map +1 -1
  262. package/Particles/gpuParticleSystem.d.ts +7 -2
  263. package/Particles/gpuParticleSystem.js +34 -7
  264. package/Particles/gpuParticleSystem.js.map +1 -1
  265. package/Particles/particleHelper.d.ts +6 -3
  266. package/Particles/particleHelper.js +11 -8
  267. package/Particles/particleHelper.js.map +1 -1
  268. package/Particles/particleSystem.d.ts +8 -2
  269. package/Particles/particleSystem.js +41 -8
  270. package/Particles/particleSystem.js.map +1 -1
  271. package/Particles/particleSystemSet.d.ts +2 -1
  272. package/Particles/particleSystemSet.js +3 -2
  273. package/Particles/particleSystemSet.js.map +1 -1
  274. package/PostProcesses/RenderPipeline/Pipelines/lensRenderingPipeline.js +2 -0
  275. package/PostProcesses/RenderPipeline/Pipelines/lensRenderingPipeline.js.map +1 -1
  276. package/PostProcesses/RenderPipeline/Pipelines/ssaoRenderingPipeline.js +1 -0
  277. package/PostProcesses/RenderPipeline/Pipelines/ssaoRenderingPipeline.js.map +1 -1
  278. package/PostProcesses/RenderPipeline/Pipelines/standardRenderingPipeline.js +1 -0
  279. package/PostProcesses/RenderPipeline/Pipelines/standardRenderingPipeline.js.map +1 -1
  280. package/PostProcesses/bloomMergePostProcess.js +1 -0
  281. package/PostProcesses/bloomMergePostProcess.js.map +1 -1
  282. package/PostProcesses/depthOfFieldBlurPostProcess.js +1 -0
  283. package/PostProcesses/depthOfFieldBlurPostProcess.js.map +1 -1
  284. package/PostProcesses/depthOfFieldMergePostProcess.js +1 -0
  285. package/PostProcesses/depthOfFieldMergePostProcess.js.map +1 -1
  286. package/PostProcesses/extractHighlightsPostProcess.js +1 -0
  287. package/PostProcesses/extractHighlightsPostProcess.js.map +1 -1
  288. package/PostProcesses/postProcess.d.ts +6 -0
  289. package/PostProcesses/postProcess.js +9 -1
  290. package/PostProcesses/postProcess.js.map +1 -1
  291. package/PostProcesses/screenSpaceReflectionPostProcess.js +2 -2
  292. package/PostProcesses/screenSpaceReflectionPostProcess.js.map +1 -1
  293. package/PostProcesses/tonemapPostProcess.d.ts +2 -1
  294. package/PostProcesses/tonemapPostProcess.js +3 -2
  295. package/PostProcesses/tonemapPostProcess.js.map +1 -1
  296. package/Rendering/boundingBoxRenderer.d.ts +5 -3
  297. package/Rendering/boundingBoxRenderer.js +46 -14
  298. package/Rendering/boundingBoxRenderer.js.map +1 -1
  299. package/Rendering/depthPeelingRenderer.d.ts +66 -0
  300. package/Rendering/depthPeelingRenderer.js +297 -0
  301. package/Rendering/depthPeelingRenderer.js.map +1 -0
  302. package/Rendering/depthPeelingSceneComponent.d.ts +49 -0
  303. package/Rendering/depthPeelingSceneComponent.js +57 -0
  304. package/Rendering/depthPeelingSceneComponent.js.map +1 -0
  305. package/Rendering/depthRenderer.d.ts +9 -2
  306. package/Rendering/depthRenderer.js +77 -43
  307. package/Rendering/depthRenderer.js.map +1 -1
  308. package/Rendering/depthRendererSceneComponent.js +0 -1
  309. package/Rendering/depthRendererSceneComponent.js.map +1 -1
  310. package/Rendering/edgesRenderer.d.ts +2 -0
  311. package/Rendering/edgesRenderer.js +11 -0
  312. package/Rendering/edgesRenderer.js.map +1 -1
  313. package/Rendering/geometryBufferRenderer.js +1 -1
  314. package/Rendering/geometryBufferRenderer.js.map +1 -1
  315. package/Rendering/index.d.ts +2 -0
  316. package/Rendering/index.js +2 -0
  317. package/Rendering/index.js.map +1 -1
  318. package/Rendering/outlineRenderer.d.ts +5 -4
  319. package/Rendering/outlineRenderer.js +24 -19
  320. package/Rendering/outlineRenderer.js.map +1 -1
  321. package/Rendering/prePassRenderer.js +7 -2
  322. package/Rendering/prePassRenderer.js.map +1 -1
  323. package/Rendering/renderingGroup.js +7 -2
  324. package/Rendering/renderingGroup.js.map +1 -1
  325. package/Shaders/ShadersInclude/boundingBoxRendererFragmentDeclaration.d.ts +5 -0
  326. package/Shaders/ShadersInclude/boundingBoxRendererFragmentDeclaration.js +7 -0
  327. package/Shaders/ShadersInclude/boundingBoxRendererFragmentDeclaration.js.map +1 -0
  328. package/Shaders/ShadersInclude/boundingBoxRendererUboDeclaration.d.ts +5 -0
  329. package/Shaders/ShadersInclude/boundingBoxRendererUboDeclaration.js +7 -0
  330. package/Shaders/ShadersInclude/boundingBoxRendererUboDeclaration.js.map +1 -0
  331. package/Shaders/ShadersInclude/boundingBoxRendererVertexDeclaration.d.ts +5 -0
  332. package/Shaders/ShadersInclude/boundingBoxRendererVertexDeclaration.js +7 -0
  333. package/Shaders/ShadersInclude/boundingBoxRendererVertexDeclaration.js.map +1 -0
  334. package/Shaders/ShadersInclude/oitDeclaration.d.ts +5 -0
  335. package/Shaders/ShadersInclude/oitDeclaration.js +7 -0
  336. package/Shaders/ShadersInclude/oitDeclaration.js.map +1 -0
  337. package/Shaders/ShadersInclude/oitFragment.d.ts +5 -0
  338. package/Shaders/ShadersInclude/oitFragment.js +7 -0
  339. package/Shaders/ShadersInclude/oitFragment.js.map +1 -0
  340. package/Shaders/boundingBoxRenderer.fragment.d.ts +7 -0
  341. package/Shaders/boundingBoxRenderer.fragment.js +9 -0
  342. package/Shaders/boundingBoxRenderer.fragment.js.map +1 -0
  343. package/Shaders/boundingBoxRenderer.vertex.d.ts +7 -0
  344. package/Shaders/boundingBoxRenderer.vertex.js +9 -0
  345. package/Shaders/boundingBoxRenderer.vertex.js.map +1 -0
  346. package/Shaders/default.fragment.d.ts +2 -0
  347. package/Shaders/default.fragment.js +3 -1
  348. package/Shaders/default.fragment.js.map +1 -1
  349. package/Shaders/oitBackBlend.fragment.d.ts +5 -0
  350. package/Shaders/oitBackBlend.fragment.js +7 -0
  351. package/Shaders/oitBackBlend.fragment.js.map +1 -0
  352. package/Shaders/oitFinal.fragment.d.ts +5 -0
  353. package/Shaders/oitFinal.fragment.js +7 -0
  354. package/Shaders/oitFinal.fragment.js.map +1 -0
  355. package/Shaders/pbr.fragment.d.ts +2 -0
  356. package/Shaders/pbr.fragment.js +3 -1
  357. package/Shaders/pbr.fragment.js.map +1 -1
  358. package/Shaders/screenSpaceReflection.fragment.js +1 -1
  359. package/Shaders/screenSpaceReflection.fragment.js.map +1 -1
  360. package/Sprites/spriteManager.d.ts +3 -1
  361. package/Sprites/spriteManager.js +16 -5
  362. package/Sprites/spriteManager.js.map +1 -1
  363. package/Sprites/spriteRenderer.d.ts +1 -0
  364. package/Sprites/spriteRenderer.js +14 -0
  365. package/Sprites/spriteRenderer.js.map +1 -1
  366. package/States/alphaCullingState.js +1 -1
  367. package/States/alphaCullingState.js.map +1 -1
  368. package/XR/features/WebXRControllerPointerSelection.d.ts +4 -0
  369. package/XR/features/WebXRControllerPointerSelection.js +23 -1
  370. package/XR/features/WebXRControllerPointerSelection.js.map +1 -1
  371. package/XR/features/WebXRNearInteraction.d.ts +5 -4
  372. package/XR/features/WebXRNearInteraction.js +15 -13
  373. package/XR/features/WebXRNearInteraction.js.map +1 -1
  374. package/XR/features/WebXRWalkingLocomotion.js +28 -13
  375. package/XR/features/WebXRWalkingLocomotion.js.map +1 -1
  376. package/XR/webXRSessionManager.js +1 -3
  377. package/XR/webXRSessionManager.js.map +1 -1
  378. package/package.json +55 -7
  379. package/scene.d.ts +18 -4
  380. package/scene.js +100 -35
  381. package/scene.js.map +1 -1
  382. package/scene.lts.d.ts +6 -1
  383. package/scene.lts.js +1 -2
  384. package/scene.lts.js.map +1 -1
  385. package/sceneComponent.d.ts +1 -0
  386. package/sceneComponent.js +1 -0
  387. package/sceneComponent.js.map +1 -1
  388. package/Engines/depthTextureCreationOptions.d.ts +0 -17
  389. package/Engines/depthTextureCreationOptions.js +0 -10
  390. package/Engines/depthTextureCreationOptions.js.map +0 -1
  391. package/Materials/Textures/renderTargetCreationOptions.d.ts +0 -27
  392. package/Materials/Textures/renderTargetCreationOptions.js +0 -10
  393. package/Materials/Textures/renderTargetCreationOptions.js.map +0 -1
@@ -85,6 +85,5 @@ export declare class BoneIKController {
85
85
  * Force the controller to update the bones
86
86
  */
87
87
  update(): void;
88
- private static _SetAbsoluteRotation;
89
- private static _IsTransformNode;
88
+ private _updateLinkedTransformRotation;
90
89
  }
@@ -1,4 +1,4 @@
1
- import { Vector3, Quaternion, Matrix, TmpVectors } from "../Maths/math.vector.js";
1
+ import { Vector3, Quaternion, Matrix } from "../Maths/math.vector.js";
2
2
  import { Space } from '../Maths/math.axis.js';
3
3
  /**
4
4
  * Class used to apply inverse kinematics to bones
@@ -220,53 +220,28 @@ var BoneIKController = /** @class */ (function () {
220
220
  Quaternion.FromRotationMatrixToRef(mat1, _tmpQuat);
221
221
  Quaternion.SlerpToRef(this._bone1Quat, _tmpQuat, this.slerpAmount, this._bone1Quat);
222
222
  angC = this._bone2Ang * (1.0 - this.slerpAmount) + angC * this.slerpAmount;
223
- if (this._bone1._linkedTransformNode) {
224
- BoneIKController._SetAbsoluteRotation(this._bone1._linkedTransformNode, this._bone1Quat);
225
- }
226
- else {
227
- this._bone1.setRotationQuaternion(this._bone1Quat, Space.WORLD, this.mesh);
228
- }
223
+ this._bone1.setRotationQuaternion(this._bone1Quat, Space.WORLD, this.mesh);
229
224
  this._slerping = true;
230
225
  }
231
226
  else {
232
- if (this._bone1._linkedTransformNode) {
233
- Quaternion.FromRotationMatrixToRef(mat1, _tmpQuat);
234
- BoneIKController._SetAbsoluteRotation(this._bone1._linkedTransformNode, _tmpQuat);
235
- }
236
- else {
237
- this._bone1.setRotationMatrix(mat1, Space.WORLD, this.mesh);
238
- }
227
+ this._bone1.setRotationMatrix(mat1, Space.WORLD, this.mesh);
239
228
  this._bone1Mat.copyFrom(mat1);
240
229
  this._slerping = false;
241
230
  }
231
+ this._updateLinkedTransformRotation(this._bone1);
242
232
  }
243
- if (this._bone2._linkedTransformNode) {
244
- if (!this._bone2._linkedTransformNode.rotationQuaternion) {
245
- this._bone2._linkedTransformNode.rotationQuaternion = new Quaternion();
246
- }
247
- Quaternion.RotationAxisToRef(this._bendAxis, angC, this._bone2._linkedTransformNode.rotationQuaternion);
248
- }
249
- else {
250
- this._bone2.setAxisAngle(this._bendAxis, angC, Space.LOCAL);
251
- }
233
+ this._bone2.setAxisAngle(this._bendAxis, angC, Space.LOCAL);
234
+ this._updateLinkedTransformRotation(this._bone2);
252
235
  this._bone2Ang = angC;
253
236
  };
254
- BoneIKController._SetAbsoluteRotation = function (transform, rotation) {
255
- if (transform.rotationQuaternion == null) {
256
- transform.rotationQuaternion = new Quaternion();
257
- }
258
- if (this._IsTransformNode(transform.parent)) {
259
- var tmpQuat = TmpVectors.Quaternion[0];
260
- Quaternion.InverseToRef(transform.parent.absoluteRotationQuaternion, tmpQuat);
261
- tmpQuat.multiplyToRef(rotation, transform.rotationQuaternion);
262
- }
263
- else {
264
- transform.rotationQuaternion.copyFrom(rotation);
237
+ BoneIKController.prototype._updateLinkedTransformRotation = function (bone) {
238
+ if (bone._linkedTransformNode) {
239
+ if (!bone._linkedTransformNode.rotationQuaternion) {
240
+ bone._linkedTransformNode.rotationQuaternion = new Quaternion();
241
+ }
242
+ bone.getRotationQuaternionToRef(Space.LOCAL, null, bone._linkedTransformNode.rotationQuaternion);
265
243
  }
266
244
  };
267
- BoneIKController._IsTransformNode = function (node) {
268
- return !!node && node.isUsingPivotMatrix !== undefined;
269
- };
270
245
  BoneIKController._tmpVecs = [Vector3.Zero(), Vector3.Zero(), Vector3.Zero(), Vector3.Zero(), Vector3.Zero(), Vector3.Zero()];
271
246
  BoneIKController._tmpQuat = Quaternion.Identity();
272
247
  BoneIKController._tmpMats = [Matrix.Identity(), Matrix.Identity()];
@@ -1 +1 @@
1
- {"version":3,"file":"boneIKController.js","sourceRoot":"","sources":["../../../sourceES6/core/Bones/boneIKController.ts"],"names":[],"mappings":"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","sourcesContent":["import { Bone } from \"./bone\";\r\nimport { Vector3, Quaternion, Matrix, TmpVectors } from \"../Maths/math.vector\";\r\nimport { Node } from \"../node\";\r\nimport { TransformNode } from \"../Meshes/transformNode\";\r\nimport { Nullable } from \"../types\";\r\nimport { Space } from '../Maths/math.axis';\r\n\r\n/**\r\n * Class used to apply inverse kinematics to bones\r\n * @see https://doc.babylonjs.com/how_to/how_to_use_bones_and_skeletons#boneikcontroller\r\n */\r\nexport class BoneIKController {\r\n\r\n private static _tmpVecs: Vector3[] = [Vector3.Zero(), Vector3.Zero(), Vector3.Zero(), Vector3.Zero(), Vector3.Zero(), Vector3.Zero()];\r\n private static _tmpQuat = Quaternion.Identity();\r\n private static _tmpMats: Matrix[] = [Matrix.Identity(), Matrix.Identity()];\r\n\r\n /**\r\n * Gets or sets the target TransformNode\r\n * Name kept as mesh for back compability\r\n */\r\n public targetMesh: TransformNode;\r\n\r\n /** Gets or sets the mesh used as pole */\r\n public poleTargetMesh: TransformNode;\r\n\r\n /**\r\n * Gets or sets the bone used as pole\r\n */\r\n public poleTargetBone: Nullable<Bone>;\r\n\r\n /**\r\n * Gets or sets the target position\r\n */\r\n public targetPosition = Vector3.Zero();\r\n\r\n /**\r\n * Gets or sets the pole target position\r\n */\r\n public poleTargetPosition = Vector3.Zero();\r\n\r\n /**\r\n * Gets or sets the pole target local offset\r\n */\r\n public poleTargetLocalOffset = Vector3.Zero();\r\n\r\n /**\r\n * Gets or sets the pole angle\r\n */\r\n public poleAngle = 0;\r\n\r\n /**\r\n * Gets or sets the TransformNode associated with the controller\r\n * Name kept as mesh for back compability\r\n */\r\n public mesh: TransformNode;\r\n\r\n /**\r\n * The amount to slerp (spherical linear interpolation) to the target. Set this to a value between 0 and 1 (a value of 1 disables slerp)\r\n */\r\n public slerpAmount = 1;\r\n\r\n private _bone1Quat = Quaternion.Identity();\r\n private _bone1Mat = Matrix.Identity();\r\n private _bone2Ang = Math.PI;\r\n\r\n private _bone1: Nullable<Bone>;\r\n private _bone2: Bone;\r\n private _bone1Length: number;\r\n private _bone2Length: number;\r\n private _maxAngle = Math.PI;\r\n private _maxReach: number;\r\n\r\n private _rightHandedSystem = false;\r\n\r\n private _bendAxis = Vector3.Right();\r\n private _slerping = false;\r\n\r\n private _adjustRoll = 0;\r\n\r\n /**\r\n * Gets or sets maximum allowed angle\r\n */\r\n public get maxAngle(): number {\r\n return this._maxAngle;\r\n }\r\n\r\n public set maxAngle(value: number) {\r\n this._setMaxAngle(value);\r\n }\r\n\r\n /**\r\n * Creates a new BoneIKController\r\n * @param mesh defines the TransformNode to control\r\n * @param bone defines the bone to control\r\n * @param options defines options to set up the controller\r\n */\r\n constructor(mesh: TransformNode,\r\n bone: Bone,\r\n options?: {\r\n targetMesh?: TransformNode,\r\n poleTargetMesh?: TransformNode,\r\n poleTargetBone?: Bone,\r\n poleTargetLocalOffset?: Vector3,\r\n poleAngle?: number,\r\n bendAxis?: Vector3,\r\n maxAngle?: number,\r\n slerpAmount?: number\r\n }) {\r\n\r\n this._bone2 = bone;\r\n this._bone1 = bone.getParent();\r\n\r\n if (!this._bone1) {\r\n return;\r\n }\r\n\r\n this.mesh = mesh;\r\n\r\n var bonePos = bone.getPosition();\r\n\r\n if (bone.getAbsoluteTransform().determinant() > 0) {\r\n this._rightHandedSystem = true;\r\n this._bendAxis.x = 0;\r\n this._bendAxis.y = 0;\r\n this._bendAxis.z = -1;\r\n\r\n if (bonePos.x > bonePos.y && bonePos.x > bonePos.z) {\r\n this._adjustRoll = Math.PI * .5;\r\n this._bendAxis.z = 1;\r\n }\r\n }\r\n\r\n if (this._bone1.length) {\r\n\r\n var boneScale1 = this._bone1.getScale();\r\n var boneScale2 = this._bone2.getScale();\r\n\r\n this._bone1Length = this._bone1.length * boneScale1.y * this.mesh.scaling.y;\r\n this._bone2Length = this._bone2.length * boneScale2.y * this.mesh.scaling.y;\r\n\r\n } else if (this._bone1.children[0]) {\r\n\r\n mesh.computeWorldMatrix(true);\r\n\r\n var pos1 = this._bone2.children[0].getAbsolutePosition(mesh);\r\n var pos2 = this._bone2.getAbsolutePosition(mesh);\r\n var pos3 = this._bone1.getAbsolutePosition(mesh);\r\n\r\n this._bone1Length = Vector3.Distance(pos1, pos2);\r\n this._bone2Length = Vector3.Distance(pos2, pos3);\r\n }\r\n\r\n this._bone1.getRotationMatrixToRef(Space.WORLD, mesh, this._bone1Mat);\r\n this.maxAngle = Math.PI;\r\n\r\n if (options) {\r\n\r\n if (options.targetMesh) {\r\n this.targetMesh = options.targetMesh;\r\n this.targetMesh.computeWorldMatrix(true);\r\n }\r\n\r\n if (options.poleTargetMesh) {\r\n\r\n this.poleTargetMesh = options.poleTargetMesh;\r\n this.poleTargetMesh.computeWorldMatrix(true);\r\n\r\n } else if (options.poleTargetBone) {\r\n this.poleTargetBone = options.poleTargetBone;\r\n } else if (this._bone1.getParent()) {\r\n this.poleTargetBone = this._bone1.getParent();\r\n }\r\n\r\n if (options.poleTargetLocalOffset) {\r\n this.poleTargetLocalOffset.copyFrom(options.poleTargetLocalOffset);\r\n }\r\n\r\n if (options.poleAngle) {\r\n this.poleAngle = options.poleAngle;\r\n }\r\n\r\n if (options.bendAxis) {\r\n this._bendAxis.copyFrom(options.bendAxis);\r\n }\r\n\r\n if (options.maxAngle) {\r\n this.maxAngle = options.maxAngle;\r\n }\r\n\r\n if (options.slerpAmount) {\r\n this.slerpAmount = options.slerpAmount;\r\n }\r\n\r\n }\r\n\r\n }\r\n\r\n private _setMaxAngle(ang: number): void {\r\n\r\n if (ang < 0) {\r\n ang = 0;\r\n }\r\n\r\n if (ang > Math.PI || ang == undefined) {\r\n ang = Math.PI;\r\n }\r\n\r\n this._maxAngle = ang;\r\n\r\n var a = this._bone1Length;\r\n var b = this._bone2Length;\r\n\r\n this._maxReach = Math.sqrt(a * a + b * b - 2 * a * b * Math.cos(ang));\r\n\r\n }\r\n\r\n /**\r\n * Force the controller to update the bones\r\n */\r\n public update(): void {\r\n var bone1 = this._bone1;\r\n\r\n if (!bone1) {\r\n return;\r\n }\r\n\r\n var target = this.targetPosition;\r\n var poleTarget = this.poleTargetPosition;\r\n\r\n var mat1 = BoneIKController._tmpMats[0];\r\n var mat2 = BoneIKController._tmpMats[1];\r\n\r\n if (this.targetMesh) {\r\n target.copyFrom(this.targetMesh.getAbsolutePosition());\r\n }\r\n\r\n if (this.poleTargetBone) {\r\n this.poleTargetBone.getAbsolutePositionFromLocalToRef(this.poleTargetLocalOffset, this.mesh, poleTarget);\r\n } else if (this.poleTargetMesh) {\r\n Vector3.TransformCoordinatesToRef(this.poleTargetLocalOffset, this.poleTargetMesh.getWorldMatrix(), poleTarget);\r\n }\r\n\r\n var bonePos = BoneIKController._tmpVecs[0];\r\n var zaxis = BoneIKController._tmpVecs[1];\r\n var xaxis = BoneIKController._tmpVecs[2];\r\n var yaxis = BoneIKController._tmpVecs[3];\r\n var upAxis = BoneIKController._tmpVecs[4];\r\n\r\n var _tmpQuat = BoneIKController._tmpQuat;\r\n\r\n bone1.getAbsolutePositionToRef(this.mesh, bonePos);\r\n\r\n poleTarget.subtractToRef(bonePos, upAxis);\r\n\r\n if (upAxis.x == 0 && upAxis.y == 0 && upAxis.z == 0) {\r\n upAxis.y = 1;\r\n } else {\r\n upAxis.normalize();\r\n }\r\n\r\n target.subtractToRef(bonePos, yaxis);\r\n yaxis.normalize();\r\n\r\n Vector3.CrossToRef(yaxis, upAxis, zaxis);\r\n zaxis.normalize();\r\n\r\n Vector3.CrossToRef(yaxis, zaxis, xaxis);\r\n xaxis.normalize();\r\n\r\n Matrix.FromXYZAxesToRef(xaxis, yaxis, zaxis, mat1);\r\n\r\n var a = this._bone1Length;\r\n var b = this._bone2Length;\r\n\r\n var c = Vector3.Distance(bonePos, target);\r\n\r\n if (this._maxReach > 0) {\r\n c = Math.min(this._maxReach, c);\r\n }\r\n\r\n var acosa = (b * b + c * c - a * a) / (2 * b * c);\r\n var acosb = (c * c + a * a - b * b) / (2 * c * a);\r\n\r\n if (acosa > 1) {\r\n acosa = 1;\r\n }\r\n\r\n if (acosb > 1) {\r\n acosb = 1;\r\n }\r\n\r\n if (acosa < -1) {\r\n acosa = -1;\r\n }\r\n\r\n if (acosb < -1) {\r\n acosb = -1;\r\n }\r\n\r\n var angA = Math.acos(acosa);\r\n var angB = Math.acos(acosb);\r\n\r\n var angC = -angA - angB;\r\n\r\n if (this._rightHandedSystem) {\r\n\r\n Matrix.RotationYawPitchRollToRef(0, 0, this._adjustRoll, mat2);\r\n mat2.multiplyToRef(mat1, mat1);\r\n\r\n Matrix.RotationAxisToRef(this._bendAxis, angB, mat2);\r\n mat2.multiplyToRef(mat1, mat1);\r\n\r\n } else {\r\n\r\n var _tmpVec = BoneIKController._tmpVecs[5];\r\n\r\n _tmpVec.copyFrom(this._bendAxis);\r\n _tmpVec.x *= -1;\r\n\r\n Matrix.RotationAxisToRef(_tmpVec, -angB, mat2);\r\n mat2.multiplyToRef(mat1, mat1);\r\n\r\n }\r\n\r\n if (this.poleAngle) {\r\n Matrix.RotationAxisToRef(yaxis, this.poleAngle, mat2);\r\n mat1.multiplyToRef(mat2, mat1);\r\n }\r\n\r\n if (this._bone1) {\r\n if (this.slerpAmount < 1) {\r\n if (!this._slerping) {\r\n Quaternion.FromRotationMatrixToRef(this._bone1Mat, this._bone1Quat);\r\n }\r\n Quaternion.FromRotationMatrixToRef(mat1, _tmpQuat);\r\n Quaternion.SlerpToRef(this._bone1Quat, _tmpQuat, this.slerpAmount, this._bone1Quat);\r\n angC = this._bone2Ang * (1.0 - this.slerpAmount) + angC * this.slerpAmount;\r\n if (this._bone1._linkedTransformNode) {\r\n BoneIKController._SetAbsoluteRotation(this._bone1._linkedTransformNode, this._bone1Quat);\r\n }\r\n else {\r\n this._bone1.setRotationQuaternion(this._bone1Quat, Space.WORLD, this.mesh);\r\n }\r\n this._slerping = true;\r\n } else {\r\n if (this._bone1._linkedTransformNode) {\r\n Quaternion.FromRotationMatrixToRef(mat1, _tmpQuat);\r\n BoneIKController._SetAbsoluteRotation(this._bone1._linkedTransformNode, _tmpQuat);\r\n }\r\n else {\r\n this._bone1.setRotationMatrix(mat1, Space.WORLD, this.mesh);\r\n }\r\n this._bone1Mat.copyFrom(mat1);\r\n this._slerping = false;\r\n }\r\n }\r\n\r\n if (this._bone2._linkedTransformNode) {\r\n if (!this._bone2._linkedTransformNode.rotationQuaternion) {\r\n this._bone2._linkedTransformNode.rotationQuaternion = new Quaternion();\r\n }\r\n Quaternion.RotationAxisToRef(this._bendAxis, angC, this._bone2._linkedTransformNode.rotationQuaternion);\r\n }\r\n else {\r\n this._bone2.setAxisAngle(this._bendAxis, angC, Space.LOCAL);\r\n }\r\n this._bone2Ang = angC;\r\n }\r\n\r\n private static _SetAbsoluteRotation(transform: TransformNode, rotation: Quaternion): void {\r\n if (transform.rotationQuaternion == null) {\r\n transform.rotationQuaternion = new Quaternion();\r\n }\r\n if (this._IsTransformNode(transform.parent)) {\r\n const tmpQuat = TmpVectors.Quaternion[0];\r\n Quaternion.InverseToRef(transform.parent.absoluteRotationQuaternion, tmpQuat);\r\n tmpQuat.multiplyToRef(rotation, transform.rotationQuaternion);\r\n } else {\r\n transform.rotationQuaternion.copyFrom(rotation);\r\n }\r\n }\r\n\r\n private static _IsTransformNode(node: Nullable<Node>): node is TransformNode {\r\n return !!node && (node as TransformNode).isUsingPivotMatrix !== undefined;\r\n }\r\n}\r\n"]}
1
+ {"version":3,"file":"boneIKController.js","sourceRoot":"","sources":["../../../sourceES6/core/Bones/boneIKController.ts"],"names":[],"mappings":"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","sourcesContent":["import { Bone } from \"./bone\";\r\nimport { Vector3, Quaternion, Matrix } from \"../Maths/math.vector\";\r\nimport { TransformNode } from \"../Meshes/transformNode\";\r\nimport { Nullable } from \"../types\";\r\nimport { Space } from '../Maths/math.axis';\r\n\r\n/**\r\n * Class used to apply inverse kinematics to bones\r\n * @see https://doc.babylonjs.com/how_to/how_to_use_bones_and_skeletons#boneikcontroller\r\n */\r\nexport class BoneIKController {\r\n\r\n private static _tmpVecs: Vector3[] = [Vector3.Zero(), Vector3.Zero(), Vector3.Zero(), Vector3.Zero(), Vector3.Zero(), Vector3.Zero()];\r\n private static _tmpQuat = Quaternion.Identity();\r\n private static _tmpMats: Matrix[] = [Matrix.Identity(), Matrix.Identity()];\r\n\r\n /**\r\n * Gets or sets the target TransformNode\r\n * Name kept as mesh for back compability\r\n */\r\n public targetMesh: TransformNode;\r\n\r\n /** Gets or sets the mesh used as pole */\r\n public poleTargetMesh: TransformNode;\r\n\r\n /**\r\n * Gets or sets the bone used as pole\r\n */\r\n public poleTargetBone: Nullable<Bone>;\r\n\r\n /**\r\n * Gets or sets the target position\r\n */\r\n public targetPosition = Vector3.Zero();\r\n\r\n /**\r\n * Gets or sets the pole target position\r\n */\r\n public poleTargetPosition = Vector3.Zero();\r\n\r\n /**\r\n * Gets or sets the pole target local offset\r\n */\r\n public poleTargetLocalOffset = Vector3.Zero();\r\n\r\n /**\r\n * Gets or sets the pole angle\r\n */\r\n public poleAngle = 0;\r\n\r\n /**\r\n * Gets or sets the TransformNode associated with the controller\r\n * Name kept as mesh for back compability\r\n */\r\n public mesh: TransformNode;\r\n\r\n /**\r\n * The amount to slerp (spherical linear interpolation) to the target. Set this to a value between 0 and 1 (a value of 1 disables slerp)\r\n */\r\n public slerpAmount = 1;\r\n\r\n private _bone1Quat = Quaternion.Identity();\r\n private _bone1Mat = Matrix.Identity();\r\n private _bone2Ang = Math.PI;\r\n\r\n private _bone1: Nullable<Bone>;\r\n private _bone2: Bone;\r\n private _bone1Length: number;\r\n private _bone2Length: number;\r\n private _maxAngle = Math.PI;\r\n private _maxReach: number;\r\n\r\n private _rightHandedSystem = false;\r\n\r\n private _bendAxis = Vector3.Right();\r\n private _slerping = false;\r\n\r\n private _adjustRoll = 0;\r\n\r\n /**\r\n * Gets or sets maximum allowed angle\r\n */\r\n public get maxAngle(): number {\r\n return this._maxAngle;\r\n }\r\n\r\n public set maxAngle(value: number) {\r\n this._setMaxAngle(value);\r\n }\r\n\r\n /**\r\n * Creates a new BoneIKController\r\n * @param mesh defines the TransformNode to control\r\n * @param bone defines the bone to control\r\n * @param options defines options to set up the controller\r\n */\r\n constructor(mesh: TransformNode,\r\n bone: Bone,\r\n options?: {\r\n targetMesh?: TransformNode,\r\n poleTargetMesh?: TransformNode,\r\n poleTargetBone?: Bone,\r\n poleTargetLocalOffset?: Vector3,\r\n poleAngle?: number,\r\n bendAxis?: Vector3,\r\n maxAngle?: number,\r\n slerpAmount?: number\r\n }) {\r\n\r\n this._bone2 = bone;\r\n this._bone1 = bone.getParent();\r\n\r\n if (!this._bone1) {\r\n return;\r\n }\r\n\r\n this.mesh = mesh;\r\n\r\n var bonePos = bone.getPosition();\r\n\r\n if (bone.getAbsoluteTransform().determinant() > 0) {\r\n this._rightHandedSystem = true;\r\n this._bendAxis.x = 0;\r\n this._bendAxis.y = 0;\r\n this._bendAxis.z = -1;\r\n\r\n if (bonePos.x > bonePos.y && bonePos.x > bonePos.z) {\r\n this._adjustRoll = Math.PI * .5;\r\n this._bendAxis.z = 1;\r\n }\r\n }\r\n\r\n if (this._bone1.length) {\r\n\r\n var boneScale1 = this._bone1.getScale();\r\n var boneScale2 = this._bone2.getScale();\r\n\r\n this._bone1Length = this._bone1.length * boneScale1.y * this.mesh.scaling.y;\r\n this._bone2Length = this._bone2.length * boneScale2.y * this.mesh.scaling.y;\r\n\r\n } else if (this._bone1.children[0]) {\r\n\r\n mesh.computeWorldMatrix(true);\r\n\r\n var pos1 = this._bone2.children[0].getAbsolutePosition(mesh);\r\n var pos2 = this._bone2.getAbsolutePosition(mesh);\r\n var pos3 = this._bone1.getAbsolutePosition(mesh);\r\n\r\n this._bone1Length = Vector3.Distance(pos1, pos2);\r\n this._bone2Length = Vector3.Distance(pos2, pos3);\r\n }\r\n\r\n this._bone1.getRotationMatrixToRef(Space.WORLD, mesh, this._bone1Mat);\r\n this.maxAngle = Math.PI;\r\n\r\n if (options) {\r\n\r\n if (options.targetMesh) {\r\n this.targetMesh = options.targetMesh;\r\n this.targetMesh.computeWorldMatrix(true);\r\n }\r\n\r\n if (options.poleTargetMesh) {\r\n\r\n this.poleTargetMesh = options.poleTargetMesh;\r\n this.poleTargetMesh.computeWorldMatrix(true);\r\n\r\n } else if (options.poleTargetBone) {\r\n this.poleTargetBone = options.poleTargetBone;\r\n } else if (this._bone1.getParent()) {\r\n this.poleTargetBone = this._bone1.getParent();\r\n }\r\n\r\n if (options.poleTargetLocalOffset) {\r\n this.poleTargetLocalOffset.copyFrom(options.poleTargetLocalOffset);\r\n }\r\n\r\n if (options.poleAngle) {\r\n this.poleAngle = options.poleAngle;\r\n }\r\n\r\n if (options.bendAxis) {\r\n this._bendAxis.copyFrom(options.bendAxis);\r\n }\r\n\r\n if (options.maxAngle) {\r\n this.maxAngle = options.maxAngle;\r\n }\r\n\r\n if (options.slerpAmount) {\r\n this.slerpAmount = options.slerpAmount;\r\n }\r\n\r\n }\r\n\r\n }\r\n\r\n private _setMaxAngle(ang: number): void {\r\n\r\n if (ang < 0) {\r\n ang = 0;\r\n }\r\n\r\n if (ang > Math.PI || ang == undefined) {\r\n ang = Math.PI;\r\n }\r\n\r\n this._maxAngle = ang;\r\n\r\n var a = this._bone1Length;\r\n var b = this._bone2Length;\r\n\r\n this._maxReach = Math.sqrt(a * a + b * b - 2 * a * b * Math.cos(ang));\r\n\r\n }\r\n\r\n /**\r\n * Force the controller to update the bones\r\n */\r\n public update(): void {\r\n var bone1 = this._bone1;\r\n\r\n if (!bone1) {\r\n return;\r\n }\r\n\r\n var target = this.targetPosition;\r\n var poleTarget = this.poleTargetPosition;\r\n\r\n var mat1 = BoneIKController._tmpMats[0];\r\n var mat2 = BoneIKController._tmpMats[1];\r\n\r\n if (this.targetMesh) {\r\n target.copyFrom(this.targetMesh.getAbsolutePosition());\r\n }\r\n\r\n if (this.poleTargetBone) {\r\n this.poleTargetBone.getAbsolutePositionFromLocalToRef(this.poleTargetLocalOffset, this.mesh, poleTarget);\r\n } else if (this.poleTargetMesh) {\r\n Vector3.TransformCoordinatesToRef(this.poleTargetLocalOffset, this.poleTargetMesh.getWorldMatrix(), poleTarget);\r\n }\r\n\r\n var bonePos = BoneIKController._tmpVecs[0];\r\n var zaxis = BoneIKController._tmpVecs[1];\r\n var xaxis = BoneIKController._tmpVecs[2];\r\n var yaxis = BoneIKController._tmpVecs[3];\r\n var upAxis = BoneIKController._tmpVecs[4];\r\n\r\n var _tmpQuat = BoneIKController._tmpQuat;\r\n\r\n bone1.getAbsolutePositionToRef(this.mesh, bonePos);\r\n\r\n poleTarget.subtractToRef(bonePos, upAxis);\r\n\r\n if (upAxis.x == 0 && upAxis.y == 0 && upAxis.z == 0) {\r\n upAxis.y = 1;\r\n } else {\r\n upAxis.normalize();\r\n }\r\n\r\n target.subtractToRef(bonePos, yaxis);\r\n yaxis.normalize();\r\n\r\n Vector3.CrossToRef(yaxis, upAxis, zaxis);\r\n zaxis.normalize();\r\n\r\n Vector3.CrossToRef(yaxis, zaxis, xaxis);\r\n xaxis.normalize();\r\n\r\n Matrix.FromXYZAxesToRef(xaxis, yaxis, zaxis, mat1);\r\n\r\n var a = this._bone1Length;\r\n var b = this._bone2Length;\r\n\r\n var c = Vector3.Distance(bonePos, target);\r\n\r\n if (this._maxReach > 0) {\r\n c = Math.min(this._maxReach, c);\r\n }\r\n\r\n var acosa = (b * b + c * c - a * a) / (2 * b * c);\r\n var acosb = (c * c + a * a - b * b) / (2 * c * a);\r\n\r\n if (acosa > 1) {\r\n acosa = 1;\r\n }\r\n\r\n if (acosb > 1) {\r\n acosb = 1;\r\n }\r\n\r\n if (acosa < -1) {\r\n acosa = -1;\r\n }\r\n\r\n if (acosb < -1) {\r\n acosb = -1;\r\n }\r\n\r\n var angA = Math.acos(acosa);\r\n var angB = Math.acos(acosb);\r\n\r\n var angC = -angA - angB;\r\n\r\n if (this._rightHandedSystem) {\r\n\r\n Matrix.RotationYawPitchRollToRef(0, 0, this._adjustRoll, mat2);\r\n mat2.multiplyToRef(mat1, mat1);\r\n\r\n Matrix.RotationAxisToRef(this._bendAxis, angB, mat2);\r\n mat2.multiplyToRef(mat1, mat1);\r\n\r\n } else {\r\n\r\n var _tmpVec = BoneIKController._tmpVecs[5];\r\n\r\n _tmpVec.copyFrom(this._bendAxis);\r\n _tmpVec.x *= -1;\r\n\r\n Matrix.RotationAxisToRef(_tmpVec, -angB, mat2);\r\n mat2.multiplyToRef(mat1, mat1);\r\n\r\n }\r\n\r\n if (this.poleAngle) {\r\n Matrix.RotationAxisToRef(yaxis, this.poleAngle, mat2);\r\n mat1.multiplyToRef(mat2, mat1);\r\n }\r\n\r\n if (this._bone1) {\r\n if (this.slerpAmount < 1) {\r\n if (!this._slerping) {\r\n Quaternion.FromRotationMatrixToRef(this._bone1Mat, this._bone1Quat);\r\n }\r\n Quaternion.FromRotationMatrixToRef(mat1, _tmpQuat);\r\n Quaternion.SlerpToRef(this._bone1Quat, _tmpQuat, this.slerpAmount, this._bone1Quat);\r\n angC = this._bone2Ang * (1.0 - this.slerpAmount) + angC * this.slerpAmount;\r\n\r\n this._bone1.setRotationQuaternion(this._bone1Quat, Space.WORLD, this.mesh);\r\n this._slerping = true;\r\n } else {\r\n this._bone1.setRotationMatrix(mat1, Space.WORLD, this.mesh);\r\n this._bone1Mat.copyFrom(mat1);\r\n this._slerping = false;\r\n }\r\n this._updateLinkedTransformRotation(this._bone1);\r\n }\r\n\r\n this._bone2.setAxisAngle(this._bendAxis, angC, Space.LOCAL);\r\n this._updateLinkedTransformRotation(this._bone2);\r\n this._bone2Ang = angC;\r\n }\r\n\r\n private _updateLinkedTransformRotation(bone: Bone): void {\r\n if (bone._linkedTransformNode) {\r\n if (!bone._linkedTransformNode.rotationQuaternion) {\r\n bone._linkedTransformNode.rotationQuaternion = new Quaternion();\r\n }\r\n bone.getRotationQuaternionToRef(Space.LOCAL, null, bone._linkedTransformNode.rotationQuaternion);\r\n }\r\n }\r\n}\r\n"]}
@@ -26,7 +26,6 @@ export declare abstract class BaseCameraPointersInput implements ICameraInput<Ca
26
26
  */
27
27
  protected _buttonsPressed: number;
28
28
  private _currentActiveButton;
29
- private _usingSafari;
30
29
  /**
31
30
  * Defines the buttons associated with the input to handle camera move.
32
31
  */
@@ -10,7 +10,6 @@ import { PointerEventTypes } from "../../Events/pointerEvents.js";
10
10
  var BaseCameraPointersInput = /** @class */ (function () {
11
11
  function BaseCameraPointersInput() {
12
12
  this._currentActiveButton = -1;
13
- this._usingSafari = Tools.IsSafari();
14
13
  /**
15
14
  * Defines the buttons associated with the input to handle camera move.
16
15
  */
@@ -38,7 +37,6 @@ var BaseCameraPointersInput = /** @class */ (function () {
38
37
  this._pointerInput = function (p, s) {
39
38
  var evt = p.event;
40
39
  var isTouch = evt.pointerType === "touch";
41
- var ignoreContext = isTouch || _this._usingSafari;
42
40
  if (engine.isInVRExclusivePointerMode) {
43
41
  return;
44
42
  }
@@ -67,7 +65,7 @@ var BaseCameraPointersInput = /** @class */ (function () {
67
65
  _this.pointA = null;
68
66
  _this.pointB = null;
69
67
  }
70
- else if (p.type === PointerEventTypes.POINTERDOWN && srcElement) {
68
+ else if (p.type === PointerEventTypes.POINTERDOWN && srcElement && (_this._currentActiveButton === -1 || isTouch)) {
71
69
  try {
72
70
  srcElement.setPointerCapture(evt.pointerId);
73
71
  }
@@ -102,9 +100,11 @@ var BaseCameraPointersInput = /** @class */ (function () {
102
100
  else if (p.type === PointerEventTypes.POINTERDOUBLETAP) {
103
101
  _this.onDoubleTap(evt.pointerType);
104
102
  }
105
- else if (srcElement && (p.type === PointerEventTypes.POINTERUP || (p.type === PointerEventTypes.POINTERMOVE && p.event.button === _this._currentActiveButton && _this._currentActiveButton !== -1 && !ignoreContext))) {
103
+ else if (srcElement && p.type === PointerEventTypes.POINTERUP && (_this._currentActiveButton === evt.button || isTouch)) {
106
104
  try {
107
- srcElement.releasePointerCapture(evt.pointerId);
105
+ if (evt.buttons === 0) {
106
+ srcElement.releasePointerCapture(evt.pointerId);
107
+ }
108
108
  }
109
109
  catch (e) {
110
110
  //Nothing to do with the error.
@@ -1 +1 @@
1
- {"version":3,"file":"BaseCameraPointersInput.js","sourceRoot":"","sources":["../../../../sourceES6/core/Cameras/Inputs/BaseCameraPointersInput.ts"],"names":[],"mappings":"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","sourcesContent":["import { Nullable } from \"../../types\";\nimport { serialize } from \"../../Misc/decorators\";\nimport { EventState, Observer } from \"../../Misc/observable\";\nimport { Tools } from \"../../Misc/tools\";\nimport { Camera } from \"../../Cameras/camera\";\nimport { ICameraInput } from \"../../Cameras/cameraInputsManager\";\nimport { PointerInfo, PointerEventTypes, PointerTouch } from \"../../Events/pointerEvents\";\nimport { IPointerEvent } from \"../../Events/deviceInputEvents\";\n\n/**\n * Base class for Camera Pointer Inputs.\n * See FollowCameraPointersInput in src/Cameras/Inputs/followCameraPointersInput.ts\n * for example usage.\n */\nexport abstract class BaseCameraPointersInput implements ICameraInput<Camera> {\n /**\n * Defines the camera the input is attached to.\n */\n public abstract camera: Camera;\n\n /**\n * Whether keyboard modifier keys are pressed at time of last mouse event.\n */\n protected _altKey: boolean;\n protected _ctrlKey: boolean;\n protected _metaKey: boolean;\n protected _shiftKey: boolean;\n\n /**\n * Which mouse buttons were pressed at time of last mouse event.\n * https://developer.mozilla.org/en-US/docs/Web/API/MouseEvent/buttons\n */\n protected _buttonsPressed: number;\n\n private _currentActiveButton: number = -1;\n private _usingSafari = Tools.IsSafari();\n\n /**\n * Defines the buttons associated with the input to handle camera move.\n */\n @serialize()\n public buttons = [0, 1, 2];\n\n /**\n * Attach the input controls to a specific dom element to get the input from.\n * @param element Defines the element the controls should be listened from\n * @param noPreventDefault Defines whether event caught by the controls should call preventdefault() (https://developer.mozilla.org/en-US/docs/Web/API/Event/preventDefault)\n */\n public attachControl(noPreventDefault?: boolean): void {\n noPreventDefault = Tools.BackCompatCameraNoPreventDefault(arguments);\n var engine = this.camera.getEngine();\n const element = engine.getInputElement();\n var previousPinchSquaredDistance = 0;\n var previousMultiTouchPanPosition: Nullable<PointerTouch> = null;\n\n this.pointA = null;\n this.pointB = null;\n\n this._altKey = false;\n this._ctrlKey = false;\n this._metaKey = false;\n this._shiftKey = false;\n this._buttonsPressed = 0;\n\n this._pointerInput = (p, s) => {\n var evt = <IPointerEvent>p.event;\n let isTouch = evt.pointerType === \"touch\";\n let ignoreContext = isTouch || this._usingSafari;\n\n if (engine.isInVRExclusivePointerMode) {\n return;\n }\n\n if (p.type !== PointerEventTypes.POINTERMOVE &&\n this.buttons.indexOf(evt.button) === -1) {\n return;\n }\n\n let srcElement = <HTMLElement>(evt.srcElement || evt.target);\n\n this._altKey = evt.altKey;\n this._ctrlKey = evt.ctrlKey;\n this._metaKey = evt.metaKey;\n this._shiftKey = evt.shiftKey;\n this._buttonsPressed = evt.buttons;\n\n if (engine.isPointerLock) {\n const offsetX = evt.movementX ||\n evt.mozMovementX ||\n evt.webkitMovementX ||\n evt.msMovementX ||\n 0;\n const offsetY = evt.movementY ||\n evt.mozMovementY ||\n evt.webkitMovementY ||\n evt.msMovementY ||\n 0;\n\n this.onTouch(null, offsetX, offsetY);\n this.pointA = null;\n this.pointB = null;\n } else if (p.type === PointerEventTypes.POINTERDOWN && srcElement) {\n try {\n srcElement.setPointerCapture(evt.pointerId);\n } catch (e) {\n //Nothing to do with the error. Execution will continue.\n }\n\n if (this.pointA === null) {\n this.pointA = {\n x: evt.clientX,\n y: evt.clientY,\n pointerId: evt.pointerId,\n type: evt.pointerType\n };\n } else if (this.pointB === null) {\n this.pointB = {\n x: evt.clientX,\n y: evt.clientY,\n pointerId: evt.pointerId,\n type: evt.pointerType\n };\n }\n\n if (this._currentActiveButton === -1 && !isTouch) {\n this._currentActiveButton = evt.button;\n }\n this.onButtonDown(evt);\n\n if (!noPreventDefault) {\n evt.preventDefault();\n element && element.focus();\n }\n } else if (p.type === PointerEventTypes.POINTERDOUBLETAP) {\n this.onDoubleTap(evt.pointerType);\n } else if (srcElement && (p.type === PointerEventTypes.POINTERUP || (p.type === PointerEventTypes.POINTERMOVE && p.event.button === this._currentActiveButton && this._currentActiveButton !== -1 && !ignoreContext))) {\n try {\n srcElement.releasePointerCapture(evt.pointerId);\n } catch (e) {\n //Nothing to do with the error.\n }\n\n if (!isTouch) {\n this.pointB = null; // Mouse and pen are mono pointer\n }\n\n //would be better to use pointers.remove(evt.pointerId) for multitouch gestures,\n //but emptying completely pointers collection is required to fix a bug on iPhone :\n //when changing orientation while pinching camera,\n //one pointer stay pressed forever if we don't release all pointers\n //will be ok to put back pointers.remove(evt.pointerId); when iPhone bug corrected\n if (engine._badOS) {\n this.pointA = this.pointB = null;\n } else {\n //only remove the impacted pointer in case of multitouch allowing on most\n //platforms switching from rotate to zoom and pan seamlessly.\n if (this.pointB && this.pointA && this.pointA.pointerId == evt.pointerId) {\n this.pointA = this.pointB;\n this.pointB = null;\n } else if (this.pointA && this.pointB &&\n this.pointB.pointerId == evt.pointerId) {\n this.pointB = null;\n } else {\n this.pointA = this.pointB = null;\n }\n }\n\n if (previousPinchSquaredDistance !== 0 || previousMultiTouchPanPosition) {\n // Previous pinch data is populated but a button has been lifted\n // so pinch has ended.\n this.onMultiTouch(\n this.pointA,\n this.pointB,\n previousPinchSquaredDistance,\n 0, // pinchSquaredDistance\n previousMultiTouchPanPosition,\n null // multiTouchPanPosition\n );\n previousPinchSquaredDistance = 0;\n previousMultiTouchPanPosition = null;\n }\n\n this._currentActiveButton = -1;\n this.onButtonUp(evt);\n\n if (!noPreventDefault) {\n evt.preventDefault();\n }\n } else if (p.type === PointerEventTypes.POINTERMOVE) {\n if (!noPreventDefault) {\n evt.preventDefault();\n }\n\n // One button down\n if (this.pointA && this.pointB === null) {\n const offsetX = evt.clientX - this.pointA.x;\n const offsetY = evt.clientY - this.pointA.y;\n this.onTouch(this.pointA, offsetX, offsetY);\n\n this.pointA.x = evt.clientX;\n this.pointA.y = evt.clientY;\n }\n // Two buttons down: pinch\n else if (this.pointA && this.pointB) {\n var ed = (this.pointA.pointerId === evt.pointerId) ?\n this.pointA : this.pointB;\n ed.x = evt.clientX;\n ed.y = evt.clientY;\n var distX = this.pointA.x - this.pointB.x;\n var distY = this.pointA.y - this.pointB.y;\n var pinchSquaredDistance = (distX * distX) + (distY * distY);\n var multiTouchPanPosition = {\n x: (this.pointA.x + this.pointB.x) / 2,\n y: (this.pointA.y + this.pointB.y) / 2,\n pointerId: evt.pointerId,\n type: p.type\n };\n\n this.onMultiTouch(\n this.pointA,\n this.pointB,\n previousPinchSquaredDistance,\n pinchSquaredDistance,\n previousMultiTouchPanPosition,\n multiTouchPanPosition);\n\n previousMultiTouchPanPosition = multiTouchPanPosition;\n previousPinchSquaredDistance = pinchSquaredDistance;\n }\n }\n };\n\n this._observer = this.camera.getScene().onPointerObservable.add(\n this._pointerInput,\n PointerEventTypes.POINTERDOWN | PointerEventTypes.POINTERUP |\n PointerEventTypes.POINTERMOVE | PointerEventTypes.POINTERDOUBLETAP);\n\n this._onLostFocus = () => {\n this.pointA = this.pointB = null;\n previousPinchSquaredDistance = 0;\n previousMultiTouchPanPosition = null;\n this.onLostFocus();\n };\n\n element && element.addEventListener(\"contextmenu\",\n <EventListener>this.onContextMenu.bind(this), false);\n\n let hostWindow = this.camera.getScene().getEngine().getHostWindow();\n\n if (hostWindow) {\n Tools.RegisterTopRootEvents(hostWindow, [\n { name: \"blur\", handler: this._onLostFocus }\n ]);\n }\n }\n\n /**\n * Detach the current controls from the specified dom element.\n */\n public detachControl(): void;\n\n /**\n * Detach the current controls from the specified dom element.\n * @param ignored defines an ignored parameter kept for backward compatibility. If you want to define the source input element, you can set engine.inputElement before calling camera.attachControl\n */\n public detachControl(ignored?: any): void {\n if (this._onLostFocus) {\n let hostWindow = this.camera.getScene().getEngine().getHostWindow();\n if (hostWindow) {\n Tools.UnregisterTopRootEvents(hostWindow, [\n { name: \"blur\", handler: this._onLostFocus }\n ]);\n }\n }\n\n if (this._observer) {\n this.camera.getScene().onPointerObservable.remove(this._observer);\n this._observer = null;\n\n if (this.onContextMenu) {\n const inputElement = this.camera.getScene().getEngine().getInputElement();\n inputElement && inputElement.removeEventListener(\"contextmenu\", <EventListener>this.onContextMenu);\n }\n\n this._onLostFocus = null;\n }\n\n this._altKey = false;\n this._ctrlKey = false;\n this._metaKey = false;\n this._shiftKey = false;\n this._buttonsPressed = 0;\n }\n\n /**\n * Gets the class name of the current input.\n * @returns the class name\n */\n public getClassName(): string {\n return \"BaseCameraPointersInput\";\n }\n\n /**\n * Get the friendly name associated with the input class.\n * @returns the input friendly name\n */\n public getSimpleName(): string {\n return \"pointers\";\n }\n\n /**\n * Called on pointer POINTERDOUBLETAP event.\n * Override this method to provide functionality on POINTERDOUBLETAP event.\n */\n protected onDoubleTap(type: string) {\n }\n\n /**\n * Called on pointer POINTERMOVE event if only a single touch is active.\n * Override this method to provide functionality.\n */\n protected onTouch(point: Nullable<PointerTouch>,\n offsetX: number,\n offsetY: number): void {\n }\n\n /**\n * Called on pointer POINTERMOVE event if multiple touches are active.\n * Override this method to provide functionality.\n */\n protected onMultiTouch(pointA: Nullable<PointerTouch>,\n pointB: Nullable<PointerTouch>,\n previousPinchSquaredDistance: number,\n pinchSquaredDistance: number,\n previousMultiTouchPanPosition: Nullable<PointerTouch>,\n multiTouchPanPosition: Nullable<PointerTouch>): void {\n }\n\n /**\n * Called on JS contextmenu event.\n * Override this method to provide functionality.\n */\n protected onContextMenu(evt: PointerEvent): void {\n evt.preventDefault();\n }\n\n /**\n * Called each time a new POINTERDOWN event occurs. Ie, for each button\n * press.\n * Override this method to provide functionality.\n */\n protected onButtonDown(evt: IPointerEvent): void {\n }\n\n /**\n * Called each time a new POINTERUP event occurs. Ie, for each button\n * release.\n * Override this method to provide functionality.\n */\n protected onButtonUp(evt: IPointerEvent): void {\n }\n\n /**\n * Called when window becomes inactive.\n * Override this method to provide functionality.\n */\n protected onLostFocus(): void {\n }\n\n private _pointerInput: (p: PointerInfo, s: EventState) => void;\n private _observer: Nullable<Observer<PointerInfo>>;\n private _onLostFocus: Nullable<(e: FocusEvent) => any>;\n private pointA: Nullable<PointerTouch>;\n private pointB: Nullable<PointerTouch>;\n}\n"]}
1
+ {"version":3,"file":"BaseCameraPointersInput.js","sourceRoot":"","sources":["../../../../sourceES6/core/Cameras/Inputs/BaseCameraPointersInput.ts"],"names":[],"mappings":"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","sourcesContent":["import { Nullable } from \"../../types\";\nimport { serialize } from \"../../Misc/decorators\";\nimport { EventState, Observer } from \"../../Misc/observable\";\nimport { Tools } from \"../../Misc/tools\";\nimport { Camera } from \"../../Cameras/camera\";\nimport { ICameraInput } from \"../../Cameras/cameraInputsManager\";\nimport { PointerInfo, PointerEventTypes, PointerTouch } from \"../../Events/pointerEvents\";\nimport { IPointerEvent } from \"../../Events/deviceInputEvents\";\n\n/**\n * Base class for Camera Pointer Inputs.\n * See FollowCameraPointersInput in src/Cameras/Inputs/followCameraPointersInput.ts\n * for example usage.\n */\nexport abstract class BaseCameraPointersInput implements ICameraInput<Camera> {\n /**\n * Defines the camera the input is attached to.\n */\n public abstract camera: Camera;\n\n /**\n * Whether keyboard modifier keys are pressed at time of last mouse event.\n */\n protected _altKey: boolean;\n protected _ctrlKey: boolean;\n protected _metaKey: boolean;\n protected _shiftKey: boolean;\n\n /**\n * Which mouse buttons were pressed at time of last mouse event.\n * https://developer.mozilla.org/en-US/docs/Web/API/MouseEvent/buttons\n */\n protected _buttonsPressed: number;\n\n private _currentActiveButton: number = -1;\n\n /**\n * Defines the buttons associated with the input to handle camera move.\n */\n @serialize()\n public buttons = [0, 1, 2];\n\n /**\n * Attach the input controls to a specific dom element to get the input from.\n * @param element Defines the element the controls should be listened from\n * @param noPreventDefault Defines whether event caught by the controls should call preventdefault() (https://developer.mozilla.org/en-US/docs/Web/API/Event/preventDefault)\n */\n public attachControl(noPreventDefault?: boolean): void {\n noPreventDefault = Tools.BackCompatCameraNoPreventDefault(arguments);\n var engine = this.camera.getEngine();\n const element = engine.getInputElement();\n var previousPinchSquaredDistance = 0;\n var previousMultiTouchPanPosition: Nullable<PointerTouch> = null;\n\n this.pointA = null;\n this.pointB = null;\n\n this._altKey = false;\n this._ctrlKey = false;\n this._metaKey = false;\n this._shiftKey = false;\n this._buttonsPressed = 0;\n\n this._pointerInput = (p, s) => {\n var evt = <IPointerEvent>p.event;\n let isTouch = evt.pointerType === \"touch\";\n\n if (engine.isInVRExclusivePointerMode) {\n return;\n }\n\n if (p.type !== PointerEventTypes.POINTERMOVE &&\n this.buttons.indexOf(evt.button) === -1) {\n return;\n }\n\n let srcElement = <HTMLElement>(evt.srcElement || evt.target);\n\n this._altKey = evt.altKey;\n this._ctrlKey = evt.ctrlKey;\n this._metaKey = evt.metaKey;\n this._shiftKey = evt.shiftKey;\n this._buttonsPressed = evt.buttons;\n\n if (engine.isPointerLock) {\n const offsetX = evt.movementX ||\n evt.mozMovementX ||\n evt.webkitMovementX ||\n evt.msMovementX ||\n 0;\n const offsetY = evt.movementY ||\n evt.mozMovementY ||\n evt.webkitMovementY ||\n evt.msMovementY ||\n 0;\n\n this.onTouch(null, offsetX, offsetY);\n this.pointA = null;\n this.pointB = null;\n } else if (p.type === PointerEventTypes.POINTERDOWN && srcElement && (this._currentActiveButton === -1 || isTouch)) {\n try {\n srcElement.setPointerCapture(evt.pointerId);\n } catch (e) {\n //Nothing to do with the error. Execution will continue.\n }\n\n if (this.pointA === null) {\n this.pointA = {\n x: evt.clientX,\n y: evt.clientY,\n pointerId: evt.pointerId,\n type: evt.pointerType\n };\n } else if (this.pointB === null) {\n this.pointB = {\n x: evt.clientX,\n y: evt.clientY,\n pointerId: evt.pointerId,\n type: evt.pointerType\n };\n }\n\n if (this._currentActiveButton === -1 && !isTouch) {\n this._currentActiveButton = evt.button;\n }\n this.onButtonDown(evt);\n\n if (!noPreventDefault) {\n evt.preventDefault();\n element && element.focus();\n }\n } else if (p.type === PointerEventTypes.POINTERDOUBLETAP) {\n this.onDoubleTap(evt.pointerType);\n } else if (srcElement && p.type === PointerEventTypes.POINTERUP && (this._currentActiveButton === evt.button || isTouch)) {\n try {\n if (evt.buttons === 0) {\n srcElement.releasePointerCapture(evt.pointerId);\n }\n } catch (e) {\n //Nothing to do with the error.\n }\n\n if (!isTouch) {\n this.pointB = null; // Mouse and pen are mono pointer\n }\n\n //would be better to use pointers.remove(evt.pointerId) for multitouch gestures,\n //but emptying completely pointers collection is required to fix a bug on iPhone :\n //when changing orientation while pinching camera,\n //one pointer stay pressed forever if we don't release all pointers\n //will be ok to put back pointers.remove(evt.pointerId); when iPhone bug corrected\n if (engine._badOS) {\n this.pointA = this.pointB = null;\n } else {\n //only remove the impacted pointer in case of multitouch allowing on most\n //platforms switching from rotate to zoom and pan seamlessly.\n if (this.pointB && this.pointA && this.pointA.pointerId == evt.pointerId) {\n this.pointA = this.pointB;\n this.pointB = null;\n } else if (this.pointA && this.pointB &&\n this.pointB.pointerId == evt.pointerId) {\n this.pointB = null;\n } else {\n this.pointA = this.pointB = null;\n }\n }\n\n if (previousPinchSquaredDistance !== 0 || previousMultiTouchPanPosition) {\n // Previous pinch data is populated but a button has been lifted\n // so pinch has ended.\n this.onMultiTouch(\n this.pointA,\n this.pointB,\n previousPinchSquaredDistance,\n 0, // pinchSquaredDistance\n previousMultiTouchPanPosition,\n null // multiTouchPanPosition\n );\n previousPinchSquaredDistance = 0;\n previousMultiTouchPanPosition = null;\n }\n\n this._currentActiveButton = -1;\n this.onButtonUp(evt);\n\n if (!noPreventDefault) {\n evt.preventDefault();\n }\n } else if (p.type === PointerEventTypes.POINTERMOVE) {\n if (!noPreventDefault) {\n evt.preventDefault();\n }\n\n // One button down\n if (this.pointA && this.pointB === null) {\n const offsetX = evt.clientX - this.pointA.x;\n const offsetY = evt.clientY - this.pointA.y;\n this.onTouch(this.pointA, offsetX, offsetY);\n\n this.pointA.x = evt.clientX;\n this.pointA.y = evt.clientY;\n }\n // Two buttons down: pinch\n else if (this.pointA && this.pointB) {\n var ed = (this.pointA.pointerId === evt.pointerId) ?\n this.pointA : this.pointB;\n ed.x = evt.clientX;\n ed.y = evt.clientY;\n var distX = this.pointA.x - this.pointB.x;\n var distY = this.pointA.y - this.pointB.y;\n var pinchSquaredDistance = (distX * distX) + (distY * distY);\n var multiTouchPanPosition = {\n x: (this.pointA.x + this.pointB.x) / 2,\n y: (this.pointA.y + this.pointB.y) / 2,\n pointerId: evt.pointerId,\n type: p.type\n };\n\n this.onMultiTouch(\n this.pointA,\n this.pointB,\n previousPinchSquaredDistance,\n pinchSquaredDistance,\n previousMultiTouchPanPosition,\n multiTouchPanPosition);\n\n previousMultiTouchPanPosition = multiTouchPanPosition;\n previousPinchSquaredDistance = pinchSquaredDistance;\n }\n }\n };\n\n this._observer = this.camera.getScene().onPointerObservable.add(\n this._pointerInput,\n PointerEventTypes.POINTERDOWN | PointerEventTypes.POINTERUP |\n PointerEventTypes.POINTERMOVE | PointerEventTypes.POINTERDOUBLETAP);\n\n this._onLostFocus = () => {\n this.pointA = this.pointB = null;\n previousPinchSquaredDistance = 0;\n previousMultiTouchPanPosition = null;\n this.onLostFocus();\n };\n\n element && element.addEventListener(\"contextmenu\",\n <EventListener>this.onContextMenu.bind(this), false);\n\n let hostWindow = this.camera.getScene().getEngine().getHostWindow();\n\n if (hostWindow) {\n Tools.RegisterTopRootEvents(hostWindow, [\n { name: \"blur\", handler: this._onLostFocus }\n ]);\n }\n }\n\n /**\n * Detach the current controls from the specified dom element.\n */\n public detachControl(): void;\n\n /**\n * Detach the current controls from the specified dom element.\n * @param ignored defines an ignored parameter kept for backward compatibility. If you want to define the source input element, you can set engine.inputElement before calling camera.attachControl\n */\n public detachControl(ignored?: any): void {\n if (this._onLostFocus) {\n let hostWindow = this.camera.getScene().getEngine().getHostWindow();\n if (hostWindow) {\n Tools.UnregisterTopRootEvents(hostWindow, [\n { name: \"blur\", handler: this._onLostFocus }\n ]);\n }\n }\n\n if (this._observer) {\n this.camera.getScene().onPointerObservable.remove(this._observer);\n this._observer = null;\n\n if (this.onContextMenu) {\n const inputElement = this.camera.getScene().getEngine().getInputElement();\n inputElement && inputElement.removeEventListener(\"contextmenu\", <EventListener>this.onContextMenu);\n }\n\n this._onLostFocus = null;\n }\n\n this._altKey = false;\n this._ctrlKey = false;\n this._metaKey = false;\n this._shiftKey = false;\n this._buttonsPressed = 0;\n }\n\n /**\n * Gets the class name of the current input.\n * @returns the class name\n */\n public getClassName(): string {\n return \"BaseCameraPointersInput\";\n }\n\n /**\n * Get the friendly name associated with the input class.\n * @returns the input friendly name\n */\n public getSimpleName(): string {\n return \"pointers\";\n }\n\n /**\n * Called on pointer POINTERDOUBLETAP event.\n * Override this method to provide functionality on POINTERDOUBLETAP event.\n */\n protected onDoubleTap(type: string) {\n }\n\n /**\n * Called on pointer POINTERMOVE event if only a single touch is active.\n * Override this method to provide functionality.\n */\n protected onTouch(point: Nullable<PointerTouch>,\n offsetX: number,\n offsetY: number): void {\n }\n\n /**\n * Called on pointer POINTERMOVE event if multiple touches are active.\n * Override this method to provide functionality.\n */\n protected onMultiTouch(pointA: Nullable<PointerTouch>,\n pointB: Nullable<PointerTouch>,\n previousPinchSquaredDistance: number,\n pinchSquaredDistance: number,\n previousMultiTouchPanPosition: Nullable<PointerTouch>,\n multiTouchPanPosition: Nullable<PointerTouch>): void {\n }\n\n /**\n * Called on JS contextmenu event.\n * Override this method to provide functionality.\n */\n protected onContextMenu(evt: PointerEvent): void {\n evt.preventDefault();\n }\n\n /**\n * Called each time a new POINTERDOWN event occurs. Ie, for each button\n * press.\n * Override this method to provide functionality.\n */\n protected onButtonDown(evt: IPointerEvent): void {\n }\n\n /**\n * Called each time a new POINTERUP event occurs. Ie, for each button\n * release.\n * Override this method to provide functionality.\n */\n protected onButtonUp(evt: IPointerEvent): void {\n }\n\n /**\n * Called when window becomes inactive.\n * Override this method to provide functionality.\n */\n protected onLostFocus(): void {\n }\n\n private _pointerInput: (p: PointerInfo, s: EventState) => void;\n private _observer: Nullable<Observer<PointerInfo>>;\n private _onLostFocus: Nullable<(e: FocusEvent) => any>;\n private pointA: Nullable<PointerTouch>;\n private pointB: Nullable<PointerTouch>;\n}\n"]}
@@ -39,7 +39,6 @@ export declare class FreeCameraMouseInput implements ICameraInput<FreeCamera> {
39
39
  */
40
40
  _allowCameraRotation: boolean;
41
41
  private _currentActiveButton;
42
- private _usingSafari;
43
42
  /**
44
43
  * Manage the mouse inputs to control the movement of a free camera.
45
44
  * @see https://doc.babylonjs.com/how_to/customizing_camera_inputs
@@ -40,7 +40,6 @@ var FreeCameraMouseInput = /** @class */ (function () {
40
40
  */
41
41
  this._allowCameraRotation = true;
42
42
  this._currentActiveButton = -1;
43
- this._usingSafari = Tools.IsSafari();
44
43
  }
45
44
  /**
46
45
  * Attach the input controls to a specific dom element to get the input from.
@@ -54,17 +53,18 @@ var FreeCameraMouseInput = /** @class */ (function () {
54
53
  if (!this._pointerInput) {
55
54
  this._pointerInput = function (p) {
56
55
  var evt = p.event;
56
+ var isTouch = evt.pointerType === "touch";
57
57
  if (engine.isInVRExclusivePointerMode) {
58
58
  return;
59
59
  }
60
- if (!_this.touchEnabled && evt.pointerType === "touch") {
60
+ if (!_this.touchEnabled && isTouch) {
61
61
  return;
62
62
  }
63
63
  if (p.type !== PointerEventTypes.POINTERMOVE && _this.buttons.indexOf(evt.button) === -1) {
64
64
  return;
65
65
  }
66
66
  var srcElement = (evt.srcElement || evt.target);
67
- if (p.type === PointerEventTypes.POINTERDOWN && srcElement) {
67
+ if (p.type === PointerEventTypes.POINTERDOWN && srcElement && (_this._currentActiveButton === -1 || isTouch)) {
68
68
  try {
69
69
  srcElement.setPointerCapture(evt.pointerId);
70
70
  }
@@ -87,7 +87,7 @@ var FreeCameraMouseInput = /** @class */ (function () {
87
87
  _this._onMouseMove(p.event);
88
88
  }
89
89
  }
90
- else if (srcElement && (p.type === PointerEventTypes.POINTERUP || (p.type === PointerEventTypes.POINTERMOVE && p.event.button === _this._currentActiveButton && _this._currentActiveButton !== -1 && !_this._usingSafari))) {
90
+ else if (srcElement && p.type === PointerEventTypes.POINTERUP && (_this._currentActiveButton === evt.button || isTouch)) {
91
91
  try {
92
92
  srcElement.releasePointerCapture(evt.pointerId);
93
93
  }
@@ -101,31 +101,30 @@ var FreeCameraMouseInput = /** @class */ (function () {
101
101
  }
102
102
  }
103
103
  else if (p.type === PointerEventTypes.POINTERMOVE) {
104
- if (!_this.previousPosition) {
105
- if (engine.isPointerLock && _this._onMouseMove) {
106
- _this._onMouseMove(p.event);
107
- }
108
- return;
109
- }
110
- var offsetX = evt.clientX - _this.previousPosition.x;
111
- var offsetY = evt.clientY - _this.previousPosition.y;
112
- if (_this.camera.getScene().useRightHandedSystem) {
113
- offsetX *= -1;
114
- }
115
- if (_this.camera.parent && _this.camera.parent._getWorldMatrixDeterminant() < 0) {
116
- offsetX *= -1;
117
- }
118
- if (_this._allowCameraRotation) {
119
- _this.camera.cameraRotation.y += offsetX / _this.angularSensibility;
120
- _this.camera.cameraRotation.x += offsetY / _this.angularSensibility;
104
+ if (engine.isPointerLock && _this._onMouseMove) {
105
+ _this._onMouseMove(p.event);
121
106
  }
122
- _this.onPointerMovedObservable.notifyObservers({ offsetX: offsetX, offsetY: offsetY });
123
- _this.previousPosition = {
124
- x: evt.clientX,
125
- y: evt.clientY,
126
- };
127
- if (!noPreventDefault) {
128
- evt.preventDefault();
107
+ else if (_this.previousPosition) {
108
+ var offsetX = evt.clientX - _this.previousPosition.x;
109
+ var offsetY = evt.clientY - _this.previousPosition.y;
110
+ if (_this.camera.getScene().useRightHandedSystem) {
111
+ offsetX *= -1;
112
+ }
113
+ if (_this.camera.parent && _this.camera.parent._getWorldMatrixDeterminant() < 0) {
114
+ offsetX *= -1;
115
+ }
116
+ if (_this._allowCameraRotation) {
117
+ _this.camera.cameraRotation.y += offsetX / _this.angularSensibility;
118
+ _this.camera.cameraRotation.x += offsetY / _this.angularSensibility;
119
+ }
120
+ _this.onPointerMovedObservable.notifyObservers({ offsetX: offsetX, offsetY: offsetY });
121
+ _this.previousPosition = {
122
+ x: evt.clientX,
123
+ y: evt.clientY,
124
+ };
125
+ if (!noPreventDefault) {
126
+ evt.preventDefault();
127
+ }
129
128
  }
130
129
  }
131
130
  };
@@ -1 +1 @@
1
- {"version":3,"file":"freeCameraMouseInput.js","sourceRoot":"","sources":["../../../../sourceES6/core/Cameras/Inputs/freeCameraMouseInput.ts"],"names":[],"mappings":"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","sourcesContent":["import { Observer, EventState, Observable } from \"../../Misc/observable\";\r\nimport { serialize } from \"../../Misc/decorators\";\r\nimport { Nullable } from \"../../types\";\r\nimport { ICameraInput, CameraInputTypes } from \"../../Cameras/cameraInputsManager\";\r\nimport { FreeCamera } from \"../../Cameras/freeCamera\";\r\nimport { PointerInfo, PointerEventTypes } from \"../../Events/pointerEvents\";\r\nimport { Tools } from \"../../Misc/tools\";\r\nimport { IMouseEvent, IPointerEvent } from \"../../Events/deviceInputEvents\";\r\n/**\r\n * Manage the mouse inputs to control the movement of a free camera.\r\n * @see https://doc.babylonjs.com/how_to/customizing_camera_inputs\r\n */\r\nexport class FreeCameraMouseInput implements ICameraInput<FreeCamera> {\r\n /**\r\n * Defines the camera the input is attached to.\r\n */\r\n public camera: FreeCamera;\r\n\r\n /**\r\n * Defines the buttons associated with the input to handle camera move.\r\n */\r\n @serialize()\r\n public buttons = [0, 1, 2];\r\n\r\n /**\r\n * Defines the pointer angular sensibility along the X and Y axis or how fast is the camera rotating.\r\n */\r\n @serialize()\r\n public angularSensibility = 2000.0;\r\n\r\n private _pointerInput: (p: PointerInfo, s: EventState) => void;\r\n private _onMouseMove: Nullable<(e: IMouseEvent) => any>;\r\n private _observer: Nullable<Observer<PointerInfo>>;\r\n private previousPosition: Nullable<{ x: number; y: number }> = null;\r\n\r\n /**\r\n * Observable for when a pointer move event occurs containing the move offset\r\n */\r\n public onPointerMovedObservable = new Observable<{ offsetX: number; offsetY: number }>();\r\n /**\r\n * @hidden\r\n * If the camera should be rotated automatically based on pointer movement\r\n */\r\n public _allowCameraRotation = true;\r\n\r\n private _currentActiveButton: number = -1;\r\n private _usingSafari = Tools.IsSafari();\r\n\r\n /**\r\n * Manage the mouse inputs to control the movement of a free camera.\r\n * @see https://doc.babylonjs.com/how_to/customizing_camera_inputs\r\n * @param touchEnabled Defines if touch is enabled or not\r\n */\r\n constructor(\r\n /**\r\n * Define if touch is enabled in the mouse input\r\n */\r\n public touchEnabled = true\r\n ) { }\r\n\r\n /**\r\n * Attach the input controls to a specific dom element to get the input from.\r\n * @param noPreventDefault Defines whether event caught by the controls should call preventdefault() (https://developer.mozilla.org/en-US/docs/Web/API/Event/preventDefault)\r\n */\r\n public attachControl(noPreventDefault?: boolean): void {\r\n noPreventDefault = Tools.BackCompatCameraNoPreventDefault(arguments);\r\n var engine = this.camera.getEngine();\r\n const element = engine.getInputElement();\r\n\r\n if (!this._pointerInput) {\r\n this._pointerInput = (p) => {\r\n var evt = <IPointerEvent>p.event;\r\n\r\n if (engine.isInVRExclusivePointerMode) {\r\n return;\r\n }\r\n\r\n if (!this.touchEnabled && evt.pointerType === \"touch\") {\r\n return;\r\n }\r\n\r\n if (p.type !== PointerEventTypes.POINTERMOVE && this.buttons.indexOf(evt.button) === -1) {\r\n return;\r\n }\r\n\r\n let srcElement = <HTMLElement>(evt.srcElement || evt.target);\r\n\r\n if (p.type === PointerEventTypes.POINTERDOWN && srcElement) {\r\n try {\r\n srcElement.setPointerCapture(evt.pointerId);\r\n } catch (e) {\r\n //Nothing to do with the error. Execution will continue.\r\n }\r\n\r\n if (this._currentActiveButton === -1) {\r\n this._currentActiveButton = evt.button;\r\n }\r\n\r\n this.previousPosition = {\r\n x: evt.clientX,\r\n y: evt.clientY,\r\n };\r\n\r\n if (!noPreventDefault) {\r\n evt.preventDefault();\r\n element && element.focus();\r\n }\r\n\r\n // This is required to move while pointer button is down\r\n if (engine.isPointerLock && this._onMouseMove) {\r\n this._onMouseMove(p.event);\r\n }\r\n } else if (srcElement && (p.type === PointerEventTypes.POINTERUP || (p.type === PointerEventTypes.POINTERMOVE && p.event.button === this._currentActiveButton && this._currentActiveButton !== -1 && !this._usingSafari))) {\r\n try {\r\n srcElement.releasePointerCapture(evt.pointerId);\r\n } catch (e) {\r\n //Nothing to do with the error.\r\n }\r\n this._currentActiveButton = -1;\r\n\r\n this.previousPosition = null;\r\n if (!noPreventDefault) {\r\n evt.preventDefault();\r\n }\r\n } else if (p.type === PointerEventTypes.POINTERMOVE) {\r\n if (!this.previousPosition) {\r\n if (engine.isPointerLock && this._onMouseMove) {\r\n this._onMouseMove(p.event);\r\n }\r\n\r\n return;\r\n }\r\n\r\n var offsetX = evt.clientX - this.previousPosition.x;\r\n var offsetY = evt.clientY - this.previousPosition.y;\r\n if (this.camera.getScene().useRightHandedSystem) {\r\n offsetX *= -1;\r\n }\r\n if (this.camera.parent && this.camera.parent._getWorldMatrixDeterminant() < 0) {\r\n offsetX *= -1;\r\n }\r\n\r\n if (this._allowCameraRotation) {\r\n this.camera.cameraRotation.y += offsetX / this.angularSensibility;\r\n this.camera.cameraRotation.x += offsetY / this.angularSensibility;\r\n }\r\n this.onPointerMovedObservable.notifyObservers({ offsetX: offsetX, offsetY: offsetY });\r\n\r\n this.previousPosition = {\r\n x: evt.clientX,\r\n y: evt.clientY,\r\n };\r\n\r\n if (!noPreventDefault) {\r\n evt.preventDefault();\r\n }\r\n }\r\n };\r\n }\r\n\r\n this._onMouseMove = (evt) => {\r\n if (!engine.isPointerLock) {\r\n return;\r\n }\r\n\r\n if (engine.isInVRExclusivePointerMode) {\r\n return;\r\n }\r\n\r\n var offsetX = evt.movementX || evt.mozMovementX || evt.webkitMovementX || evt.msMovementX || 0;\r\n if (this.camera.getScene().useRightHandedSystem) {\r\n offsetX *= -1;\r\n }\r\n if (this.camera.parent && this.camera.parent._getWorldMatrixDeterminant() < 0) {\r\n offsetX *= -1;\r\n }\r\n this.camera.cameraRotation.y += offsetX / this.angularSensibility;\r\n\r\n var offsetY = evt.movementY || evt.mozMovementY || evt.webkitMovementY || evt.msMovementY || 0;\r\n this.camera.cameraRotation.x += offsetY / this.angularSensibility;\r\n\r\n this.previousPosition = null;\r\n\r\n if (!noPreventDefault) {\r\n evt.preventDefault();\r\n }\r\n };\r\n\r\n this._observer = this.camera.getScene().onPointerObservable.add(this._pointerInput, PointerEventTypes.POINTERDOWN | PointerEventTypes.POINTERUP | PointerEventTypes.POINTERMOVE);\r\n\r\n element && element.addEventListener(\"contextmenu\", <EventListener>this.onContextMenu.bind(this), false); // TODO: We need to figure out how to handle this for Native\r\n }\r\n\r\n /**\r\n * Called on JS contextmenu event.\r\n * Override this method to provide functionality.\r\n */\r\n protected onContextMenu(evt: PointerEvent): void {\r\n evt.preventDefault();\r\n }\r\n\r\n /**\r\n * Detach the current controls from the specified dom element.\r\n */\r\n public detachControl(): void;\r\n\r\n /**\r\n * Detach the current controls from the specified dom element.\r\n * @param ignored defines an ignored parameter kept for backward compatibility. If you want to define the source input element, you can set engine.inputElement before calling camera.attachControl\r\n */\r\n public detachControl(ignored?: any): void {\r\n if (this._observer) {\r\n this.camera.getScene().onPointerObservable.remove(this._observer);\r\n\r\n if (this.onContextMenu) {\r\n const engine = this.camera.getEngine();\r\n const element = engine.getInputElement();\r\n element && element.removeEventListener(\"contextmenu\", <EventListener>this.onContextMenu);\r\n }\r\n\r\n if (this.onPointerMovedObservable) {\r\n this.onPointerMovedObservable.clear();\r\n }\r\n\r\n this._observer = null;\r\n this._onMouseMove = null;\r\n this.previousPosition = null;\r\n }\r\n }\r\n\r\n /**\r\n * Gets the class name of the current input.\r\n * @returns the class name\r\n */\r\n public getClassName(): string {\r\n return \"FreeCameraMouseInput\";\r\n }\r\n\r\n /**\r\n * Get the friendly name associated with the input class.\r\n * @returns the input friendly name\r\n */\r\n public getSimpleName(): string {\r\n return \"mouse\";\r\n }\r\n}\r\n\r\n(<any>CameraInputTypes)[\"FreeCameraMouseInput\"] = FreeCameraMouseInput;\r\n"]}
1
+ {"version":3,"file":"freeCameraMouseInput.js","sourceRoot":"","sources":["../../../../sourceES6/core/Cameras/Inputs/freeCameraMouseInput.ts"],"names":[],"mappings":"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","sourcesContent":["import { Observer, EventState, Observable } from \"../../Misc/observable\";\r\nimport { serialize } from \"../../Misc/decorators\";\r\nimport { Nullable } from \"../../types\";\r\nimport { ICameraInput, CameraInputTypes } from \"../../Cameras/cameraInputsManager\";\r\nimport { FreeCamera } from \"../../Cameras/freeCamera\";\r\nimport { PointerInfo, PointerEventTypes } from \"../../Events/pointerEvents\";\r\nimport { Tools } from \"../../Misc/tools\";\r\nimport { IMouseEvent, IPointerEvent } from \"../../Events/deviceInputEvents\";\r\n/**\r\n * Manage the mouse inputs to control the movement of a free camera.\r\n * @see https://doc.babylonjs.com/how_to/customizing_camera_inputs\r\n */\r\nexport class FreeCameraMouseInput implements ICameraInput<FreeCamera> {\r\n /**\r\n * Defines the camera the input is attached to.\r\n */\r\n public camera: FreeCamera;\r\n\r\n /**\r\n * Defines the buttons associated with the input to handle camera move.\r\n */\r\n @serialize()\r\n public buttons = [0, 1, 2];\r\n\r\n /**\r\n * Defines the pointer angular sensibility along the X and Y axis or how fast is the camera rotating.\r\n */\r\n @serialize()\r\n public angularSensibility = 2000.0;\r\n\r\n private _pointerInput: (p: PointerInfo, s: EventState) => void;\r\n private _onMouseMove: Nullable<(e: IMouseEvent) => any>;\r\n private _observer: Nullable<Observer<PointerInfo>>;\r\n private previousPosition: Nullable<{ x: number; y: number }> = null;\r\n\r\n /**\r\n * Observable for when a pointer move event occurs containing the move offset\r\n */\r\n public onPointerMovedObservable = new Observable<{ offsetX: number; offsetY: number }>();\r\n /**\r\n * @hidden\r\n * If the camera should be rotated automatically based on pointer movement\r\n */\r\n public _allowCameraRotation = true;\r\n\r\n private _currentActiveButton: number = -1;\r\n\r\n /**\r\n * Manage the mouse inputs to control the movement of a free camera.\r\n * @see https://doc.babylonjs.com/how_to/customizing_camera_inputs\r\n * @param touchEnabled Defines if touch is enabled or not\r\n */\r\n constructor(\r\n /**\r\n * Define if touch is enabled in the mouse input\r\n */\r\n public touchEnabled = true\r\n ) { }\r\n\r\n /**\r\n * Attach the input controls to a specific dom element to get the input from.\r\n * @param noPreventDefault Defines whether event caught by the controls should call preventdefault() (https://developer.mozilla.org/en-US/docs/Web/API/Event/preventDefault)\r\n */\r\n public attachControl(noPreventDefault?: boolean): void {\r\n noPreventDefault = Tools.BackCompatCameraNoPreventDefault(arguments);\r\n var engine = this.camera.getEngine();\r\n const element = engine.getInputElement();\r\n\r\n if (!this._pointerInput) {\r\n this._pointerInput = (p) => {\r\n var evt = <IPointerEvent>p.event;\r\n let isTouch = evt.pointerType === \"touch\";\r\n\r\n if (engine.isInVRExclusivePointerMode) {\r\n return;\r\n }\r\n\r\n if (!this.touchEnabled && isTouch) {\r\n return;\r\n }\r\n\r\n if (p.type !== PointerEventTypes.POINTERMOVE && this.buttons.indexOf(evt.button) === -1) {\r\n return;\r\n }\r\n\r\n let srcElement = <HTMLElement>(evt.srcElement || evt.target);\r\n\r\n if (p.type === PointerEventTypes.POINTERDOWN && srcElement && (this._currentActiveButton === -1 || isTouch)) {\r\n try {\r\n srcElement.setPointerCapture(evt.pointerId);\r\n } catch (e) {\r\n //Nothing to do with the error. Execution will continue.\r\n }\r\n\r\n if (this._currentActiveButton === -1) {\r\n this._currentActiveButton = evt.button;\r\n }\r\n\r\n this.previousPosition = {\r\n x: evt.clientX,\r\n y: evt.clientY,\r\n };\r\n\r\n if (!noPreventDefault) {\r\n evt.preventDefault();\r\n element && element.focus();\r\n }\r\n\r\n // This is required to move while pointer button is down\r\n if (engine.isPointerLock && this._onMouseMove) {\r\n this._onMouseMove(p.event);\r\n }\r\n } else if (srcElement && p.type === PointerEventTypes.POINTERUP && (this._currentActiveButton === evt.button || isTouch)) {\r\n try {\r\n srcElement.releasePointerCapture(evt.pointerId);\r\n } catch (e) {\r\n //Nothing to do with the error.\r\n }\r\n this._currentActiveButton = -1;\r\n\r\n this.previousPosition = null;\r\n if (!noPreventDefault) {\r\n evt.preventDefault();\r\n }\r\n } else if (p.type === PointerEventTypes.POINTERMOVE) {\r\n\r\n if (engine.isPointerLock && this._onMouseMove) {\r\n this._onMouseMove(p.event);\r\n }\r\n else if (this.previousPosition) {\r\n var offsetX = evt.clientX - this.previousPosition.x;\r\n var offsetY = evt.clientY - this.previousPosition.y;\r\n if (this.camera.getScene().useRightHandedSystem) {\r\n offsetX *= -1;\r\n }\r\n if (this.camera.parent && this.camera.parent._getWorldMatrixDeterminant() < 0) {\r\n offsetX *= -1;\r\n }\r\n\r\n if (this._allowCameraRotation) {\r\n this.camera.cameraRotation.y += offsetX / this.angularSensibility;\r\n this.camera.cameraRotation.x += offsetY / this.angularSensibility;\r\n }\r\n this.onPointerMovedObservable.notifyObservers({ offsetX: offsetX, offsetY: offsetY });\r\n\r\n this.previousPosition = {\r\n x: evt.clientX,\r\n y: evt.clientY,\r\n };\r\n\r\n if (!noPreventDefault) {\r\n evt.preventDefault();\r\n }\r\n }\r\n }\r\n };\r\n }\r\n\r\n this._onMouseMove = (evt) => {\r\n if (!engine.isPointerLock) {\r\n return;\r\n }\r\n\r\n if (engine.isInVRExclusivePointerMode) {\r\n return;\r\n }\r\n\r\n var offsetX = evt.movementX || evt.mozMovementX || evt.webkitMovementX || evt.msMovementX || 0;\r\n if (this.camera.getScene().useRightHandedSystem) {\r\n offsetX *= -1;\r\n }\r\n if (this.camera.parent && this.camera.parent._getWorldMatrixDeterminant() < 0) {\r\n offsetX *= -1;\r\n }\r\n this.camera.cameraRotation.y += offsetX / this.angularSensibility;\r\n\r\n var offsetY = evt.movementY || evt.mozMovementY || evt.webkitMovementY || evt.msMovementY || 0;\r\n this.camera.cameraRotation.x += offsetY / this.angularSensibility;\r\n\r\n this.previousPosition = null;\r\n\r\n if (!noPreventDefault) {\r\n evt.preventDefault();\r\n }\r\n };\r\n\r\n this._observer = this.camera.getScene().onPointerObservable.add(this._pointerInput, PointerEventTypes.POINTERDOWN | PointerEventTypes.POINTERUP | PointerEventTypes.POINTERMOVE);\r\n\r\n element && element.addEventListener(\"contextmenu\", <EventListener>this.onContextMenu.bind(this), false); // TODO: We need to figure out how to handle this for Native\r\n }\r\n\r\n /**\r\n * Called on JS contextmenu event.\r\n * Override this method to provide functionality.\r\n */\r\n protected onContextMenu(evt: PointerEvent): void {\r\n evt.preventDefault();\r\n }\r\n\r\n /**\r\n * Detach the current controls from the specified dom element.\r\n */\r\n public detachControl(): void;\r\n\r\n /**\r\n * Detach the current controls from the specified dom element.\r\n * @param ignored defines an ignored parameter kept for backward compatibility. If you want to define the source input element, you can set engine.inputElement before calling camera.attachControl\r\n */\r\n public detachControl(ignored?: any): void {\r\n if (this._observer) {\r\n this.camera.getScene().onPointerObservable.remove(this._observer);\r\n\r\n if (this.onContextMenu) {\r\n const engine = this.camera.getEngine();\r\n const element = engine.getInputElement();\r\n element && element.removeEventListener(\"contextmenu\", <EventListener>this.onContextMenu);\r\n }\r\n\r\n if (this.onPointerMovedObservable) {\r\n this.onPointerMovedObservable.clear();\r\n }\r\n\r\n this._observer = null;\r\n this._onMouseMove = null;\r\n this.previousPosition = null;\r\n }\r\n }\r\n\r\n /**\r\n * Gets the class name of the current input.\r\n * @returns the class name\r\n */\r\n public getClassName(): string {\r\n return \"FreeCameraMouseInput\";\r\n }\r\n\r\n /**\r\n * Get the friendly name associated with the input class.\r\n * @returns the input friendly name\r\n */\r\n public getSimpleName(): string {\r\n return \"mouse\";\r\n }\r\n}\r\n\r\n(<any>CameraInputTypes)[\"FreeCameraMouseInput\"] = FreeCameraMouseInput;\r\n"]}
@@ -227,6 +227,10 @@ export declare class Camera extends Node {
227
227
  * The parent camera is not (!) necessarily the .parent of this camera (like in the case of XR)
228
228
  */
229
229
  rigParent?: Camera;
230
+ /**
231
+ * Render pass id used by the camera to render into the main framebuffer
232
+ */
233
+ renderPassId: number;
230
234
  /** @hidden */
231
235
  _cameraRigParams: any;
232
236
  /** @hidden */
package/Cameras/camera.js CHANGED
@@ -170,6 +170,7 @@ var Camera = /** @class */ (function (_super) {
170
170
  _this.getScene().activeCamera = _this;
171
171
  }
172
172
  _this.position = position;
173
+ _this.renderPassId = _this.getScene().getEngine().createRenderPassId("Camera " + name);
173
174
  return _this;
174
175
  }
175
176
  Object.defineProperty(Camera.prototype, "position", {
@@ -770,6 +771,7 @@ var Camera = /** @class */ (function (_super) {
770
771
  this.customRenderTargets = [];
771
772
  // Active Meshes
772
773
  this._activeMeshes.dispose();
774
+ this.getScene().getEngine().releaseRenderPassId(this.renderPassId);
773
775
  _super.prototype.dispose.call(this, doNotRecurse, disposeMaterialAndTextures);
774
776
  };
775
777
  Object.defineProperty(Camera.prototype, "isLeftCamera", {