@babylonjs/core 5.0.0-alpha.61 → 5.0.0-alpha.65
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.
- package/Animations/animation.js +42 -2
- package/Animations/animation.js.map +1 -1
- package/Animations/animationGroup.d.ts +5 -1
- package/Animations/animationGroup.js +19 -1
- package/Animations/animationGroup.js.map +1 -1
- package/Audio/sound.js +15 -1
- package/Audio/sound.js.map +1 -1
- package/Behaviors/Cameras/autoRotationBehavior.d.ts +5 -0
- package/Behaviors/Cameras/autoRotationBehavior.js +7 -0
- package/Behaviors/Cameras/autoRotationBehavior.js.map +1 -1
- package/Behaviors/Meshes/followBehavior.js +1 -1
- package/Behaviors/Meshes/followBehavior.js.map +1 -1
- package/Behaviors/Meshes/handConstraintBehavior.js +16 -12
- package/Behaviors/Meshes/handConstraintBehavior.js.map +1 -1
- package/Cameras/VR/vrDeviceOrientationArcRotateCamera.js +1 -1
- package/Cameras/VR/vrDeviceOrientationArcRotateCamera.js.map +1 -1
- package/Cameras/VR/vrExperienceHelper.d.ts +1 -1
- package/Cameras/VR/vrExperienceHelper.js +1 -1
- package/Cameras/VR/vrExperienceHelper.js.map +1 -1
- package/Cameras/camera.js +2 -2
- package/Cameras/camera.js.map +1 -1
- package/DeviceInput/Implementations/{nativeDeviceInputWrapper.d.ts → nativeDeviceInputSystem.d.ts} +5 -21
- package/DeviceInput/Implementations/{nativeDeviceInputWrapper.js → nativeDeviceInputSystem.js} +19 -20
- package/DeviceInput/Implementations/nativeDeviceInputSystem.js.map +1 -0
- package/DeviceInput/Implementations/webDeviceInputSystem.d.ts +7 -20
- package/DeviceInput/Implementations/webDeviceInputSystem.js +79 -71
- package/DeviceInput/Implementations/webDeviceInputSystem.js.map +1 -1
- package/DeviceInput/InputDevices/deviceSourceManager.d.ts +3 -2
- package/DeviceInput/InputDevices/deviceSourceManager.js +5 -1
- package/DeviceInput/InputDevices/deviceSourceManager.js.map +1 -1
- package/DeviceInput/Interfaces/inputInterfaces.d.ts +6 -13
- package/DeviceInput/Interfaces/inputInterfaces.js.map +1 -1
- package/DeviceInput/deviceInputSystem.d.ts +49 -5
- package/DeviceInput/deviceInputSystem.js +62 -10
- package/DeviceInput/deviceInputSystem.js.map +1 -1
- package/DeviceInput/index.d.ts +1 -1
- package/DeviceInput/index.js +1 -1
- package/DeviceInput/index.js.map +1 -1
- package/Engines/Extensions/engine.dynamicTexture.d.ts +2 -1
- package/Engines/Extensions/engine.dynamicTexture.js +2 -1
- package/Engines/Extensions/engine.dynamicTexture.js.map +1 -1
- package/Engines/Extensions/engine.views.d.ts +1 -1
- package/Engines/Extensions/engine.views.js +1 -1
- package/Engines/Extensions/engine.views.js.map +1 -1
- package/Engines/Processors/iShaderProcessor.d.ts +1 -1
- package/Engines/Processors/iShaderProcessor.js.map +1 -1
- package/Engines/Processors/shaderProcessingOptions.d.ts +5 -0
- package/Engines/Processors/shaderProcessingOptions.js.map +1 -1
- package/Engines/Processors/shaderProcessor.js +8 -2
- package/Engines/Processors/shaderProcessor.js.map +1 -1
- package/Engines/WebGPU/Extensions/engine.dynamicTexture.js +3 -11
- package/Engines/WebGPU/Extensions/engine.dynamicTexture.js.map +1 -1
- package/Engines/WebGPU/Extensions/engine.multiRender.js +19 -9
- package/Engines/WebGPU/Extensions/engine.multiRender.js.map +1 -1
- package/Engines/WebGPU/Extensions/engine.renderTarget.js +9 -6
- package/Engines/WebGPU/Extensions/engine.renderTarget.js.map +1 -1
- package/Engines/WebGPU/webgpuBufferManager.d.ts +1 -1
- package/Engines/WebGPU/webgpuBufferManager.js.map +1 -1
- package/Engines/WebGPU/webgpuCacheBindGroups.js +3 -3
- package/Engines/WebGPU/webgpuCacheBindGroups.js.map +1 -1
- package/Engines/WebGPU/webgpuCacheRenderPipeline.d.ts +4 -1
- package/Engines/WebGPU/webgpuCacheRenderPipeline.js +37 -83
- package/Engines/WebGPU/webgpuCacheRenderPipeline.js.map +1 -1
- package/Engines/WebGPU/webgpuCacheSampler.js +6 -4
- package/Engines/WebGPU/webgpuCacheSampler.js.map +1 -1
- package/Engines/WebGPU/webgpuClearQuad.d.ts +1 -1
- package/Engines/WebGPU/webgpuClearQuad.js +29 -11
- package/Engines/WebGPU/webgpuClearQuad.js.map +1 -1
- package/Engines/WebGPU/webgpuComputeContext.js +2 -2
- package/Engines/WebGPU/webgpuComputeContext.js.map +1 -1
- package/Engines/WebGPU/webgpuConstants.d.ts +57 -13
- package/Engines/WebGPU/webgpuConstants.js +62 -13
- package/Engines/WebGPU/webgpuConstants.js.map +1 -1
- package/Engines/WebGPU/webgpuHardwareTexture.d.ts +24 -4
- package/Engines/WebGPU/webgpuHardwareTexture.js +12 -2
- package/Engines/WebGPU/webgpuHardwareTexture.js.map +1 -1
- package/Engines/WebGPU/webgpuRenderTargetWrapper.d.ts +6 -0
- package/Engines/WebGPU/webgpuRenderTargetWrapper.js +12 -0
- package/Engines/WebGPU/webgpuRenderTargetWrapper.js.map +1 -0
- package/Engines/WebGPU/webgpuShaderProcessingContext.js +2 -0
- package/Engines/WebGPU/webgpuShaderProcessingContext.js.map +1 -1
- package/Engines/WebGPU/webgpuShaderProcessor.d.ts +2 -0
- package/Engines/WebGPU/webgpuShaderProcessor.js +23 -0
- package/Engines/WebGPU/webgpuShaderProcessor.js.map +1 -1
- package/Engines/WebGPU/webgpuShaderProcessorsGLSL.d.ts +1 -0
- package/Engines/WebGPU/webgpuShaderProcessorsGLSL.js +17 -1
- package/Engines/WebGPU/webgpuShaderProcessorsGLSL.js.map +1 -1
- package/Engines/WebGPU/webgpuShaderProcessorsWGSL.d.ts +1 -2
- package/Engines/WebGPU/webgpuShaderProcessorsWGSL.js +11 -30
- package/Engines/WebGPU/webgpuShaderProcessorsWGSL.js.map +1 -1
- package/Engines/WebGPU/webgpuTextureHelper.d.ts +9 -2
- package/Engines/WebGPU/webgpuTextureHelper.js +291 -66
- package/Engines/WebGPU/webgpuTextureHelper.js.map +1 -1
- package/Engines/engine.d.ts +145 -45
- package/Engines/engine.js +5 -1
- package/Engines/engine.js.map +1 -1
- package/Engines/nativeEngine.d.ts +11 -0
- package/Engines/nativeEngine.js +78 -18
- package/Engines/nativeEngine.js.map +1 -1
- package/Engines/renderTargetWrapper.d.ts +1 -1
- package/Engines/renderTargetWrapper.js +1 -1
- package/Engines/renderTargetWrapper.js.map +1 -1
- package/Engines/thinEngine.js +2 -2
- package/Engines/thinEngine.js.map +1 -1
- package/Engines/webgpuEngine.d.ts +5 -13
- package/Engines/webgpuEngine.js +37 -75
- package/Engines/webgpuEngine.js.map +1 -1
- package/Gizmos/positionGizmo.js +1 -1
- package/Gizmos/positionGizmo.js.map +1 -1
- package/Inputs/scene.inputManager.js +6 -1
- package/Inputs/scene.inputManager.js.map +1 -1
- package/Layers/effectLayer.d.ts +4 -0
- package/Layers/effectLayer.js +10 -0
- package/Layers/effectLayer.js.map +1 -1
- package/Layers/glowLayer.d.ts +8 -0
- package/Layers/glowLayer.js +7 -3
- package/Layers/glowLayer.js.map +1 -1
- package/Layers/highlightLayer.js +2 -0
- package/Layers/highlightLayer.js.map +1 -1
- package/Lights/Shadows/shadowGenerator.js +1 -1
- package/Lights/Shadows/shadowGenerator.js.map +1 -1
- package/Lights/light.js +4 -1
- package/Lights/light.js.map +1 -1
- package/Lights/pointLight.js +1 -1
- package/Lights/pointLight.js.map +1 -1
- package/Lights/spotLight.js +1 -1
- package/Lights/spotLight.js.map +1 -1
- package/Loading/Plugins/babylonFileLoader.js +10 -7
- package/Loading/Plugins/babylonFileLoader.js.map +1 -1
- package/Materials/Node/Blocks/Fragment/index.d.ts +1 -0
- package/Materials/Node/Blocks/Fragment/index.js +1 -0
- package/Materials/Node/Blocks/Fragment/index.js.map +1 -1
- package/Materials/Node/Blocks/Fragment/screenSpaceBlock.js +1 -3
- package/Materials/Node/Blocks/Fragment/screenSpaceBlock.js.map +1 -1
- package/Materials/Node/Blocks/Fragment/twirlBlock.d.ts +49 -0
- package/Materials/Node/Blocks/Fragment/twirlBlock.js +145 -0
- package/Materials/Node/Blocks/Fragment/twirlBlock.js.map +1 -0
- package/Materials/Node/Blocks/customBlock.d.ts +31 -0
- package/Materials/Node/Blocks/customBlock.js +144 -0
- package/Materials/Node/Blocks/customBlock.js.map +1 -0
- package/Materials/Node/Blocks/index.d.ts +1 -0
- package/Materials/Node/Blocks/index.js +1 -0
- package/Materials/Node/Blocks/index.js.map +1 -1
- package/Materials/Node/nodeMaterial.js +8 -0
- package/Materials/Node/nodeMaterial.js.map +1 -1
- package/Materials/Node/nodeMaterialBlock.js +1 -1
- package/Materials/Node/nodeMaterialBlock.js.map +1 -1
- package/Materials/PBR/index.d.ts +4 -0
- package/Materials/PBR/index.js +4 -0
- package/Materials/PBR/index.js.map +1 -1
- package/Materials/PBR/pbrAnisotropicConfiguration.d.ts +28 -96
- package/Materials/PBR/pbrAnisotropicConfiguration.js +50 -111
- package/Materials/PBR/pbrAnisotropicConfiguration.js.map +1 -1
- package/Materials/PBR/pbrBRDFConfiguration.d.ts +11 -37
- package/Materials/PBR/pbrBRDFConfiguration.js +39 -52
- package/Materials/PBR/pbrBRDFConfiguration.js.map +1 -1
- package/Materials/PBR/pbrBaseMaterial.d.ts +15 -74
- package/Materials/PBR/pbrBaseMaterial.js +67 -182
- package/Materials/PBR/pbrBaseMaterial.js.map +1 -1
- package/Materials/PBR/pbrBaseSimpleMaterial.js.map +1 -1
- package/Materials/PBR/pbrClearCoatConfiguration.d.ts +23 -98
- package/Materials/PBR/pbrClearCoatConfiguration.js +91 -143
- package/Materials/PBR/pbrClearCoatConfiguration.js.map +1 -1
- package/Materials/PBR/pbrSheenConfiguration.d.ts +25 -93
- package/Materials/PBR/pbrSheenConfiguration.js +71 -126
- package/Materials/PBR/pbrSheenConfiguration.js.map +1 -1
- package/Materials/PBR/pbrSubSurfaceConfiguration.d.ts +28 -114
- package/Materials/PBR/pbrSubSurfaceConfiguration.js +150 -211
- package/Materials/PBR/pbrSubSurfaceConfiguration.js.map +1 -1
- package/Materials/Textures/dynamicTexture.d.ts +3 -2
- package/Materials/Textures/dynamicTexture.js +5 -3
- package/Materials/Textures/dynamicTexture.js.map +1 -1
- package/Materials/Textures/multiRenderTarget.js +3 -0
- package/Materials/Textures/multiRenderTarget.js.map +1 -1
- package/Materials/Textures/renderTargetTexture.js +1 -1
- package/Materials/Textures/renderTargetTexture.js.map +1 -1
- package/Materials/Textures/thinRenderTargetTexture.js +1 -1
- package/Materials/Textures/thinRenderTargetTexture.js.map +1 -1
- package/Materials/Textures/thinTexture.d.ts +1 -2
- package/Materials/Textures/thinTexture.js +2 -4
- package/Materials/Textures/thinTexture.js.map +1 -1
- package/Materials/Textures/videoTexture.d.ts +1 -1
- package/Materials/Textures/videoTexture.js +1 -1
- package/Materials/Textures/videoTexture.js.map +1 -1
- package/Materials/effect.d.ts +6 -1
- package/Materials/effect.js +4 -1
- package/Materials/effect.js.map +1 -1
- package/Materials/fresnelParameters.d.ts +1 -1
- package/Materials/fresnelParameters.js +1 -1
- package/Materials/fresnelParameters.js.map +1 -1
- package/Materials/index.d.ts +4 -0
- package/Materials/index.js +4 -0
- package/Materials/index.js.map +1 -1
- package/Materials/material.d.ts +43 -2
- package/Materials/material.detailMapConfiguration.d.ts +29 -87
- package/Materials/material.detailMapConfiguration.js +50 -106
- package/Materials/material.detailMapConfiguration.js.map +1 -1
- package/Materials/material.js +99 -8
- package/Materials/material.js.map +1 -1
- package/Materials/materialDefines.d.ts +16 -0
- package/Materials/materialDefines.js +17 -5
- package/Materials/materialDefines.js.map +1 -1
- package/Materials/materialPluginBase.d.ts +182 -0
- package/Materials/materialPluginBase.js +209 -0
- package/Materials/materialPluginBase.js.map +1 -0
- package/Materials/materialPluginEvent.d.ts +98 -0
- package/Materials/materialPluginEvent.js +21 -0
- package/Materials/materialPluginEvent.js.map +1 -0
- package/Materials/materialPluginFactoryExport.d.ts +40 -0
- package/Materials/materialPluginFactoryExport.js +75 -0
- package/Materials/materialPluginFactoryExport.js.map +1 -0
- package/Materials/materialPluginManager.d.ts +90 -0
- package/Materials/materialPluginManager.js +323 -0
- package/Materials/materialPluginManager.js.map +1 -0
- package/Materials/shaderMaterial.d.ts +1 -1
- package/Materials/shaderMaterial.js +13 -1
- package/Materials/shaderMaterial.js.map +1 -1
- package/Materials/standardMaterial.d.ts +13 -10
- package/Materials/standardMaterial.js +45 -51
- package/Materials/standardMaterial.js.map +1 -1
- package/Materials/uniformBuffer.d.ts +7 -0
- package/Materials/uniformBuffer.js +22 -0
- package/Materials/uniformBuffer.js.map +1 -1
- package/Maths/math.vector.d.ts +12 -8
- package/Maths/math.vector.js +22 -14
- package/Maths/math.vector.js.map +1 -1
- package/Meshes/Builders/capsuleBuilder.d.ts +1 -1
- package/Meshes/Builders/capsuleBuilder.js +1 -1
- package/Meshes/Builders/capsuleBuilder.js.map +1 -1
- package/Meshes/abstractMesh.d.ts +1 -1
- package/Meshes/abstractMesh.js +24 -23
- package/Meshes/abstractMesh.js.map +1 -1
- package/Meshes/geometry.js +2 -2
- package/Meshes/geometry.js.map +1 -1
- package/Meshes/linesMesh.d.ts +1 -1
- package/Meshes/linesMesh.js +3 -2
- package/Meshes/linesMesh.js.map +1 -1
- package/Meshes/mesh.d.ts +12 -0
- package/Meshes/mesh.js +184 -115
- package/Meshes/mesh.js.map +1 -1
- package/Meshes/mesh.lts.d.ts +8 -8
- package/Meshes/mesh.lts.js.map +1 -1
- package/Meshes/mesh.vertexData.d.ts +6 -1
- package/Meshes/mesh.vertexData.js +295 -114
- package/Meshes/mesh.vertexData.js.map +1 -1
- package/Meshes/transformNode.js +20 -13
- package/Meshes/transformNode.js.map +1 -1
- package/Misc/PerformanceViewer/performanceViewerCollectionStrategies.d.ts +2 -1
- package/Misc/PerformanceViewer/performanceViewerCollectionStrategies.js +38 -33
- package/Misc/PerformanceViewer/performanceViewerCollectionStrategies.js.map +1 -1
- package/Misc/PerformanceViewer/performanceViewerCollector.d.ts +29 -4
- package/Misc/PerformanceViewer/performanceViewerCollector.js +36 -12
- package/Misc/PerformanceViewer/performanceViewerCollector.js.map +1 -1
- package/Misc/assetsManager.d.ts +4 -4
- package/Misc/assetsManager.js +2 -2
- package/Misc/assetsManager.js.map +1 -1
- package/Misc/basis.js +1 -0
- package/Misc/basis.js.map +1 -1
- package/Misc/coroutine.d.ts +41 -0
- package/Misc/coroutine.js +136 -0
- package/Misc/coroutine.js.map +1 -0
- package/Misc/index.d.ts +1 -0
- package/Misc/index.js +1 -0
- package/Misc/index.js.map +1 -1
- package/Misc/interfaces/iPerfViewer.d.ts +4 -0
- package/Misc/interfaces/iPerfViewer.js.map +1 -1
- package/Misc/observableCoroutine.d.ts +9 -10
- package/Misc/observableCoroutine.js +34 -39
- package/Misc/observableCoroutine.js.map +1 -1
- package/Misc/sceneSerializer.js +1 -0
- package/Misc/sceneSerializer.js.map +1 -1
- package/Particles/particleSystem.js +3 -0
- package/Particles/particleSystem.js.map +1 -1
- package/Particles/subEmitter.js +1 -0
- package/Particles/subEmitter.js.map +1 -1
- package/PostProcesses/screenSpaceReflectionPostProcess.d.ts +1 -0
- package/PostProcesses/screenSpaceReflectionPostProcess.js +4 -0
- package/PostProcesses/screenSpaceReflectionPostProcess.js.map +1 -1
- package/Rendering/depthPeelingRenderer.d.ts +4 -1
- package/Rendering/depthPeelingRenderer.js +34 -9
- package/Rendering/depthPeelingRenderer.js.map +1 -1
- package/Rendering/depthRenderer.js +1 -1
- package/Rendering/depthRenderer.js.map +1 -1
- package/Rendering/outlineRenderer.js +24 -1
- package/Rendering/outlineRenderer.js.map +1 -1
- package/Rendering/prePassRenderer.js +7 -7
- package/Rendering/prePassRenderer.js.map +1 -1
- package/Rendering/renderingGroup.js +5 -1
- package/Rendering/renderingGroup.js.map +1 -1
- package/Shaders/ShadersInclude/defaultFragmentDeclaration.js +1 -1
- package/Shaders/ShadersInclude/defaultFragmentDeclaration.js.map +1 -1
- package/Shaders/ShadersInclude/defaultUboDeclaration.js +1 -1
- package/Shaders/ShadersInclude/defaultUboDeclaration.js.map +1 -1
- package/Shaders/ShadersInclude/defaultVertexDeclaration.js +1 -1
- package/Shaders/ShadersInclude/defaultVertexDeclaration.js.map +1 -1
- package/Shaders/ShadersInclude/pbrFragmentDeclaration.js +1 -1
- package/Shaders/ShadersInclude/pbrFragmentDeclaration.js.map +1 -1
- package/Shaders/ShadersInclude/pbrUboDeclaration.js +1 -1
- package/Shaders/ShadersInclude/pbrUboDeclaration.js.map +1 -1
- package/Shaders/ShadersInclude/pbrVertexDeclaration.js +1 -1
- package/Shaders/ShadersInclude/pbrVertexDeclaration.js.map +1 -1
- package/Shaders/anaglyph.fragment.js +1 -1
- package/Shaders/anaglyph.fragment.js.map +1 -1
- package/Shaders/background.fragment.js +1 -1
- package/Shaders/background.fragment.js.map +1 -1
- package/Shaders/background.vertex.js +1 -1
- package/Shaders/background.vertex.js.map +1 -1
- package/Shaders/blackAndWhite.fragment.js +1 -1
- package/Shaders/blackAndWhite.fragment.js.map +1 -1
- package/Shaders/bloomMerge.fragment.js +1 -1
- package/Shaders/bloomMerge.fragment.js.map +1 -1
- package/Shaders/blur.fragment.js +1 -1
- package/Shaders/blur.fragment.js.map +1 -1
- package/Shaders/boundingBoxRenderer.fragment.js +1 -1
- package/Shaders/boundingBoxRenderer.fragment.js.map +1 -1
- package/Shaders/boundingBoxRenderer.vertex.js +1 -1
- package/Shaders/boundingBoxRenderer.vertex.js.map +1 -1
- package/Shaders/chromaticAberration.fragment.js +1 -1
- package/Shaders/chromaticAberration.fragment.js.map +1 -1
- package/Shaders/circleOfConfusion.fragment.js +1 -1
- package/Shaders/circleOfConfusion.fragment.js.map +1 -1
- package/Shaders/clearQuad.vertex.js +1 -1
- package/Shaders/clearQuad.vertex.js.map +1 -1
- package/Shaders/color.fragment.js +1 -1
- package/Shaders/color.fragment.js.map +1 -1
- package/Shaders/color.vertex.js +1 -1
- package/Shaders/color.vertex.js.map +1 -1
- package/Shaders/colorCorrection.fragment.js +1 -1
- package/Shaders/colorCorrection.fragment.js.map +1 -1
- package/Shaders/convolution.fragment.js +1 -1
- package/Shaders/convolution.fragment.js.map +1 -1
- package/Shaders/default.fragment.js +1 -1
- package/Shaders/default.fragment.js.map +1 -1
- package/Shaders/depth.fragment.js +1 -1
- package/Shaders/depth.fragment.js.map +1 -1
- package/Shaders/depth.vertex.js +1 -1
- package/Shaders/depth.vertex.js.map +1 -1
- package/Shaders/depthBoxBlur.fragment.js +1 -1
- package/Shaders/depthBoxBlur.fragment.js.map +1 -1
- package/Shaders/depthOfField.fragment.js +1 -1
- package/Shaders/depthOfField.fragment.js.map +1 -1
- package/Shaders/depthOfFieldMerge.fragment.js +1 -1
- package/Shaders/depthOfFieldMerge.fragment.js.map +1 -1
- package/Shaders/displayPass.fragment.js +1 -1
- package/Shaders/displayPass.fragment.js.map +1 -1
- package/Shaders/extractHighlights.fragment.js +1 -1
- package/Shaders/extractHighlights.fragment.js.map +1 -1
- package/Shaders/filter.fragment.js +1 -1
- package/Shaders/filter.fragment.js.map +1 -1
- package/Shaders/fxaa.vertex.js +1 -1
- package/Shaders/fxaa.vertex.js.map +1 -1
- package/Shaders/geometry.vertex.js +1 -1
- package/Shaders/geometry.vertex.js.map +1 -1
- package/Shaders/glowBlurPostProcess.fragment.js +1 -1
- package/Shaders/glowBlurPostProcess.fragment.js.map +1 -1
- package/Shaders/glowMapGeneration.fragment.js +1 -1
- package/Shaders/glowMapGeneration.fragment.js.map +1 -1
- package/Shaders/glowMapGeneration.vertex.js +1 -1
- package/Shaders/glowMapGeneration.vertex.js.map +1 -1
- package/Shaders/glowMapMerge.fragment.js +1 -1
- package/Shaders/glowMapMerge.fragment.js.map +1 -1
- package/Shaders/glowMapMerge.vertex.js +1 -1
- package/Shaders/glowMapMerge.vertex.js.map +1 -1
- package/Shaders/grain.fragment.js +1 -1
- package/Shaders/grain.fragment.js.map +1 -1
- package/Shaders/hdrFiltering.vertex.js +1 -1
- package/Shaders/hdrFiltering.vertex.js.map +1 -1
- package/Shaders/highlights.fragment.js +1 -1
- package/Shaders/highlights.fragment.js.map +1 -1
- package/Shaders/imageProcessing.fragment.js +1 -1
- package/Shaders/imageProcessing.fragment.js.map +1 -1
- package/Shaders/kernelBlur.fragment.js +1 -1
- package/Shaders/kernelBlur.fragment.js.map +1 -1
- package/Shaders/kernelBlur.vertex.js +1 -1
- package/Shaders/kernelBlur.vertex.js.map +1 -1
- package/Shaders/layer.fragment.js +1 -1
- package/Shaders/layer.fragment.js.map +1 -1
- package/Shaders/layer.vertex.js +1 -1
- package/Shaders/layer.vertex.js.map +1 -1
- package/Shaders/lensFlare.fragment.js +1 -1
- package/Shaders/lensFlare.fragment.js.map +1 -1
- package/Shaders/lensFlare.vertex.js +1 -1
- package/Shaders/lensFlare.vertex.js.map +1 -1
- package/Shaders/lensHighlights.fragment.js +1 -1
- package/Shaders/lensHighlights.fragment.js.map +1 -1
- package/Shaders/line.fragment.js +1 -1
- package/Shaders/line.fragment.js.map +1 -1
- package/Shaders/line.vertex.js +1 -1
- package/Shaders/line.vertex.js.map +1 -1
- package/Shaders/minmaxRedux.fragment.js +1 -1
- package/Shaders/minmaxRedux.fragment.js.map +1 -1
- package/Shaders/motionBlur.fragment.js +1 -1
- package/Shaders/motionBlur.fragment.js.map +1 -1
- package/Shaders/noise.fragment.js +1 -1
- package/Shaders/noise.fragment.js.map +1 -1
- package/Shaders/outline.fragment.d.ts +2 -0
- package/Shaders/outline.fragment.js +3 -1
- package/Shaders/outline.fragment.js.map +1 -1
- package/Shaders/outline.vertex.d.ts +2 -0
- package/Shaders/outline.vertex.js +3 -1
- package/Shaders/outline.vertex.js.map +1 -1
- package/Shaders/particles.fragment.js +1 -1
- package/Shaders/particles.fragment.js.map +1 -1
- package/Shaders/particles.vertex.js +1 -1
- package/Shaders/particles.vertex.js.map +1 -1
- package/Shaders/pass.fragment.js +1 -1
- package/Shaders/pass.fragment.js.map +1 -1
- package/Shaders/passCube.fragment.js +1 -1
- package/Shaders/passCube.fragment.js.map +1 -1
- package/Shaders/pbr.fragment.js +1 -1
- package/Shaders/pbr.fragment.js.map +1 -1
- package/Shaders/postprocess.vertex.js +1 -1
- package/Shaders/postprocess.vertex.js.map +1 -1
- package/Shaders/procedural.vertex.js +1 -1
- package/Shaders/procedural.vertex.js.map +1 -1
- package/Shaders/rgbdDecode.fragment.js +1 -1
- package/Shaders/rgbdDecode.fragment.js.map +1 -1
- package/Shaders/rgbdEncode.fragment.js +1 -1
- package/Shaders/rgbdEncode.fragment.js.map +1 -1
- package/Shaders/screenSpaceCurvature.fragment.js +1 -1
- package/Shaders/screenSpaceCurvature.fragment.js.map +1 -1
- package/Shaders/screenSpaceReflection.fragment.js +1 -1
- package/Shaders/screenSpaceReflection.fragment.js.map +1 -1
- package/Shaders/shadowMap.fragment.js +1 -1
- package/Shaders/shadowMap.fragment.js.map +1 -1
- package/Shaders/shadowMap.vertex.js +1 -1
- package/Shaders/shadowMap.vertex.js.map +1 -1
- package/Shaders/sharpen.fragment.js +1 -1
- package/Shaders/sharpen.fragment.js.map +1 -1
- package/Shaders/sprites.fragment.js +1 -1
- package/Shaders/sprites.fragment.js.map +1 -1
- package/Shaders/sprites.vertex.js +1 -1
- package/Shaders/sprites.vertex.js.map +1 -1
- package/Shaders/ssaoCombine.fragment.js +1 -1
- package/Shaders/ssaoCombine.fragment.js.map +1 -1
- package/Shaders/standard.fragment.js +1 -1
- package/Shaders/standard.fragment.js.map +1 -1
- package/Shaders/stereoscopicInterlace.fragment.js +1 -1
- package/Shaders/stereoscopicInterlace.fragment.js.map +1 -1
- package/Shaders/subSurfaceScattering.fragment.js +1 -1
- package/Shaders/subSurfaceScattering.fragment.js.map +1 -1
- package/Shaders/tonemap.fragment.js +1 -1
- package/Shaders/tonemap.fragment.js.map +1 -1
- package/Shaders/volumetricLightScattering.fragment.js +1 -1
- package/Shaders/volumetricLightScattering.fragment.js.map +1 -1
- package/Shaders/volumetricLightScatteringPass.fragment.js +1 -1
- package/Shaders/volumetricLightScatteringPass.fragment.js.map +1 -1
- package/Shaders/volumetricLightScatteringPass.vertex.js +1 -1
- package/Shaders/volumetricLightScatteringPass.vertex.js.map +1 -1
- package/Shaders/vrDistortionCorrection.fragment.js +1 -1
- package/Shaders/vrDistortionCorrection.fragment.js.map +1 -1
- package/Shaders/vrMultiviewToSingleview.fragment.js +1 -1
- package/Shaders/vrMultiviewToSingleview.fragment.js.map +1 -1
- package/ShadersWGSL/ShadersInclude/meshUboDeclaration.js +1 -1
- package/ShadersWGSL/ShadersInclude/meshUboDeclaration.js.map +1 -1
- package/ShadersWGSL/ShadersInclude/sceneUboDeclaration.js +1 -1
- package/ShadersWGSL/ShadersInclude/sceneUboDeclaration.js.map +1 -1
- package/ShadersWGSL/gpuUpdateParticles.compute.js +1 -1
- package/ShadersWGSL/gpuUpdateParticles.compute.js.map +1 -1
- package/XR/features/WebXRControllerPointerSelection.d.ts +14 -0
- package/XR/features/WebXRControllerPointerSelection.js +55 -21
- package/XR/features/WebXRControllerPointerSelection.js.map +1 -1
- package/XR/features/WebXRHandTracking.d.ts +2 -0
- package/XR/features/WebXRHandTracking.js +34 -14
- package/XR/features/WebXRHandTracking.js.map +1 -1
- package/XR/features/WebXRLayers.d.ts +78 -0
- package/XR/features/WebXRLayers.js +243 -0
- package/XR/features/WebXRLayers.js.map +1 -0
- package/XR/features/WebXRPlaneDetector.js +8 -12
- package/XR/features/WebXRPlaneDetector.js.map +1 -1
- package/XR/features/index.d.ts +1 -0
- package/XR/features/index.js +1 -0
- package/XR/features/index.js.map +1 -1
- package/XR/index.d.ts +1 -0
- package/XR/index.js +1 -0
- package/XR/index.js.map +1 -1
- package/XR/native/index.d.ts +2 -0
- package/XR/native/index.js +3 -0
- package/XR/native/index.js.map +1 -0
- package/XR/native/nativeXRFrame.d.ts +27 -0
- package/XR/native/nativeXRFrame.js +81 -0
- package/XR/native/nativeXRFrame.js.map +1 -0
- package/XR/native/nativeXRRenderTarget.d.ts +44 -0
- package/XR/native/nativeXRRenderTarget.js +81 -0
- package/XR/native/nativeXRRenderTarget.js.map +1 -0
- package/XR/webXRCamera.js +2 -10
- package/XR/webXRCamera.js.map +1 -1
- package/XR/webXRExperienceHelper.js +15 -13
- package/XR/webXRExperienceHelper.js.map +1 -1
- package/XR/webXRFeaturesManager.d.ts +4 -0
- package/XR/webXRFeaturesManager.js +5 -1
- package/XR/webXRFeaturesManager.js.map +1 -1
- package/XR/webXRLayerWrapper.d.ts +48 -0
- package/XR/webXRLayerWrapper.js +60 -0
- package/XR/webXRLayerWrapper.js.map +1 -0
- package/XR/webXRManagedOutputCanvas.d.ts +2 -1
- package/XR/webXRManagedOutputCanvas.js +36 -29
- package/XR/webXRManagedOutputCanvas.js.map +1 -1
- package/XR/webXRRenderTargetTextureProvider.d.ts +55 -0
- package/XR/webXRRenderTargetTextureProvider.js +63 -0
- package/XR/webXRRenderTargetTextureProvider.js.map +1 -0
- package/XR/webXRSessionManager.d.ts +30 -7
- package/XR/webXRSessionManager.js +62 -64
- package/XR/webXRSessionManager.js.map +1 -1
- package/XR/webXRTypes.d.ts +1 -1
- package/XR/webXRTypes.js.map +1 -1
- package/XR/webXRWebGLLayer.d.ts +36 -0
- package/XR/webXRWebGLLayer.js +69 -0
- package/XR/webXRWebGLLayer.js.map +1 -0
- package/abstractScene.d.ts +1 -1
- package/abstractScene.js +1 -1
- package/abstractScene.js.map +1 -1
- package/assetContainer.js +3 -0
- package/assetContainer.js.map +1 -1
- package/package.json +51 -6
- package/scene.d.ts +4 -0
- package/scene.js +4 -0
- package/scene.js.map +1 -1
- package/DeviceInput/Implementations/nativeDeviceInputWrapper.js.map +0 -1
package/Gizmos/positionGizmo.js
CHANGED
|
@@ -87,7 +87,7 @@ var PositionGizmo = /** @class */ (function (_super) {
|
|
|
87
87
|
},
|
|
88
88
|
set: function (node) {
|
|
89
89
|
this._meshAttached = null;
|
|
90
|
-
this._nodeAttached =
|
|
90
|
+
this._nodeAttached = node;
|
|
91
91
|
[this.xGizmo, this.yGizmo, this.zGizmo, this.xPlaneGizmo, this.yPlaneGizmo, this.zPlaneGizmo].forEach(function (gizmo) {
|
|
92
92
|
if (gizmo.isEnabled) {
|
|
93
93
|
gizmo.attachedNode = node;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"positionGizmo.js","sourceRoot":"","sources":["../../../sourceES6/core/Gizmos/positionGizmo.ts"],"names":[],"mappings":"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","sourcesContent":["import { Logger } from \"../Misc/logger\";\r\nimport { Observable, Observer } from \"../Misc/observable\";\r\nimport { Nullable } from \"../types\";\r\nimport { Vector3 } from \"../Maths/math.vector\";\r\nimport { Color3 } from '../Maths/math.color';\r\nimport { AbstractMesh } from \"../Meshes/abstractMesh\";\r\nimport { Node } from \"../node\";\r\nimport { Mesh } from \"../Meshes/mesh\";\r\nimport { Gizmo, GizmoAxisCache } from \"./gizmo\";\r\nimport { AxisDragGizmo } from \"./axisDragGizmo\";\r\nimport { PlaneDragGizmo } from \"./planeDragGizmo\";\r\nimport { UtilityLayerRenderer } from \"../Rendering/utilityLayerRenderer\";\r\nimport { PointerInfo } from \"../Events/pointerEvents\";\r\nimport { GizmoManager } from './gizmoManager';\r\n/**\r\n * Gizmo that enables dragging a mesh along 3 axis\r\n */\r\nexport class PositionGizmo extends Gizmo {\r\n /**\r\n * Internal gizmo used for interactions on the x axis\r\n */\r\n public xGizmo: AxisDragGizmo;\r\n /**\r\n * Internal gizmo used for interactions on the y axis\r\n */\r\n public yGizmo: AxisDragGizmo;\r\n /**\r\n * Internal gizmo used for interactions on the z axis\r\n */\r\n public zGizmo: AxisDragGizmo;\r\n /**\r\n * Internal gizmo used for interactions on the yz plane\r\n */\r\n public xPlaneGizmo: PlaneDragGizmo;\r\n /**\r\n * Internal gizmo used for interactions on the xz plane\r\n */\r\n public yPlaneGizmo: PlaneDragGizmo;\r\n /**\r\n * Internal gizmo used for interactions on the xy plane\r\n */\r\n public zPlaneGizmo: PlaneDragGizmo;\r\n\r\n /**\r\n * private variables\r\n */\r\n private _meshAttached: Nullable<AbstractMesh> = null;\r\n private _nodeAttached: Nullable<Node> = null;\r\n private _snapDistance: number;\r\n private _observables: Observer<PointerInfo>[] = [];\r\n\r\n /** Node Caching for quick lookup */\r\n private _gizmoAxisCache: Map<Mesh, GizmoAxisCache> = new Map();\r\n\r\n /** Fires an event when any of it's sub gizmos are dragged */\r\n public onDragStartObservable = new Observable();\r\n /** Fires an event when any of it's sub gizmos are released from dragging */\r\n public onDragEndObservable = new Observable();\r\n\r\n /**\r\n * If set to true, planar drag is enabled\r\n */\r\n private _planarGizmoEnabled = false;\r\n\r\n public get attachedMesh() {\r\n return this._meshAttached;\r\n }\r\n public set attachedMesh(mesh: Nullable<AbstractMesh>) {\r\n this._meshAttached = mesh;\r\n this._nodeAttached = mesh;\r\n [this.xGizmo, this.yGizmo, this.zGizmo, this.xPlaneGizmo, this.yPlaneGizmo, this.zPlaneGizmo].forEach((gizmo) => {\r\n if (gizmo.isEnabled) {\r\n gizmo.attachedMesh = mesh;\r\n }\r\n else {\r\n gizmo.attachedMesh = null;\r\n }\r\n });\r\n }\r\n\r\n public get attachedNode() {\r\n return this._nodeAttached;\r\n }\r\n public set attachedNode(node: Nullable<Node>) {\r\n this._meshAttached = null;\r\n this._nodeAttached = null;\r\n [this.xGizmo, this.yGizmo, this.zGizmo, this.xPlaneGizmo, this.yPlaneGizmo, this.zPlaneGizmo].forEach((gizmo) => {\r\n if (gizmo.isEnabled) {\r\n gizmo.attachedNode = node;\r\n }\r\n else {\r\n gizmo.attachedNode = null;\r\n }\r\n });\r\n }\r\n\r\n /**\r\n * True when the mouse pointer is hovering a gizmo mesh\r\n */\r\n public get isHovered() {\r\n var hovered = false;\r\n [this.xGizmo, this.yGizmo, this.zGizmo, this.xPlaneGizmo, this.yPlaneGizmo, this.zPlaneGizmo].forEach((gizmo) => {\r\n hovered = hovered || gizmo.isHovered;\r\n });\r\n return hovered;\r\n }\r\n\r\n /**\r\n * Creates a PositionGizmo\r\n * @param gizmoLayer The utility layer the gizmo will be added to\r\n @param thickness display gizmo axis thickness\r\n */\r\n constructor(gizmoLayer: UtilityLayerRenderer = UtilityLayerRenderer.DefaultUtilityLayer, thickness: number = 1, gizmoManager?: GizmoManager) {\r\n super(gizmoLayer);\r\n this.xGizmo = new AxisDragGizmo(new Vector3(1, 0, 0), Color3.Red().scale(0.5), gizmoLayer, this, thickness);\r\n this.yGizmo = new AxisDragGizmo(new Vector3(0, 1, 0), Color3.Green().scale(0.5), gizmoLayer, this, thickness);\r\n this.zGizmo = new AxisDragGizmo(new Vector3(0, 0, 1), Color3.Blue().scale(0.5), gizmoLayer, this, thickness);\r\n\r\n this.xPlaneGizmo = new PlaneDragGizmo(new Vector3(1, 0, 0), Color3.Red().scale(0.5), this.gizmoLayer, this);\r\n this.yPlaneGizmo = new PlaneDragGizmo(new Vector3(0, 1, 0), Color3.Green().scale(0.5), this.gizmoLayer, this);\r\n this.zPlaneGizmo = new PlaneDragGizmo(new Vector3(0, 0, 1), Color3.Blue().scale(0.5), this.gizmoLayer, this);\r\n // Relay drag events\r\n [this.xGizmo, this.yGizmo, this.zGizmo, this.xPlaneGizmo, this.yPlaneGizmo, this.zPlaneGizmo].forEach((gizmo) => {\r\n gizmo.dragBehavior.onDragStartObservable.add(() => {\r\n this.onDragStartObservable.notifyObservers({});\r\n });\r\n gizmo.dragBehavior.onDragEndObservable.add(() => {\r\n this.onDragEndObservable.notifyObservers({});\r\n });\r\n });\r\n\r\n this.attachedMesh = null;\r\n\r\n if (gizmoManager) {\r\n gizmoManager.addToAxisCache(this._gizmoAxisCache);\r\n } else {\r\n // Only subscribe to pointer event if gizmoManager isnt\r\n Gizmo.GizmoAxisPointerObserver(gizmoLayer, this._gizmoAxisCache);\r\n }\r\n }\r\n\r\n /**\r\n * If the planar drag gizmo is enabled\r\n * setting this will enable/disable XY, XZ and YZ planes regardless of individual gizmo settings.\r\n */\r\n public set planarGizmoEnabled(value: boolean) {\r\n this._planarGizmoEnabled = value;\r\n [this.xPlaneGizmo, this.yPlaneGizmo, this.zPlaneGizmo].forEach((gizmo) => {\r\n if (gizmo) {\r\n gizmo.isEnabled = value;\r\n if (value) {\r\n if (gizmo.attachedMesh) {\r\n gizmo.attachedMesh = this.attachedMesh;\r\n } else {\r\n gizmo.attachedNode = this.attachedNode;\r\n }\r\n\r\n }\r\n }\r\n }, this);\r\n }\r\n public get planarGizmoEnabled(): boolean {\r\n return this._planarGizmoEnabled;\r\n }\r\n\r\n public set updateGizmoRotationToMatchAttachedMesh(value: boolean) {\r\n this._updateGizmoRotationToMatchAttachedMesh = value;\r\n [this.xGizmo, this.yGizmo, this.zGizmo, this.xPlaneGizmo, this.yPlaneGizmo, this.zPlaneGizmo].forEach((gizmo) => {\r\n if (gizmo) {\r\n gizmo.updateGizmoRotationToMatchAttachedMesh = value;\r\n }\r\n });\r\n }\r\n public get updateGizmoRotationToMatchAttachedMesh() {\r\n return this._updateGizmoRotationToMatchAttachedMesh;\r\n }\r\n\r\n /**\r\n * Drag distance in babylon units that the gizmo will snap to when dragged (Default: 0)\r\n */\r\n public set snapDistance(value: number) {\r\n this._snapDistance = value;\r\n [this.xGizmo, this.yGizmo, this.zGizmo, this.xPlaneGizmo, this.yPlaneGizmo, this.zPlaneGizmo].forEach((gizmo) => {\r\n if (gizmo) {\r\n gizmo.snapDistance = value;\r\n }\r\n });\r\n }\r\n public get snapDistance() {\r\n return this._snapDistance;\r\n }\r\n\r\n /**\r\n * Ratio for the scale of the gizmo (Default: 1)\r\n */\r\n public set scaleRatio(value: number) {\r\n this._scaleRatio = value;\r\n [this.xGizmo, this.yGizmo, this.zGizmo, this.xPlaneGizmo, this.yPlaneGizmo, this.zPlaneGizmo].forEach((gizmo) => {\r\n if (gizmo) {\r\n gizmo.scaleRatio = value;\r\n }\r\n });\r\n }\r\n public get scaleRatio() {\r\n return this._scaleRatio;\r\n }\r\n\r\n /**\r\n * Builds Gizmo Axis Cache to enable features such as hover state preservation and graying out other axis during manipulation\r\n * @param mesh Axis gizmo mesh\r\n * @param cache Gizmo axis definition used for reactive gizmo UI\r\n */\r\n public addToAxisCache(mesh: Mesh, cache: GizmoAxisCache) {\r\n this._gizmoAxisCache.set(mesh, cache);\r\n }\r\n\r\n /**\r\n * Disposes of the gizmo\r\n */\r\n public dispose() {\r\n [this.xGizmo, this.yGizmo, this.zGizmo, this.xPlaneGizmo, this.yPlaneGizmo, this.zPlaneGizmo].forEach((gizmo) => {\r\n if (gizmo) {\r\n gizmo.dispose();\r\n }\r\n });\r\n this._observables.forEach((obs) => {\r\n this.gizmoLayer.utilityLayerScene.onPointerObservable.remove(obs);\r\n });\r\n this.onDragStartObservable.clear();\r\n this.onDragEndObservable.clear();\r\n }\r\n\r\n /**\r\n * CustomMeshes are not supported by this gizmo\r\n * @param mesh The mesh to replace the default mesh of the gizmo\r\n */\r\n public setCustomMesh(mesh: Mesh) {\r\n Logger.Error(\"Custom meshes are not supported on this gizmo, please set the custom meshes on the gizmos contained within this one (gizmo.xGizmo, gizmo.yGizmo, gizmo.zGizmo,gizmo.xPlaneGizmo, gizmo.yPlaneGizmo, gizmo.zPlaneGizmo)\");\r\n }\r\n}\r\n"]}
|
|
1
|
+
{"version":3,"file":"positionGizmo.js","sourceRoot":"","sources":["../../../sourceES6/core/Gizmos/positionGizmo.ts"],"names":[],"mappings":"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","sourcesContent":["import { Logger } from \"../Misc/logger\";\r\nimport { Observable, Observer } from \"../Misc/observable\";\r\nimport { Nullable } from \"../types\";\r\nimport { Vector3 } from \"../Maths/math.vector\";\r\nimport { Color3 } from '../Maths/math.color';\r\nimport { AbstractMesh } from \"../Meshes/abstractMesh\";\r\nimport { Node } from \"../node\";\r\nimport { Mesh } from \"../Meshes/mesh\";\r\nimport { Gizmo, GizmoAxisCache } from \"./gizmo\";\r\nimport { AxisDragGizmo } from \"./axisDragGizmo\";\r\nimport { PlaneDragGizmo } from \"./planeDragGizmo\";\r\nimport { UtilityLayerRenderer } from \"../Rendering/utilityLayerRenderer\";\r\nimport { PointerInfo } from \"../Events/pointerEvents\";\r\nimport { GizmoManager } from './gizmoManager';\r\n/**\r\n * Gizmo that enables dragging a mesh along 3 axis\r\n */\r\nexport class PositionGizmo extends Gizmo {\r\n /**\r\n * Internal gizmo used for interactions on the x axis\r\n */\r\n public xGizmo: AxisDragGizmo;\r\n /**\r\n * Internal gizmo used for interactions on the y axis\r\n */\r\n public yGizmo: AxisDragGizmo;\r\n /**\r\n * Internal gizmo used for interactions on the z axis\r\n */\r\n public zGizmo: AxisDragGizmo;\r\n /**\r\n * Internal gizmo used for interactions on the yz plane\r\n */\r\n public xPlaneGizmo: PlaneDragGizmo;\r\n /**\r\n * Internal gizmo used for interactions on the xz plane\r\n */\r\n public yPlaneGizmo: PlaneDragGizmo;\r\n /**\r\n * Internal gizmo used for interactions on the xy plane\r\n */\r\n public zPlaneGizmo: PlaneDragGizmo;\r\n\r\n /**\r\n * private variables\r\n */\r\n private _meshAttached: Nullable<AbstractMesh> = null;\r\n private _nodeAttached: Nullable<Node> = null;\r\n private _snapDistance: number;\r\n private _observables: Observer<PointerInfo>[] = [];\r\n\r\n /** Node Caching for quick lookup */\r\n private _gizmoAxisCache: Map<Mesh, GizmoAxisCache> = new Map();\r\n\r\n /** Fires an event when any of it's sub gizmos are dragged */\r\n public onDragStartObservable = new Observable();\r\n /** Fires an event when any of it's sub gizmos are released from dragging */\r\n public onDragEndObservable = new Observable();\r\n\r\n /**\r\n * If set to true, planar drag is enabled\r\n */\r\n private _planarGizmoEnabled = false;\r\n\r\n public get attachedMesh() {\r\n return this._meshAttached;\r\n }\r\n public set attachedMesh(mesh: Nullable<AbstractMesh>) {\r\n this._meshAttached = mesh;\r\n this._nodeAttached = mesh;\r\n [this.xGizmo, this.yGizmo, this.zGizmo, this.xPlaneGizmo, this.yPlaneGizmo, this.zPlaneGizmo].forEach((gizmo) => {\r\n if (gizmo.isEnabled) {\r\n gizmo.attachedMesh = mesh;\r\n }\r\n else {\r\n gizmo.attachedMesh = null;\r\n }\r\n });\r\n }\r\n\r\n public get attachedNode() {\r\n return this._nodeAttached;\r\n }\r\n public set attachedNode(node: Nullable<Node>) {\r\n this._meshAttached = null;\r\n this._nodeAttached = node;\r\n [this.xGizmo, this.yGizmo, this.zGizmo, this.xPlaneGizmo, this.yPlaneGizmo, this.zPlaneGizmo].forEach((gizmo) => {\r\n if (gizmo.isEnabled) {\r\n gizmo.attachedNode = node;\r\n }\r\n else {\r\n gizmo.attachedNode = null;\r\n }\r\n });\r\n }\r\n\r\n /**\r\n * True when the mouse pointer is hovering a gizmo mesh\r\n */\r\n public get isHovered() {\r\n var hovered = false;\r\n [this.xGizmo, this.yGizmo, this.zGizmo, this.xPlaneGizmo, this.yPlaneGizmo, this.zPlaneGizmo].forEach((gizmo) => {\r\n hovered = hovered || gizmo.isHovered;\r\n });\r\n return hovered;\r\n }\r\n\r\n /**\r\n * Creates a PositionGizmo\r\n * @param gizmoLayer The utility layer the gizmo will be added to\r\n @param thickness display gizmo axis thickness\r\n */\r\n constructor(gizmoLayer: UtilityLayerRenderer = UtilityLayerRenderer.DefaultUtilityLayer, thickness: number = 1, gizmoManager?: GizmoManager) {\r\n super(gizmoLayer);\r\n this.xGizmo = new AxisDragGizmo(new Vector3(1, 0, 0), Color3.Red().scale(0.5), gizmoLayer, this, thickness);\r\n this.yGizmo = new AxisDragGizmo(new Vector3(0, 1, 0), Color3.Green().scale(0.5), gizmoLayer, this, thickness);\r\n this.zGizmo = new AxisDragGizmo(new Vector3(0, 0, 1), Color3.Blue().scale(0.5), gizmoLayer, this, thickness);\r\n\r\n this.xPlaneGizmo = new PlaneDragGizmo(new Vector3(1, 0, 0), Color3.Red().scale(0.5), this.gizmoLayer, this);\r\n this.yPlaneGizmo = new PlaneDragGizmo(new Vector3(0, 1, 0), Color3.Green().scale(0.5), this.gizmoLayer, this);\r\n this.zPlaneGizmo = new PlaneDragGizmo(new Vector3(0, 0, 1), Color3.Blue().scale(0.5), this.gizmoLayer, this);\r\n // Relay drag events\r\n [this.xGizmo, this.yGizmo, this.zGizmo, this.xPlaneGizmo, this.yPlaneGizmo, this.zPlaneGizmo].forEach((gizmo) => {\r\n gizmo.dragBehavior.onDragStartObservable.add(() => {\r\n this.onDragStartObservable.notifyObservers({});\r\n });\r\n gizmo.dragBehavior.onDragEndObservable.add(() => {\r\n this.onDragEndObservable.notifyObservers({});\r\n });\r\n });\r\n\r\n this.attachedMesh = null;\r\n\r\n if (gizmoManager) {\r\n gizmoManager.addToAxisCache(this._gizmoAxisCache);\r\n } else {\r\n // Only subscribe to pointer event if gizmoManager isnt\r\n Gizmo.GizmoAxisPointerObserver(gizmoLayer, this._gizmoAxisCache);\r\n }\r\n }\r\n\r\n /**\r\n * If the planar drag gizmo is enabled\r\n * setting this will enable/disable XY, XZ and YZ planes regardless of individual gizmo settings.\r\n */\r\n public set planarGizmoEnabled(value: boolean) {\r\n this._planarGizmoEnabled = value;\r\n [this.xPlaneGizmo, this.yPlaneGizmo, this.zPlaneGizmo].forEach((gizmo) => {\r\n if (gizmo) {\r\n gizmo.isEnabled = value;\r\n if (value) {\r\n if (gizmo.attachedMesh) {\r\n gizmo.attachedMesh = this.attachedMesh;\r\n } else {\r\n gizmo.attachedNode = this.attachedNode;\r\n }\r\n\r\n }\r\n }\r\n }, this);\r\n }\r\n public get planarGizmoEnabled(): boolean {\r\n return this._planarGizmoEnabled;\r\n }\r\n\r\n public set updateGizmoRotationToMatchAttachedMesh(value: boolean) {\r\n this._updateGizmoRotationToMatchAttachedMesh = value;\r\n [this.xGizmo, this.yGizmo, this.zGizmo, this.xPlaneGizmo, this.yPlaneGizmo, this.zPlaneGizmo].forEach((gizmo) => {\r\n if (gizmo) {\r\n gizmo.updateGizmoRotationToMatchAttachedMesh = value;\r\n }\r\n });\r\n }\r\n public get updateGizmoRotationToMatchAttachedMesh() {\r\n return this._updateGizmoRotationToMatchAttachedMesh;\r\n }\r\n\r\n /**\r\n * Drag distance in babylon units that the gizmo will snap to when dragged (Default: 0)\r\n */\r\n public set snapDistance(value: number) {\r\n this._snapDistance = value;\r\n [this.xGizmo, this.yGizmo, this.zGizmo, this.xPlaneGizmo, this.yPlaneGizmo, this.zPlaneGizmo].forEach((gizmo) => {\r\n if (gizmo) {\r\n gizmo.snapDistance = value;\r\n }\r\n });\r\n }\r\n public get snapDistance() {\r\n return this._snapDistance;\r\n }\r\n\r\n /**\r\n * Ratio for the scale of the gizmo (Default: 1)\r\n */\r\n public set scaleRatio(value: number) {\r\n this._scaleRatio = value;\r\n [this.xGizmo, this.yGizmo, this.zGizmo, this.xPlaneGizmo, this.yPlaneGizmo, this.zPlaneGizmo].forEach((gizmo) => {\r\n if (gizmo) {\r\n gizmo.scaleRatio = value;\r\n }\r\n });\r\n }\r\n public get scaleRatio() {\r\n return this._scaleRatio;\r\n }\r\n\r\n /**\r\n * Builds Gizmo Axis Cache to enable features such as hover state preservation and graying out other axis during manipulation\r\n * @param mesh Axis gizmo mesh\r\n * @param cache Gizmo axis definition used for reactive gizmo UI\r\n */\r\n public addToAxisCache(mesh: Mesh, cache: GizmoAxisCache) {\r\n this._gizmoAxisCache.set(mesh, cache);\r\n }\r\n\r\n /**\r\n * Disposes of the gizmo\r\n */\r\n public dispose() {\r\n [this.xGizmo, this.yGizmo, this.zGizmo, this.xPlaneGizmo, this.yPlaneGizmo, this.zPlaneGizmo].forEach((gizmo) => {\r\n if (gizmo) {\r\n gizmo.dispose();\r\n }\r\n });\r\n this._observables.forEach((obs) => {\r\n this.gizmoLayer.utilityLayerScene.onPointerObservable.remove(obs);\r\n });\r\n this.onDragStartObservable.clear();\r\n this.onDragEndObservable.clear();\r\n }\r\n\r\n /**\r\n * CustomMeshes are not supported by this gizmo\r\n * @param mesh The mesh to replace the default mesh of the gizmo\r\n */\r\n public setCustomMesh(mesh: Mesh) {\r\n Logger.Error(\"Custom meshes are not supported on this gizmo, please set the custom meshes on the gizmos contained within this one (gizmo.xGizmo, gizmo.yGizmo, gizmo.zGizmo,gizmo.xPlaneGizmo, gizmo.yPlaneGizmo, gizmo.zPlaneGizmo)\");\r\n }\r\n}\r\n"]}
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { PointerInfoPre, PointerInfo, PointerEventTypes } from "../Events/pointerEvents.js";
|
|
2
2
|
import { AbstractActionManager } from "../Actions/abstractActionManager.js";
|
|
3
|
+
import { PickingInfo } from "../Collisions/pickingInfo.js";
|
|
3
4
|
import { Vector2, Matrix } from "../Maths/math.vector.js";
|
|
4
5
|
import { ActionEvent } from "../Actions/actionEvent.js";
|
|
5
6
|
import { KeyboardEventTypes, KeyboardInfoPre, KeyboardInfo } from "../Events/keyboardEvents.js";
|
|
@@ -427,7 +428,7 @@ var InputManager = /** @class */ (function () {
|
|
|
427
428
|
this._alreadyAttachedTo = elementToAttachTo;
|
|
428
429
|
}
|
|
429
430
|
if (!this._deviceInputSystem) {
|
|
430
|
-
this._deviceInputSystem = DeviceInputSystem.
|
|
431
|
+
this._deviceInputSystem = DeviceInputSystem._Create(engine);
|
|
431
432
|
}
|
|
432
433
|
else {
|
|
433
434
|
this._deviceInputSystem.configureEvents();
|
|
@@ -567,6 +568,10 @@ var InputManager = /** @class */ (function () {
|
|
|
567
568
|
if (!scene.cameraToUseForPointers && !scene.activeCamera) {
|
|
568
569
|
return;
|
|
569
570
|
}
|
|
571
|
+
if (scene.skipPointerMovePicking) {
|
|
572
|
+
_this._processPointerMove(new PickingInfo(), evt);
|
|
573
|
+
return;
|
|
574
|
+
}
|
|
570
575
|
if (!scene.pointerMovePredicate) {
|
|
571
576
|
scene.pointerMovePredicate = function (mesh) {
|
|
572
577
|
return mesh.isPickable &&
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"scene.inputManager.js","sourceRoot":"","sources":["../../../sourceES6/core/Inputs/scene.inputManager.ts"],"names":[],"mappings":"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","sourcesContent":["import { Observable, Observer } from \"../Misc/observable\";\r\nimport { PointerInfoPre, PointerInfo, PointerEventTypes } from \"../Events/pointerEvents\";\r\nimport { 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 { AbstractMesh } from \"../Meshes/abstractMesh\";\r\n\r\nimport { ActionEvent } from \"../Actions/actionEvent\";\r\nimport { KeyboardEventTypes, KeyboardInfoPre, KeyboardInfo } from \"../Events/keyboardEvents\";\r\nimport { DeviceType, PointerInput } from \"../DeviceInput/InputDevices/deviceEnums\";\r\nimport { IEvent, IKeyboardEvent, IMouseEvent, IPointerEvent, IWheelEvent } from \"../Events/deviceInputEvents\";\r\nimport { DeviceInputSystem } from \"../DeviceInput/deviceInputSystem\";\r\nimport { IDeviceEvent, IDeviceInputSystem } from \"../DeviceInput/Interfaces/inputInterfaces\";\r\n\r\ndeclare type Scene = import(\"../scene\").Scene;\r\n\r\n/** @hidden */\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/**\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 /** If you need to check double click without raising a single click at first click, enable this flag */\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: HTMLElement;\r\n\r\n // Observer\r\n private _onInputObserver: Nullable<Observer<IDeviceEvent>>;\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 _delayedSimpleClickTimeout: number;\r\n private _previousDelayedSimpleClickTimeout: number;\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 private _totalPointersPressed = 0;\r\n private _doubleClickOccured = 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\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 _deviceInputSystem: IDeviceInputSystem;\r\n\r\n /**\r\n * Creates a new InputManager\r\n * @param scene defines the hosting scene\r\n */\r\n public constructor(scene: Scene) {\r\n this._scene = scene;\r\n }\r\n\r\n /**\r\n * Gets the mesh that is currently under the pointer\r\n */\r\n public get meshUnderPointer(): Nullable<AbstractMesh> {\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 */\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 */\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 */\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 var 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 var isMeshPicked = pickResult && pickResult.hit && pickResult.pickedMesh ? true : false;\r\n if (isMeshPicked) {\r\n scene.setPointerOverMesh(pickResult!.pickedMesh, evt.pointerId, pickResult);\r\n\r\n if (this._pointerOverMesh && this._pointerOverMesh.actionManager && this._pointerOverMesh.actionManager.hasPointerTriggers) {\r\n if (!scene.doNotHandleCursors && canvas) {\r\n if (this._pointerOverMesh.actionManager.hoverCursor) {\r\n canvas.style.cursor = this._pointerOverMesh.actionManager.hoverCursor;\r\n } else {\r\n canvas.style.cursor = scene.hoverCursor;\r\n }\r\n }\r\n }\r\n } else {\r\n scene.setPointerOverMesh(null, evt.pointerId, pickResult);\r\n }\r\n\r\n for (let step of scene._pointerMoveStage) {\r\n pickResult = step.action(this._unTranslatedPointerX, this._unTranslatedPointerY, pickResult, isMeshPicked, canvas);\r\n }\r\n\r\n if (pickResult) {\r\n let type = evt.type === \"wheel\" || evt.type === \"mousewheel\" || evt.type === \"DOMMouseScroll\" ? PointerEventTypes.POINTERWHEEL : PointerEventTypes.POINTERMOVE;\r\n\r\n if (scene.onPointerMove) {\r\n scene.onPointerMove(evt, pickResult, type);\r\n }\r\n\r\n if (scene.onPointerObservable.hasObservers()) {\r\n let pi = new PointerInfo(type, evt, pickResult);\r\n this._setRayOnPointerInfo(pi);\r\n scene.onPointerObservable.notifyObservers(pi, type);\r\n }\r\n }\r\n }\r\n\r\n // Pointers handling\r\n private _setRayOnPointerInfo(pointerInfo: PointerInfo) {\r\n let scene = this._scene;\r\n if (pointerInfo.pickInfo && !pointerInfo.pickInfo._pickingUnavailable) {\r\n if (!pointerInfo.pickInfo.ray) {\r\n pointerInfo.pickInfo.ray = scene.createPickingRay(pointerInfo.event.offsetX, pointerInfo.event.offsetY, Matrix.Identity(), scene.activeCamera);\r\n }\r\n }\r\n }\r\n\r\n private _checkPrePointerObservable(pickResult: Nullable<PickingInfo>, evt: IPointerEvent, type: number) {\r\n let scene = this._scene;\r\n let pi = new PointerInfoPre(type, evt, this._unTranslatedPointerX, this._unTranslatedPointerY);\r\n if (pickResult) {\r\n pi.ray = pickResult.ray;\r\n if (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 /**\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 let evt = new PointerEvent(\"pointermove\", pointerEventInit);\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 let evt = new PointerEvent(\"pointerdown\", pointerEventInit);\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 let scene = this._scene;\r\n if (pickResult && pickResult.hit && pickResult.pickedMesh) {\r\n this._pickedDownMesh = pickResult.pickedMesh;\r\n var actionManager = pickResult.pickedMesh._getActionManagerForTrigger();\r\n if (actionManager) {\r\n if (actionManager.hasPickTriggers) {\r\n actionManager.processTrigger(5, ActionEvent.CreateNew(pickResult.pickedMesh, evt));\r\n switch (evt.button) {\r\n case 0:\r\n actionManager.processTrigger(2, ActionEvent.CreateNew(pickResult.pickedMesh, evt));\r\n break;\r\n case 1:\r\n actionManager.processTrigger(4, ActionEvent.CreateNew(pickResult.pickedMesh, evt));\r\n break;\r\n case 2:\r\n actionManager.processTrigger(3, ActionEvent.CreateNew(pickResult.pickedMesh, evt));\r\n break;\r\n }\r\n }\r\n\r\n if (actionManager.hasSpecificTrigger(8)) {\r\n window.setTimeout(() => {\r\n var 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(8) &&\r\n mesh === this._pickedDownMesh)\r\n ),\r\n false,\r\n scene.cameraToUseForPointers\r\n );\r\n\r\n if (pickResult && pickResult.hit && pickResult.pickedMesh && actionManager) {\r\n if (this._totalPointersPressed !== 0 && Date.now() - this._startingPointerTime > InputManager.LongPressDelay && !this._isPointerSwiping()) {\r\n this._startingPointerTime = 0;\r\n actionManager.processTrigger(8, ActionEvent.CreateNew(pickResult.pickedMesh, evt));\r\n }\r\n }\r\n }, InputManager.LongPressDelay);\r\n }\r\n }\r\n } else {\r\n for (let step of scene._pointerDownStage) {\r\n pickResult = step.action(this._unTranslatedPointerX, this._unTranslatedPointerY, pickResult, evt);\r\n }\r\n }\r\n\r\n if (pickResult) {\r\n let type = PointerEventTypes.POINTERDOWN;\r\n\r\n if (scene.onPointerDown) {\r\n scene.onPointerDown(evt, pickResult, type);\r\n }\r\n\r\n if (scene.onPointerObservable.hasObservers()) {\r\n let pi = new PointerInfo(type, evt, pickResult);\r\n this._setRayOnPointerInfo(pi);\r\n scene.onPointerObservable.notifyObservers(pi, type);\r\n }\r\n }\r\n }\r\n\r\n /** @hidden */\r\n public _isPointerSwiping(): boolean {\r\n return (\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\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 let evt = new PointerEvent(\"pointerup\", pointerEventInit);\r\n let 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 let scene = this._scene;\r\n if (pickResult && pickResult && 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.hasObservers()) {\r\n let type = PointerEventTypes.POINTERPICK;\r\n let pi = new PointerInfo(type, evt, pickResult);\r\n this._setRayOnPointerInfo(pi);\r\n scene.onPointerObservable.notifyObservers(pi, type);\r\n }\r\n }\r\n let actionManager = pickResult.pickedMesh._getActionManagerForTrigger();\r\n if (actionManager && !clickInfo.ignore) {\r\n actionManager.processTrigger(7, ActionEvent.CreateNew(pickResult.pickedMesh, evt, pickResult));\r\n\r\n if (!clickInfo.hasSwiped && clickInfo.singleClick) {\r\n actionManager.processTrigger(1, ActionEvent.CreateNew(pickResult.pickedMesh, evt, pickResult));\r\n }\r\n\r\n let doubleClickActionManager = pickResult.pickedMesh._getActionManagerForTrigger(6);\r\n if (clickInfo.doubleClick && doubleClickActionManager) {\r\n doubleClickActionManager.processTrigger(6, ActionEvent.CreateNew(pickResult.pickedMesh, evt, pickResult));\r\n }\r\n }\r\n } else {\r\n if (!clickInfo.ignore) {\r\n for (let step of scene._pointerUpStage) {\r\n pickResult = step.action(this._unTranslatedPointerX, this._unTranslatedPointerY, pickResult, evt);\r\n }\r\n }\r\n }\r\n\r\n if (this._pickedDownMesh && this._pickedDownMesh !== this._pickedUpMesh) {\r\n let pickedDownActionManager = this._pickedDownMesh._getActionManagerForTrigger(16);\r\n if (pickedDownActionManager) {\r\n pickedDownActionManager.processTrigger(16, ActionEvent.CreateNew(this._pickedDownMesh, evt));\r\n }\r\n }\r\n\r\n let type = 0;\r\n if (scene.onPointerObservable.hasObservers()) {\r\n if (!clickInfo.ignore && !clickInfo.hasSwiped) {\r\n if (clickInfo.singleClick && scene.onPointerObservable.hasSpecificMask(PointerEventTypes.POINTERTAP)) {\r\n type = PointerEventTypes.POINTERTAP;\r\n } else if (clickInfo.doubleClick && scene.onPointerObservable.hasSpecificMask(PointerEventTypes.POINTERDOUBLETAP)) {\r\n type = PointerEventTypes.POINTERDOUBLETAP;\r\n }\r\n if (type) {\r\n let pi = new PointerInfo(type, evt, pickResult);\r\n this._setRayOnPointerInfo(pi);\r\n scene.onPointerObservable.notifyObservers(pi, type);\r\n }\r\n }\r\n\r\n if (!clickInfo.ignore) {\r\n type = PointerEventTypes.POINTERUP;\r\n\r\n let pi = new PointerInfo(type, evt, pickResult);\r\n this._setRayOnPointerInfo(pi);\r\n scene.onPointerObservable.notifyObservers(pi, type);\r\n }\r\n }\r\n\r\n if (scene.onPointerUp && !clickInfo.ignore) {\r\n scene.onPointerUp(evt, pickResult, type);\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) { this._alreadyAttachedTo = elementToAttachTo; }\r\n\r\n if (!this._deviceInputSystem) {\r\n this._deviceInputSystem = DeviceInputSystem.Create(engine);\r\n }\r\n else {\r\n this._deviceInputSystem.configureEvents();\r\n }\r\n\r\n this._initActionManager = (act: Nullable<AbstractActionManager>, clickInfo: _ClickInfo): Nullable<AbstractActionManager> => {\r\n if (!this._meshPickProceed) {\r\n let pickResult = scene.pick(this._unTranslatedPointerX, this._unTranslatedPointerY, scene.pointerDownPredicate, false, scene.cameraToUseForPointers);\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 cb(clickInfo, this._currentPickResult);\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 let 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 if (checkPicking) {\r\n let 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(6)) {\r\n act = this._initActionManager(act, clickInfo);\r\n if (act) {\r\n checkSingleClickImmediately = !act.hasSpecificTrigger(6);\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 // wait that no double click has been raised during the double click delay\r\n this._previousDelayedSimpleClickTimeout = this._delayedSimpleClickTimeout;\r\n this._delayedSimpleClickTimeout = window.setTimeout(this._delayedSimpleClick.bind(this, btn, clickInfo, cb), InputManager.DoubleClickDelay);\r\n }\r\n\r\n let checkDoubleClick = obs1.hasSpecificMask(PointerEventTypes.POINTERDOUBLETAP) || obs2.hasSpecificMask(PointerEventTypes.POINTERDOUBLETAP);\r\n if (!checkDoubleClick && AbstractActionManager.HasSpecificTrigger(6)) {\r\n act = this._initActionManager(act, clickInfo);\r\n if (act) {\r\n checkDoubleClick = act.hasSpecificTrigger(6);\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 (InputManager.ExclusiveDoubleClickMode && this._previousDelayedSimpleClickTimeout) {\r\n clearTimeout(this._previousDelayedSimpleClickTimeout);\r\n }\r\n this._previousDelayedSimpleClickTimeout = this._delayedSimpleClickTimeout;\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 (this._previousDelayedSimpleClickTimeout) {\r\n clearTimeout(this._previousDelayedSimpleClickTimeout);\r\n }\r\n this._previousDelayedSimpleClickTimeout = this._delayedSimpleClickTimeout;\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 if (!needToIgnoreNext) {\r\n cb(clickInfo, this._currentPickResult);\r\n }\r\n };\r\n\r\n this._onPointerMove = (evt: IMouseEvent) => {\r\n // preserve compatibility with Safari when pointerId is not present\r\n if ((evt as IPointerEvent).pointerId === undefined) {\r\n ((evt as IPointerEvent) as any).pointerId = 0;\r\n }\r\n\r\n this._updatePointerPosition(evt as IPointerEvent);\r\n\r\n // PreObservable support\r\n if (\r\n this._checkPrePointerObservable(\r\n null,\r\n evt as IPointerEvent,\r\n evt.type === \"wheel\" || evt.type === \"mousewheel\" || evt.type === \"DOMMouseScroll\" ? 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.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 // Meshes\r\n var pickResult = scene.pick(this._unTranslatedPointerX, this._unTranslatedPointerY, scene.pointerMovePredicate, false, scene.cameraToUseForPointers, scene.pointerMoveTrianglePredicate);\r\n\r\n this._processPointerMove(pickResult, evt as IPointerEvent);\r\n };\r\n\r\n this._onPointerDown = (evt: IPointerEvent) => {\r\n this._totalPointersPressed++;\r\n this._pickedDownMesh = null;\r\n this._meshPickProceed = false;\r\n\r\n // preserve compatibility with Safari when pointerId is not present\r\n if (evt.pointerId === undefined) {\r\n (evt as any).pointerId = 0;\r\n }\r\n\r\n this._updatePointerPosition(evt);\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 var pickResult = scene.pick(this._unTranslatedPointerX, this._unTranslatedPointerY, scene.pointerDownPredicate, false, scene.cameraToUseForPointers);\r\n\r\n this._processPointerDown(pickResult, evt);\r\n };\r\n\r\n this._onPointerUp = (evt: IPointerEvent) => {\r\n if (this._totalPointersPressed === 0) {\r\n // We are attaching the pointer up to windows because of a bug in FF\r\n return; // So we need to test it the pointer down was pressed before.\r\n }\r\n\r\n this._totalPointersPressed--;\r\n this._pickedUpMesh = null;\r\n this._meshPickProceed = false;\r\n\r\n // preserve compatibility with Safari when pointerId is not present\r\n if (evt.pointerId === undefined) {\r\n (evt as any).pointerId = 0;\r\n }\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 if (!clickInfo.ignore) {\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 return;\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 return;\r\n }\r\n }\r\n }\r\n if (this._checkPrePointerObservable(null, evt, PointerEventTypes.POINTERUP)) {\r\n return;\r\n }\r\n }\r\n }\r\n\r\n if (!this._pointerCaptures[evt.pointerId] && evt.buttons > 0) {\r\n return;\r\n }\r\n\r\n this._pointerCaptures[evt.pointerId] = false;\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) || scene.onPointerObservable.hasObservers())) {\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 };\r\n\r\n this._onKeyDown = (evt: IKeyboardEvent) => {\r\n let type = KeyboardEventTypes.KEYDOWN;\r\n if (scene.onPreKeyboardObservable.hasObservers()) {\r\n let pi = new KeyboardInfoPre(type, evt);\r\n scene.onPreKeyboardObservable.notifyObservers(pi, type);\r\n if (pi.skipOnPointerObservable) {\r\n return;\r\n }\r\n }\r\n\r\n if (scene.onKeyboardObservable.hasObservers()) {\r\n let 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(14, ActionEvent.CreateNewFromScene(scene, evt));\r\n }\r\n };\r\n\r\n this._onKeyUp = (evt: IKeyboardEvent) => {\r\n let type = KeyboardEventTypes.KEYUP;\r\n if (scene.onPreKeyboardObservable.hasObservers()) {\r\n let pi = new KeyboardInfoPre(type, evt);\r\n scene.onPreKeyboardObservable.notifyObservers(pi, type);\r\n if (pi.skipOnPointerObservable) {\r\n return;\r\n }\r\n }\r\n\r\n if (scene.onKeyboardObservable.hasObservers()) {\r\n let 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(15, ActionEvent.CreateNewFromScene(scene, evt));\r\n }\r\n };\r\n\r\n this._onInputObserver = this._deviceInputSystem.onInputChangedObservable.add((eventData) => {\r\n const evt: IEvent = eventData;\r\n // Keyboard Events\r\n if (eventData.deviceType === DeviceType.Keyboard) {\r\n if (eventData.currentState === 1) {\r\n this._onKeyDown(evt as IKeyboardEvent);\r\n }\r\n\r\n if (eventData.currentState === 0) {\r\n this._onKeyUp(evt as IKeyboardEvent);\r\n }\r\n }\r\n\r\n // Pointer Events\r\n if (eventData.deviceType === DeviceType.Mouse || eventData.deviceType === DeviceType.Touch) {\r\n if (attachDown && eventData.inputIndex >= PointerInput.LeftClick && eventData.inputIndex <= PointerInput.RightClick && eventData.currentState === 1) {\r\n this._onPointerDown(evt as IPointerEvent);\r\n }\r\n\r\n if (attachUp && eventData.inputIndex >= PointerInput.LeftClick && eventData.inputIndex <= PointerInput.RightClick && eventData.currentState === 0) {\r\n this._onPointerUp(evt as IPointerEvent);\r\n }\r\n\r\n if (attachMove) {\r\n if (\r\n eventData.inputIndex === PointerInput.Horizontal ||\r\n eventData.inputIndex === PointerInput.Vertical ||\r\n eventData.inputIndex === PointerInput.DeltaHorizontal ||\r\n eventData.inputIndex === PointerInput.DeltaVertical\r\n ) {\r\n this._onPointerMove(evt as IPointerEvent);\r\n } else if (eventData.inputIndex === PointerInput.MouseWheelX || eventData.inputIndex === PointerInput.MouseWheelY || eventData.inputIndex === PointerInput.MouseWheelZ) {\r\n this._onPointerMove(evt as IWheelEvent);\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\r\n this._deviceInputSystem.onInputChangedObservable.remove(this._onInputObserver);\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 }\r\n }\r\n\r\n /**\r\n * Force the value of meshUnderPointer\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 */\r\n public setPointerOverMesh(mesh: Nullable<AbstractMesh>, pointerId: number = 0, pickResult?: Nullable<PickingInfo>): void {\r\n if (this._meshUnderPointerId[pointerId] === mesh) {\r\n return;\r\n }\r\n\r\n let underPointerMesh = this._meshUnderPointerId[pointerId];\r\n\r\n let actionManager: Nullable<AbstractActionManager>;\r\n if (underPointerMesh) {\r\n actionManager = underPointerMesh._getActionManagerForTrigger(10);\r\n if (actionManager) {\r\n actionManager.processTrigger(10, ActionEvent.CreateNew(underPointerMesh, undefined, { 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(9);\r\n if (actionManager) {\r\n actionManager.processTrigger(9, ActionEvent.CreateNew(mesh, undefined, { pointerId, pickResult }));\r\n }\r\n } else {\r\n delete this._meshUnderPointerId[pointerId];\r\n this._pointerOverMesh = null;\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._pointerOverMesh;\r\n }\r\n\r\n /** @hidden */\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":["../../../sourceES6/core/Inputs/scene.inputManager.ts"],"names":[],"mappings":"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","sourcesContent":["import { Observable, Observer } from \"../Misc/observable\";\r\nimport { PointerInfoPre, PointerInfo, PointerEventTypes } from \"../Events/pointerEvents\";\r\nimport { 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 { AbstractMesh } from \"../Meshes/abstractMesh\";\r\n\r\nimport { ActionEvent } from \"../Actions/actionEvent\";\r\nimport { KeyboardEventTypes, KeyboardInfoPre, KeyboardInfo } from \"../Events/keyboardEvents\";\r\nimport { DeviceType, PointerInput } from \"../DeviceInput/InputDevices/deviceEnums\";\r\nimport { IEvent, IKeyboardEvent, IMouseEvent, IPointerEvent, IWheelEvent } from \"../Events/deviceInputEvents\";\r\nimport { DeviceInputSystem } from \"../DeviceInput/deviceInputSystem\";\r\nimport { IDeviceEvent } from \"../DeviceInput/Interfaces/inputInterfaces\";\r\n\r\ndeclare type Scene = import(\"../scene\").Scene;\r\n\r\n/** @hidden */\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/**\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 /** If you need to check double click without raising a single click at first click, enable this flag */\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: HTMLElement;\r\n\r\n // Observer\r\n private _onInputObserver: Nullable<Observer<IDeviceEvent>>;\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 _delayedSimpleClickTimeout: number;\r\n private _previousDelayedSimpleClickTimeout: number;\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 private _totalPointersPressed = 0;\r\n private _doubleClickOccured = 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\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 _deviceInputSystem: DeviceInputSystem;\r\n\r\n /**\r\n * Creates a new InputManager\r\n * @param scene defines the hosting scene\r\n */\r\n public constructor(scene: Scene) {\r\n this._scene = scene;\r\n }\r\n\r\n /**\r\n * Gets the mesh that is currently under the pointer\r\n */\r\n public get meshUnderPointer(): Nullable<AbstractMesh> {\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 */\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 */\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 */\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 var 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 var isMeshPicked = pickResult && pickResult.hit && pickResult.pickedMesh ? true : false;\r\n if (isMeshPicked) {\r\n scene.setPointerOverMesh(pickResult!.pickedMesh, evt.pointerId, pickResult);\r\n\r\n if (this._pointerOverMesh && this._pointerOverMesh.actionManager && this._pointerOverMesh.actionManager.hasPointerTriggers) {\r\n if (!scene.doNotHandleCursors && canvas) {\r\n if (this._pointerOverMesh.actionManager.hoverCursor) {\r\n canvas.style.cursor = this._pointerOverMesh.actionManager.hoverCursor;\r\n } else {\r\n canvas.style.cursor = scene.hoverCursor;\r\n }\r\n }\r\n }\r\n } else {\r\n scene.setPointerOverMesh(null, evt.pointerId, pickResult);\r\n }\r\n\r\n for (let step of scene._pointerMoveStage) {\r\n pickResult = step.action(this._unTranslatedPointerX, this._unTranslatedPointerY, pickResult, isMeshPicked, canvas);\r\n }\r\n\r\n if (pickResult) {\r\n let type = evt.type === \"wheel\" || evt.type === \"mousewheel\" || evt.type === \"DOMMouseScroll\" ? PointerEventTypes.POINTERWHEEL : PointerEventTypes.POINTERMOVE;\r\n\r\n if (scene.onPointerMove) {\r\n scene.onPointerMove(evt, pickResult, type);\r\n }\r\n\r\n if (scene.onPointerObservable.hasObservers()) {\r\n let pi = new PointerInfo(type, evt, pickResult);\r\n this._setRayOnPointerInfo(pi);\r\n scene.onPointerObservable.notifyObservers(pi, type);\r\n }\r\n }\r\n }\r\n\r\n // Pointers handling\r\n private _setRayOnPointerInfo(pointerInfo: PointerInfo) {\r\n let scene = this._scene;\r\n if (pointerInfo.pickInfo && !pointerInfo.pickInfo._pickingUnavailable) {\r\n if (!pointerInfo.pickInfo.ray) {\r\n pointerInfo.pickInfo.ray = scene.createPickingRay(pointerInfo.event.offsetX, pointerInfo.event.offsetY, Matrix.Identity(), scene.activeCamera);\r\n }\r\n }\r\n }\r\n\r\n private _checkPrePointerObservable(pickResult: Nullable<PickingInfo>, evt: IPointerEvent, type: number) {\r\n let scene = this._scene;\r\n let pi = new PointerInfoPre(type, evt, this._unTranslatedPointerX, this._unTranslatedPointerY);\r\n if (pickResult) {\r\n pi.ray = pickResult.ray;\r\n if (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 /**\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 let evt = new PointerEvent(\"pointermove\", pointerEventInit);\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 let evt = new PointerEvent(\"pointerdown\", pointerEventInit);\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 let scene = this._scene;\r\n if (pickResult && pickResult.hit && pickResult.pickedMesh) {\r\n this._pickedDownMesh = pickResult.pickedMesh;\r\n var actionManager = pickResult.pickedMesh._getActionManagerForTrigger();\r\n if (actionManager) {\r\n if (actionManager.hasPickTriggers) {\r\n actionManager.processTrigger(5, ActionEvent.CreateNew(pickResult.pickedMesh, evt));\r\n switch (evt.button) {\r\n case 0:\r\n actionManager.processTrigger(2, ActionEvent.CreateNew(pickResult.pickedMesh, evt));\r\n break;\r\n case 1:\r\n actionManager.processTrigger(4, ActionEvent.CreateNew(pickResult.pickedMesh, evt));\r\n break;\r\n case 2:\r\n actionManager.processTrigger(3, ActionEvent.CreateNew(pickResult.pickedMesh, evt));\r\n break;\r\n }\r\n }\r\n\r\n if (actionManager.hasSpecificTrigger(8)) {\r\n window.setTimeout(() => {\r\n var 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(8) &&\r\n mesh === this._pickedDownMesh)\r\n ),\r\n false,\r\n scene.cameraToUseForPointers\r\n );\r\n\r\n if (pickResult && pickResult.hit && pickResult.pickedMesh && actionManager) {\r\n if (this._totalPointersPressed !== 0 && Date.now() - this._startingPointerTime > InputManager.LongPressDelay && !this._isPointerSwiping()) {\r\n this._startingPointerTime = 0;\r\n actionManager.processTrigger(8, ActionEvent.CreateNew(pickResult.pickedMesh, evt));\r\n }\r\n }\r\n }, InputManager.LongPressDelay);\r\n }\r\n }\r\n } else {\r\n for (let step of scene._pointerDownStage) {\r\n pickResult = step.action(this._unTranslatedPointerX, this._unTranslatedPointerY, pickResult, evt);\r\n }\r\n }\r\n\r\n if (pickResult) {\r\n let type = PointerEventTypes.POINTERDOWN;\r\n\r\n if (scene.onPointerDown) {\r\n scene.onPointerDown(evt, pickResult, type);\r\n }\r\n\r\n if (scene.onPointerObservable.hasObservers()) {\r\n let pi = new PointerInfo(type, evt, pickResult);\r\n this._setRayOnPointerInfo(pi);\r\n scene.onPointerObservable.notifyObservers(pi, type);\r\n }\r\n }\r\n }\r\n\r\n /** @hidden */\r\n public _isPointerSwiping(): boolean {\r\n return (\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\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 let evt = new PointerEvent(\"pointerup\", pointerEventInit);\r\n let 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 let scene = this._scene;\r\n if (pickResult && pickResult && 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.hasObservers()) {\r\n let type = PointerEventTypes.POINTERPICK;\r\n let pi = new PointerInfo(type, evt, pickResult);\r\n this._setRayOnPointerInfo(pi);\r\n scene.onPointerObservable.notifyObservers(pi, type);\r\n }\r\n }\r\n let actionManager = pickResult.pickedMesh._getActionManagerForTrigger();\r\n if (actionManager && !clickInfo.ignore) {\r\n actionManager.processTrigger(7, ActionEvent.CreateNew(pickResult.pickedMesh, evt, pickResult));\r\n\r\n if (!clickInfo.hasSwiped && clickInfo.singleClick) {\r\n actionManager.processTrigger(1, ActionEvent.CreateNew(pickResult.pickedMesh, evt, pickResult));\r\n }\r\n\r\n let doubleClickActionManager = pickResult.pickedMesh._getActionManagerForTrigger(6);\r\n if (clickInfo.doubleClick && doubleClickActionManager) {\r\n doubleClickActionManager.processTrigger(6, ActionEvent.CreateNew(pickResult.pickedMesh, evt, pickResult));\r\n }\r\n }\r\n } else {\r\n if (!clickInfo.ignore) {\r\n for (let step of scene._pointerUpStage) {\r\n pickResult = step.action(this._unTranslatedPointerX, this._unTranslatedPointerY, pickResult, evt);\r\n }\r\n }\r\n }\r\n\r\n if (this._pickedDownMesh && this._pickedDownMesh !== this._pickedUpMesh) {\r\n let pickedDownActionManager = this._pickedDownMesh._getActionManagerForTrigger(16);\r\n if (pickedDownActionManager) {\r\n pickedDownActionManager.processTrigger(16, ActionEvent.CreateNew(this._pickedDownMesh, evt));\r\n }\r\n }\r\n\r\n let type = 0;\r\n if (scene.onPointerObservable.hasObservers()) {\r\n if (!clickInfo.ignore && !clickInfo.hasSwiped) {\r\n if (clickInfo.singleClick && scene.onPointerObservable.hasSpecificMask(PointerEventTypes.POINTERTAP)) {\r\n type = PointerEventTypes.POINTERTAP;\r\n } else if (clickInfo.doubleClick && scene.onPointerObservable.hasSpecificMask(PointerEventTypes.POINTERDOUBLETAP)) {\r\n type = PointerEventTypes.POINTERDOUBLETAP;\r\n }\r\n if (type) {\r\n let pi = new PointerInfo(type, evt, pickResult);\r\n this._setRayOnPointerInfo(pi);\r\n scene.onPointerObservable.notifyObservers(pi, type);\r\n }\r\n }\r\n\r\n if (!clickInfo.ignore) {\r\n type = PointerEventTypes.POINTERUP;\r\n\r\n let pi = new PointerInfo(type, evt, pickResult);\r\n this._setRayOnPointerInfo(pi);\r\n scene.onPointerObservable.notifyObservers(pi, type);\r\n }\r\n }\r\n\r\n if (scene.onPointerUp && !clickInfo.ignore) {\r\n scene.onPointerUp(evt, pickResult, type);\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) { this._alreadyAttachedTo = elementToAttachTo; }\r\n\r\n if (!this._deviceInputSystem) {\r\n this._deviceInputSystem = DeviceInputSystem._Create(engine);\r\n }\r\n else {\r\n this._deviceInputSystem.configureEvents();\r\n }\r\n\r\n this._initActionManager = (act: Nullable<AbstractActionManager>, clickInfo: _ClickInfo): Nullable<AbstractActionManager> => {\r\n if (!this._meshPickProceed) {\r\n let pickResult = scene.pick(this._unTranslatedPointerX, this._unTranslatedPointerY, scene.pointerDownPredicate, false, scene.cameraToUseForPointers);\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 cb(clickInfo, this._currentPickResult);\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 let 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 if (checkPicking) {\r\n let 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(6)) {\r\n act = this._initActionManager(act, clickInfo);\r\n if (act) {\r\n checkSingleClickImmediately = !act.hasSpecificTrigger(6);\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 // wait that no double click has been raised during the double click delay\r\n this._previousDelayedSimpleClickTimeout = this._delayedSimpleClickTimeout;\r\n this._delayedSimpleClickTimeout = window.setTimeout(this._delayedSimpleClick.bind(this, btn, clickInfo, cb), InputManager.DoubleClickDelay);\r\n }\r\n\r\n let checkDoubleClick = obs1.hasSpecificMask(PointerEventTypes.POINTERDOUBLETAP) || obs2.hasSpecificMask(PointerEventTypes.POINTERDOUBLETAP);\r\n if (!checkDoubleClick && AbstractActionManager.HasSpecificTrigger(6)) {\r\n act = this._initActionManager(act, clickInfo);\r\n if (act) {\r\n checkDoubleClick = act.hasSpecificTrigger(6);\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 (InputManager.ExclusiveDoubleClickMode && this._previousDelayedSimpleClickTimeout) {\r\n clearTimeout(this._previousDelayedSimpleClickTimeout);\r\n }\r\n this._previousDelayedSimpleClickTimeout = this._delayedSimpleClickTimeout;\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 (this._previousDelayedSimpleClickTimeout) {\r\n clearTimeout(this._previousDelayedSimpleClickTimeout);\r\n }\r\n this._previousDelayedSimpleClickTimeout = this._delayedSimpleClickTimeout;\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 if (!needToIgnoreNext) {\r\n cb(clickInfo, this._currentPickResult);\r\n }\r\n };\r\n\r\n this._onPointerMove = (evt: IMouseEvent) => {\r\n // preserve compatibility with Safari when pointerId is not present\r\n if ((evt as IPointerEvent).pointerId === undefined) {\r\n ((evt as IPointerEvent) as any).pointerId = 0;\r\n }\r\n\r\n this._updatePointerPosition(evt as IPointerEvent);\r\n\r\n // PreObservable support\r\n if (\r\n this._checkPrePointerObservable(\r\n null,\r\n evt as IPointerEvent,\r\n evt.type === \"wheel\" || evt.type === \"mousewheel\" || evt.type === \"DOMMouseScroll\" ? 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 // Meshes\r\n var pickResult = scene.pick(this._unTranslatedPointerX, this._unTranslatedPointerY, scene.pointerMovePredicate, false, scene.cameraToUseForPointers, scene.pointerMoveTrianglePredicate);\r\n\r\n this._processPointerMove(pickResult, evt as IPointerEvent);\r\n };\r\n\r\n this._onPointerDown = (evt: IPointerEvent) => {\r\n this._totalPointersPressed++;\r\n this._pickedDownMesh = null;\r\n this._meshPickProceed = false;\r\n\r\n // preserve compatibility with Safari when pointerId is not present\r\n if (evt.pointerId === undefined) {\r\n (evt as any).pointerId = 0;\r\n }\r\n\r\n this._updatePointerPosition(evt);\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 var pickResult = scene.pick(this._unTranslatedPointerX, this._unTranslatedPointerY, scene.pointerDownPredicate, false, scene.cameraToUseForPointers);\r\n\r\n this._processPointerDown(pickResult, evt);\r\n };\r\n\r\n this._onPointerUp = (evt: IPointerEvent) => {\r\n if (this._totalPointersPressed === 0) {\r\n // We are attaching the pointer up to windows because of a bug in FF\r\n return; // So we need to test it the pointer down was pressed before.\r\n }\r\n\r\n this._totalPointersPressed--;\r\n this._pickedUpMesh = null;\r\n this._meshPickProceed = false;\r\n\r\n // preserve compatibility with Safari when pointerId is not present\r\n if (evt.pointerId === undefined) {\r\n (evt as any).pointerId = 0;\r\n }\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 if (!clickInfo.ignore) {\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 return;\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 return;\r\n }\r\n }\r\n }\r\n if (this._checkPrePointerObservable(null, evt, PointerEventTypes.POINTERUP)) {\r\n return;\r\n }\r\n }\r\n }\r\n\r\n if (!this._pointerCaptures[evt.pointerId] && evt.buttons > 0) {\r\n return;\r\n }\r\n\r\n this._pointerCaptures[evt.pointerId] = false;\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) || scene.onPointerObservable.hasObservers())) {\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 };\r\n\r\n this._onKeyDown = (evt: IKeyboardEvent) => {\r\n let type = KeyboardEventTypes.KEYDOWN;\r\n if (scene.onPreKeyboardObservable.hasObservers()) {\r\n let pi = new KeyboardInfoPre(type, evt);\r\n scene.onPreKeyboardObservable.notifyObservers(pi, type);\r\n if (pi.skipOnPointerObservable) {\r\n return;\r\n }\r\n }\r\n\r\n if (scene.onKeyboardObservable.hasObservers()) {\r\n let 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(14, ActionEvent.CreateNewFromScene(scene, evt));\r\n }\r\n };\r\n\r\n this._onKeyUp = (evt: IKeyboardEvent) => {\r\n let type = KeyboardEventTypes.KEYUP;\r\n if (scene.onPreKeyboardObservable.hasObservers()) {\r\n let pi = new KeyboardInfoPre(type, evt);\r\n scene.onPreKeyboardObservable.notifyObservers(pi, type);\r\n if (pi.skipOnPointerObservable) {\r\n return;\r\n }\r\n }\r\n\r\n if (scene.onKeyboardObservable.hasObservers()) {\r\n let 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(15, ActionEvent.CreateNewFromScene(scene, evt));\r\n }\r\n };\r\n\r\n this._onInputObserver = this._deviceInputSystem.onInputChangedObservable.add((eventData) => {\r\n const evt: IEvent = eventData;\r\n // Keyboard Events\r\n if (eventData.deviceType === DeviceType.Keyboard) {\r\n if (eventData.currentState === 1) {\r\n this._onKeyDown(evt as IKeyboardEvent);\r\n }\r\n\r\n if (eventData.currentState === 0) {\r\n this._onKeyUp(evt as IKeyboardEvent);\r\n }\r\n }\r\n\r\n // Pointer Events\r\n if (eventData.deviceType === DeviceType.Mouse || eventData.deviceType === DeviceType.Touch) {\r\n if (attachDown && eventData.inputIndex >= PointerInput.LeftClick && eventData.inputIndex <= PointerInput.RightClick && eventData.currentState === 1) {\r\n this._onPointerDown(evt as IPointerEvent);\r\n }\r\n\r\n if (attachUp && eventData.inputIndex >= PointerInput.LeftClick && eventData.inputIndex <= PointerInput.RightClick && eventData.currentState === 0) {\r\n this._onPointerUp(evt as IPointerEvent);\r\n }\r\n\r\n if (attachMove) {\r\n if (\r\n eventData.inputIndex === PointerInput.Horizontal ||\r\n eventData.inputIndex === PointerInput.Vertical ||\r\n eventData.inputIndex === PointerInput.DeltaHorizontal ||\r\n eventData.inputIndex === PointerInput.DeltaVertical\r\n ) {\r\n this._onPointerMove(evt as IPointerEvent);\r\n } else if (eventData.inputIndex === PointerInput.MouseWheelX || eventData.inputIndex === PointerInput.MouseWheelY || eventData.inputIndex === PointerInput.MouseWheelZ) {\r\n this._onPointerMove(evt as IWheelEvent);\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\r\n this._deviceInputSystem.onInputChangedObservable.remove(this._onInputObserver);\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 }\r\n }\r\n\r\n /**\r\n * Force the value of meshUnderPointer\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 */\r\n public setPointerOverMesh(mesh: Nullable<AbstractMesh>, pointerId: number = 0, pickResult?: Nullable<PickingInfo>): void {\r\n if (this._meshUnderPointerId[pointerId] === mesh) {\r\n return;\r\n }\r\n\r\n let underPointerMesh = this._meshUnderPointerId[pointerId];\r\n\r\n let actionManager: Nullable<AbstractActionManager>;\r\n if (underPointerMesh) {\r\n actionManager = underPointerMesh._getActionManagerForTrigger(10);\r\n if (actionManager) {\r\n actionManager.processTrigger(10, ActionEvent.CreateNew(underPointerMesh, undefined, { 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(9);\r\n if (actionManager) {\r\n actionManager.processTrigger(9, ActionEvent.CreateNew(mesh, undefined, { pointerId, pickResult }));\r\n }\r\n } else {\r\n delete this._meshUnderPointerId[pointerId];\r\n this._pointerOverMesh = null;\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._pointerOverMesh;\r\n }\r\n\r\n /** @hidden */\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"]}
|
package/Layers/effectLayer.d.ts
CHANGED
|
@@ -120,6 +120,10 @@ export declare abstract class EffectLayer {
|
|
|
120
120
|
* An event triggered when the effect layer changes its size.
|
|
121
121
|
*/
|
|
122
122
|
onSizeChangedObservable: Observable<EffectLayer>;
|
|
123
|
+
/**
|
|
124
|
+
* Gets the main texture where the effect is rendered
|
|
125
|
+
*/
|
|
126
|
+
get mainTexture(): RenderTargetTexture;
|
|
123
127
|
/** @hidden */
|
|
124
128
|
static _SceneComponentInitialization: (scene: Scene) => void;
|
|
125
129
|
/**
|
package/Layers/effectLayer.js
CHANGED
|
@@ -113,6 +113,16 @@ var EffectLayer = /** @class */ (function () {
|
|
|
113
113
|
enumerable: false,
|
|
114
114
|
configurable: true
|
|
115
115
|
});
|
|
116
|
+
Object.defineProperty(EffectLayer.prototype, "mainTexture", {
|
|
117
|
+
/**
|
|
118
|
+
* Gets the main texture where the effect is rendered
|
|
119
|
+
*/
|
|
120
|
+
get: function () {
|
|
121
|
+
return this._mainTexture;
|
|
122
|
+
},
|
|
123
|
+
enumerable: false,
|
|
124
|
+
configurable: true
|
|
125
|
+
});
|
|
116
126
|
/**
|
|
117
127
|
* Sets a specific material to be used to render a mesh/a list of meshes in the layer
|
|
118
128
|
* @param mesh mesh or array of meshes
|