@babylonjs/core 9.10.1 → 9.12.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (1065) hide show
  1. package/Actions/actionManager.d.ts +1 -1
  2. package/Actions/actionManager.js +8 -5
  3. package/Actions/actionManager.js.map +1 -1
  4. package/Animations/animatable.core.d.ts +1 -1
  5. package/Animations/animatable.core.js +2 -2
  6. package/Animations/animatable.core.js.map +1 -1
  7. package/Animations/animationPropertiesOverride.js +1 -1
  8. package/Animations/animationPropertiesOverride.js.map +1 -1
  9. package/Animations/animatorAvatar.d.ts +2 -2
  10. package/Animations/animatorAvatar.js +3 -3
  11. package/Animations/animatorAvatar.js.map +1 -1
  12. package/Animations/pathCursor.d.ts +1 -1
  13. package/Animations/pathCursor.js +1 -1
  14. package/Animations/pathCursor.js.map +1 -1
  15. package/Animations/runtimeAnimation.d.ts +1 -1
  16. package/Animations/runtimeAnimation.js +2 -2
  17. package/Animations/runtimeAnimation.js.map +1 -1
  18. package/Audio/analyser.js +1 -1
  19. package/Audio/analyser.js.map +1 -1
  20. package/AudioV2/abstractAudio/components/spatialAudioAttacherComponent.js +1 -1
  21. package/AudioV2/abstractAudio/components/spatialAudioAttacherComponent.js.map +1 -1
  22. package/AudioV2/abstractAudio/subNodes/audioAnalyzerSubNode.d.ts +2 -0
  23. package/AudioV2/abstractAudio/subNodes/audioAnalyzerSubNode.js.map +1 -1
  24. package/AudioV2/abstractAudio/subProperties/abstractAudioAnalyzer.d.ts +13 -3
  25. package/AudioV2/abstractAudio/subProperties/abstractAudioAnalyzer.js +16 -0
  26. package/AudioV2/abstractAudio/subProperties/abstractAudioAnalyzer.js.map +1 -1
  27. package/AudioV2/abstractAudio/subProperties/abstractSpatialAudio.d.ts +1 -1
  28. package/AudioV2/abstractAudio/subProperties/abstractSpatialAudio.js +1 -1
  29. package/AudioV2/abstractAudio/subProperties/abstractSpatialAudio.js.map +1 -1
  30. package/AudioV2/abstractAudio/subProperties/abstractSpatialAudioListener.d.ts +1 -1
  31. package/AudioV2/abstractAudio/subProperties/abstractSpatialAudioListener.js +1 -1
  32. package/AudioV2/abstractAudio/subProperties/abstractSpatialAudioListener.js.map +1 -1
  33. package/AudioV2/abstractAudio/subProperties/audioAnalyzer.d.ts +4 -0
  34. package/AudioV2/abstractAudio/subProperties/audioAnalyzer.js +22 -0
  35. package/AudioV2/abstractAudio/subProperties/audioAnalyzer.js.map +1 -1
  36. package/AudioV2/webAudio/subNodes/spatialWebAudioSubNode.d.ts +1 -1
  37. package/AudioV2/webAudio/subNodes/spatialWebAudioSubNode.js +1 -1
  38. package/AudioV2/webAudio/subNodes/spatialWebAudioSubNode.js.map +1 -1
  39. package/AudioV2/webAudio/subNodes/webAudioAnalyzerSubNode.d.ts +6 -0
  40. package/AudioV2/webAudio/subNodes/webAudioAnalyzerSubNode.js +22 -5
  41. package/AudioV2/webAudio/subNodes/webAudioAnalyzerSubNode.js.map +1 -1
  42. package/AudioV2/webAudio/subProperties/spatialWebAudioListener.js +1 -1
  43. package/AudioV2/webAudio/subProperties/spatialWebAudioListener.js.map +1 -1
  44. package/AudioV2/webAudio/webAudioStreamingSound.js +1 -1
  45. package/AudioV2/webAudio/webAudioStreamingSound.js.map +1 -1
  46. package/BakedVertexAnimation/bakedVertexAnimationManager.d.ts +1 -1
  47. package/BakedVertexAnimation/bakedVertexAnimationManager.js +1 -1
  48. package/BakedVertexAnimation/bakedVertexAnimationManager.js.map +1 -1
  49. package/BakedVertexAnimation/vertexAnimationBaker.js +1 -1
  50. package/BakedVertexAnimation/vertexAnimationBaker.js.map +1 -1
  51. package/Behaviors/Cameras/bouncingBehavior.js +1 -1
  52. package/Behaviors/Cameras/bouncingBehavior.js.map +1 -1
  53. package/Behaviors/Cameras/framingBehavior.d.ts +1 -1
  54. package/Behaviors/Cameras/framingBehavior.js +2 -2
  55. package/Behaviors/Cameras/framingBehavior.js.map +1 -1
  56. package/Behaviors/Cameras/interpolatingBehavior.d.ts +13 -1
  57. package/Behaviors/Cameras/interpolatingBehavior.js +13 -1
  58. package/Behaviors/Cameras/interpolatingBehavior.js.map +1 -1
  59. package/Behaviors/Meshes/attachToBoxBehavior.js +1 -1
  60. package/Behaviors/Meshes/attachToBoxBehavior.js.map +1 -1
  61. package/Behaviors/Meshes/baseSixDofDragBehavior.d.ts +3 -3
  62. package/Behaviors/Meshes/baseSixDofDragBehavior.js +4 -4
  63. package/Behaviors/Meshes/baseSixDofDragBehavior.js.map +1 -1
  64. package/Behaviors/Meshes/followBehavior.js +1 -1
  65. package/Behaviors/Meshes/followBehavior.js.map +1 -1
  66. package/Behaviors/Meshes/handConstraintBehavior.js +2 -2
  67. package/Behaviors/Meshes/handConstraintBehavior.js.map +1 -1
  68. package/Behaviors/Meshes/multiPointerScaleBehavior.js +1 -1
  69. package/Behaviors/Meshes/multiPointerScaleBehavior.js.map +1 -1
  70. package/Behaviors/Meshes/pointerDragBehavior.d.ts +3 -3
  71. package/Behaviors/Meshes/pointerDragBehavior.js +5 -5
  72. package/Behaviors/Meshes/pointerDragBehavior.js.map +1 -1
  73. package/Behaviors/Meshes/sixDofDragBehavior.d.ts +1 -1
  74. package/Behaviors/Meshes/sixDofDragBehavior.js +2 -2
  75. package/Behaviors/Meshes/sixDofDragBehavior.js.map +1 -1
  76. package/Behaviors/Meshes/surfaceMagnetismBehavior.js +1 -1
  77. package/Behaviors/Meshes/surfaceMagnetismBehavior.js.map +1 -1
  78. package/Bones/boneIKController.d.ts +1 -1
  79. package/Bones/boneIKController.js +1 -1
  80. package/Bones/boneIKController.js.map +1 -1
  81. package/Bones/boneLookController.d.ts +1 -1
  82. package/Bones/boneLookController.js +1 -1
  83. package/Bones/boneLookController.js.map +1 -1
  84. package/Bones/skeleton.d.ts +2 -2
  85. package/Bones/skeleton.functions.d.ts +1 -1
  86. package/Bones/skeleton.functions.js +3 -3
  87. package/Bones/skeleton.functions.js.map +1 -1
  88. package/Bones/skeleton.js +3 -4
  89. package/Bones/skeleton.js.map +1 -1
  90. package/Buffers/buffer.align.pure.js +6 -0
  91. package/Buffers/buffer.align.pure.js.map +1 -1
  92. package/Buffers/buffer.nonFloatVertexBuffers.js +2 -1
  93. package/Buffers/buffer.nonFloatVertexBuffers.js.map +1 -1
  94. package/Buffers/buffer.pure.d.ts +8 -0
  95. package/Buffers/buffer.pure.js +31 -2
  96. package/Buffers/buffer.pure.js.map +1 -1
  97. package/Buffers/bufferUtils.js +17 -5
  98. package/Buffers/bufferUtils.js.map +1 -1
  99. package/Cameras/Inputs/BaseCameraMouseWheelInput.js +1 -1
  100. package/Cameras/Inputs/BaseCameraMouseWheelInput.js.map +1 -1
  101. package/Cameras/Inputs/BaseCameraPointersInput.js +1 -1
  102. package/Cameras/Inputs/BaseCameraPointersInput.js.map +1 -1
  103. package/Cameras/Inputs/arcRotateCameraKeyboardMoveInput.js +1 -1
  104. package/Cameras/Inputs/arcRotateCameraKeyboardMoveInput.js.map +1 -1
  105. package/Cameras/Inputs/arcRotateCameraMouseWheelInput.js +2 -2
  106. package/Cameras/Inputs/arcRotateCameraMouseWheelInput.js.map +1 -1
  107. package/Cameras/Inputs/flyCameraKeyboardInput.js +2 -2
  108. package/Cameras/Inputs/flyCameraKeyboardInput.js.map +1 -1
  109. package/Cameras/Inputs/flyCameraMouseInput.js +2 -2
  110. package/Cameras/Inputs/flyCameraMouseInput.js.map +1 -1
  111. package/Cameras/Inputs/followCameraKeyboardMoveInput.js +1 -1
  112. package/Cameras/Inputs/followCameraKeyboardMoveInput.js.map +1 -1
  113. package/Cameras/Inputs/followCameraMouseWheelInput.js +1 -1
  114. package/Cameras/Inputs/followCameraMouseWheelInput.js.map +1 -1
  115. package/Cameras/Inputs/freeCameraGamepadInput.js +1 -1
  116. package/Cameras/Inputs/freeCameraGamepadInput.js.map +1 -1
  117. package/Cameras/Inputs/freeCameraKeyboardMoveInput.js +2 -2
  118. package/Cameras/Inputs/freeCameraKeyboardMoveInput.js.map +1 -1
  119. package/Cameras/Inputs/freeCameraMouseInput.js +1 -1
  120. package/Cameras/Inputs/freeCameraMouseInput.js.map +1 -1
  121. package/Cameras/Inputs/freeCameraMouseWheelInput.js +1 -1
  122. package/Cameras/Inputs/freeCameraMouseWheelInput.js.map +1 -1
  123. package/Cameras/Inputs/freeCameraTouchInput.js +2 -2
  124. package/Cameras/Inputs/freeCameraTouchInput.js.map +1 -1
  125. package/Cameras/Inputs/geospatialCameraKeyboardInput.js +1 -1
  126. package/Cameras/Inputs/geospatialCameraKeyboardInput.js.map +1 -1
  127. package/Cameras/Limits/geospatialLimits.d.ts +1 -1
  128. package/Cameras/Limits/geospatialLimits.js +1 -1
  129. package/Cameras/Limits/geospatialLimits.js.map +1 -1
  130. package/Cameras/RigModes/stereoscopicAnaglyphRigMode.js +2 -2
  131. package/Cameras/RigModes/stereoscopicAnaglyphRigMode.js.map +1 -1
  132. package/Cameras/RigModes/stereoscopicRigMode.d.ts +1 -1
  133. package/Cameras/RigModes/stereoscopicRigMode.js +3 -3
  134. package/Cameras/RigModes/stereoscopicRigMode.js.map +1 -1
  135. package/Cameras/RigModes/vrRigMode.js +2 -2
  136. package/Cameras/RigModes/vrRigMode.js.map +1 -1
  137. package/Cameras/Stereoscopic/stereoscopicScreenUniversalCamera.d.ts +3 -3
  138. package/Cameras/Stereoscopic/stereoscopicScreenUniversalCamera.js +5 -5
  139. package/Cameras/Stereoscopic/stereoscopicScreenUniversalCamera.js.map +1 -1
  140. package/Cameras/VR/vrCameraMetrics.d.ts +1 -1
  141. package/Cameras/VR/vrCameraMetrics.js +1 -1
  142. package/Cameras/VR/vrCameraMetrics.js.map +1 -1
  143. package/Cameras/cameraInputsManager.d.ts +1 -1
  144. package/Cameras/cameraInputsManager.js +1 -1
  145. package/Cameras/cameraInputsManager.js.map +1 -1
  146. package/Collisions/collider.d.ts +1 -1
  147. package/Collisions/collider.js +1 -1
  148. package/Collisions/collider.js.map +1 -1
  149. package/Collisions/gpuPicker.d.ts +1 -1
  150. package/Collisions/gpuPicker.js +5 -5
  151. package/Collisions/gpuPicker.js.map +1 -1
  152. package/Collisions/meshCollisionData.d.ts +1 -1
  153. package/Collisions/meshCollisionData.js +1 -1
  154. package/Collisions/meshCollisionData.js.map +1 -1
  155. package/Collisions/pickingInfo.d.ts +1 -1
  156. package/Collisions/pickingInfo.js +2 -2
  157. package/Collisions/pickingInfo.js.map +1 -1
  158. package/Compute/computeEffect.d.ts +6 -0
  159. package/Compute/computeEffect.js +3 -0
  160. package/Compute/computeEffect.js.map +1 -1
  161. package/Compute/computeShader.pure.d.ts +4 -0
  162. package/Compute/computeShader.pure.js +1 -0
  163. package/Compute/computeShader.pure.js.map +1 -1
  164. package/Culling/Octrees/octreeBlock.d.ts +1 -1
  165. package/Culling/Octrees/octreeBlock.js +1 -1
  166. package/Culling/Octrees/octreeBlock.js.map +1 -1
  167. package/Culling/boundingBox.d.ts +1 -1
  168. package/Culling/boundingBox.js +1 -1
  169. package/Culling/boundingBox.js.map +1 -1
  170. package/Culling/boundingInfo.d.ts +1 -1
  171. package/Culling/boundingInfo.js +1 -1
  172. package/Culling/boundingInfo.js.map +1 -1
  173. package/Culling/boundingSphere.d.ts +1 -1
  174. package/Culling/boundingSphere.js +1 -1
  175. package/Culling/boundingSphere.js.map +1 -1
  176. package/Culling/ray.core.d.ts +1 -1
  177. package/Culling/ray.core.js +1 -1
  178. package/Culling/ray.core.js.map +1 -1
  179. package/Debug/axesViewer.d.ts +1 -1
  180. package/Debug/axesViewer.js +3 -3
  181. package/Debug/axesViewer.js.map +1 -1
  182. package/Debug/boneAxesViewer.d.ts +1 -1
  183. package/Debug/boneAxesViewer.js +1 -1
  184. package/Debug/boneAxesViewer.js.map +1 -1
  185. package/Debug/directionalLightFrustumViewer.d.ts +1 -1
  186. package/Debug/directionalLightFrustumViewer.js +6 -6
  187. package/Debug/directionalLightFrustumViewer.js.map +1 -1
  188. package/Debug/rayHelper.d.ts +1 -1
  189. package/Debug/rayHelper.js +2 -2
  190. package/Debug/rayHelper.js.map +1 -1
  191. package/Debug/skeletonViewer.d.ts +2 -2
  192. package/Debug/skeletonViewer.js +10 -10
  193. package/Debug/skeletonViewer.js.map +1 -1
  194. package/DeviceInput/internalDeviceSourceManager.d.ts +1 -1
  195. package/DeviceInput/internalDeviceSourceManager.js +0 -1
  196. package/DeviceInput/internalDeviceSourceManager.js.map +1 -1
  197. package/DeviceInput/webDeviceInputSystem.js +1 -1
  198. package/DeviceInput/webDeviceInputSystem.js.map +1 -1
  199. package/Engines/Extensions/engine.views.d.ts +1 -1
  200. package/Engines/Extensions/engine.views.js +1 -1
  201. package/Engines/Extensions/engine.views.js.map +1 -1
  202. package/Engines/Native/nativeHelpers.js +4 -1
  203. package/Engines/Native/nativeHelpers.js.map +1 -1
  204. package/Engines/Native/nativeInterfaces.d.ts +10 -1
  205. package/Engines/Native/nativeInterfaces.js.map +1 -1
  206. package/Engines/WebGPU/Extensions/engine.computeShader.pure.js +154 -2
  207. package/Engines/WebGPU/Extensions/engine.computeShader.pure.js.map +1 -1
  208. package/Engines/WebGPU/webgpuCacheRenderPipeline.d.ts +1 -1
  209. package/Engines/WebGPU/webgpuCacheRenderPipeline.js +11 -1
  210. package/Engines/WebGPU/webgpuCacheRenderPipeline.js.map +1 -1
  211. package/Engines/WebGPU/webgpuComputeContext.d.ts +1 -1
  212. package/Engines/WebGPU/webgpuComputeContext.js.map +1 -1
  213. package/Engines/WebGPU/webgpuTintWASM.js +1 -1
  214. package/Engines/WebGPU/webgpuTintWASM.js.map +1 -1
  215. package/Engines/abstractEngine.pure.d.ts +7 -1
  216. package/Engines/abstractEngine.pure.js +34 -4
  217. package/Engines/abstractEngine.pure.js.map +1 -1
  218. package/Engines/constants.d.ts +4 -0
  219. package/Engines/constants.js +4 -0
  220. package/Engines/constants.js.map +1 -1
  221. package/Engines/engine.pure.d.ts +0 -7
  222. package/Engines/engine.pure.js +0 -34
  223. package/Engines/engine.pure.js.map +1 -1
  224. package/Engines/engineFactory.d.ts +2 -2
  225. package/Engines/engineFactory.js +3 -3
  226. package/Engines/engineFactory.js.map +1 -1
  227. package/Engines/thinNativeEngine.pure.js +15 -8
  228. package/Engines/thinNativeEngine.pure.js.map +1 -1
  229. package/Events/pointerEvents.d.ts +1 -1
  230. package/Events/pointerEvents.js +1 -1
  231. package/Events/pointerEvents.js.map +1 -1
  232. package/FlowGraph/Blocks/Data/Utils/flowGraphCodeExecutionBlock.js +1 -1
  233. package/FlowGraph/Blocks/Data/Utils/flowGraphCodeExecutionBlock.js.map +1 -1
  234. package/FlowGraph/Blocks/Data/flowGraphCachedOperationBlock.d.ts +1 -1
  235. package/FlowGraph/Blocks/Data/flowGraphCachedOperationBlock.js +1 -1
  236. package/FlowGraph/Blocks/Data/flowGraphCachedOperationBlock.js.map +1 -1
  237. package/FlowGraph/Blocks/Event/flowGraphKeyboardEventBlock.js +1 -1
  238. package/FlowGraph/Blocks/Event/flowGraphKeyboardEventBlock.js.map +1 -1
  239. package/FlowGraph/Blocks/Execution/Animation/flowGraphInterpolationBlock.pure.d.ts +1 -1
  240. package/FlowGraph/Blocks/Execution/Animation/flowGraphInterpolationBlock.pure.js +3 -3
  241. package/FlowGraph/Blocks/Execution/Animation/flowGraphInterpolationBlock.pure.js.map +1 -1
  242. package/FlowGraph/Blocks/Execution/ControlFlow/flowGraphCancelDelayBlock.pure.js +1 -1
  243. package/FlowGraph/Blocks/Execution/ControlFlow/flowGraphCancelDelayBlock.pure.js.map +1 -1
  244. package/FlowGraph/CustomTypes/flowGraphMatrix.d.ts +1 -1
  245. package/FlowGraph/CustomTypes/flowGraphMatrix.js +1 -1
  246. package/FlowGraph/CustomTypes/flowGraphMatrix.js.map +1 -1
  247. package/FlowGraph/flowGraphBlock.d.ts +1 -1
  248. package/FlowGraph/flowGraphBlock.js +1 -1
  249. package/FlowGraph/flowGraphBlock.js.map +1 -1
  250. package/FlowGraph/flowGraphExecutionBlock.d.ts +1 -1
  251. package/FlowGraph/flowGraphExecutionBlock.js +1 -1
  252. package/FlowGraph/flowGraphExecutionBlock.js.map +1 -1
  253. package/FlowGraph/flowGraphMath.d.ts +1 -1
  254. package/FlowGraph/flowGraphMath.js +1 -1
  255. package/FlowGraph/flowGraphMath.js.map +1 -1
  256. package/FlowGraph/flowGraphParser.js +1 -1
  257. package/FlowGraph/flowGraphParser.js.map +1 -1
  258. package/FlowGraph/flowGraphPathConverterComponent.d.ts +1 -1
  259. package/FlowGraph/flowGraphPathConverterComponent.js +2 -2
  260. package/FlowGraph/flowGraphPathConverterComponent.js.map +1 -1
  261. package/FlowGraph/flowGraphValidator.js.map +1 -1
  262. package/FlowGraph/serialization.js +4 -4
  263. package/FlowGraph/serialization.js.map +1 -1
  264. package/FlowGraph/utils.js.map +1 -1
  265. package/FrameGraph/Node/nodeRenderGraph.d.ts +2 -2
  266. package/FrameGraph/Node/nodeRenderGraph.js +7 -7
  267. package/FrameGraph/Node/nodeRenderGraph.js.map +1 -1
  268. package/FrameGraph/Tasks/Layers/baseLayerTask.d.ts +30 -0
  269. package/FrameGraph/Tasks/Layers/baseLayerTask.js +28 -1
  270. package/FrameGraph/Tasks/Layers/baseLayerTask.js.map +1 -1
  271. package/FrameGraph/Tasks/Misc/computeShaderTask.d.ts +2 -2
  272. package/FrameGraph/Tasks/Misc/computeShaderTask.js +2 -2
  273. package/FrameGraph/Tasks/Misc/computeShaderTask.js.map +1 -1
  274. package/FrameGraph/Tasks/Misc/lightingVolumeTask.d.ts +1 -1
  275. package/FrameGraph/Tasks/Misc/lightingVolumeTask.js +2 -2
  276. package/FrameGraph/Tasks/Misc/lightingVolumeTask.js.map +1 -1
  277. package/FrameGraph/Tasks/PostProcesses/blurTask.d.ts +7 -0
  278. package/FrameGraph/Tasks/PostProcesses/blurTask.js +8 -1
  279. package/FrameGraph/Tasks/PostProcesses/blurTask.js.map +1 -1
  280. package/FrameGraph/Tasks/PostProcesses/depthOfFieldBlurTask.js +1 -1
  281. package/FrameGraph/Tasks/PostProcesses/depthOfFieldBlurTask.js.map +1 -1
  282. package/FrameGraph/Tasks/PostProcesses/ssrBlurTask.js +1 -1
  283. package/FrameGraph/Tasks/PostProcesses/ssrBlurTask.js.map +1 -1
  284. package/FrameGraph/Tasks/PostProcesses/volumetricLightingBlendVolumeTask.d.ts +1 -1
  285. package/FrameGraph/Tasks/PostProcesses/volumetricLightingBlendVolumeTask.js +1 -1
  286. package/FrameGraph/Tasks/PostProcesses/volumetricLightingBlendVolumeTask.js.map +1 -1
  287. package/FrameGraph/Tasks/PostProcesses/volumetricLightingTask.d.ts +2 -2
  288. package/FrameGraph/Tasks/PostProcesses/volumetricLightingTask.js +3 -3
  289. package/FrameGraph/Tasks/PostProcesses/volumetricLightingTask.js.map +1 -1
  290. package/FrameGraph/Tasks/Rendering/csmShadowGeneratorTask.d.ts +1 -1
  291. package/FrameGraph/Tasks/Rendering/csmShadowGeneratorTask.js +2 -2
  292. package/FrameGraph/Tasks/Rendering/csmShadowGeneratorTask.js.map +1 -1
  293. package/FrameGraph/Tasks/Rendering/geometryRendererTask.d.ts +6 -0
  294. package/FrameGraph/Tasks/Rendering/geometryRendererTask.js +14 -5
  295. package/FrameGraph/Tasks/Rendering/geometryRendererTask.js.map +1 -1
  296. package/FrameGraph/Tasks/Rendering/iblShadows/iblShadowsAccumulationTask.d.ts +1 -1
  297. package/FrameGraph/Tasks/Rendering/iblShadows/iblShadowsAccumulationTask.js +1 -1
  298. package/FrameGraph/Tasks/Rendering/iblShadows/iblShadowsAccumulationTask.js.map +1 -1
  299. package/FrameGraph/Tasks/Rendering/iblShadows/iblShadowsSpatialBlurTask.d.ts +1 -1
  300. package/FrameGraph/Tasks/Rendering/iblShadows/iblShadowsSpatialBlurTask.js +1 -1
  301. package/FrameGraph/Tasks/Rendering/iblShadows/iblShadowsSpatialBlurTask.js.map +1 -1
  302. package/FrameGraph/Tasks/Rendering/iblShadows/iblShadowsTracingTask.d.ts +1 -1
  303. package/FrameGraph/Tasks/Rendering/iblShadows/iblShadowsTracingTask.js +2 -2
  304. package/FrameGraph/Tasks/Rendering/iblShadows/iblShadowsTracingTask.js.map +1 -1
  305. package/FrameGraph/Tasks/Rendering/iblShadows/iblShadowsVoxelizationTask.d.ts +1 -1
  306. package/FrameGraph/Tasks/Rendering/iblShadows/iblShadowsVoxelizationTask.js +2 -2
  307. package/FrameGraph/Tasks/Rendering/iblShadows/iblShadowsVoxelizationTask.js.map +1 -1
  308. package/FrameGraph/Tasks/Rendering/objectRendererTask.d.ts +7 -1
  309. package/FrameGraph/Tasks/Rendering/objectRendererTask.js +7 -1
  310. package/FrameGraph/Tasks/Rendering/objectRendererTask.js.map +1 -1
  311. package/FrameGraph/Tasks/Texture/clearTextureTask.d.ts +1 -1
  312. package/FrameGraph/Tasks/Texture/clearTextureTask.js +1 -1
  313. package/FrameGraph/Tasks/Texture/clearTextureTask.js.map +1 -1
  314. package/FrameGraph/frameGraphRenderContext.js +1 -1
  315. package/FrameGraph/frameGraphRenderContext.js.map +1 -1
  316. package/FrameGraph/frameGraphTextureManager.d.ts +1 -1
  317. package/FrameGraph/frameGraphTextureManager.js +1 -1
  318. package/FrameGraph/frameGraphTextureManager.js.map +1 -1
  319. package/Gamepads/gamepadManager.js +1 -1
  320. package/Gamepads/gamepadManager.js.map +1 -1
  321. package/Gizmos/axisDragGizmo.d.ts +5 -5
  322. package/Gizmos/axisDragGizmo.js +6 -6
  323. package/Gizmos/axisDragGizmo.js.map +1 -1
  324. package/Gizmos/axisScaleGizmo.d.ts +4 -4
  325. package/Gizmos/axisScaleGizmo.js +6 -6
  326. package/Gizmos/axisScaleGizmo.js.map +1 -1
  327. package/Gizmos/boundingBoxGizmo.d.ts +5 -5
  328. package/Gizmos/boundingBoxGizmo.js +7 -7
  329. package/Gizmos/boundingBoxGizmo.js.map +1 -1
  330. package/Gizmos/cameraGizmo.d.ts +3 -3
  331. package/Gizmos/cameraGizmo.js +7 -7
  332. package/Gizmos/cameraGizmo.js.map +1 -1
  333. package/Gizmos/gizmo.d.ts +2 -2
  334. package/Gizmos/gizmo.js +3 -3
  335. package/Gizmos/gizmo.js.map +1 -1
  336. package/Gizmos/gizmoManager.d.ts +2 -2
  337. package/Gizmos/gizmoManager.js +2 -2
  338. package/Gizmos/gizmoManager.js.map +1 -1
  339. package/Gizmos/lightGizmo.d.ts +4 -4
  340. package/Gizmos/lightGizmo.js +11 -11
  341. package/Gizmos/lightGizmo.js.map +1 -1
  342. package/Gizmos/planeDragGizmo.d.ts +4 -4
  343. package/Gizmos/planeDragGizmo.js +5 -5
  344. package/Gizmos/planeDragGizmo.js.map +1 -1
  345. package/Gizmos/positionGizmo.d.ts +1 -1
  346. package/Gizmos/positionGizmo.js +2 -2
  347. package/Gizmos/positionGizmo.js.map +1 -1
  348. package/Gizmos/rotationGizmo.d.ts +3 -3
  349. package/Gizmos/rotationGizmo.js +3 -3
  350. package/Gizmos/rotationGizmo.js.map +1 -1
  351. package/Gizmos/scaleGizmo.d.ts +2 -2
  352. package/Gizmos/scaleGizmo.js +4 -4
  353. package/Gizmos/scaleGizmo.js.map +1 -1
  354. package/Gizmos/spatialAudioGizmo.d.ts +2 -2
  355. package/Gizmos/spatialAudioGizmo.js +6 -6
  356. package/Gizmos/spatialAudioGizmo.js.map +1 -1
  357. package/Helpers/environmentHelper.d.ts +6 -6
  358. package/Helpers/environmentHelper.js +12 -12
  359. package/Helpers/environmentHelper.js.map +1 -1
  360. package/Helpers/materialConversionHelper.d.ts +1 -1
  361. package/Helpers/materialConversionHelper.js +1 -1
  362. package/Helpers/materialConversionHelper.js.map +1 -1
  363. package/Helpers/photoDome.d.ts +1 -1
  364. package/Helpers/photoDome.js +1 -1
  365. package/Helpers/photoDome.js.map +1 -1
  366. package/Helpers/textureDome.d.ts +4 -4
  367. package/Helpers/textureDome.js +6 -6
  368. package/Helpers/textureDome.js.map +1 -1
  369. package/Helpers/videoDome.d.ts +1 -1
  370. package/Helpers/videoDome.js +2 -2
  371. package/Helpers/videoDome.js.map +1 -1
  372. package/Inputs/scene.inputManager.d.ts +1 -1
  373. package/Inputs/scene.inputManager.js +1 -1
  374. package/Inputs/scene.inputManager.js.map +1 -1
  375. package/Instrumentation/sceneInstrumentation.js +1 -1
  376. package/Instrumentation/sceneInstrumentation.js.map +1 -1
  377. package/Layers/effectLayer.d.ts +1 -1
  378. package/Layers/effectLayer.js +3 -3
  379. package/Layers/effectLayer.js.map +1 -1
  380. package/Layers/layer.d.ts +2 -2
  381. package/Layers/layer.js +4 -4
  382. package/Layers/layer.js.map +1 -1
  383. package/Layers/thinEffectLayer.d.ts +2 -2
  384. package/Layers/thinEffectLayer.js +3 -3
  385. package/Layers/thinEffectLayer.js.map +1 -1
  386. package/Layers/thinGlowLayer.d.ts +1 -1
  387. package/Layers/thinGlowLayer.js +3 -3
  388. package/Layers/thinGlowLayer.js.map +1 -1
  389. package/Layers/thinHighlightLayer.d.ts +1 -1
  390. package/Layers/thinHighlightLayer.js +3 -3
  391. package/Layers/thinHighlightLayer.js.map +1 -1
  392. package/Layers/thinSelectionOutlineLayer.d.ts +1 -1
  393. package/Layers/thinSelectionOutlineLayer.js +3 -3
  394. package/Layers/thinSelectionOutlineLayer.js.map +1 -1
  395. package/Legacy/legacy.js +12 -1
  396. package/Legacy/legacy.js.map +1 -1
  397. package/LensFlares/lensFlare.d.ts +2 -2
  398. package/LensFlares/lensFlare.js +3 -3
  399. package/LensFlares/lensFlare.js.map +1 -1
  400. package/LensFlares/lensFlareSystem.d.ts +1 -1
  401. package/LensFlares/lensFlareSystem.js +6 -6
  402. package/LensFlares/lensFlareSystem.js.map +1 -1
  403. package/Lights/LTC/ltcTextureTool.js +1 -1
  404. package/Lights/LTC/ltcTextureTool.js.map +1 -1
  405. package/Lights/Shadows/cascadedShadowGenerator.d.ts +1 -285
  406. package/Lights/Shadows/cascadedShadowGenerator.js +3 -857
  407. package/Lights/Shadows/cascadedShadowGenerator.js.map +1 -1
  408. package/Lights/Shadows/cascadedShadowGenerator.pure.d.ts +290 -0
  409. package/Lights/Shadows/cascadedShadowGenerator.pure.js +868 -0
  410. package/Lights/Shadows/cascadedShadowGenerator.pure.js.map +1 -0
  411. package/Lights/Shadows/pure.d.ts +1 -0
  412. package/Lights/Shadows/pure.js +1 -0
  413. package/Lights/Shadows/pure.js.map +1 -1
  414. package/Lights/Shadows/shadowGenerator.d.ts +3 -3
  415. package/Lights/Shadows/shadowGenerator.js +7 -7
  416. package/Lights/Shadows/shadowGenerator.js.map +1 -1
  417. package/Lights/areaLight.d.ts +1 -1
  418. package/Lights/areaLight.js +0 -1
  419. package/Lights/areaLight.js.map +1 -1
  420. package/Lights/light.d.ts +2 -2
  421. package/Lights/light.js +2 -2
  422. package/Lights/light.js.map +1 -1
  423. package/Lights/shadowLight.d.ts +1 -1
  424. package/Lights/shadowLight.js +1 -1
  425. package/Lights/shadowLight.js.map +1 -1
  426. package/Loading/sceneLoader.d.ts +2 -2
  427. package/Loading/sceneLoader.js +3 -3
  428. package/Loading/sceneLoader.js.map +1 -1
  429. package/Materials/GreasedLine/greasedLineMaterialDefaults.d.ts +1 -1
  430. package/Materials/GreasedLine/greasedLineMaterialDefaults.js +1 -1
  431. package/Materials/GreasedLine/greasedLineMaterialDefaults.js.map +1 -1
  432. package/Materials/GreasedLine/greasedLineSimpleMaterial.d.ts +3 -3
  433. package/Materials/GreasedLine/greasedLineSimpleMaterial.js +3 -3
  434. package/Materials/GreasedLine/greasedLineSimpleMaterial.js.map +1 -1
  435. package/Materials/Node/Blocks/Fragment/prePassOutputBlock.pure.js +6 -6
  436. package/Materials/Node/Blocks/Fragment/prePassOutputBlock.pure.js.map +1 -1
  437. package/Materials/Node/nodeMaterial.pure.d.ts +12 -0
  438. package/Materials/Node/nodeMaterial.pure.js +68 -13
  439. package/Materials/Node/nodeMaterial.pure.js.map +1 -1
  440. package/Materials/Node/nodeMaterialDefault.js +14 -14
  441. package/Materials/Node/nodeMaterialDefault.js.map +1 -1
  442. package/Materials/PBR/openpbrMaterial.pure.js +19 -4
  443. package/Materials/PBR/openpbrMaterial.pure.js.map +1 -1
  444. package/Materials/PBR/pbrAnisotropicConfiguration.d.ts +40 -2
  445. package/Materials/PBR/pbrAnisotropicConfiguration.js +41 -3
  446. package/Materials/PBR/pbrAnisotropicConfiguration.js.map +1 -1
  447. package/Materials/PBR/pbrBRDFConfiguration.d.ts +5 -1
  448. package/Materials/PBR/pbrBRDFConfiguration.js +5 -1
  449. package/Materials/PBR/pbrBRDFConfiguration.js.map +1 -1
  450. package/Materials/PBR/pbrBaseSimpleMaterial.d.ts +2 -2
  451. package/Materials/PBR/pbrBaseSimpleMaterial.js +2 -2
  452. package/Materials/PBR/pbrBaseSimpleMaterial.js.map +1 -1
  453. package/Materials/PBR/pbrClearCoatConfiguration.d.ts +42 -2
  454. package/Materials/PBR/pbrClearCoatConfiguration.js +42 -2
  455. package/Materials/PBR/pbrClearCoatConfiguration.js.map +1 -1
  456. package/Materials/PBR/pbrIridescenceConfiguration.d.ts +38 -1
  457. package/Materials/PBR/pbrIridescenceConfiguration.js +38 -1
  458. package/Materials/PBR/pbrIridescenceConfiguration.js.map +1 -1
  459. package/Materials/PBR/pbrMaterial.pure.d.ts +6 -0
  460. package/Materials/PBR/pbrMaterial.pure.js +8 -0
  461. package/Materials/PBR/pbrMaterial.pure.js.map +1 -1
  462. package/Materials/PBR/pbrSheenConfiguration.d.ts +41 -2
  463. package/Materials/PBR/pbrSheenConfiguration.js +41 -2
  464. package/Materials/PBR/pbrSheenConfiguration.js.map +1 -1
  465. package/Materials/PBR/pbrSubSurfaceConfiguration.d.ts +41 -2
  466. package/Materials/PBR/pbrSubSurfaceConfiguration.js +42 -3
  467. package/Materials/PBR/pbrSubSurfaceConfiguration.js.map +1 -1
  468. package/Materials/Textures/Filtering/hdrFiltering.js +1 -1
  469. package/Materials/Textures/Filtering/hdrFiltering.js.map +1 -1
  470. package/Materials/Textures/Filtering/hdrIrradianceFiltering.d.ts +1 -1
  471. package/Materials/Textures/Filtering/hdrIrradianceFiltering.js +2 -2
  472. package/Materials/Textures/Filtering/hdrIrradianceFiltering.js.map +1 -1
  473. package/Materials/Textures/Loaders/EXR/exrLoader.core.d.ts +1 -1
  474. package/Materials/Textures/Loaders/EXR/exrLoader.core.js +5 -109
  475. package/Materials/Textures/Loaders/EXR/exrLoader.core.js.map +1 -1
  476. package/Materials/Textures/Loaders/EXR/exrLoader.decoder.js +1 -1
  477. package/Materials/Textures/Loaders/EXR/exrLoader.decoder.js.map +1 -1
  478. package/Materials/Textures/Loaders/basisTextureLoader.js +2 -2
  479. package/Materials/Textures/Loaders/basisTextureLoader.js.map +1 -1
  480. package/Materials/Textures/Loaders/ddsTextureLoader.js +1 -1
  481. package/Materials/Textures/Loaders/ddsTextureLoader.js.map +1 -1
  482. package/Materials/Textures/Loaders/envTextureLoader.js +3 -1
  483. package/Materials/Textures/Loaders/envTextureLoader.js.map +1 -1
  484. package/Materials/Textures/Loaders/ktxTextureLoader.js +11 -2
  485. package/Materials/Textures/Loaders/ktxTextureLoader.js.map +1 -1
  486. package/Materials/Textures/MultiviewRenderTarget.d.ts +1 -1
  487. package/Materials/Textures/MultiviewRenderTarget.js +1 -1
  488. package/Materials/Textures/MultiviewRenderTarget.js.map +1 -1
  489. package/Materials/Textures/Packer/packer.d.ts +1 -1
  490. package/Materials/Textures/Packer/packer.js +6 -6
  491. package/Materials/Textures/Packer/packer.js.map +1 -1
  492. package/Materials/Textures/Procedurals/customProceduralTexture.d.ts +2 -2
  493. package/Materials/Textures/Procedurals/customProceduralTexture.js +4 -4
  494. package/Materials/Textures/Procedurals/customProceduralTexture.js.map +1 -1
  495. package/Materials/Textures/Procedurals/noiseProceduralTexture.pure.js +17 -5
  496. package/Materials/Textures/Procedurals/noiseProceduralTexture.pure.js.map +1 -1
  497. package/Materials/Textures/Procedurals/proceduralTexture.pure.js +4 -1
  498. package/Materials/Textures/Procedurals/proceduralTexture.pure.js.map +1 -1
  499. package/Materials/Textures/Procedurals/proceduralTextureSceneComponent.js +1 -1
  500. package/Materials/Textures/Procedurals/proceduralTextureSceneComponent.js.map +1 -1
  501. package/Materials/Textures/prePassRenderTarget.d.ts +1 -1
  502. package/Materials/Textures/prePassRenderTarget.js +1 -1
  503. package/Materials/Textures/prePassRenderTarget.js.map +1 -1
  504. package/Materials/Textures/rawCubeTexture.d.ts +1 -1
  505. package/Materials/Textures/rawCubeTexture.js +2 -2
  506. package/Materials/Textures/rawCubeTexture.js.map +1 -1
  507. package/Materials/Textures/rawTexture.d.ts +1 -1
  508. package/Materials/Textures/rawTexture.js +1 -1
  509. package/Materials/Textures/rawTexture.js.map +1 -1
  510. package/Materials/Textures/rawTexture2DArray.d.ts +1 -1
  511. package/Materials/Textures/rawTexture2DArray.js +1 -1
  512. package/Materials/Textures/rawTexture2DArray.js.map +1 -1
  513. package/Materials/Textures/rawTexture3D.d.ts +1 -1
  514. package/Materials/Textures/rawTexture3D.js +1 -1
  515. package/Materials/Textures/rawTexture3D.js.map +1 -1
  516. package/Materials/Textures/refractionTexture.d.ts +1 -1
  517. package/Materials/Textures/refractionTexture.js +1 -1
  518. package/Materials/Textures/refractionTexture.js.map +1 -1
  519. package/Materials/Textures/textureMerger.d.ts +1 -1
  520. package/Materials/Textures/textureMerger.js +1 -1
  521. package/Materials/Textures/textureMerger.js.map +1 -1
  522. package/Materials/Textures/textureProcessor.d.ts +1 -1
  523. package/Materials/Textures/textureProcessor.js +2 -2
  524. package/Materials/Textures/textureProcessor.js.map +1 -1
  525. package/Materials/Textures/thinRenderTargetTexture.d.ts +4 -4
  526. package/Materials/Textures/thinRenderTargetTexture.js +2 -2
  527. package/Materials/Textures/thinRenderTargetTexture.js.map +1 -1
  528. package/Materials/clipPlaneMaterialHelper.js +1 -1
  529. package/Materials/clipPlaneMaterialHelper.js.map +1 -1
  530. package/Materials/effect.pure.d.ts +2 -2
  531. package/Materials/effect.pure.js +12 -6
  532. package/Materials/effect.pure.js.map +1 -1
  533. package/Materials/effectRenderer.pure.js +4 -2
  534. package/Materials/effectRenderer.pure.js.map +1 -1
  535. package/Materials/floatingOriginMatrixOverrides.d.ts +1 -1
  536. package/Materials/floatingOriginMatrixOverrides.js +1 -1
  537. package/Materials/floatingOriginMatrixOverrides.js.map +1 -1
  538. package/Materials/material.detailMapConfiguration.d.ts +39 -1
  539. package/Materials/material.detailMapConfiguration.js +39 -1
  540. package/Materials/material.detailMapConfiguration.js.map +1 -1
  541. package/Materials/materialHelper.functions.js +45 -1
  542. package/Materials/materialHelper.functions.js.map +1 -1
  543. package/Materials/materialHelper.geometryrendering.d.ts +1 -1
  544. package/Materials/materialHelper.geometryrendering.js +1 -1
  545. package/Materials/materialHelper.geometryrendering.js.map +1 -1
  546. package/Materials/materialPluginFactoryExport.js +2 -2
  547. package/Materials/materialPluginFactoryExport.js.map +1 -1
  548. package/Materials/meshDebugPluginMaterial.pure.js +15 -13
  549. package/Materials/meshDebugPluginMaterial.pure.js.map +1 -1
  550. package/Materials/pushMaterial.d.ts +7 -1
  551. package/Materials/pushMaterial.js +7 -1
  552. package/Materials/pushMaterial.js.map +1 -1
  553. package/Materials/uniformBuffer.js +1 -1
  554. package/Materials/uniformBuffer.js.map +1 -1
  555. package/Maths/math.axis.d.ts +1 -1
  556. package/Maths/math.axis.js +1 -1
  557. package/Maths/math.axis.js.map +1 -1
  558. package/Maths/math.d.ts +2 -2
  559. package/Maths/math.functions.d.ts +1 -1
  560. package/Maths/math.functions.js +1 -1
  561. package/Maths/math.functions.js.map +1 -1
  562. package/Maths/math.isovector.d.ts +1 -1
  563. package/Maths/math.isovector.js +1 -1
  564. package/Maths/math.isovector.js.map +1 -1
  565. package/Maths/math.js +2 -2
  566. package/Maths/math.js.map +1 -1
  567. package/Maths/math.path.d.ts +1 -1
  568. package/Maths/math.path.js +1 -1
  569. package/Maths/math.path.js.map +1 -1
  570. package/Maths/math.plane.d.ts +1 -1
  571. package/Maths/math.plane.js +1 -1
  572. package/Maths/math.plane.js.map +1 -1
  573. package/Maths/math.polar.d.ts +1 -1
  574. package/Maths/math.polar.js +1 -1
  575. package/Maths/math.polar.js.map +1 -1
  576. package/Maths/math.vertexFormat.d.ts +1 -1
  577. package/Maths/math.vertexFormat.js +1 -1
  578. package/Maths/math.vertexFormat.js.map +1 -1
  579. package/Maths/pure.d.ts +1 -0
  580. package/Maths/pure.js +1 -0
  581. package/Maths/pure.js.map +1 -1
  582. package/Meshes/Builders/geodesicBuilder.js +1 -1
  583. package/Meshes/Builders/geodesicBuilder.js.map +1 -1
  584. package/Meshes/Builders/goldbergBuilder.d.ts +1 -1
  585. package/Meshes/Builders/goldbergBuilder.js +4 -4
  586. package/Meshes/Builders/goldbergBuilder.js.map +1 -1
  587. package/Meshes/Builders/greasedLineBuilder.d.ts +4 -4
  588. package/Meshes/Builders/greasedLineBuilder.js +5 -5
  589. package/Meshes/Builders/greasedLineBuilder.js.map +1 -1
  590. package/Meshes/Builders/textBuilder.d.ts +2 -2
  591. package/Meshes/Builders/textBuilder.js +4 -4
  592. package/Meshes/Builders/textBuilder.js.map +1 -1
  593. package/Meshes/Builders/tiledBoxBuilder.d.ts +3 -3
  594. package/Meshes/Builders/tiledBoxBuilder.js +3 -3
  595. package/Meshes/Builders/tiledBoxBuilder.js.map +1 -1
  596. package/Meshes/Builders/tiledPlaneBuilder.d.ts +1 -1
  597. package/Meshes/Builders/tiledPlaneBuilder.js +1 -1
  598. package/Meshes/Builders/tiledPlaneBuilder.js.map +1 -1
  599. package/Meshes/Compression/dracoCodec.js +1 -1
  600. package/Meshes/Compression/dracoCodec.js.map +1 -1
  601. package/Meshes/Compression/dracoDecoder.js +1 -1
  602. package/Meshes/Compression/dracoDecoder.js.map +1 -1
  603. package/Meshes/Compression/dracoEncoder.d.ts +1 -1
  604. package/Meshes/Compression/dracoEncoder.js +2 -2
  605. package/Meshes/Compression/dracoEncoder.js.map +1 -1
  606. package/Meshes/Compression/meshoptCompression.js +1 -1
  607. package/Meshes/Compression/meshoptCompression.js.map +1 -1
  608. package/Meshes/GaussianSplatting/gaussianSplattingMeshBase.pure.js +64 -3
  609. package/Meshes/GaussianSplatting/gaussianSplattingMeshBase.pure.js.map +1 -1
  610. package/Meshes/GreasedLine/greasedLineBaseMesh.d.ts +2 -2
  611. package/Meshes/GreasedLine/greasedLineBaseMesh.js +3 -3
  612. package/Meshes/GreasedLine/greasedLineBaseMesh.js.map +1 -1
  613. package/Meshes/Node/nodeGeometry.d.ts +2 -2
  614. package/Meshes/Node/nodeGeometry.js +4 -4
  615. package/Meshes/Node/nodeGeometry.js.map +1 -1
  616. package/Meshes/Node/nodeGeometryBuildState.d.ts +1 -1
  617. package/Meshes/Node/nodeGeometryBuildState.js +1 -1
  618. package/Meshes/Node/nodeGeometryBuildState.js.map +1 -1
  619. package/Meshes/abstractMesh.hotSpot.d.ts +1 -1
  620. package/Meshes/abstractMesh.hotSpot.js +2 -2
  621. package/Meshes/abstractMesh.hotSpot.js.map +1 -1
  622. package/Meshes/abstractMesh.pure.js +2 -13
  623. package/Meshes/abstractMesh.pure.js.map +1 -1
  624. package/Meshes/buffer.d.ts +1 -1
  625. package/Meshes/buffer.js +1 -1
  626. package/Meshes/buffer.js.map +1 -1
  627. package/Meshes/csg.d.ts +3 -3
  628. package/Meshes/csg.js +4 -4
  629. package/Meshes/csg.js.map +1 -1
  630. package/Meshes/csg2.d.ts +1 -1
  631. package/Meshes/csg2.js +38 -11
  632. package/Meshes/csg2.js.map +1 -1
  633. package/Meshes/geodesicMesh.d.ts +1 -1
  634. package/Meshes/geodesicMesh.js +1 -1
  635. package/Meshes/geodesicMesh.js.map +1 -1
  636. package/Meshes/geometry.d.ts +2 -2
  637. package/Meshes/geometry.js +4 -4
  638. package/Meshes/geometry.js.map +1 -1
  639. package/Meshes/lattice.d.ts +1 -1
  640. package/Meshes/lattice.js +1 -1
  641. package/Meshes/lattice.js.map +1 -1
  642. package/Meshes/lattice.material.d.ts +1 -1
  643. package/Meshes/lattice.material.js +1 -1
  644. package/Meshes/lattice.material.js.map +1 -1
  645. package/Meshes/mesh.vertexData.d.ts +2 -2
  646. package/Meshes/mesh.vertexData.js +3 -4
  647. package/Meshes/mesh.vertexData.js.map +1 -1
  648. package/Meshes/mesh.vertexData.subdivide.js +1 -1
  649. package/Meshes/mesh.vertexData.subdivide.js.map +1 -1
  650. package/Meshes/meshBuilder.d.ts +18 -18
  651. package/Meshes/meshBuilder.js +18 -18
  652. package/Meshes/meshBuilder.js.map +1 -1
  653. package/Meshes/meshSimplification.d.ts +1 -1
  654. package/Meshes/meshSimplification.js +4 -4
  655. package/Meshes/meshSimplification.js.map +1 -1
  656. package/Meshes/meshUVSpaceRenderer.d.ts +1 -1
  657. package/Meshes/meshUVSpaceRenderer.js +0 -1
  658. package/Meshes/meshUVSpaceRenderer.js.map +1 -1
  659. package/Meshes/meshUtils.d.ts +1 -1
  660. package/Meshes/meshUtils.js +2 -2
  661. package/Meshes/meshUtils.js.map +1 -1
  662. package/Meshes/polygonMesh.d.ts +2 -2
  663. package/Meshes/polygonMesh.js +3 -3
  664. package/Meshes/polygonMesh.js.map +1 -1
  665. package/Misc/HighDynamicRange/cubemapToSphericalPolynomial.js +2 -2
  666. package/Misc/HighDynamicRange/cubemapToSphericalPolynomial.js.map +1 -1
  667. package/Misc/HighDynamicRange/panoramaToCubemap.js +1 -1
  668. package/Misc/HighDynamicRange/panoramaToCubemap.js.map +1 -1
  669. package/Misc/PerformanceViewer/performanceViewerCollector.js +1 -1
  670. package/Misc/PerformanceViewer/performanceViewerCollector.js.map +1 -1
  671. package/Misc/areaLightsTextureTools.d.ts +1 -1
  672. package/Misc/areaLightsTextureTools.js +3 -3
  673. package/Misc/areaLightsTextureTools.js.map +1 -1
  674. package/Misc/assetsManager.d.ts +4 -4
  675. package/Misc/assetsManager.js +5 -5
  676. package/Misc/assetsManager.js.map +1 -1
  677. package/Misc/basisWorker.js +1 -1
  678. package/Misc/basisWorker.js.map +1 -1
  679. package/Misc/brdfTextureTools.js +1 -1
  680. package/Misc/brdfTextureTools.js.map +1 -1
  681. package/Misc/copyTextureToTexture.d.ts +1 -1
  682. package/Misc/copyTextureToTexture.js +1 -1
  683. package/Misc/copyTextureToTexture.js.map +1 -1
  684. package/Misc/decorators.serialization.js +2 -2
  685. package/Misc/decorators.serialization.js.map +1 -1
  686. package/Misc/depthReducer.d.ts +2 -2
  687. package/Misc/depthReducer.js +2 -2
  688. package/Misc/depthReducer.js.map +1 -1
  689. package/Misc/gradients.d.ts +1 -1
  690. package/Misc/gradients.js +1 -1
  691. package/Misc/gradients.js.map +1 -1
  692. package/Misc/greasedLineTools.d.ts +1 -1
  693. package/Misc/greasedLineTools.js +3 -3
  694. package/Misc/greasedLineTools.js.map +1 -1
  695. package/Misc/halfFloat.d.ts +17 -0
  696. package/Misc/halfFloat.js +131 -0
  697. package/Misc/halfFloat.js.map +1 -0
  698. package/Misc/khronosTextureContainer2.js +1 -1
  699. package/Misc/khronosTextureContainer2.js.map +1 -1
  700. package/Misc/meshExploder.js +1 -1
  701. package/Misc/meshExploder.js.map +1 -1
  702. package/Misc/pivotTools.js +1 -1
  703. package/Misc/pivotTools.js.map +1 -1
  704. package/Misc/rgbdTextureTools.js +1 -1
  705. package/Misc/rgbdTextureTools.js.map +1 -1
  706. package/Misc/sceneOptimizer.js +1 -1
  707. package/Misc/sceneOptimizer.js.map +1 -1
  708. package/Misc/sceneRecorder.js +7 -7
  709. package/Misc/sceneRecorder.js.map +1 -1
  710. package/Misc/sceneSerializer.js +3 -3
  711. package/Misc/sceneSerializer.js.map +1 -1
  712. package/Misc/snapshotRenderingHelper.js +1 -1
  713. package/Misc/snapshotRenderingHelper.js.map +1 -1
  714. package/Misc/textureTools.d.ts +3 -13
  715. package/Misc/textureTools.js +6 -64
  716. package/Misc/textureTools.js.map +1 -1
  717. package/Misc/thinMinMaxReducer.d.ts +1 -1
  718. package/Misc/thinMinMaxReducer.js +1 -1
  719. package/Misc/thinMinMaxReducer.js.map +1 -1
  720. package/Misc/tools.internals.js +1 -1
  721. package/Misc/tools.internals.js.map +1 -1
  722. package/Misc/tools.pure.js +11 -4
  723. package/Misc/tools.pure.js.map +1 -1
  724. package/Misc/trajectoryClassifier.d.ts +1 -1
  725. package/Misc/trajectoryClassifier.js +1 -1
  726. package/Misc/trajectoryClassifier.js.map +1 -1
  727. package/Misc/videoRecorder.js +1 -1
  728. package/Misc/videoRecorder.js.map +1 -1
  729. package/Misc/virtualJoystick.d.ts +1 -1
  730. package/Misc/virtualJoystick.js +1 -1
  731. package/Misc/virtualJoystick.js.map +1 -1
  732. package/Morph/morphTarget.js +1 -1
  733. package/Morph/morphTarget.js.map +1 -1
  734. package/Navigation/Plugins/recastJSPlugin.d.ts +1 -1
  735. package/Navigation/Plugins/recastJSPlugin.js +2 -2
  736. package/Navigation/Plugins/recastJSPlugin.js.map +1 -1
  737. package/Particles/EmitterTypes/boxParticleEmitter.d.ts +1 -1
  738. package/Particles/EmitterTypes/boxParticleEmitter.js +1 -1
  739. package/Particles/EmitterTypes/boxParticleEmitter.js.map +1 -1
  740. package/Particles/EmitterTypes/coneParticleEmitter.d.ts +1 -1
  741. package/Particles/EmitterTypes/coneParticleEmitter.js +1 -1
  742. package/Particles/EmitterTypes/coneParticleEmitter.js.map +1 -1
  743. package/Particles/EmitterTypes/customParticleEmitter.d.ts +1 -1
  744. package/Particles/EmitterTypes/customParticleEmitter.js +1 -1
  745. package/Particles/EmitterTypes/customParticleEmitter.js.map +1 -1
  746. package/Particles/EmitterTypes/cylinderParticleEmitter.d.ts +1 -1
  747. package/Particles/EmitterTypes/cylinderParticleEmitter.js +1 -1
  748. package/Particles/EmitterTypes/cylinderParticleEmitter.js.map +1 -1
  749. package/Particles/EmitterTypes/hemisphericParticleEmitter.d.ts +1 -1
  750. package/Particles/EmitterTypes/hemisphericParticleEmitter.js +1 -1
  751. package/Particles/EmitterTypes/hemisphericParticleEmitter.js.map +1 -1
  752. package/Particles/EmitterTypes/meshParticleEmitter.d.ts +1 -1
  753. package/Particles/EmitterTypes/meshParticleEmitter.js +2 -2
  754. package/Particles/EmitterTypes/meshParticleEmitter.js.map +1 -1
  755. package/Particles/EmitterTypes/pointParticleEmitter.d.ts +1 -1
  756. package/Particles/EmitterTypes/pointParticleEmitter.js +1 -1
  757. package/Particles/EmitterTypes/pointParticleEmitter.js.map +1 -1
  758. package/Particles/EmitterTypes/sphereParticleEmitter.d.ts +1 -1
  759. package/Particles/EmitterTypes/sphereParticleEmitter.js +1 -1
  760. package/Particles/EmitterTypes/sphereParticleEmitter.js.map +1 -1
  761. package/Particles/Node/nodeParticleBuildState.d.ts +4 -4
  762. package/Particles/Node/nodeParticleBuildState.js +2 -2
  763. package/Particles/Node/nodeParticleBuildState.js.map +1 -1
  764. package/Particles/Node/nodeParticleSystemSet.d.ts +2 -2
  765. package/Particles/Node/nodeParticleSystemSet.helper.js +31 -31
  766. package/Particles/Node/nodeParticleSystemSet.helper.js.map +1 -1
  767. package/Particles/Node/nodeParticleSystemSet.js +8 -8
  768. package/Particles/Node/nodeParticleSystemSet.js.map +1 -1
  769. package/Particles/attractor.d.ts +1 -1
  770. package/Particles/attractor.js +1 -1
  771. package/Particles/attractor.js.map +1 -1
  772. package/Particles/computeShaderParticleSystem.pure.js +5 -1
  773. package/Particles/computeShaderParticleSystem.pure.js.map +1 -1
  774. package/Particles/flowMap.d.ts +7 -1
  775. package/Particles/flowMap.js +7 -1
  776. package/Particles/flowMap.js.map +1 -1
  777. package/Particles/gpuParticleSystem.pure.d.ts +1 -0
  778. package/Particles/gpuParticleSystem.pure.js +17 -1
  779. package/Particles/gpuParticleSystem.pure.js.map +1 -1
  780. package/Particles/particle.d.ts +2 -2
  781. package/Particles/particle.js +2 -2
  782. package/Particles/particle.js.map +1 -1
  783. package/Particles/particleHelper.js +5 -5
  784. package/Particles/particleHelper.js.map +1 -1
  785. package/Particles/particleSystem.functions.d.ts +1 -1
  786. package/Particles/particleSystem.functions.js +1 -1
  787. package/Particles/particleSystem.functions.js.map +1 -1
  788. package/Particles/particleSystemSet.d.ts +1 -1
  789. package/Particles/particleSystemSet.js +5 -5
  790. package/Particles/particleSystemSet.js.map +1 -1
  791. package/Particles/pointsCloudSystem.d.ts +1 -1
  792. package/Particles/pointsCloudSystem.js +6 -6
  793. package/Particles/pointsCloudSystem.js.map +1 -1
  794. package/Particles/solidParticle.d.ts +2 -2
  795. package/Particles/solidParticle.js +3 -3
  796. package/Particles/solidParticle.js.map +1 -1
  797. package/Particles/solidParticleSystem.d.ts +4 -4
  798. package/Particles/solidParticleSystem.js +7 -7
  799. package/Particles/solidParticleSystem.js.map +1 -1
  800. package/Particles/subEmitter.js +1 -1
  801. package/Particles/subEmitter.js.map +1 -1
  802. package/Particles/thinParticleSystem.function.js +2 -2
  803. package/Particles/thinParticleSystem.function.js.map +1 -1
  804. package/Physics/Plugins/cannonJSPlugin.d.ts +1 -1
  805. package/Physics/Plugins/cannonJSPlugin.js +1 -1
  806. package/Physics/Plugins/cannonJSPlugin.js.map +1 -1
  807. package/Physics/castingResult.d.ts +1 -1
  808. package/Physics/castingResult.js +1 -1
  809. package/Physics/castingResult.js.map +1 -1
  810. package/Physics/physicsHelper.d.ts +1 -1
  811. package/Physics/physicsHelper.js +4 -4
  812. package/Physics/physicsHelper.js.map +1 -1
  813. package/Physics/physicsImpostor.d.ts +1 -1
  814. package/Physics/physicsImpostor.js +1 -1
  815. package/Physics/physicsImpostor.js.map +1 -1
  816. package/Physics/physicsRaycastResult.d.ts +1 -1
  817. package/Physics/physicsRaycastResult.js +1 -1
  818. package/Physics/physicsRaycastResult.js.map +1 -1
  819. package/Physics/v1/Plugins/ammoJSPlugin.d.ts +2 -2
  820. package/Physics/v1/Plugins/ammoJSPlugin.js +5 -5
  821. package/Physics/v1/Plugins/ammoJSPlugin.js.map +1 -1
  822. package/Physics/v1/Plugins/oimoJSPlugin.d.ts +2 -2
  823. package/Physics/v1/Plugins/oimoJSPlugin.js +2 -2
  824. package/Physics/v1/Plugins/oimoJSPlugin.js.map +1 -1
  825. package/Physics/v1/physicsEngine.d.ts +1 -1
  826. package/Physics/v1/physicsEngine.js +1 -1
  827. package/Physics/v1/physicsEngine.js.map +1 -1
  828. package/Physics/v2/Plugins/havokPlugin.d.ts +14 -2
  829. package/Physics/v2/Plugins/havokPlugin.js +45 -7
  830. package/Physics/v2/Plugins/havokPlugin.js.map +1 -1
  831. package/Physics/v2/characterController.d.ts +1 -1
  832. package/Physics/v2/characterController.js +2 -2
  833. package/Physics/v2/characterController.js.map +1 -1
  834. package/Physics/v2/physicsAggregate.d.ts +3 -3
  835. package/Physics/v2/physicsAggregate.js +10 -6
  836. package/Physics/v2/physicsAggregate.js.map +1 -1
  837. package/Physics/v2/physicsBody.d.ts +1 -1
  838. package/Physics/v2/physicsBody.js +1 -1
  839. package/Physics/v2/physicsBody.js.map +1 -1
  840. package/Physics/v2/physicsEngine.d.ts +1 -1
  841. package/Physics/v2/physicsEngine.js +1 -1
  842. package/Physics/v2/physicsEngine.js.map +1 -1
  843. package/Physics/v2/physicsShape.d.ts +1 -1
  844. package/Physics/v2/physicsShape.js +1 -1
  845. package/Physics/v2/physicsShape.js.map +1 -1
  846. package/Physics/v2/ragdoll.d.ts +2 -2
  847. package/Physics/v2/ragdoll.js +2 -2
  848. package/Physics/v2/ragdoll.js.map +1 -1
  849. package/PostProcesses/RenderPipeline/Pipelines/ssao2RenderingPipeline.pure.d.ts +1 -0
  850. package/PostProcesses/RenderPipeline/Pipelines/ssao2RenderingPipeline.pure.js +8 -6
  851. package/PostProcesses/RenderPipeline/Pipelines/ssao2RenderingPipeline.pure.js.map +1 -1
  852. package/PostProcesses/RenderPipeline/Pipelines/thinSSRRenderingPipeline.js +1 -1
  853. package/PostProcesses/RenderPipeline/Pipelines/thinSSRRenderingPipeline.js.map +1 -1
  854. package/PostProcesses/RenderPipeline/postProcessRenderEffect.js +1 -1
  855. package/PostProcesses/RenderPipeline/postProcessRenderEffect.js.map +1 -1
  856. package/PostProcesses/RenderPipeline/postProcessRenderPipeline.js +3 -2
  857. package/PostProcesses/RenderPipeline/postProcessRenderPipeline.js.map +1 -1
  858. package/PostProcesses/bloomEffect.d.ts +1 -1
  859. package/PostProcesses/bloomEffect.js +4 -4
  860. package/PostProcesses/bloomEffect.js.map +1 -1
  861. package/PostProcesses/depthOfFieldEffect.d.ts +1 -1
  862. package/PostProcesses/depthOfFieldEffect.js +3 -3
  863. package/PostProcesses/depthOfFieldEffect.js.map +1 -1
  864. package/PostProcesses/depthOfFieldMergePostProcess.d.ts +1 -1
  865. package/PostProcesses/depthOfFieldMergePostProcess.js +1 -1
  866. package/PostProcesses/depthOfFieldMergePostProcess.js.map +1 -1
  867. package/PostProcesses/highlightsPostProcess.d.ts +1 -1
  868. package/PostProcesses/highlightsPostProcess.js +1 -1
  869. package/PostProcesses/highlightsPostProcess.js.map +1 -1
  870. package/PostProcesses/imageProcessingPostProcess.d.ts +1 -1
  871. package/PostProcesses/imageProcessingPostProcess.js +1 -1
  872. package/PostProcesses/imageProcessingPostProcess.js.map +1 -1
  873. package/PostProcesses/postProcessManager.d.ts +3 -0
  874. package/PostProcesses/postProcessManager.js +4 -1
  875. package/PostProcesses/postProcessManager.js.map +1 -1
  876. package/PostProcesses/subSurfaceScatteringPostProcess.pure.d.ts +1 -0
  877. package/PostProcesses/subSurfaceScatteringPostProcess.pure.js +10 -0
  878. package/PostProcesses/subSurfaceScatteringPostProcess.pure.js.map +1 -1
  879. package/PostProcesses/thinAnaglyphPostProcess.d.ts +1 -1
  880. package/PostProcesses/thinAnaglyphPostProcess.js +1 -1
  881. package/PostProcesses/thinAnaglyphPostProcess.js.map +1 -1
  882. package/PostProcesses/thinBlackAndWhitePostProcess.d.ts +1 -1
  883. package/PostProcesses/thinBlackAndWhitePostProcess.js +1 -1
  884. package/PostProcesses/thinBlackAndWhitePostProcess.js.map +1 -1
  885. package/PostProcesses/thinBloomEffect.js +1 -1
  886. package/PostProcesses/thinBloomEffect.js.map +1 -1
  887. package/PostProcesses/thinBloomMergePostProcess.d.ts +1 -1
  888. package/PostProcesses/thinBloomMergePostProcess.js +1 -1
  889. package/PostProcesses/thinBloomMergePostProcess.js.map +1 -1
  890. package/PostProcesses/thinBlurPostProcess.d.ts +1 -1
  891. package/PostProcesses/thinBlurPostProcess.js +1 -1
  892. package/PostProcesses/thinBlurPostProcess.js.map +1 -1
  893. package/PostProcesses/thinChromaticAberrationPostProcess.d.ts +2 -2
  894. package/PostProcesses/thinChromaticAberrationPostProcess.js +2 -2
  895. package/PostProcesses/thinChromaticAberrationPostProcess.js.map +1 -1
  896. package/PostProcesses/thinCircleOfConfusionPostProcess.d.ts +1 -1
  897. package/PostProcesses/thinCircleOfConfusionPostProcess.js +1 -1
  898. package/PostProcesses/thinCircleOfConfusionPostProcess.js.map +1 -1
  899. package/PostProcesses/thinColorCorrectionPostProcess.d.ts +1 -1
  900. package/PostProcesses/thinColorCorrectionPostProcess.js +2 -2
  901. package/PostProcesses/thinColorCorrectionPostProcess.js.map +1 -1
  902. package/PostProcesses/thinConvolutionPostProcess.d.ts +1 -1
  903. package/PostProcesses/thinConvolutionPostProcess.js +1 -1
  904. package/PostProcesses/thinConvolutionPostProcess.js.map +1 -1
  905. package/PostProcesses/thinCustomPostProcess.d.ts +1 -1
  906. package/PostProcesses/thinCustomPostProcess.js +1 -1
  907. package/PostProcesses/thinCustomPostProcess.js.map +1 -1
  908. package/PostProcesses/thinDepthOfFieldEffect.d.ts +3 -0
  909. package/PostProcesses/thinDepthOfFieldEffect.js +4 -1
  910. package/PostProcesses/thinDepthOfFieldEffect.js.map +1 -1
  911. package/PostProcesses/thinDepthOfFieldMergePostProcess.d.ts +1 -1
  912. package/PostProcesses/thinDepthOfFieldMergePostProcess.js +1 -1
  913. package/PostProcesses/thinDepthOfFieldMergePostProcess.js.map +1 -1
  914. package/PostProcesses/thinExtractHighlightsPostProcess.d.ts +1 -1
  915. package/PostProcesses/thinExtractHighlightsPostProcess.js +1 -1
  916. package/PostProcesses/thinExtractHighlightsPostProcess.js.map +1 -1
  917. package/PostProcesses/thinFXAAPostProcess.d.ts +2 -2
  918. package/PostProcesses/thinFXAAPostProcess.js +2 -2
  919. package/PostProcesses/thinFXAAPostProcess.js.map +1 -1
  920. package/PostProcesses/thinFilterPostProcess.d.ts +2 -2
  921. package/PostProcesses/thinFilterPostProcess.js +2 -2
  922. package/PostProcesses/thinFilterPostProcess.js.map +1 -1
  923. package/PostProcesses/thinGrainPostProcess.d.ts +1 -1
  924. package/PostProcesses/thinGrainPostProcess.js +1 -1
  925. package/PostProcesses/thinGrainPostProcess.js.map +1 -1
  926. package/PostProcesses/thinImageProcessingPostProcess.d.ts +2 -2
  927. package/PostProcesses/thinImageProcessingPostProcess.js +2 -2
  928. package/PostProcesses/thinImageProcessingPostProcess.js.map +1 -1
  929. package/PostProcesses/thinMotionBlurPostProcess.d.ts +1 -1
  930. package/PostProcesses/thinMotionBlurPostProcess.js +2 -2
  931. package/PostProcesses/thinMotionBlurPostProcess.js.map +1 -1
  932. package/PostProcesses/thinPassPostProcess.d.ts +1 -1
  933. package/PostProcesses/thinPassPostProcess.js +1 -1
  934. package/PostProcesses/thinPassPostProcess.js.map +1 -1
  935. package/PostProcesses/thinSSAO2BlurPostProcess.d.ts +1 -1
  936. package/PostProcesses/thinSSAO2BlurPostProcess.js +1 -1
  937. package/PostProcesses/thinSSAO2BlurPostProcess.js.map +1 -1
  938. package/PostProcesses/thinSSAO2CombinePostProcess.d.ts +1 -1
  939. package/PostProcesses/thinSSAO2CombinePostProcess.js +2 -2
  940. package/PostProcesses/thinSSAO2CombinePostProcess.js.map +1 -1
  941. package/PostProcesses/thinSSAO2PostProcess.d.ts +7 -2
  942. package/PostProcesses/thinSSAO2PostProcess.js +36 -4
  943. package/PostProcesses/thinSSAO2PostProcess.js.map +1 -1
  944. package/PostProcesses/thinSSRBlurCombinerPostProcess.d.ts +1 -1
  945. package/PostProcesses/thinSSRBlurCombinerPostProcess.js +2 -2
  946. package/PostProcesses/thinSSRBlurCombinerPostProcess.js.map +1 -1
  947. package/PostProcesses/thinSSRBlurPostProcess.d.ts +2 -2
  948. package/PostProcesses/thinSSRBlurPostProcess.js +2 -2
  949. package/PostProcesses/thinSSRBlurPostProcess.js.map +1 -1
  950. package/PostProcesses/thinSSRPostProcess.d.ts +1 -1
  951. package/PostProcesses/thinSSRPostProcess.js +2 -2
  952. package/PostProcesses/thinSSRPostProcess.js.map +1 -1
  953. package/PostProcesses/thinScreenSpaceCurvaturePostProcess.d.ts +1 -1
  954. package/PostProcesses/thinScreenSpaceCurvaturePostProcess.js +1 -1
  955. package/PostProcesses/thinScreenSpaceCurvaturePostProcess.js.map +1 -1
  956. package/PostProcesses/thinSharpenPostProcess.d.ts +1 -1
  957. package/PostProcesses/thinSharpenPostProcess.js +1 -1
  958. package/PostProcesses/thinSharpenPostProcess.js.map +1 -1
  959. package/PostProcesses/thinTAAPostProcess.d.ts +3 -3
  960. package/PostProcesses/thinTAAPostProcess.js +4 -4
  961. package/PostProcesses/thinTAAPostProcess.js.map +1 -1
  962. package/PostProcesses/thinTonemapPostProcess.d.ts +1 -1
  963. package/PostProcesses/thinTonemapPostProcess.js +1 -1
  964. package/PostProcesses/thinTonemapPostProcess.js.map +1 -1
  965. package/PostProcesses/vrDistortionCorrectionPostProcess.d.ts +1 -1
  966. package/PostProcesses/vrDistortionCorrectionPostProcess.js +3 -3
  967. package/PostProcesses/vrDistortionCorrectionPostProcess.js.map +1 -1
  968. package/Rendering/IBLShadows/iblShadowsAccumulationPass.d.ts +2 -2
  969. package/Rendering/IBLShadows/iblShadowsAccumulationPass.js +4 -4
  970. package/Rendering/IBLShadows/iblShadowsAccumulationPass.js.map +1 -1
  971. package/Rendering/IBLShadows/iblShadowsSpatialBlurPass.d.ts +2 -2
  972. package/Rendering/IBLShadows/iblShadowsSpatialBlurPass.js +4 -4
  973. package/Rendering/IBLShadows/iblShadowsSpatialBlurPass.js.map +1 -1
  974. package/Rendering/IBLShadows/iblShadowsVoxelTracingPass.d.ts +3 -3
  975. package/Rendering/IBLShadows/iblShadowsVoxelTracingPass.js +4 -4
  976. package/Rendering/IBLShadows/iblShadowsVoxelTracingPass.js.map +1 -1
  977. package/Rendering/depthPeelingRenderer.d.ts +1 -1
  978. package/Rendering/depthPeelingRenderer.js +2 -2
  979. package/Rendering/depthPeelingRenderer.js.map +1 -1
  980. package/Rendering/fluidRenderer/fluidRenderingObject.d.ts +1 -1
  981. package/Rendering/fluidRenderer/fluidRenderingObject.js +1 -1
  982. package/Rendering/fluidRenderer/fluidRenderingObject.js.map +1 -1
  983. package/Rendering/fluidRenderer/fluidRenderingObjectCustomParticles.d.ts +1 -1
  984. package/Rendering/fluidRenderer/fluidRenderingObjectCustomParticles.js +2 -2
  985. package/Rendering/fluidRenderer/fluidRenderingObjectCustomParticles.js.map +1 -1
  986. package/Rendering/fluidRenderer/fluidRenderingTargetRenderer.d.ts +3 -3
  987. package/Rendering/fluidRenderer/fluidRenderingTargetRenderer.js +3 -3
  988. package/Rendering/fluidRenderer/fluidRenderingTargetRenderer.js.map +1 -1
  989. package/Rendering/fluidRenderer/fluidRenderingTextures.d.ts +2 -2
  990. package/Rendering/fluidRenderer/fluidRenderingTextures.js +3 -3
  991. package/Rendering/fluidRenderer/fluidRenderingTextures.js.map +1 -1
  992. package/Rendering/iblCdfGenerator.d.ts +3 -3
  993. package/Rendering/iblCdfGenerator.js +5 -5
  994. package/Rendering/iblCdfGenerator.js.map +1 -1
  995. package/Rendering/renderingGroup.js +1 -1
  996. package/Rendering/renderingGroup.js.map +1 -1
  997. package/Rendering/subSurfaceConfiguration.d.ts +2 -2
  998. package/Rendering/subSurfaceConfiguration.js +2 -2
  999. package/Rendering/subSurfaceConfiguration.js.map +1 -1
  1000. package/Rendering/utilityLayerRenderer.d.ts +2 -2
  1001. package/Rendering/utilityLayerRenderer.js +4 -4
  1002. package/Rendering/utilityLayerRenderer.js.map +1 -1
  1003. package/Shaders/ssao2.fragment.js +10 -2
  1004. package/Shaders/ssao2.fragment.js.map +1 -1
  1005. package/ShadersWGSL/gpuRenderParticles.fragment.d.ts +5 -0
  1006. package/ShadersWGSL/gpuRenderParticles.fragment.js +50 -0
  1007. package/ShadersWGSL/gpuRenderParticles.fragment.js.map +1 -0
  1008. package/ShadersWGSL/gpuRenderParticles.vertex.d.ts +5 -0
  1009. package/ShadersWGSL/gpuRenderParticles.vertex.js +120 -0
  1010. package/ShadersWGSL/gpuRenderParticles.vertex.js.map +1 -0
  1011. package/ShadersWGSL/noise.fragment.d.ts +5 -0
  1012. package/ShadersWGSL/noise.fragment.js +18 -0
  1013. package/ShadersWGSL/noise.fragment.js.map +1 -0
  1014. package/ShadersWGSL/ssao2.fragment.js +10 -2
  1015. package/ShadersWGSL/ssao2.fragment.js.map +1 -1
  1016. package/SmartAssets/smartAssetSerializer.js +1 -1
  1017. package/SmartAssets/smartAssetSerializer.js.map +1 -1
  1018. package/Sprites/sprite.d.ts +2 -2
  1019. package/Sprites/sprite.js +2 -2
  1020. package/Sprites/sprite.js.map +1 -1
  1021. package/Sprites/spriteManager.d.ts +2 -2
  1022. package/Sprites/spriteManager.js +4 -5
  1023. package/Sprites/spriteManager.js.map +1 -1
  1024. package/Sprites/spritePackedManager.js +1 -1
  1025. package/Sprites/spritePackedManager.js.map +1 -1
  1026. package/Sprites/spriteRenderer.js +2 -2
  1027. package/Sprites/spriteRenderer.js.map +1 -1
  1028. package/XR/features/WebXRHitTestLegacy.d.ts +1 -1
  1029. package/XR/features/WebXRHitTestLegacy.js +2 -2
  1030. package/XR/features/WebXRHitTestLegacy.js.map +1 -1
  1031. package/XR/motionController/webXRAbstractMotionController.js +2 -2
  1032. package/XR/motionController/webXRAbstractMotionController.js.map +1 -1
  1033. package/XR/motionController/webXRGenericMotionController.js +2 -2
  1034. package/XR/motionController/webXRGenericMotionController.js.map +1 -1
  1035. package/XR/motionController/webXRProfiledMotionController.js +4 -4
  1036. package/XR/motionController/webXRProfiledMotionController.js.map +1 -1
  1037. package/XR/webXRCamera.d.ts +3 -3
  1038. package/XR/webXRCamera.js +4 -4
  1039. package/XR/webXRCamera.js.map +1 -1
  1040. package/XR/webXRDefaultExperience.d.ts +4 -4
  1041. package/XR/webXRDefaultExperience.js +4 -4
  1042. package/XR/webXRDefaultExperience.js.map +1 -1
  1043. package/XR/webXREnterExitUI.js +1 -1
  1044. package/XR/webXREnterExitUI.js.map +1 -1
  1045. package/XR/webXRExperienceHelper.js +2 -2
  1046. package/XR/webXRExperienceHelper.js.map +1 -1
  1047. package/XR/webXRFeaturesManager.d.ts +47 -0
  1048. package/XR/webXRFeaturesManager.js +1 -1
  1049. package/XR/webXRFeaturesManager.js.map +1 -1
  1050. package/XR/webXRInput.js +1 -1
  1051. package/XR/webXRInput.js.map +1 -1
  1052. package/XR/webXRInputSource.js +4 -4
  1053. package/XR/webXRInputSource.js.map +1 -1
  1054. package/XR/webXRManagedOutputCanvas.js +1 -1
  1055. package/XR/webXRManagedOutputCanvas.js.map +1 -1
  1056. package/XR/webXRRenderTargetTextureProvider.d.ts +1 -1
  1057. package/XR/webXRRenderTargetTextureProvider.js +1 -1
  1058. package/XR/webXRRenderTargetTextureProvider.js.map +1 -1
  1059. package/assetContainer.d.ts +4 -4
  1060. package/assetContainer.js +6 -6
  1061. package/assetContainer.js.map +1 -1
  1062. package/node.d.ts +1 -1
  1063. package/node.js +6 -2
  1064. package/node.js.map +1 -1
  1065. package/package.json +44 -174
@@ -1 +1 @@
1
- {"version":3,"file":"scene.inputManager.js","sourceRoot":"","sources":["../../../../dev/core/src/Inputs/scene.inputManager.ts"],"names":[],"mappings":"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","sourcesContent":["import { type EventState, type Observable, type Observer } from \"../Misc/observable\";\r\nimport { PointerInfoPre, PointerInfo, PointerEventTypes } from \"../Events/pointerEvents\";\r\nimport { type Nullable } from \"../types\";\r\nimport { AbstractActionManager } from \"../Actions/abstractActionManager\";\r\nimport { PickingInfo } from \"../Collisions/pickingInfo\";\r\nimport { Vector2, Matrix } from \"../Maths/math.vector\";\r\nimport { type AbstractMesh } from \"../Meshes/abstractMesh\";\r\nimport { Constants } from \"../Engines/constants\";\r\nimport { ActionEvent } from \"../Actions/actionEvent\";\r\nimport { KeyboardEventTypes, KeyboardInfoPre, KeyboardInfo } from \"../Events/keyboardEvents\";\r\nimport { DeviceType, PointerInput } from \"../DeviceInput/InputDevices/deviceEnums\";\r\nimport { type IKeyboardEvent, type IMouseEvent, type IPointerEvent } from \"../Events/deviceInputEvents\";\r\nimport { DeviceSourceManager } from \"../DeviceInput/InputDevices/deviceSourceManager\";\r\nimport { EngineStore } from \"../Engines/engineStore\";\r\n\r\nimport { type Scene } from \"../scene\";\r\nimport { _ImportHelper } from \"core/import.helper\";\r\n\r\n/** @internal */\r\n// eslint-disable-next-line @typescript-eslint/naming-convention\r\nclass _ClickInfo {\r\n private _singleClick = false;\r\n private _doubleClick = false;\r\n private _hasSwiped = false;\r\n private _ignore = false;\r\n\r\n public get singleClick(): boolean {\r\n return this._singleClick;\r\n }\r\n public get doubleClick(): boolean {\r\n return this._doubleClick;\r\n }\r\n public get hasSwiped(): boolean {\r\n return this._hasSwiped;\r\n }\r\n public get ignore(): boolean {\r\n return this._ignore;\r\n }\r\n\r\n public set singleClick(b: boolean) {\r\n this._singleClick = b;\r\n }\r\n public set doubleClick(b: boolean) {\r\n this._doubleClick = b;\r\n }\r\n public set hasSwiped(b: boolean) {\r\n this._hasSwiped = b;\r\n }\r\n public set ignore(b: boolean) {\r\n this._ignore = b;\r\n }\r\n}\r\n\r\n/** @internal */\r\ninterface _IClickEvent {\r\n clickInfo: _ClickInfo;\r\n evt: IPointerEvent;\r\n timeoutId: number;\r\n}\r\n\r\n/**\r\n * Class used to manage all inputs for the scene.\r\n */\r\nexport class InputManager {\r\n /** The distance in pixel that you have to move to prevent some events */\r\n public static DragMovementThreshold = 10; // in pixels\r\n /** Time in milliseconds to wait to raise long press events if button is still pressed */\r\n public static LongPressDelay = 500; // in milliseconds\r\n /** Time in milliseconds with two consecutive clicks will be considered as a double click */\r\n public static DoubleClickDelay = 300; // in milliseconds\r\n /**\r\n * This flag will modify the behavior so that, when true, a click will happen if and only if\r\n * another click DOES NOT happen within the DoubleClickDelay time frame. If another click does\r\n * happen within that time frame, the first click will not fire an event and and a double click will occur.\r\n */\r\n public static ExclusiveDoubleClickMode = false;\r\n\r\n /** This is a defensive check to not allow control attachment prior to an already active one. If already attached, previous control is unattached before attaching the new one. */\r\n private _alreadyAttached = false;\r\n private _alreadyAttachedTo: Nullable<HTMLElement>;\r\n\r\n // Pointers\r\n private _onPointerMove: (evt: IMouseEvent) => void;\r\n private _onPointerDown: (evt: IPointerEvent) => void;\r\n private _onPointerUp: (evt: IPointerEvent) => void;\r\n\r\n private _initClickEvent: (\r\n obs1: Observable<PointerInfoPre>,\r\n obs2: Observable<PointerInfo>,\r\n evt: IPointerEvent,\r\n cb: (clickInfo: _ClickInfo, pickResult: Nullable<PickingInfo>) => void\r\n ) => void;\r\n private _initActionManager: (act: Nullable<AbstractActionManager>, clickInfo: _ClickInfo) => Nullable<AbstractActionManager>;\r\n private _delayedSimpleClick: (btn: number, clickInfo: _ClickInfo, cb: (clickInfo: _ClickInfo, pickResult: Nullable<PickingInfo>) => void) => void;\r\n private _meshPickProceed = false;\r\n\r\n private _previousButtonPressed: number;\r\n private _currentPickResult: Nullable<PickingInfo> = null;\r\n private _previousPickResult: Nullable<PickingInfo> = null;\r\n\r\n private _activePointerIds: Array<number> = new Array<number>();\r\n /** Tracks the count of used slots in _activePointerIds for perf */\r\n private _activePointerIdsCount: number = 0;\r\n\r\n private _doubleClickOccured = false;\r\n private _isSwiping: boolean = false;\r\n private _swipeButtonPressed: number = -1;\r\n private _skipPointerTap: boolean = false;\r\n private _isMultiTouchGesture: boolean = false;\r\n\r\n private _pointerOverMesh: Nullable<AbstractMesh>;\r\n\r\n private _pickedDownMesh: Nullable<AbstractMesh>;\r\n private _pickedUpMesh: Nullable<AbstractMesh>;\r\n\r\n private _pointerX: number = 0;\r\n private _pointerY: number = 0;\r\n private _unTranslatedPointerX: number;\r\n private _unTranslatedPointerY: number;\r\n private _startingPointerPosition = new Vector2(0, 0);\r\n private _previousStartingPointerPosition = new Vector2(0, 0);\r\n private _startingPointerTime = 0;\r\n private _previousStartingPointerTime = 0;\r\n private _pointerCaptures: { [pointerId: number]: boolean } = {};\r\n private _meshUnderPointerId: { [pointerId: number]: Nullable<AbstractMesh> } = {};\r\n private _movePointerInfo: Nullable<PointerInfo> = null;\r\n private _cameraObserverCount = 0;\r\n private _delayedClicks: Array<Nullable<_IClickEvent>> = [null, null, null, null, null];\r\n\r\n // Keyboard\r\n private _onKeyDown: (evt: IKeyboardEvent) => void;\r\n private _onKeyUp: (evt: IKeyboardEvent) => void;\r\n\r\n private _scene: Scene;\r\n private _deviceSourceManager: Nullable<DeviceSourceManager> = null;\r\n\r\n // origin MouseEvent\r\n _originMouseEvent: IMouseEvent;\r\n /**\r\n * Creates a new InputManager\r\n * @param scene - defines the hosting scene\r\n */\r\n constructor(scene?: Scene) {\r\n this._scene = scene || <Scene>EngineStore.LastCreatedScene;\r\n if (!this._scene) {\r\n return;\r\n }\r\n }\r\n\r\n /**\r\n * Gets the mesh that is currently under the pointer\r\n * @returns Mesh that the pointer is pointer is hovering over\r\n */\r\n public get meshUnderPointer(): Nullable<AbstractMesh> {\r\n if (this._movePointerInfo) {\r\n // Because _pointerOverMesh is populated as part of _pickMove, we need to force a pick to update it.\r\n // Calling _pickMove calls _setCursorAndPointerOverMesh which calls setPointerOverMesh\r\n this._movePointerInfo._generatePickInfo();\r\n // Once we have what we need, we can clear _movePointerInfo because we don't need it anymore\r\n this._movePointerInfo = null;\r\n }\r\n return this._pointerOverMesh;\r\n }\r\n\r\n /**\r\n * When using more than one pointer (for example in XR) you can get the mesh under the specific pointer\r\n * @param pointerId - the pointer id to use\r\n * @returns The mesh under this pointer id or null if not found\r\n */\r\n public getMeshUnderPointerByPointerId(pointerId: number): Nullable<AbstractMesh> {\r\n return this._meshUnderPointerId[pointerId] || null;\r\n }\r\n\r\n /**\r\n * Gets the pointer coordinates in 2D without any translation (ie. straight out of the pointer event)\r\n * @returns Vector with X/Y values directly from pointer event\r\n */\r\n public get unTranslatedPointer(): Vector2 {\r\n return new Vector2(this._unTranslatedPointerX, this._unTranslatedPointerY);\r\n }\r\n\r\n /**\r\n * Gets or sets the current on-screen X position of the pointer\r\n * @returns Translated X with respect to screen\r\n */\r\n public get pointerX(): number {\r\n return this._pointerX;\r\n }\r\n\r\n public set pointerX(value: number) {\r\n this._pointerX = value;\r\n }\r\n\r\n /**\r\n * Gets or sets the current on-screen Y position of the pointer\r\n * @returns Translated Y with respect to screen\r\n */\r\n public get pointerY(): number {\r\n return this._pointerY;\r\n }\r\n\r\n public set pointerY(value: number) {\r\n this._pointerY = value;\r\n }\r\n\r\n private _updatePointerPosition(evt: IPointerEvent): void {\r\n const canvasRect = this._scene.getEngine().getInputElementClientRect();\r\n\r\n if (!canvasRect) {\r\n return;\r\n }\r\n\r\n this._pointerX = evt.clientX - canvasRect.left;\r\n this._pointerY = evt.clientY - canvasRect.top;\r\n\r\n this._unTranslatedPointerX = this._pointerX;\r\n this._unTranslatedPointerY = this._pointerY;\r\n }\r\n\r\n private _processPointerMove(pickResult: Nullable<PickingInfo>, evt: IPointerEvent) {\r\n const scene = this._scene;\r\n const engine = scene.getEngine();\r\n const canvas = engine.getInputElement();\r\n\r\n if (canvas) {\r\n canvas.tabIndex = engine.canvasTabIndex;\r\n\r\n // Restore pointer\r\n if (!scene.doNotHandleCursors) {\r\n canvas.style.cursor = scene.defaultCursor;\r\n }\r\n }\r\n\r\n this._setCursorAndPointerOverMesh(pickResult, evt, scene);\r\n\r\n for (const step of scene._pointerMoveStage) {\r\n // If _pointerMoveState is defined, we have an active spriteManager and can't use Lazy Picking\r\n // Therefore, we need to force a pick to update the pickResult\r\n pickResult = pickResult || this._pickMove(evt);\r\n const isMeshPicked = pickResult?.pickedMesh ? true : false;\r\n pickResult = step.action(this._unTranslatedPointerX, this._unTranslatedPointerY, pickResult, isMeshPicked, canvas);\r\n }\r\n\r\n const type = evt.inputIndex >= PointerInput.MouseWheelX && evt.inputIndex <= PointerInput.MouseWheelZ ? PointerEventTypes.POINTERWHEEL : PointerEventTypes.POINTERMOVE;\r\n\r\n if (scene.onPointerMove) {\r\n // Because of lazy picking, we need to force a pick to update the pickResult\r\n pickResult = pickResult || this._pickMove(evt);\r\n scene.onPointerMove(evt, pickResult, type);\r\n }\r\n\r\n let pointerInfo: PointerInfo;\r\n if (pickResult) {\r\n pointerInfo = new PointerInfo(type, evt, pickResult);\r\n this._setRayOnPointerInfo(pickResult, evt);\r\n } else {\r\n pointerInfo = new PointerInfo(type, evt, null, this);\r\n this._movePointerInfo = pointerInfo;\r\n }\r\n\r\n if (scene.onPointerObservable.hasObservers()) {\r\n scene.onPointerObservable.notifyObservers(pointerInfo, type);\r\n }\r\n }\r\n\r\n // Pointers handling\r\n /** @internal */\r\n public _setRayOnPointerInfo(pickInfo: Nullable<PickingInfo>, event: IMouseEvent) {\r\n const scene = this._scene;\r\n if (pickInfo && _ImportHelper._IsPickingAvailable) {\r\n if (!pickInfo.ray) {\r\n pickInfo.ray = scene.createPickingRay(event.offsetX, event.offsetY, Matrix.Identity(), scene.activeCamera);\r\n }\r\n }\r\n }\r\n\r\n /** @internal */\r\n public _addCameraPointerObserver(observer: (p: PointerInfo, s: EventState) => void, mask?: number): Nullable<Observer<PointerInfo>> {\r\n this._cameraObserverCount++;\r\n return this._scene.onPointerObservable.add(observer, mask);\r\n }\r\n\r\n /** @internal */\r\n public _removeCameraPointerObserver(observer: Observer<PointerInfo>): boolean {\r\n this._cameraObserverCount--;\r\n return this._scene.onPointerObservable.remove(observer);\r\n }\r\n\r\n private _checkForPicking(): boolean {\r\n return !!(this._scene.onPointerObservable.observers.length > this._cameraObserverCount || this._scene.onPointerPick);\r\n }\r\n\r\n private _checkPrePointerObservable(pickResult: Nullable<PickingInfo>, evt: IPointerEvent, type: number) {\r\n const scene = this._scene;\r\n const pi = new PointerInfoPre(type, evt, this._unTranslatedPointerX, this._unTranslatedPointerY);\r\n if (pickResult) {\r\n pi.originalPickingInfo = pickResult;\r\n pi.ray = pickResult.ray;\r\n if (evt.pointerType === \"xr-near\" && pickResult.originMesh) {\r\n pi.nearInteractionPickingInfo = pickResult;\r\n }\r\n }\r\n\r\n scene.onPrePointerObservable.notifyObservers(pi, type);\r\n if (pi.skipOnPointerObservable) {\r\n return true;\r\n } else {\r\n return false;\r\n }\r\n }\r\n\r\n /** @internal */\r\n public _pickMove(evt: IPointerEvent): PickingInfo {\r\n const scene = this._scene;\r\n const pickResult = scene.pick(\r\n this._unTranslatedPointerX,\r\n this._unTranslatedPointerY,\r\n scene.pointerMovePredicate,\r\n scene.pointerMoveFastCheck,\r\n scene.cameraToUseForPointers,\r\n scene.pointerMoveTrianglePredicate\r\n );\r\n\r\n this._setCursorAndPointerOverMesh(pickResult, evt, scene);\r\n\r\n return pickResult;\r\n }\r\n\r\n private _setCursorAndPointerOverMesh(pickResult: Nullable<PickingInfo>, evt: IPointerEvent, scene: Scene) {\r\n const engine = scene.getEngine();\r\n const canvas = engine.getInputElement();\r\n\r\n if (pickResult?.pickedMesh) {\r\n this.setPointerOverMesh(pickResult.pickedMesh, evt.pointerId, pickResult, evt);\r\n\r\n if (!scene.doNotHandleCursors && canvas && this._pointerOverMesh) {\r\n const actionManager = this._pointerOverMesh._getActionManagerForTrigger();\r\n if (actionManager && actionManager.hasPointerTriggers) {\r\n canvas.style.cursor = actionManager.hoverCursor || scene.hoverCursor;\r\n }\r\n }\r\n } else {\r\n this.setPointerOverMesh(null, evt.pointerId, pickResult, evt);\r\n }\r\n }\r\n\r\n /**\r\n * Use this method to simulate a pointer move on a mesh\r\n * The pickResult parameter can be obtained from a scene.pick or scene.pickWithRay\r\n * @param pickResult - pickingInfo of the object wished to simulate pointer event on\r\n * @param pointerEventInit - pointer event state to be used when simulating the pointer event (eg. pointer id for multitouch)\r\n */\r\n public simulatePointerMove(pickResult: PickingInfo, pointerEventInit?: PointerEventInit): void {\r\n const evt = new PointerEvent(\"pointermove\", pointerEventInit);\r\n evt.inputIndex = PointerInput.Move;\r\n\r\n if (this._checkPrePointerObservable(pickResult, evt, PointerEventTypes.POINTERMOVE)) {\r\n return;\r\n }\r\n this._processPointerMove(pickResult, evt);\r\n }\r\n\r\n /**\r\n * Use this method to simulate a pointer down on a mesh\r\n * The pickResult parameter can be obtained from a scene.pick or scene.pickWithRay\r\n * @param pickResult - pickingInfo of the object wished to simulate pointer event on\r\n * @param pointerEventInit - pointer event state to be used when simulating the pointer event (eg. pointer id for multitouch)\r\n */\r\n public simulatePointerDown(pickResult: PickingInfo, pointerEventInit?: PointerEventInit): void {\r\n const evt = new PointerEvent(\"pointerdown\", pointerEventInit);\r\n evt.inputIndex = evt.button + 2;\r\n\r\n if (this._checkPrePointerObservable(pickResult, evt, PointerEventTypes.POINTERDOWN)) {\r\n return;\r\n }\r\n\r\n this._processPointerDown(pickResult, evt);\r\n }\r\n\r\n private _processPointerDown(pickResult: Nullable<PickingInfo>, evt: IPointerEvent): void {\r\n const scene = this._scene;\r\n if (pickResult?.pickedMesh) {\r\n this._pickedDownMesh = pickResult.pickedMesh;\r\n const actionManager = pickResult.pickedMesh._getActionManagerForTrigger();\r\n if (actionManager) {\r\n if (actionManager.hasPickTriggers) {\r\n actionManager.processTrigger(\r\n Constants.ACTION_OnPickDownTrigger,\r\n new ActionEvent(pickResult.pickedMesh, scene.pointerX, scene.pointerY, pickResult.pickedMesh, evt, pickResult)\r\n );\r\n switch (evt.button) {\r\n case 0:\r\n actionManager.processTrigger(\r\n Constants.ACTION_OnLeftPickTrigger,\r\n new ActionEvent(pickResult.pickedMesh, scene.pointerX, scene.pointerY, pickResult.pickedMesh, evt, pickResult)\r\n );\r\n break;\r\n case 1:\r\n actionManager.processTrigger(\r\n Constants.ACTION_OnCenterPickTrigger,\r\n new ActionEvent(pickResult.pickedMesh, scene.pointerX, scene.pointerY, pickResult.pickedMesh, evt, pickResult)\r\n );\r\n break;\r\n case 2:\r\n actionManager.processTrigger(\r\n Constants.ACTION_OnRightPickTrigger,\r\n new ActionEvent(pickResult.pickedMesh, scene.pointerX, scene.pointerY, pickResult.pickedMesh, evt, pickResult)\r\n );\r\n break;\r\n }\r\n }\r\n\r\n if (actionManager.hasSpecificTrigger(Constants.ACTION_OnLongPressTrigger)) {\r\n window.setTimeout(() => {\r\n const pickResult = scene.pick(\r\n this._unTranslatedPointerX,\r\n this._unTranslatedPointerY,\r\n (mesh: AbstractMesh): boolean =>\r\n <boolean>(\r\n (mesh.isPickable &&\r\n mesh.isVisible &&\r\n mesh.isReady() &&\r\n mesh.actionManager &&\r\n mesh.actionManager.hasSpecificTrigger(Constants.ACTION_OnLongPressTrigger) &&\r\n mesh === this._pickedDownMesh)\r\n ),\r\n false,\r\n scene.cameraToUseForPointers\r\n );\r\n\r\n if (pickResult?.pickedMesh && actionManager) {\r\n if (this._activePointerIdsCount !== 0 && Date.now() - this._startingPointerTime > InputManager.LongPressDelay && !this._isPointerSwiping()) {\r\n this._startingPointerTime = 0;\r\n actionManager.processTrigger(Constants.ACTION_OnLongPressTrigger, ActionEvent.CreateNew(pickResult.pickedMesh, evt));\r\n }\r\n }\r\n }, InputManager.LongPressDelay);\r\n }\r\n }\r\n } else {\r\n for (const step of scene._pointerDownStage) {\r\n pickResult = step.action(this._unTranslatedPointerX, this._unTranslatedPointerY, pickResult, evt, false);\r\n }\r\n }\r\n\r\n let pointerInfo: PointerInfo;\r\n const type = PointerEventTypes.POINTERDOWN;\r\n\r\n if (pickResult) {\r\n if (scene.onPointerDown) {\r\n scene.onPointerDown(evt, pickResult, type);\r\n }\r\n\r\n pointerInfo = new PointerInfo(type, evt, pickResult);\r\n this._setRayOnPointerInfo(pickResult, evt);\r\n } else {\r\n pointerInfo = new PointerInfo(type, evt, null, this);\r\n }\r\n\r\n if (scene.onPointerObservable.hasObservers()) {\r\n scene.onPointerObservable.notifyObservers(pointerInfo, type);\r\n }\r\n }\r\n\r\n /**\r\n * @internal\r\n * @internals Boolean if delta for pointer exceeds drag movement threshold\r\n */\r\n public _isPointerSwiping(): boolean {\r\n return this._isSwiping;\r\n }\r\n\r\n /**\r\n * Use this method to simulate a pointer up on a mesh\r\n * The pickResult parameter can be obtained from a scene.pick or scene.pickWithRay\r\n * @param pickResult - pickingInfo of the object wished to simulate pointer event on\r\n * @param pointerEventInit - pointer event state to be used when simulating the pointer event (eg. pointer id for multitouch)\r\n * @param doubleTap - indicates that the pointer up event should be considered as part of a double click (false by default)\r\n */\r\n public simulatePointerUp(pickResult: PickingInfo, pointerEventInit?: PointerEventInit, doubleTap?: boolean): void {\r\n const evt = new PointerEvent(\"pointerup\", pointerEventInit);\r\n evt.inputIndex = PointerInput.Move;\r\n const clickInfo = new _ClickInfo();\r\n\r\n if (doubleTap) {\r\n clickInfo.doubleClick = true;\r\n } else {\r\n clickInfo.singleClick = true;\r\n }\r\n\r\n if (this._checkPrePointerObservable(pickResult, evt, PointerEventTypes.POINTERUP)) {\r\n return;\r\n }\r\n\r\n this._processPointerUp(pickResult, evt, clickInfo);\r\n }\r\n\r\n private _processPointerUp(pickResult: Nullable<PickingInfo>, evt: IPointerEvent, clickInfo: _ClickInfo): void {\r\n const scene = this._scene;\r\n if (pickResult?.pickedMesh) {\r\n this._pickedUpMesh = pickResult.pickedMesh;\r\n if (this._pickedDownMesh === this._pickedUpMesh) {\r\n if (scene.onPointerPick) {\r\n scene.onPointerPick(evt, pickResult);\r\n }\r\n if (clickInfo.singleClick && !clickInfo.ignore && scene.onPointerObservable.observers.length > this._cameraObserverCount) {\r\n const type = PointerEventTypes.POINTERPICK;\r\n const pi = new PointerInfo(type, evt, pickResult);\r\n this._setRayOnPointerInfo(pickResult, evt);\r\n scene.onPointerObservable.notifyObservers(pi, type);\r\n }\r\n }\r\n const actionManager = pickResult.pickedMesh._getActionManagerForTrigger();\r\n if (actionManager && !clickInfo.ignore) {\r\n actionManager.processTrigger(Constants.ACTION_OnPickUpTrigger, ActionEvent.CreateNew(pickResult.pickedMesh, evt, pickResult));\r\n\r\n if (!clickInfo.hasSwiped && clickInfo.singleClick) {\r\n actionManager.processTrigger(Constants.ACTION_OnPickTrigger, ActionEvent.CreateNew(pickResult.pickedMesh, evt, pickResult));\r\n }\r\n\r\n const doubleClickActionManager = pickResult.pickedMesh._getActionManagerForTrigger(Constants.ACTION_OnDoublePickTrigger);\r\n if (clickInfo.doubleClick && doubleClickActionManager) {\r\n doubleClickActionManager.processTrigger(Constants.ACTION_OnDoublePickTrigger, ActionEvent.CreateNew(pickResult.pickedMesh, evt, pickResult));\r\n }\r\n }\r\n } else {\r\n if (!clickInfo.ignore) {\r\n for (const step of scene._pointerUpStage) {\r\n pickResult = step.action(this._unTranslatedPointerX, this._unTranslatedPointerY, pickResult, evt, clickInfo.doubleClick);\r\n }\r\n }\r\n }\r\n\r\n if (this._pickedDownMesh && this._pickedDownMesh !== this._pickedUpMesh) {\r\n const pickedDownActionManager = this._pickedDownMesh._getActionManagerForTrigger(Constants.ACTION_OnPickOutTrigger);\r\n if (pickedDownActionManager) {\r\n pickedDownActionManager.processTrigger(Constants.ACTION_OnPickOutTrigger, ActionEvent.CreateNew(this._pickedDownMesh, evt));\r\n }\r\n }\r\n\r\n if (!clickInfo.ignore) {\r\n const pi = new PointerInfo(PointerEventTypes.POINTERUP, evt, pickResult);\r\n // Set ray on picking info. Note that this info will also be reused for the tap notification.\r\n this._setRayOnPointerInfo(pickResult, evt);\r\n scene.onPointerObservable.notifyObservers(pi, PointerEventTypes.POINTERUP);\r\n\r\n if (scene.onPointerUp) {\r\n scene.onPointerUp(evt, pickResult, PointerEventTypes.POINTERUP);\r\n }\r\n\r\n if (!clickInfo.hasSwiped && !this._skipPointerTap && !this._isMultiTouchGesture) {\r\n let type = 0;\r\n if (clickInfo.singleClick) {\r\n type = PointerEventTypes.POINTERTAP;\r\n } else if (clickInfo.doubleClick) {\r\n type = PointerEventTypes.POINTERDOUBLETAP;\r\n }\r\n\r\n if (type) {\r\n const pi = new PointerInfo(type, evt, pickResult);\r\n if (scene.onPointerObservable.hasObservers() && scene.onPointerObservable.hasSpecificMask(type)) {\r\n scene.onPointerObservable.notifyObservers(pi, type);\r\n }\r\n }\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * Gets a boolean indicating if the current pointer event is captured (meaning that the scene has already handled the pointer down)\r\n * @param pointerId - defines the pointer id to use in a multi-touch scenario (0 by default)\r\n * @returns true if the pointer was captured\r\n */\r\n public isPointerCaptured(pointerId = 0): boolean {\r\n return this._pointerCaptures[pointerId];\r\n }\r\n\r\n /**\r\n * Attach events to the canvas (To handle actionManagers triggers and raise onPointerMove, onPointerDown and onPointerUp\r\n * @param attachUp - defines if you want to attach events to pointerup\r\n * @param attachDown - defines if you want to attach events to pointerdown\r\n * @param attachMove - defines if you want to attach events to pointermove\r\n * @param elementToAttachTo - defines the target DOM element to attach to (will use the canvas by default)\r\n */\r\n public attachControl(attachUp = true, attachDown = true, attachMove = true, elementToAttachTo: Nullable<HTMLElement> = null): void {\r\n const scene = this._scene;\r\n const engine = scene.getEngine();\r\n\r\n if (!elementToAttachTo) {\r\n elementToAttachTo = engine.getInputElement();\r\n }\r\n\r\n if (this._alreadyAttached) {\r\n this.detachControl();\r\n }\r\n\r\n if (elementToAttachTo) {\r\n this._alreadyAttachedTo = elementToAttachTo;\r\n }\r\n this._deviceSourceManager = new DeviceSourceManager(engine);\r\n\r\n // Because this is only called from _initClickEvent, which is called in _onPointerUp, we'll use the pointerUpPredicate for the pick call\r\n this._initActionManager = (act: Nullable<AbstractActionManager>): Nullable<AbstractActionManager> => {\r\n if (!this._meshPickProceed) {\r\n const pickResult =\r\n scene.skipPointerUpPicking || (scene._registeredActions === 0 && !this._checkForPicking() && !scene.onPointerUp)\r\n ? null\r\n : scene.pick(\r\n this._unTranslatedPointerX,\r\n this._unTranslatedPointerY,\r\n scene.pointerUpPredicate,\r\n scene.pointerUpFastCheck,\r\n scene.cameraToUseForPointers,\r\n scene.pointerUpTrianglePredicate\r\n );\r\n this._currentPickResult = pickResult;\r\n if (pickResult) {\r\n act = pickResult.hit && pickResult.pickedMesh ? pickResult.pickedMesh._getActionManagerForTrigger() : null;\r\n }\r\n this._meshPickProceed = true;\r\n }\r\n return act;\r\n };\r\n\r\n this._delayedSimpleClick = (btn: number, clickInfo: _ClickInfo, cb: (clickInfo: _ClickInfo, pickResult: Nullable<PickingInfo>) => void) => {\r\n // double click delay is over and that no double click has been raised since, or the 2 consecutive keys pressed are different\r\n if ((Date.now() - this._previousStartingPointerTime > InputManager.DoubleClickDelay && !this._doubleClickOccured) || btn !== this._previousButtonPressed) {\r\n this._doubleClickOccured = false;\r\n clickInfo.singleClick = true;\r\n clickInfo.ignore = false;\r\n\r\n // If we have a delayed click, we need to resolve the TAP event\r\n if (this._delayedClicks[btn]) {\r\n const evt = this._delayedClicks[btn].evt;\r\n const type = PointerEventTypes.POINTERTAP;\r\n const pi = new PointerInfo(type, evt, this._currentPickResult);\r\n if (scene.onPointerObservable.hasObservers() && scene.onPointerObservable.hasSpecificMask(type)) {\r\n scene.onPointerObservable.notifyObservers(pi, type);\r\n }\r\n\r\n // Clear the delayed click\r\n this._delayedClicks[btn] = null;\r\n }\r\n }\r\n };\r\n\r\n this._initClickEvent = (\r\n obs1: Observable<PointerInfoPre>,\r\n obs2: Observable<PointerInfo>,\r\n evt: IPointerEvent,\r\n cb: (clickInfo: _ClickInfo, pickResult: Nullable<PickingInfo>) => void\r\n ): void => {\r\n const clickInfo = new _ClickInfo();\r\n this._currentPickResult = null;\r\n let act: Nullable<AbstractActionManager> = null;\r\n\r\n let checkPicking =\r\n obs1.hasSpecificMask(PointerEventTypes.POINTERPICK) ||\r\n obs2.hasSpecificMask(PointerEventTypes.POINTERPICK) ||\r\n obs1.hasSpecificMask(PointerEventTypes.POINTERTAP) ||\r\n obs2.hasSpecificMask(PointerEventTypes.POINTERTAP) ||\r\n obs1.hasSpecificMask(PointerEventTypes.POINTERDOUBLETAP) ||\r\n obs2.hasSpecificMask(PointerEventTypes.POINTERDOUBLETAP);\r\n if (!checkPicking && AbstractActionManager) {\r\n act = this._initActionManager(act, clickInfo);\r\n if (act) {\r\n checkPicking = act.hasPickTriggers;\r\n }\r\n }\r\n\r\n let needToIgnoreNext = false;\r\n\r\n // Never pick if this is a multi-touch gesture (e.g. pinch)\r\n checkPicking = checkPicking && !this._isMultiTouchGesture;\r\n\r\n if (checkPicking) {\r\n const btn = evt.button;\r\n clickInfo.hasSwiped = this._isPointerSwiping();\r\n\r\n if (!clickInfo.hasSwiped) {\r\n let checkSingleClickImmediately = !InputManager.ExclusiveDoubleClickMode;\r\n\r\n if (!checkSingleClickImmediately) {\r\n checkSingleClickImmediately = !obs1.hasSpecificMask(PointerEventTypes.POINTERDOUBLETAP) && !obs2.hasSpecificMask(PointerEventTypes.POINTERDOUBLETAP);\r\n\r\n if (checkSingleClickImmediately && !AbstractActionManager.HasSpecificTrigger(Constants.ACTION_OnDoublePickTrigger)) {\r\n act = this._initActionManager(act, clickInfo);\r\n if (act) {\r\n checkSingleClickImmediately = !act.hasSpecificTrigger(Constants.ACTION_OnDoublePickTrigger);\r\n }\r\n }\r\n }\r\n\r\n if (checkSingleClickImmediately) {\r\n // single click detected if double click delay is over or two different successive keys pressed without exclusive double click or no double click required\r\n if (Date.now() - this._previousStartingPointerTime > InputManager.DoubleClickDelay || btn !== this._previousButtonPressed) {\r\n clickInfo.singleClick = true;\r\n cb(clickInfo, this._currentPickResult);\r\n needToIgnoreNext = true;\r\n }\r\n }\r\n // at least one double click is required to be check and exclusive double click is enabled\r\n else {\r\n // Queue up a delayed click, just in case this isn't a double click\r\n // It should be noted that while this delayed event happens\r\n // because of user input, it shouldn't be considered as a direct,\r\n // timing-dependent result of that input. It's meant to just fire the TAP event\r\n const delayedClick = {\r\n evt: evt,\r\n clickInfo: clickInfo,\r\n timeoutId: window.setTimeout(this._delayedSimpleClick.bind(this, btn, clickInfo, cb), InputManager.DoubleClickDelay),\r\n };\r\n\r\n this._delayedClicks[btn] = delayedClick;\r\n }\r\n\r\n let checkDoubleClick = obs1.hasSpecificMask(PointerEventTypes.POINTERDOUBLETAP) || obs2.hasSpecificMask(PointerEventTypes.POINTERDOUBLETAP);\r\n if (!checkDoubleClick && AbstractActionManager.HasSpecificTrigger(Constants.ACTION_OnDoublePickTrigger)) {\r\n act = this._initActionManager(act, clickInfo);\r\n if (act) {\r\n checkDoubleClick = act.hasSpecificTrigger(Constants.ACTION_OnDoublePickTrigger);\r\n }\r\n }\r\n if (checkDoubleClick) {\r\n // two successive keys pressed are equal, double click delay is not over and double click has not just occurred\r\n if (btn === this._previousButtonPressed && Date.now() - this._previousStartingPointerTime < InputManager.DoubleClickDelay && !this._doubleClickOccured) {\r\n // pointer has not moved for 2 clicks, it's a double click\r\n if (!clickInfo.hasSwiped && !this._isPointerSwiping()) {\r\n this._previousStartingPointerTime = 0;\r\n this._doubleClickOccured = true;\r\n clickInfo.doubleClick = true;\r\n clickInfo.ignore = false;\r\n // If we have a pending click, we need to cancel it\r\n if (InputManager.ExclusiveDoubleClickMode && this._delayedClicks[btn]) {\r\n clearTimeout(this._delayedClicks[btn]?.timeoutId);\r\n this._delayedClicks[btn] = null;\r\n }\r\n\r\n cb(clickInfo, this._currentPickResult);\r\n }\r\n // if the two successive clicks are too far, it's just two simple clicks\r\n else {\r\n this._doubleClickOccured = false;\r\n this._previousStartingPointerTime = this._startingPointerTime;\r\n this._previousStartingPointerPosition.x = this._startingPointerPosition.x;\r\n this._previousStartingPointerPosition.y = this._startingPointerPosition.y;\r\n this._previousButtonPressed = btn;\r\n if (InputManager.ExclusiveDoubleClickMode) {\r\n // If we have a delayed click, we need to cancel it\r\n if (this._delayedClicks[btn]) {\r\n clearTimeout(this._delayedClicks[btn]?.timeoutId);\r\n this._delayedClicks[btn] = null;\r\n }\r\n cb(clickInfo, this._previousPickResult);\r\n } else {\r\n cb(clickInfo, this._currentPickResult);\r\n }\r\n }\r\n needToIgnoreNext = true;\r\n }\r\n // just the first click of the double has been raised\r\n else {\r\n this._doubleClickOccured = false;\r\n this._previousStartingPointerTime = this._startingPointerTime;\r\n this._previousStartingPointerPosition.x = this._startingPointerPosition.x;\r\n this._previousStartingPointerPosition.y = this._startingPointerPosition.y;\r\n this._previousButtonPressed = btn!;\r\n }\r\n }\r\n }\r\n }\r\n\r\n // Even if ExclusiveDoubleClickMode is true, we need to always handle\r\n // up events at time of execution, unless we're explicitly ignoring them.\r\n if (!needToIgnoreNext) {\r\n cb(clickInfo, this._currentPickResult);\r\n }\r\n };\r\n\r\n this._onPointerMove = (evt: IMouseEvent) => {\r\n this._updatePointerPosition(evt as IPointerEvent);\r\n\r\n // Check if pointer leaves DragMovementThreshold range to determine if swipe is occurring\r\n if (!this._isSwiping && this._swipeButtonPressed !== -1) {\r\n this._isSwiping =\r\n Math.abs(this._startingPointerPosition.x - this._pointerX) > InputManager.DragMovementThreshold ||\r\n Math.abs(this._startingPointerPosition.y - this._pointerY) > InputManager.DragMovementThreshold;\r\n }\r\n\r\n // Because there's a race condition between pointermove and pointerlockchange events, we need to\r\n // verify that the pointer is still locked after each pointermove event.\r\n if (engine.isPointerLock) {\r\n engine._verifyPointerLock();\r\n }\r\n\r\n // PreObservable support\r\n if (\r\n this._checkPrePointerObservable(\r\n null,\r\n evt as IPointerEvent,\r\n evt.inputIndex >= PointerInput.MouseWheelX && evt.inputIndex <= PointerInput.MouseWheelZ ? PointerEventTypes.POINTERWHEEL : PointerEventTypes.POINTERMOVE\r\n )\r\n ) {\r\n return;\r\n }\r\n\r\n if (!scene.cameraToUseForPointers && !scene.activeCamera) {\r\n return;\r\n }\r\n\r\n if (scene.skipPointerMovePicking) {\r\n this._processPointerMove(new PickingInfo(), evt as IPointerEvent);\r\n return;\r\n }\r\n\r\n if (!scene.pointerMovePredicate) {\r\n scene.pointerMovePredicate = (mesh: AbstractMesh): boolean =>\r\n mesh.isPickable &&\r\n mesh.isVisible &&\r\n mesh.isReady() &&\r\n mesh.isEnabled() &&\r\n (mesh.enablePointerMoveEvents || scene.constantlyUpdateMeshUnderPointer || mesh._getActionManagerForTrigger() !== null) &&\r\n (!scene.cameraToUseForPointers || (scene.cameraToUseForPointers.layerMask & mesh.layerMask) !== 0);\r\n }\r\n\r\n const pickResult = scene._registeredActions > 0 || scene.constantlyUpdateMeshUnderPointer ? this._pickMove(evt as IPointerEvent) : null;\r\n this._processPointerMove(pickResult, evt as IPointerEvent);\r\n };\r\n\r\n this._onPointerDown = (evt: IPointerEvent) => {\r\n const freeIndex = this._activePointerIds.indexOf(-1);\r\n if (freeIndex === -1) {\r\n this._activePointerIds.push(evt.pointerId);\r\n } else {\r\n this._activePointerIds[freeIndex] = evt.pointerId;\r\n }\r\n this._activePointerIdsCount++;\r\n this._pickedDownMesh = null;\r\n this._meshPickProceed = false;\r\n\r\n // If ExclusiveDoubleClickMode is true, we need to resolve any pending delayed clicks\r\n if (InputManager.ExclusiveDoubleClickMode) {\r\n for (let i = 0; i < this._delayedClicks.length; i++) {\r\n if (this._delayedClicks[i]) {\r\n // If the button that was pressed is the same as the one that was released,\r\n // just clear the timer. This will be resolved in the up event.\r\n if (evt.button === i) {\r\n clearTimeout(this._delayedClicks[i]?.timeoutId);\r\n } else {\r\n // Otherwise, we need to resolve the click\r\n const clickInfo = this._delayedClicks[i]!.clickInfo;\r\n this._doubleClickOccured = false;\r\n clickInfo.singleClick = true;\r\n clickInfo.ignore = false;\r\n\r\n const prevEvt = this._delayedClicks[i]!.evt;\r\n const type = PointerEventTypes.POINTERTAP;\r\n const pi = new PointerInfo(type, prevEvt, this._currentPickResult);\r\n if (scene.onPointerObservable.hasObservers() && scene.onPointerObservable.hasSpecificMask(type)) {\r\n scene.onPointerObservable.notifyObservers(pi, type);\r\n }\r\n\r\n // Clear the delayed click\r\n this._delayedClicks[i] = null;\r\n }\r\n }\r\n }\r\n }\r\n\r\n this._updatePointerPosition(evt);\r\n\r\n if (this._swipeButtonPressed === -1) {\r\n this._swipeButtonPressed = evt.button;\r\n }\r\n\r\n if (scene.preventDefaultOnPointerDown && elementToAttachTo) {\r\n evt.preventDefault();\r\n elementToAttachTo.focus();\r\n }\r\n\r\n this._startingPointerPosition.x = this._pointerX;\r\n this._startingPointerPosition.y = this._pointerY;\r\n this._startingPointerTime = Date.now();\r\n\r\n // PreObservable support\r\n if (this._checkPrePointerObservable(null, evt, PointerEventTypes.POINTERDOWN)) {\r\n return;\r\n }\r\n\r\n if (!scene.cameraToUseForPointers && !scene.activeCamera) {\r\n return;\r\n }\r\n\r\n this._pointerCaptures[evt.pointerId] = true;\r\n\r\n if (!scene.pointerDownPredicate) {\r\n scene.pointerDownPredicate = (mesh: AbstractMesh): boolean => {\r\n return (\r\n mesh.isPickable &&\r\n mesh.isVisible &&\r\n mesh.isReady() &&\r\n mesh.isEnabled() &&\r\n (!scene.cameraToUseForPointers || (scene.cameraToUseForPointers.layerMask & mesh.layerMask) !== 0)\r\n );\r\n };\r\n }\r\n\r\n // Meshes\r\n this._pickedDownMesh = null;\r\n let pickResult;\r\n if (scene.skipPointerDownPicking || (scene._registeredActions === 0 && !this._checkForPicking() && !scene.onPointerDown)) {\r\n pickResult = new PickingInfo();\r\n } else {\r\n pickResult = scene.pick(\r\n this._unTranslatedPointerX,\r\n this._unTranslatedPointerY,\r\n scene.pointerDownPredicate,\r\n scene.pointerDownFastCheck,\r\n scene.cameraToUseForPointers,\r\n scene.pointerDownTrianglePredicate\r\n );\r\n }\r\n\r\n this._processPointerDown(pickResult, evt);\r\n };\r\n\r\n this._onPointerUp = (evt: IPointerEvent) => {\r\n const pointerIdIndex = this._activePointerIds.indexOf(evt.pointerId);\r\n if (pointerIdIndex === -1) {\r\n // We are attaching the pointer up to windows because of a bug in FF\r\n // If this pointerId is not paired with an _onPointerDown call, ignore it\r\n return;\r\n }\r\n\r\n this._activePointerIds[pointerIdIndex] = -1;\r\n this._activePointerIdsCount--;\r\n this._pickedUpMesh = null;\r\n this._meshPickProceed = false;\r\n\r\n this._updatePointerPosition(evt);\r\n\r\n if (scene.preventDefaultOnPointerUp && elementToAttachTo) {\r\n evt.preventDefault();\r\n elementToAttachTo.focus();\r\n }\r\n\r\n this._initClickEvent(scene.onPrePointerObservable, scene.onPointerObservable, evt, (clickInfo: _ClickInfo, pickResult: Nullable<PickingInfo>) => {\r\n // PreObservable support\r\n if (scene.onPrePointerObservable.hasObservers()) {\r\n this._skipPointerTap = false;\r\n if (!clickInfo.ignore) {\r\n if (this._checkPrePointerObservable(null, evt, PointerEventTypes.POINTERUP)) {\r\n // If we're skipping the next observable, we need to reset the swipe state before returning\r\n if (this._swipeButtonPressed === evt.button) {\r\n this._isSwiping = false;\r\n this._swipeButtonPressed = -1;\r\n }\r\n\r\n // If we're going to skip the POINTERUP, we need to reset the pointer capture\r\n if (evt.buttons === 0) {\r\n this._pointerCaptures[evt.pointerId] = false;\r\n }\r\n\r\n return;\r\n }\r\n if (!clickInfo.hasSwiped) {\r\n if (clickInfo.singleClick && scene.onPrePointerObservable.hasSpecificMask(PointerEventTypes.POINTERTAP)) {\r\n if (this._checkPrePointerObservable(null, evt, PointerEventTypes.POINTERTAP)) {\r\n this._skipPointerTap = true;\r\n }\r\n }\r\n if (clickInfo.doubleClick && scene.onPrePointerObservable.hasSpecificMask(PointerEventTypes.POINTERDOUBLETAP)) {\r\n if (this._checkPrePointerObservable(null, evt, PointerEventTypes.POINTERDOUBLETAP)) {\r\n this._skipPointerTap = true;\r\n }\r\n }\r\n }\r\n }\r\n }\r\n\r\n // There should be a pointer captured at this point so if there isn't we should reset and return\r\n if (!this._pointerCaptures[evt.pointerId]) {\r\n if (this._swipeButtonPressed === evt.button) {\r\n this._isSwiping = false;\r\n this._swipeButtonPressed = -1;\r\n }\r\n return;\r\n }\r\n\r\n // Only release capture if all buttons are released\r\n if (evt.buttons === 0) {\r\n this._pointerCaptures[evt.pointerId] = false;\r\n }\r\n if (!scene.cameraToUseForPointers && !scene.activeCamera) {\r\n return;\r\n }\r\n\r\n if (!scene.pointerUpPredicate) {\r\n scene.pointerUpPredicate = (mesh: AbstractMesh): boolean => {\r\n return (\r\n mesh.isPickable &&\r\n mesh.isVisible &&\r\n mesh.isReady() &&\r\n mesh.isEnabled() &&\r\n (!scene.cameraToUseForPointers || (scene.cameraToUseForPointers.layerMask & mesh.layerMask) !== 0)\r\n );\r\n };\r\n }\r\n\r\n // Meshes\r\n if (!this._meshPickProceed && ((AbstractActionManager && AbstractActionManager.HasTriggers) || this._checkForPicking() || scene.onPointerUp)) {\r\n this._initActionManager(null, clickInfo);\r\n }\r\n if (!pickResult) {\r\n pickResult = this._currentPickResult;\r\n }\r\n\r\n this._processPointerUp(pickResult, evt, clickInfo);\r\n\r\n this._previousPickResult = this._currentPickResult;\r\n\r\n if (this._swipeButtonPressed === evt.button) {\r\n this._isSwiping = false;\r\n this._swipeButtonPressed = -1;\r\n }\r\n });\r\n };\r\n\r\n this._onKeyDown = (evt: IKeyboardEvent) => {\r\n const type = KeyboardEventTypes.KEYDOWN;\r\n if (scene.onPreKeyboardObservable.hasObservers()) {\r\n const pi = new KeyboardInfoPre(type, evt);\r\n scene.onPreKeyboardObservable.notifyObservers(pi, type);\r\n if (pi.skipOnKeyboardObservable) {\r\n return;\r\n }\r\n }\r\n\r\n if (scene.onKeyboardObservable.hasObservers()) {\r\n const pi = new KeyboardInfo(type, evt);\r\n scene.onKeyboardObservable.notifyObservers(pi, type);\r\n }\r\n\r\n if (scene.actionManager) {\r\n scene.actionManager.processTrigger(Constants.ACTION_OnKeyDownTrigger, ActionEvent.CreateNewFromScene(scene, evt));\r\n }\r\n };\r\n\r\n this._onKeyUp = (evt: IKeyboardEvent) => {\r\n const type = KeyboardEventTypes.KEYUP;\r\n if (scene.onPreKeyboardObservable.hasObservers()) {\r\n const pi = new KeyboardInfoPre(type, evt);\r\n scene.onPreKeyboardObservable.notifyObservers(pi, type);\r\n if (pi.skipOnKeyboardObservable) {\r\n return;\r\n }\r\n }\r\n\r\n if (scene.onKeyboardObservable.hasObservers()) {\r\n const pi = new KeyboardInfo(type, evt);\r\n scene.onKeyboardObservable.notifyObservers(pi, type);\r\n }\r\n\r\n if (scene.actionManager) {\r\n scene.actionManager.processTrigger(Constants.ACTION_OnKeyUpTrigger, ActionEvent.CreateNewFromScene(scene, evt));\r\n }\r\n };\r\n\r\n // If a device connects that we can handle, wire up the observable\r\n this._deviceSourceManager.onDeviceConnectedObservable.add((deviceSource) => {\r\n if (deviceSource.deviceType === DeviceType.Mouse) {\r\n deviceSource.onInputChangedObservable.add((eventData) => {\r\n this._originMouseEvent = eventData;\r\n if (\r\n eventData.inputIndex === PointerInput.LeftClick ||\r\n eventData.inputIndex === PointerInput.MiddleClick ||\r\n eventData.inputIndex === PointerInput.RightClick ||\r\n eventData.inputIndex === PointerInput.BrowserBack ||\r\n eventData.inputIndex === PointerInput.BrowserForward\r\n ) {\r\n if (attachDown && deviceSource.getInput(eventData.inputIndex) === 1) {\r\n this._onPointerDown(eventData);\r\n } else if (attachUp && deviceSource.getInput(eventData.inputIndex) === 0) {\r\n this._onPointerUp(eventData);\r\n }\r\n } else if (attachMove) {\r\n if (eventData.inputIndex === PointerInput.Move) {\r\n this._onPointerMove(eventData);\r\n } else if (\r\n eventData.inputIndex === PointerInput.MouseWheelX ||\r\n eventData.inputIndex === PointerInput.MouseWheelY ||\r\n eventData.inputIndex === PointerInput.MouseWheelZ\r\n ) {\r\n this._onPointerMove(eventData);\r\n }\r\n }\r\n });\r\n } else if (deviceSource.deviceType === DeviceType.Touch) {\r\n deviceSource.onInputChangedObservable.add((eventData) => {\r\n if (eventData.inputIndex === PointerInput.LeftClick) {\r\n if (attachDown && deviceSource.getInput(eventData.inputIndex) === 1) {\r\n this._onPointerDown(eventData);\r\n if (this._activePointerIdsCount > 1) {\r\n this._isMultiTouchGesture = true;\r\n }\r\n } else if (attachUp && deviceSource.getInput(eventData.inputIndex) === 0) {\r\n this._onPointerUp(eventData);\r\n if (this._activePointerIdsCount === 0) {\r\n this._isMultiTouchGesture = false;\r\n }\r\n }\r\n }\r\n\r\n if (attachMove && eventData.inputIndex === PointerInput.Move) {\r\n this._onPointerMove(eventData);\r\n }\r\n });\r\n } else if (deviceSource.deviceType === DeviceType.Keyboard) {\r\n deviceSource.onInputChangedObservable.add((eventData) => {\r\n if (eventData.type === \"keydown\") {\r\n this._onKeyDown(eventData);\r\n } else if (eventData.type === \"keyup\") {\r\n this._onKeyUp(eventData);\r\n }\r\n });\r\n }\r\n });\r\n\r\n this._alreadyAttached = true;\r\n }\r\n\r\n /**\r\n * Detaches all event handlers\r\n */\r\n public detachControl() {\r\n if (this._alreadyAttached) {\r\n this._deviceSourceManager!.dispose();\r\n this._deviceSourceManager = null;\r\n\r\n // Cursor\r\n if (this._alreadyAttachedTo && !this._scene.doNotHandleCursors) {\r\n this._alreadyAttachedTo.style.cursor = this._scene.defaultCursor;\r\n }\r\n\r\n this._alreadyAttached = false;\r\n this._alreadyAttachedTo = null;\r\n }\r\n }\r\n\r\n /**\r\n * Set the value of meshUnderPointer for a given pointerId\r\n * @param mesh - defines the mesh to use\r\n * @param pointerId - optional pointer id when using more than one pointer. Defaults to 0\r\n * @param pickResult - optional pickingInfo data used to find mesh\r\n * @param evt - optional pointer event\r\n */\r\n public setPointerOverMesh(mesh: Nullable<AbstractMesh>, pointerId: number = 0, pickResult?: Nullable<PickingInfo>, evt?: IPointerEvent): void {\r\n if (this._meshUnderPointerId[pointerId] === mesh && (!mesh || !mesh._internalAbstractMeshDataInfo._pointerOverDisableMeshTesting)) {\r\n return;\r\n }\r\n\r\n const underPointerMesh = this._meshUnderPointerId[pointerId];\r\n\r\n let actionManager: Nullable<AbstractActionManager>;\r\n if (underPointerMesh) {\r\n actionManager = underPointerMesh._getActionManagerForTrigger(Constants.ACTION_OnPointerOutTrigger);\r\n if (actionManager) {\r\n actionManager.processTrigger(Constants.ACTION_OnPointerOutTrigger, new ActionEvent(underPointerMesh, this._pointerX, this._pointerY, mesh, evt, { pointerId }));\r\n }\r\n }\r\n\r\n if (mesh) {\r\n this._meshUnderPointerId[pointerId] = mesh;\r\n this._pointerOverMesh = mesh;\r\n\r\n actionManager = mesh._getActionManagerForTrigger(Constants.ACTION_OnPointerOverTrigger);\r\n if (actionManager) {\r\n actionManager.processTrigger(Constants.ACTION_OnPointerOverTrigger, new ActionEvent(mesh, this._pointerX, this._pointerY, mesh, evt, { pointerId, pickResult }));\r\n }\r\n } else {\r\n delete this._meshUnderPointerId[pointerId];\r\n this._pointerOverMesh = null;\r\n }\r\n // if we reached this point, meshUnderPointerId has been updated. We need to notify observers that are registered.\r\n if (this._scene.onMeshUnderPointerUpdatedObservable.hasObservers()) {\r\n this._scene.onMeshUnderPointerUpdatedObservable.notifyObservers({\r\n mesh,\r\n pointerId,\r\n });\r\n }\r\n }\r\n\r\n /**\r\n * Gets the mesh under the pointer\r\n * @returns a Mesh or null if no mesh is under the pointer\r\n */\r\n public getPointerOverMesh(): Nullable<AbstractMesh> {\r\n return this.meshUnderPointer;\r\n }\r\n\r\n /**\r\n * @param mesh - Mesh to invalidate\r\n * @internal\r\n */\r\n public _invalidateMesh(mesh: AbstractMesh) {\r\n if (this._pointerOverMesh === mesh) {\r\n this._pointerOverMesh = null;\r\n }\r\n if (this._pickedDownMesh === mesh) {\r\n this._pickedDownMesh = null;\r\n }\r\n if (this._pickedUpMesh === mesh) {\r\n this._pickedUpMesh = null;\r\n }\r\n for (const pointerId in this._meshUnderPointerId) {\r\n if (this._meshUnderPointerId[pointerId] === mesh) {\r\n delete this._meshUnderPointerId[pointerId];\r\n }\r\n }\r\n }\r\n}\r\n"]}
1
+ {"version":3,"file":"scene.inputManager.js","sourceRoot":"","sources":["../../../../dev/core/src/Inputs/scene.inputManager.ts"],"names":[],"mappings":"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","sourcesContent":["import { type EventState, type Observable, type Observer } from \"../Misc/observable\";\r\nimport { PointerInfoPre, PointerInfo, PointerEventTypes } from \"../Events/pointerEvents\";\r\nimport { type Nullable } from \"../types\";\r\nimport { AbstractActionManager } from \"../Actions/abstractActionManager\";\r\nimport { PickingInfo } from \"../Collisions/pickingInfo\";\r\nimport { Vector2, Matrix } from \"../Maths/math.vector.pure\";\r\nimport { type AbstractMesh } from \"../Meshes/abstractMesh\";\r\nimport { Constants } from \"../Engines/constants\";\r\nimport { ActionEvent } from \"../Actions/actionEvent\";\r\nimport { KeyboardEventTypes, KeyboardInfoPre, KeyboardInfo } from \"../Events/keyboardEvents\";\r\nimport { DeviceType, PointerInput } from \"../DeviceInput/InputDevices/deviceEnums\";\r\nimport { type IKeyboardEvent, type IMouseEvent, type IPointerEvent } from \"../Events/deviceInputEvents\";\r\nimport { DeviceSourceManager } from \"../DeviceInput/InputDevices/deviceSourceManager\";\r\nimport { EngineStore } from \"../Engines/engineStore\";\r\n\r\nimport { type Scene } from \"../scene\";\r\nimport { _ImportHelper } from \"core/import.helper\";\r\n\r\n/** @internal */\r\n// eslint-disable-next-line @typescript-eslint/naming-convention\r\nclass _ClickInfo {\r\n private _singleClick = false;\r\n private _doubleClick = false;\r\n private _hasSwiped = false;\r\n private _ignore = false;\r\n\r\n public get singleClick(): boolean {\r\n return this._singleClick;\r\n }\r\n public get doubleClick(): boolean {\r\n return this._doubleClick;\r\n }\r\n public get hasSwiped(): boolean {\r\n return this._hasSwiped;\r\n }\r\n public get ignore(): boolean {\r\n return this._ignore;\r\n }\r\n\r\n public set singleClick(b: boolean) {\r\n this._singleClick = b;\r\n }\r\n public set doubleClick(b: boolean) {\r\n this._doubleClick = b;\r\n }\r\n public set hasSwiped(b: boolean) {\r\n this._hasSwiped = b;\r\n }\r\n public set ignore(b: boolean) {\r\n this._ignore = b;\r\n }\r\n}\r\n\r\n/** @internal */\r\ninterface _IClickEvent {\r\n clickInfo: _ClickInfo;\r\n evt: IPointerEvent;\r\n timeoutId: number;\r\n}\r\n\r\n/**\r\n * Class used to manage all inputs for the scene.\r\n */\r\nexport class InputManager {\r\n /** The distance in pixel that you have to move to prevent some events */\r\n public static DragMovementThreshold = 10; // in pixels\r\n /** Time in milliseconds to wait to raise long press events if button is still pressed */\r\n public static LongPressDelay = 500; // in milliseconds\r\n /** Time in milliseconds with two consecutive clicks will be considered as a double click */\r\n public static DoubleClickDelay = 300; // in milliseconds\r\n /**\r\n * This flag will modify the behavior so that, when true, a click will happen if and only if\r\n * another click DOES NOT happen within the DoubleClickDelay time frame. If another click does\r\n * happen within that time frame, the first click will not fire an event and and a double click will occur.\r\n */\r\n public static ExclusiveDoubleClickMode = false;\r\n\r\n /** This is a defensive check to not allow control attachment prior to an already active one. If already attached, previous control is unattached before attaching the new one. */\r\n private _alreadyAttached = false;\r\n private _alreadyAttachedTo: Nullable<HTMLElement>;\r\n\r\n // Pointers\r\n private _onPointerMove: (evt: IMouseEvent) => void;\r\n private _onPointerDown: (evt: IPointerEvent) => void;\r\n private _onPointerUp: (evt: IPointerEvent) => void;\r\n\r\n private _initClickEvent: (\r\n obs1: Observable<PointerInfoPre>,\r\n obs2: Observable<PointerInfo>,\r\n evt: IPointerEvent,\r\n cb: (clickInfo: _ClickInfo, pickResult: Nullable<PickingInfo>) => void\r\n ) => void;\r\n private _initActionManager: (act: Nullable<AbstractActionManager>, clickInfo: _ClickInfo) => Nullable<AbstractActionManager>;\r\n private _delayedSimpleClick: (btn: number, clickInfo: _ClickInfo, cb: (clickInfo: _ClickInfo, pickResult: Nullable<PickingInfo>) => void) => void;\r\n private _meshPickProceed = false;\r\n\r\n private _previousButtonPressed: number;\r\n private _currentPickResult: Nullable<PickingInfo> = null;\r\n private _previousPickResult: Nullable<PickingInfo> = null;\r\n\r\n private _activePointerIds: Array<number> = new Array<number>();\r\n /** Tracks the count of used slots in _activePointerIds for perf */\r\n private _activePointerIdsCount: number = 0;\r\n\r\n private _doubleClickOccured = false;\r\n private _isSwiping: boolean = false;\r\n private _swipeButtonPressed: number = -1;\r\n private _skipPointerTap: boolean = false;\r\n private _isMultiTouchGesture: boolean = false;\r\n\r\n private _pointerOverMesh: Nullable<AbstractMesh>;\r\n\r\n private _pickedDownMesh: Nullable<AbstractMesh>;\r\n private _pickedUpMesh: Nullable<AbstractMesh>;\r\n\r\n private _pointerX: number = 0;\r\n private _pointerY: number = 0;\r\n private _unTranslatedPointerX: number;\r\n private _unTranslatedPointerY: number;\r\n private _startingPointerPosition = new Vector2(0, 0);\r\n private _previousStartingPointerPosition = new Vector2(0, 0);\r\n private _startingPointerTime = 0;\r\n private _previousStartingPointerTime = 0;\r\n private _pointerCaptures: { [pointerId: number]: boolean } = {};\r\n private _meshUnderPointerId: { [pointerId: number]: Nullable<AbstractMesh> } = {};\r\n private _movePointerInfo: Nullable<PointerInfo> = null;\r\n private _cameraObserverCount = 0;\r\n private _delayedClicks: Array<Nullable<_IClickEvent>> = [null, null, null, null, null];\r\n\r\n // Keyboard\r\n private _onKeyDown: (evt: IKeyboardEvent) => void;\r\n private _onKeyUp: (evt: IKeyboardEvent) => void;\r\n\r\n private _scene: Scene;\r\n private _deviceSourceManager: Nullable<DeviceSourceManager> = null;\r\n\r\n // origin MouseEvent\r\n _originMouseEvent: IMouseEvent;\r\n /**\r\n * Creates a new InputManager\r\n * @param scene - defines the hosting scene\r\n */\r\n constructor(scene?: Scene) {\r\n this._scene = scene || <Scene>EngineStore.LastCreatedScene;\r\n if (!this._scene) {\r\n return;\r\n }\r\n }\r\n\r\n /**\r\n * Gets the mesh that is currently under the pointer\r\n * @returns Mesh that the pointer is pointer is hovering over\r\n */\r\n public get meshUnderPointer(): Nullable<AbstractMesh> {\r\n if (this._movePointerInfo) {\r\n // Because _pointerOverMesh is populated as part of _pickMove, we need to force a pick to update it.\r\n // Calling _pickMove calls _setCursorAndPointerOverMesh which calls setPointerOverMesh\r\n this._movePointerInfo._generatePickInfo();\r\n // Once we have what we need, we can clear _movePointerInfo because we don't need it anymore\r\n this._movePointerInfo = null;\r\n }\r\n return this._pointerOverMesh;\r\n }\r\n\r\n /**\r\n * When using more than one pointer (for example in XR) you can get the mesh under the specific pointer\r\n * @param pointerId - the pointer id to use\r\n * @returns The mesh under this pointer id or null if not found\r\n */\r\n public getMeshUnderPointerByPointerId(pointerId: number): Nullable<AbstractMesh> {\r\n return this._meshUnderPointerId[pointerId] || null;\r\n }\r\n\r\n /**\r\n * Gets the pointer coordinates in 2D without any translation (ie. straight out of the pointer event)\r\n * @returns Vector with X/Y values directly from pointer event\r\n */\r\n public get unTranslatedPointer(): Vector2 {\r\n return new Vector2(this._unTranslatedPointerX, this._unTranslatedPointerY);\r\n }\r\n\r\n /**\r\n * Gets or sets the current on-screen X position of the pointer\r\n * @returns Translated X with respect to screen\r\n */\r\n public get pointerX(): number {\r\n return this._pointerX;\r\n }\r\n\r\n public set pointerX(value: number) {\r\n this._pointerX = value;\r\n }\r\n\r\n /**\r\n * Gets or sets the current on-screen Y position of the pointer\r\n * @returns Translated Y with respect to screen\r\n */\r\n public get pointerY(): number {\r\n return this._pointerY;\r\n }\r\n\r\n public set pointerY(value: number) {\r\n this._pointerY = value;\r\n }\r\n\r\n private _updatePointerPosition(evt: IPointerEvent): void {\r\n const canvasRect = this._scene.getEngine().getInputElementClientRect();\r\n\r\n if (!canvasRect) {\r\n return;\r\n }\r\n\r\n this._pointerX = evt.clientX - canvasRect.left;\r\n this._pointerY = evt.clientY - canvasRect.top;\r\n\r\n this._unTranslatedPointerX = this._pointerX;\r\n this._unTranslatedPointerY = this._pointerY;\r\n }\r\n\r\n private _processPointerMove(pickResult: Nullable<PickingInfo>, evt: IPointerEvent) {\r\n const scene = this._scene;\r\n const engine = scene.getEngine();\r\n const canvas = engine.getInputElement();\r\n\r\n if (canvas) {\r\n canvas.tabIndex = engine.canvasTabIndex;\r\n\r\n // Restore pointer\r\n if (!scene.doNotHandleCursors) {\r\n canvas.style.cursor = scene.defaultCursor;\r\n }\r\n }\r\n\r\n this._setCursorAndPointerOverMesh(pickResult, evt, scene);\r\n\r\n for (const step of scene._pointerMoveStage) {\r\n // If _pointerMoveState is defined, we have an active spriteManager and can't use Lazy Picking\r\n // Therefore, we need to force a pick to update the pickResult\r\n pickResult = pickResult || this._pickMove(evt);\r\n const isMeshPicked = pickResult?.pickedMesh ? true : false;\r\n pickResult = step.action(this._unTranslatedPointerX, this._unTranslatedPointerY, pickResult, isMeshPicked, canvas);\r\n }\r\n\r\n const type = evt.inputIndex >= PointerInput.MouseWheelX && evt.inputIndex <= PointerInput.MouseWheelZ ? PointerEventTypes.POINTERWHEEL : PointerEventTypes.POINTERMOVE;\r\n\r\n if (scene.onPointerMove) {\r\n // Because of lazy picking, we need to force a pick to update the pickResult\r\n pickResult = pickResult || this._pickMove(evt);\r\n scene.onPointerMove(evt, pickResult, type);\r\n }\r\n\r\n let pointerInfo: PointerInfo;\r\n if (pickResult) {\r\n pointerInfo = new PointerInfo(type, evt, pickResult);\r\n this._setRayOnPointerInfo(pickResult, evt);\r\n } else {\r\n pointerInfo = new PointerInfo(type, evt, null, this);\r\n this._movePointerInfo = pointerInfo;\r\n }\r\n\r\n if (scene.onPointerObservable.hasObservers()) {\r\n scene.onPointerObservable.notifyObservers(pointerInfo, type);\r\n }\r\n }\r\n\r\n // Pointers handling\r\n /** @internal */\r\n public _setRayOnPointerInfo(pickInfo: Nullable<PickingInfo>, event: IMouseEvent) {\r\n const scene = this._scene;\r\n if (pickInfo && _ImportHelper._IsPickingAvailable) {\r\n if (!pickInfo.ray) {\r\n pickInfo.ray = scene.createPickingRay(event.offsetX, event.offsetY, Matrix.Identity(), scene.activeCamera);\r\n }\r\n }\r\n }\r\n\r\n /** @internal */\r\n public _addCameraPointerObserver(observer: (p: PointerInfo, s: EventState) => void, mask?: number): Nullable<Observer<PointerInfo>> {\r\n this._cameraObserverCount++;\r\n return this._scene.onPointerObservable.add(observer, mask);\r\n }\r\n\r\n /** @internal */\r\n public _removeCameraPointerObserver(observer: Observer<PointerInfo>): boolean {\r\n this._cameraObserverCount--;\r\n return this._scene.onPointerObservable.remove(observer);\r\n }\r\n\r\n private _checkForPicking(): boolean {\r\n return !!(this._scene.onPointerObservable.observers.length > this._cameraObserverCount || this._scene.onPointerPick);\r\n }\r\n\r\n private _checkPrePointerObservable(pickResult: Nullable<PickingInfo>, evt: IPointerEvent, type: number) {\r\n const scene = this._scene;\r\n const pi = new PointerInfoPre(type, evt, this._unTranslatedPointerX, this._unTranslatedPointerY);\r\n if (pickResult) {\r\n pi.originalPickingInfo = pickResult;\r\n pi.ray = pickResult.ray;\r\n if (evt.pointerType === \"xr-near\" && pickResult.originMesh) {\r\n pi.nearInteractionPickingInfo = pickResult;\r\n }\r\n }\r\n\r\n scene.onPrePointerObservable.notifyObservers(pi, type);\r\n if (pi.skipOnPointerObservable) {\r\n return true;\r\n } else {\r\n return false;\r\n }\r\n }\r\n\r\n /** @internal */\r\n public _pickMove(evt: IPointerEvent): PickingInfo {\r\n const scene = this._scene;\r\n const pickResult = scene.pick(\r\n this._unTranslatedPointerX,\r\n this._unTranslatedPointerY,\r\n scene.pointerMovePredicate,\r\n scene.pointerMoveFastCheck,\r\n scene.cameraToUseForPointers,\r\n scene.pointerMoveTrianglePredicate\r\n );\r\n\r\n this._setCursorAndPointerOverMesh(pickResult, evt, scene);\r\n\r\n return pickResult;\r\n }\r\n\r\n private _setCursorAndPointerOverMesh(pickResult: Nullable<PickingInfo>, evt: IPointerEvent, scene: Scene) {\r\n const engine = scene.getEngine();\r\n const canvas = engine.getInputElement();\r\n\r\n if (pickResult?.pickedMesh) {\r\n this.setPointerOverMesh(pickResult.pickedMesh, evt.pointerId, pickResult, evt);\r\n\r\n if (!scene.doNotHandleCursors && canvas && this._pointerOverMesh) {\r\n const actionManager = this._pointerOverMesh._getActionManagerForTrigger();\r\n if (actionManager && actionManager.hasPointerTriggers) {\r\n canvas.style.cursor = actionManager.hoverCursor || scene.hoverCursor;\r\n }\r\n }\r\n } else {\r\n this.setPointerOverMesh(null, evt.pointerId, pickResult, evt);\r\n }\r\n }\r\n\r\n /**\r\n * Use this method to simulate a pointer move on a mesh\r\n * The pickResult parameter can be obtained from a scene.pick or scene.pickWithRay\r\n * @param pickResult - pickingInfo of the object wished to simulate pointer event on\r\n * @param pointerEventInit - pointer event state to be used when simulating the pointer event (eg. pointer id for multitouch)\r\n */\r\n public simulatePointerMove(pickResult: PickingInfo, pointerEventInit?: PointerEventInit): void {\r\n const evt = new PointerEvent(\"pointermove\", pointerEventInit);\r\n evt.inputIndex = PointerInput.Move;\r\n\r\n if (this._checkPrePointerObservable(pickResult, evt, PointerEventTypes.POINTERMOVE)) {\r\n return;\r\n }\r\n this._processPointerMove(pickResult, evt);\r\n }\r\n\r\n /**\r\n * Use this method to simulate a pointer down on a mesh\r\n * The pickResult parameter can be obtained from a scene.pick or scene.pickWithRay\r\n * @param pickResult - pickingInfo of the object wished to simulate pointer event on\r\n * @param pointerEventInit - pointer event state to be used when simulating the pointer event (eg. pointer id for multitouch)\r\n */\r\n public simulatePointerDown(pickResult: PickingInfo, pointerEventInit?: PointerEventInit): void {\r\n const evt = new PointerEvent(\"pointerdown\", pointerEventInit);\r\n evt.inputIndex = evt.button + 2;\r\n\r\n if (this._checkPrePointerObservable(pickResult, evt, PointerEventTypes.POINTERDOWN)) {\r\n return;\r\n }\r\n\r\n this._processPointerDown(pickResult, evt);\r\n }\r\n\r\n private _processPointerDown(pickResult: Nullable<PickingInfo>, evt: IPointerEvent): void {\r\n const scene = this._scene;\r\n if (pickResult?.pickedMesh) {\r\n this._pickedDownMesh = pickResult.pickedMesh;\r\n const actionManager = pickResult.pickedMesh._getActionManagerForTrigger();\r\n if (actionManager) {\r\n if (actionManager.hasPickTriggers) {\r\n actionManager.processTrigger(\r\n Constants.ACTION_OnPickDownTrigger,\r\n new ActionEvent(pickResult.pickedMesh, scene.pointerX, scene.pointerY, pickResult.pickedMesh, evt, pickResult)\r\n );\r\n switch (evt.button) {\r\n case 0:\r\n actionManager.processTrigger(\r\n Constants.ACTION_OnLeftPickTrigger,\r\n new ActionEvent(pickResult.pickedMesh, scene.pointerX, scene.pointerY, pickResult.pickedMesh, evt, pickResult)\r\n );\r\n break;\r\n case 1:\r\n actionManager.processTrigger(\r\n Constants.ACTION_OnCenterPickTrigger,\r\n new ActionEvent(pickResult.pickedMesh, scene.pointerX, scene.pointerY, pickResult.pickedMesh, evt, pickResult)\r\n );\r\n break;\r\n case 2:\r\n actionManager.processTrigger(\r\n Constants.ACTION_OnRightPickTrigger,\r\n new ActionEvent(pickResult.pickedMesh, scene.pointerX, scene.pointerY, pickResult.pickedMesh, evt, pickResult)\r\n );\r\n break;\r\n }\r\n }\r\n\r\n if (actionManager.hasSpecificTrigger(Constants.ACTION_OnLongPressTrigger)) {\r\n window.setTimeout(() => {\r\n const pickResult = scene.pick(\r\n this._unTranslatedPointerX,\r\n this._unTranslatedPointerY,\r\n (mesh: AbstractMesh): boolean =>\r\n <boolean>(\r\n (mesh.isPickable &&\r\n mesh.isVisible &&\r\n mesh.isReady() &&\r\n mesh.actionManager &&\r\n mesh.actionManager.hasSpecificTrigger(Constants.ACTION_OnLongPressTrigger) &&\r\n mesh === this._pickedDownMesh)\r\n ),\r\n false,\r\n scene.cameraToUseForPointers\r\n );\r\n\r\n if (pickResult?.pickedMesh && actionManager) {\r\n if (this._activePointerIdsCount !== 0 && Date.now() - this._startingPointerTime > InputManager.LongPressDelay && !this._isPointerSwiping()) {\r\n this._startingPointerTime = 0;\r\n actionManager.processTrigger(Constants.ACTION_OnLongPressTrigger, ActionEvent.CreateNew(pickResult.pickedMesh, evt));\r\n }\r\n }\r\n }, InputManager.LongPressDelay);\r\n }\r\n }\r\n } else {\r\n for (const step of scene._pointerDownStage) {\r\n pickResult = step.action(this._unTranslatedPointerX, this._unTranslatedPointerY, pickResult, evt, false);\r\n }\r\n }\r\n\r\n let pointerInfo: PointerInfo;\r\n const type = PointerEventTypes.POINTERDOWN;\r\n\r\n if (pickResult) {\r\n if (scene.onPointerDown) {\r\n scene.onPointerDown(evt, pickResult, type);\r\n }\r\n\r\n pointerInfo = new PointerInfo(type, evt, pickResult);\r\n this._setRayOnPointerInfo(pickResult, evt);\r\n } else {\r\n pointerInfo = new PointerInfo(type, evt, null, this);\r\n }\r\n\r\n if (scene.onPointerObservable.hasObservers()) {\r\n scene.onPointerObservable.notifyObservers(pointerInfo, type);\r\n }\r\n }\r\n\r\n /**\r\n * @internal\r\n * @internals Boolean if delta for pointer exceeds drag movement threshold\r\n */\r\n public _isPointerSwiping(): boolean {\r\n return this._isSwiping;\r\n }\r\n\r\n /**\r\n * Use this method to simulate a pointer up on a mesh\r\n * The pickResult parameter can be obtained from a scene.pick or scene.pickWithRay\r\n * @param pickResult - pickingInfo of the object wished to simulate pointer event on\r\n * @param pointerEventInit - pointer event state to be used when simulating the pointer event (eg. pointer id for multitouch)\r\n * @param doubleTap - indicates that the pointer up event should be considered as part of a double click (false by default)\r\n */\r\n public simulatePointerUp(pickResult: PickingInfo, pointerEventInit?: PointerEventInit, doubleTap?: boolean): void {\r\n const evt = new PointerEvent(\"pointerup\", pointerEventInit);\r\n evt.inputIndex = PointerInput.Move;\r\n const clickInfo = new _ClickInfo();\r\n\r\n if (doubleTap) {\r\n clickInfo.doubleClick = true;\r\n } else {\r\n clickInfo.singleClick = true;\r\n }\r\n\r\n if (this._checkPrePointerObservable(pickResult, evt, PointerEventTypes.POINTERUP)) {\r\n return;\r\n }\r\n\r\n this._processPointerUp(pickResult, evt, clickInfo);\r\n }\r\n\r\n private _processPointerUp(pickResult: Nullable<PickingInfo>, evt: IPointerEvent, clickInfo: _ClickInfo): void {\r\n const scene = this._scene;\r\n if (pickResult?.pickedMesh) {\r\n this._pickedUpMesh = pickResult.pickedMesh;\r\n if (this._pickedDownMesh === this._pickedUpMesh) {\r\n if (scene.onPointerPick) {\r\n scene.onPointerPick(evt, pickResult);\r\n }\r\n if (clickInfo.singleClick && !clickInfo.ignore && scene.onPointerObservable.observers.length > this._cameraObserverCount) {\r\n const type = PointerEventTypes.POINTERPICK;\r\n const pi = new PointerInfo(type, evt, pickResult);\r\n this._setRayOnPointerInfo(pickResult, evt);\r\n scene.onPointerObservable.notifyObservers(pi, type);\r\n }\r\n }\r\n const actionManager = pickResult.pickedMesh._getActionManagerForTrigger();\r\n if (actionManager && !clickInfo.ignore) {\r\n actionManager.processTrigger(Constants.ACTION_OnPickUpTrigger, ActionEvent.CreateNew(pickResult.pickedMesh, evt, pickResult));\r\n\r\n if (!clickInfo.hasSwiped && clickInfo.singleClick) {\r\n actionManager.processTrigger(Constants.ACTION_OnPickTrigger, ActionEvent.CreateNew(pickResult.pickedMesh, evt, pickResult));\r\n }\r\n\r\n const doubleClickActionManager = pickResult.pickedMesh._getActionManagerForTrigger(Constants.ACTION_OnDoublePickTrigger);\r\n if (clickInfo.doubleClick && doubleClickActionManager) {\r\n doubleClickActionManager.processTrigger(Constants.ACTION_OnDoublePickTrigger, ActionEvent.CreateNew(pickResult.pickedMesh, evt, pickResult));\r\n }\r\n }\r\n } else {\r\n if (!clickInfo.ignore) {\r\n for (const step of scene._pointerUpStage) {\r\n pickResult = step.action(this._unTranslatedPointerX, this._unTranslatedPointerY, pickResult, evt, clickInfo.doubleClick);\r\n }\r\n }\r\n }\r\n\r\n if (this._pickedDownMesh && this._pickedDownMesh !== this._pickedUpMesh) {\r\n const pickedDownActionManager = this._pickedDownMesh._getActionManagerForTrigger(Constants.ACTION_OnPickOutTrigger);\r\n if (pickedDownActionManager) {\r\n pickedDownActionManager.processTrigger(Constants.ACTION_OnPickOutTrigger, ActionEvent.CreateNew(this._pickedDownMesh, evt));\r\n }\r\n }\r\n\r\n if (!clickInfo.ignore) {\r\n const pi = new PointerInfo(PointerEventTypes.POINTERUP, evt, pickResult);\r\n // Set ray on picking info. Note that this info will also be reused for the tap notification.\r\n this._setRayOnPointerInfo(pickResult, evt);\r\n scene.onPointerObservable.notifyObservers(pi, PointerEventTypes.POINTERUP);\r\n\r\n if (scene.onPointerUp) {\r\n scene.onPointerUp(evt, pickResult, PointerEventTypes.POINTERUP);\r\n }\r\n\r\n if (!clickInfo.hasSwiped && !this._skipPointerTap && !this._isMultiTouchGesture) {\r\n let type = 0;\r\n if (clickInfo.singleClick) {\r\n type = PointerEventTypes.POINTERTAP;\r\n } else if (clickInfo.doubleClick) {\r\n type = PointerEventTypes.POINTERDOUBLETAP;\r\n }\r\n\r\n if (type) {\r\n const pi = new PointerInfo(type, evt, pickResult);\r\n if (scene.onPointerObservable.hasObservers() && scene.onPointerObservable.hasSpecificMask(type)) {\r\n scene.onPointerObservable.notifyObservers(pi, type);\r\n }\r\n }\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * Gets a boolean indicating if the current pointer event is captured (meaning that the scene has already handled the pointer down)\r\n * @param pointerId - defines the pointer id to use in a multi-touch scenario (0 by default)\r\n * @returns true if the pointer was captured\r\n */\r\n public isPointerCaptured(pointerId = 0): boolean {\r\n return this._pointerCaptures[pointerId];\r\n }\r\n\r\n /**\r\n * Attach events to the canvas (To handle actionManagers triggers and raise onPointerMove, onPointerDown and onPointerUp\r\n * @param attachUp - defines if you want to attach events to pointerup\r\n * @param attachDown - defines if you want to attach events to pointerdown\r\n * @param attachMove - defines if you want to attach events to pointermove\r\n * @param elementToAttachTo - defines the target DOM element to attach to (will use the canvas by default)\r\n */\r\n public attachControl(attachUp = true, attachDown = true, attachMove = true, elementToAttachTo: Nullable<HTMLElement> = null): void {\r\n const scene = this._scene;\r\n const engine = scene.getEngine();\r\n\r\n if (!elementToAttachTo) {\r\n elementToAttachTo = engine.getInputElement();\r\n }\r\n\r\n if (this._alreadyAttached) {\r\n this.detachControl();\r\n }\r\n\r\n if (elementToAttachTo) {\r\n this._alreadyAttachedTo = elementToAttachTo;\r\n }\r\n this._deviceSourceManager = new DeviceSourceManager(engine);\r\n\r\n // Because this is only called from _initClickEvent, which is called in _onPointerUp, we'll use the pointerUpPredicate for the pick call\r\n this._initActionManager = (act: Nullable<AbstractActionManager>): Nullable<AbstractActionManager> => {\r\n if (!this._meshPickProceed) {\r\n const pickResult =\r\n scene.skipPointerUpPicking || (scene._registeredActions === 0 && !this._checkForPicking() && !scene.onPointerUp)\r\n ? null\r\n : scene.pick(\r\n this._unTranslatedPointerX,\r\n this._unTranslatedPointerY,\r\n scene.pointerUpPredicate,\r\n scene.pointerUpFastCheck,\r\n scene.cameraToUseForPointers,\r\n scene.pointerUpTrianglePredicate\r\n );\r\n this._currentPickResult = pickResult;\r\n if (pickResult) {\r\n act = pickResult.hit && pickResult.pickedMesh ? pickResult.pickedMesh._getActionManagerForTrigger() : null;\r\n }\r\n this._meshPickProceed = true;\r\n }\r\n return act;\r\n };\r\n\r\n this._delayedSimpleClick = (btn: number, clickInfo: _ClickInfo, cb: (clickInfo: _ClickInfo, pickResult: Nullable<PickingInfo>) => void) => {\r\n // double click delay is over and that no double click has been raised since, or the 2 consecutive keys pressed are different\r\n if ((Date.now() - this._previousStartingPointerTime > InputManager.DoubleClickDelay && !this._doubleClickOccured) || btn !== this._previousButtonPressed) {\r\n this._doubleClickOccured = false;\r\n clickInfo.singleClick = true;\r\n clickInfo.ignore = false;\r\n\r\n // If we have a delayed click, we need to resolve the TAP event\r\n if (this._delayedClicks[btn]) {\r\n const evt = this._delayedClicks[btn].evt;\r\n const type = PointerEventTypes.POINTERTAP;\r\n const pi = new PointerInfo(type, evt, this._currentPickResult);\r\n if (scene.onPointerObservable.hasObservers() && scene.onPointerObservable.hasSpecificMask(type)) {\r\n scene.onPointerObservable.notifyObservers(pi, type);\r\n }\r\n\r\n // Clear the delayed click\r\n this._delayedClicks[btn] = null;\r\n }\r\n }\r\n };\r\n\r\n this._initClickEvent = (\r\n obs1: Observable<PointerInfoPre>,\r\n obs2: Observable<PointerInfo>,\r\n evt: IPointerEvent,\r\n cb: (clickInfo: _ClickInfo, pickResult: Nullable<PickingInfo>) => void\r\n ): void => {\r\n const clickInfo = new _ClickInfo();\r\n this._currentPickResult = null;\r\n let act: Nullable<AbstractActionManager> = null;\r\n\r\n let checkPicking =\r\n obs1.hasSpecificMask(PointerEventTypes.POINTERPICK) ||\r\n obs2.hasSpecificMask(PointerEventTypes.POINTERPICK) ||\r\n obs1.hasSpecificMask(PointerEventTypes.POINTERTAP) ||\r\n obs2.hasSpecificMask(PointerEventTypes.POINTERTAP) ||\r\n obs1.hasSpecificMask(PointerEventTypes.POINTERDOUBLETAP) ||\r\n obs2.hasSpecificMask(PointerEventTypes.POINTERDOUBLETAP);\r\n if (!checkPicking && AbstractActionManager) {\r\n act = this._initActionManager(act, clickInfo);\r\n if (act) {\r\n checkPicking = act.hasPickTriggers;\r\n }\r\n }\r\n\r\n let needToIgnoreNext = false;\r\n\r\n // Never pick if this is a multi-touch gesture (e.g. pinch)\r\n checkPicking = checkPicking && !this._isMultiTouchGesture;\r\n\r\n if (checkPicking) {\r\n const btn = evt.button;\r\n clickInfo.hasSwiped = this._isPointerSwiping();\r\n\r\n if (!clickInfo.hasSwiped) {\r\n let checkSingleClickImmediately = !InputManager.ExclusiveDoubleClickMode;\r\n\r\n if (!checkSingleClickImmediately) {\r\n checkSingleClickImmediately = !obs1.hasSpecificMask(PointerEventTypes.POINTERDOUBLETAP) && !obs2.hasSpecificMask(PointerEventTypes.POINTERDOUBLETAP);\r\n\r\n if (checkSingleClickImmediately && !AbstractActionManager.HasSpecificTrigger(Constants.ACTION_OnDoublePickTrigger)) {\r\n act = this._initActionManager(act, clickInfo);\r\n if (act) {\r\n checkSingleClickImmediately = !act.hasSpecificTrigger(Constants.ACTION_OnDoublePickTrigger);\r\n }\r\n }\r\n }\r\n\r\n if (checkSingleClickImmediately) {\r\n // single click detected if double click delay is over or two different successive keys pressed without exclusive double click or no double click required\r\n if (Date.now() - this._previousStartingPointerTime > InputManager.DoubleClickDelay || btn !== this._previousButtonPressed) {\r\n clickInfo.singleClick = true;\r\n cb(clickInfo, this._currentPickResult);\r\n needToIgnoreNext = true;\r\n }\r\n }\r\n // at least one double click is required to be check and exclusive double click is enabled\r\n else {\r\n // Queue up a delayed click, just in case this isn't a double click\r\n // It should be noted that while this delayed event happens\r\n // because of user input, it shouldn't be considered as a direct,\r\n // timing-dependent result of that input. It's meant to just fire the TAP event\r\n const delayedClick = {\r\n evt: evt,\r\n clickInfo: clickInfo,\r\n timeoutId: window.setTimeout(this._delayedSimpleClick.bind(this, btn, clickInfo, cb), InputManager.DoubleClickDelay),\r\n };\r\n\r\n this._delayedClicks[btn] = delayedClick;\r\n }\r\n\r\n let checkDoubleClick = obs1.hasSpecificMask(PointerEventTypes.POINTERDOUBLETAP) || obs2.hasSpecificMask(PointerEventTypes.POINTERDOUBLETAP);\r\n if (!checkDoubleClick && AbstractActionManager.HasSpecificTrigger(Constants.ACTION_OnDoublePickTrigger)) {\r\n act = this._initActionManager(act, clickInfo);\r\n if (act) {\r\n checkDoubleClick = act.hasSpecificTrigger(Constants.ACTION_OnDoublePickTrigger);\r\n }\r\n }\r\n if (checkDoubleClick) {\r\n // two successive keys pressed are equal, double click delay is not over and double click has not just occurred\r\n if (btn === this._previousButtonPressed && Date.now() - this._previousStartingPointerTime < InputManager.DoubleClickDelay && !this._doubleClickOccured) {\r\n // pointer has not moved for 2 clicks, it's a double click\r\n if (!clickInfo.hasSwiped && !this._isPointerSwiping()) {\r\n this._previousStartingPointerTime = 0;\r\n this._doubleClickOccured = true;\r\n clickInfo.doubleClick = true;\r\n clickInfo.ignore = false;\r\n // If we have a pending click, we need to cancel it\r\n if (InputManager.ExclusiveDoubleClickMode && this._delayedClicks[btn]) {\r\n clearTimeout(this._delayedClicks[btn]?.timeoutId);\r\n this._delayedClicks[btn] = null;\r\n }\r\n\r\n cb(clickInfo, this._currentPickResult);\r\n }\r\n // if the two successive clicks are too far, it's just two simple clicks\r\n else {\r\n this._doubleClickOccured = false;\r\n this._previousStartingPointerTime = this._startingPointerTime;\r\n this._previousStartingPointerPosition.x = this._startingPointerPosition.x;\r\n this._previousStartingPointerPosition.y = this._startingPointerPosition.y;\r\n this._previousButtonPressed = btn;\r\n if (InputManager.ExclusiveDoubleClickMode) {\r\n // If we have a delayed click, we need to cancel it\r\n if (this._delayedClicks[btn]) {\r\n clearTimeout(this._delayedClicks[btn]?.timeoutId);\r\n this._delayedClicks[btn] = null;\r\n }\r\n cb(clickInfo, this._previousPickResult);\r\n } else {\r\n cb(clickInfo, this._currentPickResult);\r\n }\r\n }\r\n needToIgnoreNext = true;\r\n }\r\n // just the first click of the double has been raised\r\n else {\r\n this._doubleClickOccured = false;\r\n this._previousStartingPointerTime = this._startingPointerTime;\r\n this._previousStartingPointerPosition.x = this._startingPointerPosition.x;\r\n this._previousStartingPointerPosition.y = this._startingPointerPosition.y;\r\n this._previousButtonPressed = btn!;\r\n }\r\n }\r\n }\r\n }\r\n\r\n // Even if ExclusiveDoubleClickMode is true, we need to always handle\r\n // up events at time of execution, unless we're explicitly ignoring them.\r\n if (!needToIgnoreNext) {\r\n cb(clickInfo, this._currentPickResult);\r\n }\r\n };\r\n\r\n this._onPointerMove = (evt: IMouseEvent) => {\r\n this._updatePointerPosition(evt as IPointerEvent);\r\n\r\n // Check if pointer leaves DragMovementThreshold range to determine if swipe is occurring\r\n if (!this._isSwiping && this._swipeButtonPressed !== -1) {\r\n this._isSwiping =\r\n Math.abs(this._startingPointerPosition.x - this._pointerX) > InputManager.DragMovementThreshold ||\r\n Math.abs(this._startingPointerPosition.y - this._pointerY) > InputManager.DragMovementThreshold;\r\n }\r\n\r\n // Because there's a race condition between pointermove and pointerlockchange events, we need to\r\n // verify that the pointer is still locked after each pointermove event.\r\n if (engine.isPointerLock) {\r\n engine._verifyPointerLock();\r\n }\r\n\r\n // PreObservable support\r\n if (\r\n this._checkPrePointerObservable(\r\n null,\r\n evt as IPointerEvent,\r\n evt.inputIndex >= PointerInput.MouseWheelX && evt.inputIndex <= PointerInput.MouseWheelZ ? PointerEventTypes.POINTERWHEEL : PointerEventTypes.POINTERMOVE\r\n )\r\n ) {\r\n return;\r\n }\r\n\r\n if (!scene.cameraToUseForPointers && !scene.activeCamera) {\r\n return;\r\n }\r\n\r\n if (scene.skipPointerMovePicking) {\r\n this._processPointerMove(new PickingInfo(), evt as IPointerEvent);\r\n return;\r\n }\r\n\r\n if (!scene.pointerMovePredicate) {\r\n scene.pointerMovePredicate = (mesh: AbstractMesh): boolean =>\r\n mesh.isPickable &&\r\n mesh.isVisible &&\r\n mesh.isReady() &&\r\n mesh.isEnabled() &&\r\n (mesh.enablePointerMoveEvents || scene.constantlyUpdateMeshUnderPointer || mesh._getActionManagerForTrigger() !== null) &&\r\n (!scene.cameraToUseForPointers || (scene.cameraToUseForPointers.layerMask & mesh.layerMask) !== 0);\r\n }\r\n\r\n const pickResult = scene._registeredActions > 0 || scene.constantlyUpdateMeshUnderPointer ? this._pickMove(evt as IPointerEvent) : null;\r\n this._processPointerMove(pickResult, evt as IPointerEvent);\r\n };\r\n\r\n this._onPointerDown = (evt: IPointerEvent) => {\r\n const freeIndex = this._activePointerIds.indexOf(-1);\r\n if (freeIndex === -1) {\r\n this._activePointerIds.push(evt.pointerId);\r\n } else {\r\n this._activePointerIds[freeIndex] = evt.pointerId;\r\n }\r\n this._activePointerIdsCount++;\r\n this._pickedDownMesh = null;\r\n this._meshPickProceed = false;\r\n\r\n // If ExclusiveDoubleClickMode is true, we need to resolve any pending delayed clicks\r\n if (InputManager.ExclusiveDoubleClickMode) {\r\n for (let i = 0; i < this._delayedClicks.length; i++) {\r\n if (this._delayedClicks[i]) {\r\n // If the button that was pressed is the same as the one that was released,\r\n // just clear the timer. This will be resolved in the up event.\r\n if (evt.button === i) {\r\n clearTimeout(this._delayedClicks[i]?.timeoutId);\r\n } else {\r\n // Otherwise, we need to resolve the click\r\n const clickInfo = this._delayedClicks[i]!.clickInfo;\r\n this._doubleClickOccured = false;\r\n clickInfo.singleClick = true;\r\n clickInfo.ignore = false;\r\n\r\n const prevEvt = this._delayedClicks[i]!.evt;\r\n const type = PointerEventTypes.POINTERTAP;\r\n const pi = new PointerInfo(type, prevEvt, this._currentPickResult);\r\n if (scene.onPointerObservable.hasObservers() && scene.onPointerObservable.hasSpecificMask(type)) {\r\n scene.onPointerObservable.notifyObservers(pi, type);\r\n }\r\n\r\n // Clear the delayed click\r\n this._delayedClicks[i] = null;\r\n }\r\n }\r\n }\r\n }\r\n\r\n this._updatePointerPosition(evt);\r\n\r\n if (this._swipeButtonPressed === -1) {\r\n this._swipeButtonPressed = evt.button;\r\n }\r\n\r\n if (scene.preventDefaultOnPointerDown && elementToAttachTo) {\r\n evt.preventDefault();\r\n elementToAttachTo.focus();\r\n }\r\n\r\n this._startingPointerPosition.x = this._pointerX;\r\n this._startingPointerPosition.y = this._pointerY;\r\n this._startingPointerTime = Date.now();\r\n\r\n // PreObservable support\r\n if (this._checkPrePointerObservable(null, evt, PointerEventTypes.POINTERDOWN)) {\r\n return;\r\n }\r\n\r\n if (!scene.cameraToUseForPointers && !scene.activeCamera) {\r\n return;\r\n }\r\n\r\n this._pointerCaptures[evt.pointerId] = true;\r\n\r\n if (!scene.pointerDownPredicate) {\r\n scene.pointerDownPredicate = (mesh: AbstractMesh): boolean => {\r\n return (\r\n mesh.isPickable &&\r\n mesh.isVisible &&\r\n mesh.isReady() &&\r\n mesh.isEnabled() &&\r\n (!scene.cameraToUseForPointers || (scene.cameraToUseForPointers.layerMask & mesh.layerMask) !== 0)\r\n );\r\n };\r\n }\r\n\r\n // Meshes\r\n this._pickedDownMesh = null;\r\n let pickResult;\r\n if (scene.skipPointerDownPicking || (scene._registeredActions === 0 && !this._checkForPicking() && !scene.onPointerDown)) {\r\n pickResult = new PickingInfo();\r\n } else {\r\n pickResult = scene.pick(\r\n this._unTranslatedPointerX,\r\n this._unTranslatedPointerY,\r\n scene.pointerDownPredicate,\r\n scene.pointerDownFastCheck,\r\n scene.cameraToUseForPointers,\r\n scene.pointerDownTrianglePredicate\r\n );\r\n }\r\n\r\n this._processPointerDown(pickResult, evt);\r\n };\r\n\r\n this._onPointerUp = (evt: IPointerEvent) => {\r\n const pointerIdIndex = this._activePointerIds.indexOf(evt.pointerId);\r\n if (pointerIdIndex === -1) {\r\n // We are attaching the pointer up to windows because of a bug in FF\r\n // If this pointerId is not paired with an _onPointerDown call, ignore it\r\n return;\r\n }\r\n\r\n this._activePointerIds[pointerIdIndex] = -1;\r\n this._activePointerIdsCount--;\r\n this._pickedUpMesh = null;\r\n this._meshPickProceed = false;\r\n\r\n this._updatePointerPosition(evt);\r\n\r\n if (scene.preventDefaultOnPointerUp && elementToAttachTo) {\r\n evt.preventDefault();\r\n elementToAttachTo.focus();\r\n }\r\n\r\n this._initClickEvent(scene.onPrePointerObservable, scene.onPointerObservable, evt, (clickInfo: _ClickInfo, pickResult: Nullable<PickingInfo>) => {\r\n // PreObservable support\r\n if (scene.onPrePointerObservable.hasObservers()) {\r\n this._skipPointerTap = false;\r\n if (!clickInfo.ignore) {\r\n if (this._checkPrePointerObservable(null, evt, PointerEventTypes.POINTERUP)) {\r\n // If we're skipping the next observable, we need to reset the swipe state before returning\r\n if (this._swipeButtonPressed === evt.button) {\r\n this._isSwiping = false;\r\n this._swipeButtonPressed = -1;\r\n }\r\n\r\n // If we're going to skip the POINTERUP, we need to reset the pointer capture\r\n if (evt.buttons === 0) {\r\n this._pointerCaptures[evt.pointerId] = false;\r\n }\r\n\r\n return;\r\n }\r\n if (!clickInfo.hasSwiped) {\r\n if (clickInfo.singleClick && scene.onPrePointerObservable.hasSpecificMask(PointerEventTypes.POINTERTAP)) {\r\n if (this._checkPrePointerObservable(null, evt, PointerEventTypes.POINTERTAP)) {\r\n this._skipPointerTap = true;\r\n }\r\n }\r\n if (clickInfo.doubleClick && scene.onPrePointerObservable.hasSpecificMask(PointerEventTypes.POINTERDOUBLETAP)) {\r\n if (this._checkPrePointerObservable(null, evt, PointerEventTypes.POINTERDOUBLETAP)) {\r\n this._skipPointerTap = true;\r\n }\r\n }\r\n }\r\n }\r\n }\r\n\r\n // There should be a pointer captured at this point so if there isn't we should reset and return\r\n if (!this._pointerCaptures[evt.pointerId]) {\r\n if (this._swipeButtonPressed === evt.button) {\r\n this._isSwiping = false;\r\n this._swipeButtonPressed = -1;\r\n }\r\n return;\r\n }\r\n\r\n // Only release capture if all buttons are released\r\n if (evt.buttons === 0) {\r\n this._pointerCaptures[evt.pointerId] = false;\r\n }\r\n if (!scene.cameraToUseForPointers && !scene.activeCamera) {\r\n return;\r\n }\r\n\r\n if (!scene.pointerUpPredicate) {\r\n scene.pointerUpPredicate = (mesh: AbstractMesh): boolean => {\r\n return (\r\n mesh.isPickable &&\r\n mesh.isVisible &&\r\n mesh.isReady() &&\r\n mesh.isEnabled() &&\r\n (!scene.cameraToUseForPointers || (scene.cameraToUseForPointers.layerMask & mesh.layerMask) !== 0)\r\n );\r\n };\r\n }\r\n\r\n // Meshes\r\n if (!this._meshPickProceed && ((AbstractActionManager && AbstractActionManager.HasTriggers) || this._checkForPicking() || scene.onPointerUp)) {\r\n this._initActionManager(null, clickInfo);\r\n }\r\n if (!pickResult) {\r\n pickResult = this._currentPickResult;\r\n }\r\n\r\n this._processPointerUp(pickResult, evt, clickInfo);\r\n\r\n this._previousPickResult = this._currentPickResult;\r\n\r\n if (this._swipeButtonPressed === evt.button) {\r\n this._isSwiping = false;\r\n this._swipeButtonPressed = -1;\r\n }\r\n });\r\n };\r\n\r\n this._onKeyDown = (evt: IKeyboardEvent) => {\r\n const type = KeyboardEventTypes.KEYDOWN;\r\n if (scene.onPreKeyboardObservable.hasObservers()) {\r\n const pi = new KeyboardInfoPre(type, evt);\r\n scene.onPreKeyboardObservable.notifyObservers(pi, type);\r\n if (pi.skipOnKeyboardObservable) {\r\n return;\r\n }\r\n }\r\n\r\n if (scene.onKeyboardObservable.hasObservers()) {\r\n const pi = new KeyboardInfo(type, evt);\r\n scene.onKeyboardObservable.notifyObservers(pi, type);\r\n }\r\n\r\n if (scene.actionManager) {\r\n scene.actionManager.processTrigger(Constants.ACTION_OnKeyDownTrigger, ActionEvent.CreateNewFromScene(scene, evt));\r\n }\r\n };\r\n\r\n this._onKeyUp = (evt: IKeyboardEvent) => {\r\n const type = KeyboardEventTypes.KEYUP;\r\n if (scene.onPreKeyboardObservable.hasObservers()) {\r\n const pi = new KeyboardInfoPre(type, evt);\r\n scene.onPreKeyboardObservable.notifyObservers(pi, type);\r\n if (pi.skipOnKeyboardObservable) {\r\n return;\r\n }\r\n }\r\n\r\n if (scene.onKeyboardObservable.hasObservers()) {\r\n const pi = new KeyboardInfo(type, evt);\r\n scene.onKeyboardObservable.notifyObservers(pi, type);\r\n }\r\n\r\n if (scene.actionManager) {\r\n scene.actionManager.processTrigger(Constants.ACTION_OnKeyUpTrigger, ActionEvent.CreateNewFromScene(scene, evt));\r\n }\r\n };\r\n\r\n // If a device connects that we can handle, wire up the observable\r\n this._deviceSourceManager.onDeviceConnectedObservable.add((deviceSource) => {\r\n if (deviceSource.deviceType === DeviceType.Mouse) {\r\n deviceSource.onInputChangedObservable.add((eventData) => {\r\n this._originMouseEvent = eventData;\r\n if (\r\n eventData.inputIndex === PointerInput.LeftClick ||\r\n eventData.inputIndex === PointerInput.MiddleClick ||\r\n eventData.inputIndex === PointerInput.RightClick ||\r\n eventData.inputIndex === PointerInput.BrowserBack ||\r\n eventData.inputIndex === PointerInput.BrowserForward\r\n ) {\r\n if (attachDown && deviceSource.getInput(eventData.inputIndex) === 1) {\r\n this._onPointerDown(eventData);\r\n } else if (attachUp && deviceSource.getInput(eventData.inputIndex) === 0) {\r\n this._onPointerUp(eventData);\r\n }\r\n } else if (attachMove) {\r\n if (eventData.inputIndex === PointerInput.Move) {\r\n this._onPointerMove(eventData);\r\n } else if (\r\n eventData.inputIndex === PointerInput.MouseWheelX ||\r\n eventData.inputIndex === PointerInput.MouseWheelY ||\r\n eventData.inputIndex === PointerInput.MouseWheelZ\r\n ) {\r\n this._onPointerMove(eventData);\r\n }\r\n }\r\n });\r\n } else if (deviceSource.deviceType === DeviceType.Touch) {\r\n deviceSource.onInputChangedObservable.add((eventData) => {\r\n if (eventData.inputIndex === PointerInput.LeftClick) {\r\n if (attachDown && deviceSource.getInput(eventData.inputIndex) === 1) {\r\n this._onPointerDown(eventData);\r\n if (this._activePointerIdsCount > 1) {\r\n this._isMultiTouchGesture = true;\r\n }\r\n } else if (attachUp && deviceSource.getInput(eventData.inputIndex) === 0) {\r\n this._onPointerUp(eventData);\r\n if (this._activePointerIdsCount === 0) {\r\n this._isMultiTouchGesture = false;\r\n }\r\n }\r\n }\r\n\r\n if (attachMove && eventData.inputIndex === PointerInput.Move) {\r\n this._onPointerMove(eventData);\r\n }\r\n });\r\n } else if (deviceSource.deviceType === DeviceType.Keyboard) {\r\n deviceSource.onInputChangedObservable.add((eventData) => {\r\n if (eventData.type === \"keydown\") {\r\n this._onKeyDown(eventData);\r\n } else if (eventData.type === \"keyup\") {\r\n this._onKeyUp(eventData);\r\n }\r\n });\r\n }\r\n });\r\n\r\n this._alreadyAttached = true;\r\n }\r\n\r\n /**\r\n * Detaches all event handlers\r\n */\r\n public detachControl() {\r\n if (this._alreadyAttached) {\r\n this._deviceSourceManager!.dispose();\r\n this._deviceSourceManager = null;\r\n\r\n // Cursor\r\n if (this._alreadyAttachedTo && !this._scene.doNotHandleCursors) {\r\n this._alreadyAttachedTo.style.cursor = this._scene.defaultCursor;\r\n }\r\n\r\n this._alreadyAttached = false;\r\n this._alreadyAttachedTo = null;\r\n }\r\n }\r\n\r\n /**\r\n * Set the value of meshUnderPointer for a given pointerId\r\n * @param mesh - defines the mesh to use\r\n * @param pointerId - optional pointer id when using more than one pointer. Defaults to 0\r\n * @param pickResult - optional pickingInfo data used to find mesh\r\n * @param evt - optional pointer event\r\n */\r\n public setPointerOverMesh(mesh: Nullable<AbstractMesh>, pointerId: number = 0, pickResult?: Nullable<PickingInfo>, evt?: IPointerEvent): void {\r\n if (this._meshUnderPointerId[pointerId] === mesh && (!mesh || !mesh._internalAbstractMeshDataInfo._pointerOverDisableMeshTesting)) {\r\n return;\r\n }\r\n\r\n const underPointerMesh = this._meshUnderPointerId[pointerId];\r\n\r\n let actionManager: Nullable<AbstractActionManager>;\r\n if (underPointerMesh) {\r\n actionManager = underPointerMesh._getActionManagerForTrigger(Constants.ACTION_OnPointerOutTrigger);\r\n if (actionManager) {\r\n actionManager.processTrigger(Constants.ACTION_OnPointerOutTrigger, new ActionEvent(underPointerMesh, this._pointerX, this._pointerY, mesh, evt, { pointerId }));\r\n }\r\n }\r\n\r\n if (mesh) {\r\n this._meshUnderPointerId[pointerId] = mesh;\r\n this._pointerOverMesh = mesh;\r\n\r\n actionManager = mesh._getActionManagerForTrigger(Constants.ACTION_OnPointerOverTrigger);\r\n if (actionManager) {\r\n actionManager.processTrigger(Constants.ACTION_OnPointerOverTrigger, new ActionEvent(mesh, this._pointerX, this._pointerY, mesh, evt, { pointerId, pickResult }));\r\n }\r\n } else {\r\n delete this._meshUnderPointerId[pointerId];\r\n this._pointerOverMesh = null;\r\n }\r\n // if we reached this point, meshUnderPointerId has been updated. We need to notify observers that are registered.\r\n if (this._scene.onMeshUnderPointerUpdatedObservable.hasObservers()) {\r\n this._scene.onMeshUnderPointerUpdatedObservable.notifyObservers({\r\n mesh,\r\n pointerId,\r\n });\r\n }\r\n }\r\n\r\n /**\r\n * Gets the mesh under the pointer\r\n * @returns a Mesh or null if no mesh is under the pointer\r\n */\r\n public getPointerOverMesh(): Nullable<AbstractMesh> {\r\n return this.meshUnderPointer;\r\n }\r\n\r\n /**\r\n * @param mesh - Mesh to invalidate\r\n * @internal\r\n */\r\n public _invalidateMesh(mesh: AbstractMesh) {\r\n if (this._pointerOverMesh === mesh) {\r\n this._pointerOverMesh = null;\r\n }\r\n if (this._pickedDownMesh === mesh) {\r\n this._pickedDownMesh = null;\r\n }\r\n if (this._pickedUpMesh === mesh) {\r\n this._pickedUpMesh = null;\r\n }\r\n for (const pointerId in this._meshUnderPointerId) {\r\n if (this._meshUnderPointerId[pointerId] === mesh) {\r\n delete this._meshUnderPointerId[pointerId];\r\n }\r\n }\r\n }\r\n}\r\n"]}
@@ -1,4 +1,4 @@
1
- import { Tools } from "../Misc/tools.js";
1
+ import { Tools } from "../Misc/tools.pure.js";
2
2
  import { PerfCounter } from "../Misc/perfCounter.js";
3
3
  /**
4
4
  * This class can be used to get instrumentation data from a Babylon engine