@babylonjs/core 5.24.0 → 5.26.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/Actions/action.d.ts +12 -21
- package/Actions/action.js +8 -17
- package/Actions/action.js.map +1 -1
- package/Actions/actionManager.d.ts +2 -5
- package/Actions/actionManager.js +2 -5
- package/Actions/actionManager.js.map +1 -1
- package/Actions/condition.d.ts +9 -50
- package/Actions/condition.js +3 -26
- package/Actions/condition.js.map +1 -1
- package/Actions/directActions.d.ts +7 -7
- package/Actions/directActions.js +7 -7
- package/Actions/directActions.js.map +1 -1
- package/Actions/directAudioActions.d.ts +2 -2
- package/Actions/directAudioActions.js +2 -2
- package/Actions/directAudioActions.js.map +1 -1
- package/Actions/interpolateValueAction.d.ts +1 -1
- package/Actions/interpolateValueAction.js +1 -1
- package/Actions/interpolateValueAction.js.map +1 -1
- package/Animations/animatable.d.ts +5 -6
- package/Animations/animatable.js +1 -2
- package/Animations/animatable.js.map +1 -1
- package/Animations/animation.d.ts +6 -20
- package/Animations/animation.js +6 -20
- package/Animations/animation.js.map +1 -1
- package/Animations/animationEvent.d.ts +1 -1
- package/Animations/animationEvent.js +1 -1
- package/Animations/animationEvent.js.map +1 -1
- package/Animations/animationGroup.d.ts +1 -1
- package/Animations/animationGroup.js +1 -1
- package/Animations/animationGroup.js.map +1 -1
- package/Animations/easing.d.ts +13 -26
- package/Animations/easing.js +13 -26
- package/Animations/easing.js.map +1 -1
- package/Animations/runtimeAnimation.d.ts +3 -4
- package/Animations/runtimeAnimation.js +1 -2
- package/Animations/runtimeAnimation.js.map +1 -1
- package/Audio/audioEngine.js +1 -2
- package/Audio/audioEngine.js.map +1 -1
- package/Audio/audioSceneComponent.d.ts +1 -1
- package/Audio/audioSceneComponent.js.map +1 -1
- package/Audio/sound.d.ts +3 -4
- package/Audio/sound.js +2 -3
- package/Audio/sound.js.map +1 -1
- package/BakedVertexAnimation/bakedVertexAnimationManager.d.ts +1 -1
- package/BakedVertexAnimation/bakedVertexAnimationManager.js +1 -1
- package/BakedVertexAnimation/bakedVertexAnimationManager.js.map +1 -1
- package/Behaviors/Meshes/attachToBoxBehavior.js +1 -1
- package/Behaviors/Meshes/attachToBoxBehavior.js.map +1 -1
- package/Behaviors/Meshes/baseSixDofDragBehavior.js +5 -5
- package/Behaviors/Meshes/baseSixDofDragBehavior.js.map +1 -1
- package/Behaviors/Meshes/followBehavior.d.ts +1 -1
- package/Behaviors/Meshes/followBehavior.js +1 -1
- package/Behaviors/Meshes/followBehavior.js.map +1 -1
- package/Behaviors/Meshes/pointerDragBehavior.d.ts +1 -1
- package/Behaviors/Meshes/pointerDragBehavior.js +1 -1
- package/Behaviors/Meshes/pointerDragBehavior.js.map +1 -1
- package/Bones/bone.d.ts +7 -9
- package/Bones/bone.js +7 -9
- package/Bones/bone.js.map +1 -1
- package/Bones/skeleton.d.ts +6 -8
- package/Bones/skeleton.js +6 -8
- package/Bones/skeleton.js.map +1 -1
- package/Buffers/buffer.d.ts +6 -6
- package/Buffers/buffer.js +14 -16
- package/Buffers/buffer.js.map +1 -1
- package/Buffers/storageBuffer.d.ts +1 -1
- package/Buffers/storageBuffer.js +1 -1
- package/Buffers/storageBuffer.js.map +1 -1
- package/Cameras/Inputs/arcRotateCameraVRDeviceOrientationInput.d.ts +1 -2
- package/Cameras/Inputs/arcRotateCameraVRDeviceOrientationInput.js +1 -2
- package/Cameras/Inputs/arcRotateCameraVRDeviceOrientationInput.js.map +1 -1
- package/Cameras/Inputs/flyCameraKeyboardInput.d.ts +1 -1
- package/Cameras/Inputs/flyCameraKeyboardInput.js +1 -1
- package/Cameras/Inputs/flyCameraKeyboardInput.js.map +1 -1
- package/Cameras/Inputs/freeCameraDeviceOrientationInput.d.ts +6 -3
- package/Cameras/Inputs/freeCameraDeviceOrientationInput.js +18 -5
- package/Cameras/Inputs/freeCameraDeviceOrientationInput.js.map +1 -1
- package/Cameras/Inputs/freeCameraKeyboardMoveInput.d.ts +1 -1
- package/Cameras/Inputs/freeCameraKeyboardMoveInput.js +1 -1
- package/Cameras/Inputs/freeCameraKeyboardMoveInput.js.map +1 -1
- package/Cameras/Inputs/freeCameraMouseInput.d.ts +1 -1
- package/Cameras/Inputs/freeCameraMouseInput.js +1 -1
- package/Cameras/Inputs/freeCameraMouseInput.js.map +1 -1
- package/Cameras/RigModes/stereoscopicAnaglyphRigMode.d.ts +1 -2
- package/Cameras/RigModes/stereoscopicAnaglyphRigMode.js +1 -2
- package/Cameras/RigModes/stereoscopicAnaglyphRigMode.js.map +1 -1
- package/Cameras/RigModes/stereoscopicRigMode.d.ts +1 -2
- package/Cameras/RigModes/stereoscopicRigMode.js +1 -2
- package/Cameras/RigModes/stereoscopicRigMode.js.map +1 -1
- package/Cameras/RigModes/vrRigMode.d.ts +1 -3
- package/Cameras/RigModes/vrRigMode.js +1 -3
- package/Cameras/RigModes/vrRigMode.js.map +1 -1
- package/Cameras/RigModes/webVRRigMode.d.ts +1 -3
- package/Cameras/RigModes/webVRRigMode.js +1 -3
- package/Cameras/RigModes/webVRRigMode.js.map +1 -1
- package/Cameras/Stereoscopic/stereoscopicScreenUniversalCamera.d.ts +2 -3
- package/Cameras/Stereoscopic/stereoscopicScreenUniversalCamera.js +2 -3
- package/Cameras/Stereoscopic/stereoscopicScreenUniversalCamera.js.map +1 -1
- package/Cameras/VR/vrCameraMetrics.d.ts +4 -4
- package/Cameras/VR/vrCameraMetrics.js +4 -4
- package/Cameras/VR/vrCameraMetrics.js.map +1 -1
- package/Cameras/VR/vrExperienceHelper.js +20 -48
- package/Cameras/VR/vrExperienceHelper.js.map +1 -1
- package/Cameras/VR/webVRCamera.d.ts +9 -9
- package/Cameras/VR/webVRCamera.js +9 -9
- package/Cameras/VR/webVRCamera.js.map +1 -1
- package/Cameras/arcRotateCamera.d.ts +11 -12
- package/Cameras/arcRotateCamera.js +8 -9
- package/Cameras/arcRotateCamera.js.map +1 -1
- package/Cameras/camera.d.ts +29 -38
- package/Cameras/camera.js +27 -36
- package/Cameras/camera.js.map +1 -1
- package/Cameras/deviceOrientationCamera.d.ts +1 -1
- package/Cameras/deviceOrientationCamera.js +1 -1
- package/Cameras/deviceOrientationCamera.js.map +1 -1
- package/Cameras/flyCamera.d.ts +8 -12
- package/Cameras/flyCamera.js +6 -10
- package/Cameras/flyCamera.js.map +1 -1
- package/Cameras/followCamera.d.ts +2 -2
- package/Cameras/followCamera.js +2 -2
- package/Cameras/followCamera.js.map +1 -1
- package/Cameras/freeCamera.d.ts +6 -7
- package/Cameras/freeCamera.js +4 -5
- package/Cameras/freeCamera.js.map +1 -1
- package/Cameras/freeCameraInputsManager.d.ts +2 -2
- package/Cameras/freeCameraInputsManager.js +2 -2
- package/Cameras/freeCameraInputsManager.js.map +1 -1
- package/Cameras/targetCamera.d.ts +21 -24
- package/Cameras/targetCamera.js +20 -23
- package/Cameras/targetCamera.js.map +1 -1
- package/Cameras/touchCamera.d.ts +1 -1
- package/Cameras/touchCamera.js +1 -1
- package/Cameras/touchCamera.js.map +1 -1
- package/Collisions/collider.d.ts +13 -44
- package/Collisions/collider.js +10 -41
- package/Collisions/collider.js.map +1 -1
- package/Collisions/collisionCoordinator.d.ts +2 -2
- package/Collisions/collisionCoordinator.js +1 -1
- package/Collisions/collisionCoordinator.js.map +1 -1
- package/Collisions/intersectionInfo.d.ts +1 -1
- package/Collisions/intersectionInfo.js +1 -1
- package/Collisions/intersectionInfo.js.map +1 -1
- package/Collisions/meshCollisionData.d.ts +1 -1
- package/Collisions/meshCollisionData.js +1 -1
- package/Collisions/meshCollisionData.js.map +1 -1
- package/Collisions/pickingInfo.d.ts +1 -1
- package/Collisions/pickingInfo.js +1 -1
- package/Collisions/pickingInfo.js.map +1 -1
- package/Compute/IComputeContext.d.ts +1 -1
- package/Compute/IComputeContext.js.map +1 -1
- package/Compute/IComputePipelineContext.d.ts +2 -2
- package/Compute/IComputePipelineContext.js.map +1 -1
- package/Compute/computeEffect.d.ts +5 -5
- package/Compute/computeEffect.js +5 -5
- package/Compute/computeEffect.js.map +1 -1
- package/Culling/Octrees/octreeBlock.d.ts +1 -9
- package/Culling/Octrees/octreeBlock.js +1 -9
- package/Culling/Octrees/octreeBlock.js.map +1 -1
- package/Culling/Octrees/octreeSceneComponent.d.ts +2 -2
- package/Culling/Octrees/octreeSceneComponent.js +1 -5
- package/Culling/Octrees/octreeSceneComponent.js.map +1 -1
- package/Culling/boundingBox.d.ts +4 -5
- package/Culling/boundingBox.js +3 -4
- package/Culling/boundingBox.js.map +1 -1
- package/Culling/boundingInfo.d.ts +1 -2
- package/Culling/boundingInfo.js +1 -2
- package/Culling/boundingInfo.js.map +1 -1
- package/Culling/boundingSphere.d.ts +1 -2
- package/Culling/boundingSphere.js +1 -2
- package/Culling/boundingSphere.js.map +1 -1
- package/Culling/ray.d.ts +6 -6
- package/Culling/ray.js.map +1 -1
- package/Debug/debugLayer.d.ts +1 -1
- package/Debug/debugLayer.js.map +1 -1
- package/Debug/physicsViewer.d.ts +6 -6
- package/Debug/physicsViewer.js +4 -4
- package/Debug/physicsViewer.js.map +1 -1
- package/DeviceInput/InputDevices/deviceEnums.d.ts +1 -1
- package/DeviceInput/InputDevices/deviceEnums.js +1 -1
- package/DeviceInput/InputDevices/deviceEnums.js.map +1 -1
- package/DeviceInput/InputDevices/deviceSourceManager.d.ts +3 -3
- package/DeviceInput/InputDevices/deviceSourceManager.js +3 -3
- package/DeviceInput/InputDevices/deviceSourceManager.js.map +1 -1
- package/DeviceInput/internalDeviceSourceManager.d.ts +3 -3
- package/DeviceInput/internalDeviceSourceManager.js +1 -1
- package/DeviceInput/internalDeviceSourceManager.js.map +1 -1
- package/DeviceInput/nativeDeviceInputSystem.d.ts +1 -1
- package/DeviceInput/nativeDeviceInputSystem.js +1 -1
- package/DeviceInput/nativeDeviceInputSystem.js.map +1 -1
- package/DeviceInput/webDeviceInputSystem.d.ts +1 -1
- package/DeviceInput/webDeviceInputSystem.js +1 -19
- package/DeviceInput/webDeviceInputSystem.js.map +1 -1
- package/Engines/Extensions/engine.computeShader.d.ts +7 -7
- package/Engines/Extensions/engine.computeShader.js +1 -1
- package/Engines/Extensions/engine.computeShader.js.map +1 -1
- package/Engines/Extensions/engine.cubeTexture.d.ts +6 -6
- package/Engines/Extensions/engine.cubeTexture.js +3 -2
- package/Engines/Extensions/engine.cubeTexture.js.map +1 -1
- package/Engines/Extensions/engine.debugging.d.ts +4 -4
- package/Engines/Extensions/engine.debugging.js.map +1 -1
- package/Engines/Extensions/engine.multiview.d.ts +9 -9
- package/Engines/Extensions/engine.multiview.js.map +1 -1
- package/Engines/Extensions/engine.query.d.ts +22 -22
- package/Engines/Extensions/engine.query.js +8 -8
- package/Engines/Extensions/engine.query.js.map +1 -1
- package/Engines/Extensions/engine.rawTexture.js +3 -7
- package/Engines/Extensions/engine.rawTexture.js.map +1 -1
- package/Engines/Extensions/engine.readTexture.d.ts +2 -2
- package/Engines/Extensions/engine.readTexture.js.map +1 -1
- package/Engines/Extensions/engine.renderTarget.d.ts +2 -2
- package/Engines/Extensions/engine.renderTarget.js.map +1 -1
- package/Engines/Extensions/engine.textureSelector.d.ts +2 -2
- package/Engines/Extensions/engine.textureSelector.js.map +1 -1
- package/Engines/Extensions/engine.transformFeedback.d.ts +1 -1
- package/Engines/Extensions/engine.transformFeedback.js +1 -1
- package/Engines/Extensions/engine.transformFeedback.js.map +1 -1
- package/Engines/Extensions/engine.views.d.ts +2 -2
- package/Engines/Extensions/engine.views.js.map +1 -1
- package/Engines/Extensions/engine.webVR.d.ts +13 -13
- package/Engines/Extensions/engine.webVR.js.map +1 -1
- package/Engines/IDrawContext.d.ts +1 -1
- package/Engines/IDrawContext.js.map +1 -1
- package/Engines/IMaterialContext.d.ts +1 -1
- package/Engines/IMaterialContext.js.map +1 -1
- package/Engines/IPipelineContext.d.ts +5 -5
- package/Engines/IPipelineContext.js.map +1 -1
- package/Engines/Native/nativeDataStream.d.ts +2 -2
- package/Engines/Native/nativeDataStream.js +1 -1
- package/Engines/Native/nativeDataStream.js.map +1 -1
- package/Engines/Native/nativeInterfaces.d.ts +10 -10
- package/Engines/Native/nativeInterfaces.js.map +1 -1
- package/Engines/Processors/Expressions/Operators/shaderDefineAndOperator.d.ts +1 -1
- package/Engines/Processors/Expressions/Operators/shaderDefineAndOperator.js +1 -1
- package/Engines/Processors/Expressions/Operators/shaderDefineAndOperator.js.map +1 -1
- package/Engines/Processors/Expressions/Operators/shaderDefineArithmeticOperator.d.ts +1 -1
- package/Engines/Processors/Expressions/Operators/shaderDefineArithmeticOperator.js +1 -1
- package/Engines/Processors/Expressions/Operators/shaderDefineArithmeticOperator.js.map +1 -1
- package/Engines/Processors/Expressions/Operators/shaderDefineIsDefinedOperator.d.ts +1 -1
- package/Engines/Processors/Expressions/Operators/shaderDefineIsDefinedOperator.js +1 -1
- package/Engines/Processors/Expressions/Operators/shaderDefineIsDefinedOperator.js.map +1 -1
- package/Engines/Processors/Expressions/Operators/shaderDefineOrOperator.d.ts +1 -1
- package/Engines/Processors/Expressions/Operators/shaderDefineOrOperator.js +1 -1
- package/Engines/Processors/Expressions/Operators/shaderDefineOrOperator.js.map +1 -1
- package/Engines/Processors/Expressions/shaderDefineExpression.d.ts +1 -1
- package/Engines/Processors/Expressions/shaderDefineExpression.js +1 -1
- package/Engines/Processors/Expressions/shaderDefineExpression.js.map +1 -1
- package/Engines/Processors/iShaderProcessor.d.ts +1 -1
- package/Engines/Processors/iShaderProcessor.js.map +1 -1
- package/Engines/Processors/shaderCodeConditionNode.d.ts +1 -1
- package/Engines/Processors/shaderCodeConditionNode.js +1 -1
- package/Engines/Processors/shaderCodeConditionNode.js.map +1 -1
- package/Engines/Processors/shaderCodeCursor.d.ts +1 -1
- package/Engines/Processors/shaderCodeCursor.js +1 -1
- package/Engines/Processors/shaderCodeCursor.js.map +1 -1
- package/Engines/Processors/shaderCodeNode.d.ts +1 -1
- package/Engines/Processors/shaderCodeNode.js +1 -1
- package/Engines/Processors/shaderCodeNode.js.map +1 -1
- package/Engines/Processors/shaderCodeTestNode.d.ts +1 -1
- package/Engines/Processors/shaderCodeTestNode.js +1 -1
- package/Engines/Processors/shaderCodeTestNode.js.map +1 -1
- package/Engines/Processors/shaderProcessingOptions.d.ts +2 -2
- package/Engines/Processors/shaderProcessingOptions.js.map +1 -1
- package/Engines/Processors/shaderProcessor.d.ts +2 -2
- package/Engines/Processors/shaderProcessor.js +2 -2
- package/Engines/Processors/shaderProcessor.js.map +1 -1
- package/Engines/WebGL/webGL2ShaderProcessors.d.ts +1 -1
- package/Engines/WebGL/webGL2ShaderProcessors.js +1 -1
- package/Engines/WebGL/webGL2ShaderProcessors.js.map +1 -1
- package/Engines/WebGL/webGLHardwareTexture.d.ts +1 -1
- package/Engines/WebGL/webGLHardwareTexture.js +1 -1
- package/Engines/WebGL/webGLHardwareTexture.js.map +1 -1
- package/Engines/WebGL/webGLPipelineContext.d.ts +6 -25
- package/Engines/WebGL/webGLPipelineContext.js +6 -25
- package/Engines/WebGL/webGLPipelineContext.js.map +1 -1
- package/Engines/WebGL/webGLRenderTargetWrapper.d.ts +2 -2
- package/Engines/WebGL/webGLRenderTargetWrapper.js +2 -2
- package/Engines/WebGL/webGLRenderTargetWrapper.js.map +1 -1
- package/Engines/WebGL/webGLShaderProcessors.d.ts +1 -1
- package/Engines/WebGL/webGLShaderProcessors.js +1 -1
- package/Engines/WebGL/webGLShaderProcessors.js.map +1 -1
- package/Engines/WebGPU/Extensions/engine.computeShader.d.ts +1 -1
- package/Engines/WebGPU/Extensions/engine.computeShader.js.map +1 -1
- package/Engines/WebGPU/Extensions/engine.rawTexture.js +1 -5
- package/Engines/WebGPU/Extensions/engine.rawTexture.js.map +1 -1
- package/Engines/WebGPU/webgpuBufferManager.d.ts +1 -1
- package/Engines/WebGPU/webgpuBufferManager.js +1 -1
- package/Engines/WebGPU/webgpuBufferManager.js.map +1 -1
- package/Engines/WebGPU/webgpuBundleList.d.ts +8 -8
- package/Engines/WebGPU/webgpuBundleList.js +7 -7
- package/Engines/WebGPU/webgpuBundleList.js.map +1 -1
- package/Engines/WebGPU/webgpuCacheBindGroups.d.ts +1 -1
- package/Engines/WebGPU/webgpuCacheBindGroups.js +1 -1
- package/Engines/WebGPU/webgpuCacheBindGroups.js.map +1 -1
- package/Engines/WebGPU/webgpuCacheRenderPipeline.d.ts +1 -1
- package/Engines/WebGPU/webgpuCacheRenderPipeline.js +1 -1
- package/Engines/WebGPU/webgpuCacheRenderPipeline.js.map +1 -1
- package/Engines/WebGPU/webgpuCacheRenderPipelineString.d.ts +1 -1
- package/Engines/WebGPU/webgpuCacheRenderPipelineString.js +1 -1
- package/Engines/WebGPU/webgpuCacheRenderPipelineString.js.map +1 -1
- package/Engines/WebGPU/webgpuCacheRenderPipelineTree.d.ts +2 -2
- package/Engines/WebGPU/webgpuCacheRenderPipelineTree.js +2 -2
- package/Engines/WebGPU/webgpuCacheRenderPipelineTree.js.map +1 -1
- package/Engines/WebGPU/webgpuCacheSampler.d.ts +1 -1
- package/Engines/WebGPU/webgpuCacheSampler.js +1 -1
- package/Engines/WebGPU/webgpuCacheSampler.js.map +1 -1
- package/Engines/WebGPU/webgpuClearQuad.d.ts +1 -1
- package/Engines/WebGPU/webgpuClearQuad.js +1 -1
- package/Engines/WebGPU/webgpuClearQuad.js.map +1 -1
- package/Engines/WebGPU/webgpuComputeContext.d.ts +1 -1
- package/Engines/WebGPU/webgpuComputeContext.js +1 -1
- package/Engines/WebGPU/webgpuComputeContext.js.map +1 -1
- package/Engines/WebGPU/webgpuComputePipelineContext.d.ts +2 -2
- package/Engines/WebGPU/webgpuComputePipelineContext.js +1 -1
- package/Engines/WebGPU/webgpuComputePipelineContext.js.map +1 -1
- package/Engines/WebGPU/webgpuConstants.d.ts +38 -38
- package/Engines/WebGPU/webgpuConstants.js +38 -38
- package/Engines/WebGPU/webgpuConstants.js.map +1 -1
- package/Engines/WebGPU/webgpuDepthCullingState.d.ts +1 -1
- package/Engines/WebGPU/webgpuDepthCullingState.js +1 -1
- package/Engines/WebGPU/webgpuDepthCullingState.js.map +1 -1
- package/Engines/WebGPU/webgpuDrawContext.d.ts +1 -1
- package/Engines/WebGPU/webgpuDrawContext.js +1 -1
- package/Engines/WebGPU/webgpuDrawContext.js.map +1 -1
- package/Engines/WebGPU/webgpuExternalTexture.d.ts +1 -1
- package/Engines/WebGPU/webgpuExternalTexture.js +1 -1
- package/Engines/WebGPU/webgpuExternalTexture.js.map +1 -1
- package/Engines/WebGPU/webgpuHardwareTexture.d.ts +9 -9
- package/Engines/WebGPU/webgpuHardwareTexture.js +1 -1
- package/Engines/WebGPU/webgpuHardwareTexture.js.map +1 -1
- package/Engines/WebGPU/webgpuMaterialContext.d.ts +3 -3
- package/Engines/WebGPU/webgpuMaterialContext.js +1 -1
- package/Engines/WebGPU/webgpuMaterialContext.js.map +1 -1
- package/Engines/WebGPU/webgpuOcclusionQuery.d.ts +1 -1
- package/Engines/WebGPU/webgpuOcclusionQuery.js +1 -1
- package/Engines/WebGPU/webgpuOcclusionQuery.js.map +1 -1
- package/Engines/WebGPU/webgpuPipelineContext.d.ts +4 -4
- package/Engines/WebGPU/webgpuPipelineContext.js +2 -2
- package/Engines/WebGPU/webgpuPipelineContext.js.map +1 -1
- package/Engines/WebGPU/webgpuQuerySet.d.ts +1 -1
- package/Engines/WebGPU/webgpuQuerySet.js +1 -1
- package/Engines/WebGPU/webgpuQuerySet.js.map +1 -1
- package/Engines/WebGPU/webgpuRenderPassWrapper.d.ts +1 -1
- package/Engines/WebGPU/webgpuRenderPassWrapper.js +1 -1
- package/Engines/WebGPU/webgpuRenderPassWrapper.js.map +1 -1
- package/Engines/WebGPU/webgpuRenderTargetWrapper.d.ts +2 -2
- package/Engines/WebGPU/webgpuRenderTargetWrapper.js +1 -1
- package/Engines/WebGPU/webgpuRenderTargetWrapper.js.map +1 -1
- package/Engines/WebGPU/webgpuShaderProcessingContext.d.ts +7 -7
- package/Engines/WebGPU/webgpuShaderProcessingContext.js +2 -2
- package/Engines/WebGPU/webgpuShaderProcessingContext.js.map +1 -1
- package/Engines/WebGPU/webgpuShaderProcessor.d.ts +1 -1
- package/Engines/WebGPU/webgpuShaderProcessor.js +1 -1
- package/Engines/WebGPU/webgpuShaderProcessor.js.map +1 -1
- package/Engines/WebGPU/webgpuShaderProcessorsGLSL.d.ts +1 -1
- package/Engines/WebGPU/webgpuShaderProcessorsGLSL.js +1 -1
- package/Engines/WebGPU/webgpuShaderProcessorsGLSL.js.map +1 -1
- package/Engines/WebGPU/webgpuShaderProcessorsWGSL.d.ts +1 -1
- package/Engines/WebGPU/webgpuShaderProcessorsWGSL.js +1 -1
- package/Engines/WebGPU/webgpuShaderProcessorsWGSL.js.map +1 -1
- package/Engines/WebGPU/webgpuSnapshotRendering.d.ts +1 -1
- package/Engines/WebGPU/webgpuSnapshotRendering.js +1 -1
- package/Engines/WebGPU/webgpuSnapshotRendering.js.map +1 -1
- package/Engines/WebGPU/webgpuStencilStateComposer.d.ts +1 -1
- package/Engines/WebGPU/webgpuStencilStateComposer.js +1 -1
- package/Engines/WebGPU/webgpuStencilStateComposer.js.map +1 -1
- package/Engines/WebGPU/webgpuTextureHelper.d.ts +1 -1
- package/Engines/WebGPU/webgpuTextureHelper.js +1 -1
- package/Engines/WebGPU/webgpuTextureHelper.js.map +1 -1
- package/Engines/WebGPU/webgpuTimestampQuery.d.ts +2 -2
- package/Engines/WebGPU/webgpuTimestampQuery.js +2 -2
- package/Engines/WebGPU/webgpuTimestampQuery.js.map +1 -1
- package/Engines/WebGPU/webgpuTintWASM.d.ts +1 -1
- package/Engines/WebGPU/webgpuTintWASM.js +1 -1
- package/Engines/WebGPU/webgpuTintWASM.js.map +1 -1
- package/Engines/constants.d.ts +1 -1
- package/Engines/constants.js +1 -1
- package/Engines/constants.js.map +1 -1
- package/Engines/engine.d.ts +16 -35
- package/Engines/engine.js +19 -69
- package/Engines/engine.js.map +1 -1
- package/Engines/engineFeatures.d.ts +2 -2
- package/Engines/engineFeatures.js.map +1 -1
- package/Engines/engineStore.d.ts +1 -1
- package/Engines/engineStore.js +1 -1
- package/Engines/engineStore.js.map +1 -1
- package/Engines/nativeEngine.d.ts +15 -47
- package/Engines/nativeEngine.js +20 -66
- package/Engines/nativeEngine.js.map +1 -1
- package/Engines/nullEngine.d.ts +12 -40
- package/Engines/nullEngine.js +12 -40
- package/Engines/nullEngine.js.map +1 -1
- package/Engines/performanceConfigurator.d.ts +6 -7
- package/Engines/performanceConfigurator.js +6 -7
- package/Engines/performanceConfigurator.js.map +1 -1
- package/Engines/renderTargetWrapper.d.ts +8 -9
- package/Engines/renderTargetWrapper.js +7 -8
- package/Engines/renderTargetWrapper.js.map +1 -1
- package/Engines/thinEngine.d.ts +90 -187
- package/Engines/thinEngine.js +73 -182
- package/Engines/thinEngine.js.map +1 -1
- package/Engines/webgpuEngine.d.ts +89 -145
- package/Engines/webgpuEngine.js +71 -127
- package/Engines/webgpuEngine.js.map +1 -1
- package/Events/pointerEvents.d.ts +4 -0
- package/Events/pointerEvents.js +4 -0
- package/Events/pointerEvents.js.map +1 -1
- package/Gamepads/Controllers/oculusTouchController.d.ts +1 -1
- package/Gamepads/Controllers/oculusTouchController.js +1 -1
- package/Gamepads/Controllers/oculusTouchController.js.map +1 -1
- package/Gamepads/Controllers/poseEnabledController.d.ts +9 -10
- package/Gamepads/Controllers/poseEnabledController.js +6 -7
- package/Gamepads/Controllers/poseEnabledController.js.map +1 -1
- package/Gamepads/Controllers/windowsMotionController.d.ts +1 -1
- package/Gamepads/Controllers/windowsMotionController.js +1 -1
- package/Gamepads/Controllers/windowsMotionController.js.map +1 -1
- package/Gamepads/gamepad.d.ts +1 -1
- package/Gamepads/gamepad.js +1 -1
- package/Gamepads/gamepad.js.map +1 -1
- package/Gamepads/gamepadManager.d.ts +2 -2
- package/Gamepads/gamepadManager.js +4 -4
- package/Gamepads/gamepadManager.js.map +1 -1
- package/Gamepads/gamepadSceneComponent.d.ts +1 -1
- package/Gamepads/gamepadSceneComponent.js.map +1 -1
- package/Gizmos/axisDragGizmo.d.ts +2 -8
- package/Gizmos/axisDragGizmo.js +2 -8
- package/Gizmos/axisDragGizmo.js.map +1 -1
- package/Gizmos/cameraGizmo.d.ts +1 -1
- package/Gizmos/cameraGizmo.js +1 -1
- package/Gizmos/cameraGizmo.js.map +1 -1
- package/Gizmos/lightGizmo.d.ts +1 -1
- package/Gizmos/lightGizmo.js +1 -1
- package/Gizmos/lightGizmo.js.map +1 -1
- package/Gizmos/planeDragGizmo.d.ts +1 -3
- package/Gizmos/planeDragGizmo.js +1 -3
- package/Gizmos/planeDragGizmo.js.map +1 -1
- package/Helpers/sceneHelpers.d.ts +1 -1
- package/Helpers/sceneHelpers.js +1 -1
- package/Helpers/sceneHelpers.js.map +1 -1
- package/Inputs/scene.inputManager.d.ts +3 -3
- package/Inputs/scene.inputManager.js +5 -4
- package/Inputs/scene.inputManager.js.map +1 -1
- package/Instrumentation/timeToken.d.ts +1 -1
- package/Instrumentation/timeToken.js +1 -1
- package/Instrumentation/timeToken.js.map +1 -1
- package/Layers/effectLayer.d.ts +2 -3
- package/Layers/effectLayer.js +2 -3
- package/Layers/effectLayer.js.map +1 -1
- package/Layers/glowLayer.d.ts +1 -1
- package/Layers/glowLayer.js +1 -1
- package/Layers/glowLayer.js.map +1 -1
- package/Layers/highlightLayer.d.ts +1 -1
- package/Layers/highlightLayer.js +1 -1
- package/Layers/highlightLayer.js.map +1 -1
- package/Layers/layer.d.ts +8 -1
- package/Layers/layer.js +12 -1
- package/Layers/layer.js.map +1 -1
- package/Layers/layerSceneComponent.d.ts +4 -2
- package/Layers/layerSceneComponent.js +27 -11
- package/Layers/layerSceneComponent.js.map +1 -1
- package/LensFlares/lensFlare.d.ts +1 -1
- package/LensFlares/lensFlare.js.map +1 -1
- package/LensFlares/lensFlareSystem.d.ts +4 -6
- package/LensFlares/lensFlareSystem.js +4 -6
- package/LensFlares/lensFlareSystem.js.map +1 -1
- package/Lights/Shadows/cascadedShadowGenerator.d.ts +1 -2
- package/Lights/Shadows/cascadedShadowGenerator.js +1 -2
- package/Lights/Shadows/cascadedShadowGenerator.js.map +1 -1
- package/Lights/Shadows/shadowGenerator.d.ts +1 -2
- package/Lights/Shadows/shadowGenerator.js +1 -2
- package/Lights/Shadows/shadowGenerator.js.map +1 -1
- package/Lights/light.d.ts +9 -9
- package/Lights/light.js +6 -6
- package/Lights/light.js.map +1 -1
- package/Lights/shadowLight.d.ts +3 -3
- package/Lights/shadowLight.js +3 -3
- package/Lights/shadowLight.js.map +1 -1
- package/Loading/Plugins/babylonFileLoader.d.ts +1 -1
- package/Loading/Plugins/babylonFileLoader.js +1 -1
- package/Loading/Plugins/babylonFileLoader.js.map +1 -1
- package/Loading/loadingScreen.js +6 -6
- package/Loading/loadingScreen.js.map +1 -1
- package/Materials/Background/backgroundMaterial.js +1 -1
- package/Materials/Background/backgroundMaterial.js.map +1 -1
- package/Materials/Node/Blocks/Dual/reflectionTextureBaseBlock.d.ts +18 -18
- package/Materials/Node/Blocks/Dual/reflectionTextureBaseBlock.js.map +1 -1
- package/Materials/Node/Blocks/Input/inputBlock.d.ts +4 -11
- package/Materials/Node/Blocks/Input/inputBlock.js +4 -11
- package/Materials/Node/Blocks/Input/inputBlock.js.map +1 -1
- package/Materials/Node/Blocks/PBR/anisotropyBlock.d.ts +2 -2
- package/Materials/Node/Blocks/PBR/anisotropyBlock.js.map +1 -1
- package/Materials/Node/Blocks/PBR/reflectionBlock.d.ts +9 -9
- package/Materials/Node/Blocks/PBR/reflectionBlock.js.map +1 -1
- package/Materials/Node/Blocks/PBR/refractionBlock.d.ts +12 -12
- package/Materials/Node/Blocks/PBR/refractionBlock.js.map +1 -1
- package/Materials/Node/nodeMaterial.d.ts +2 -2
- package/Materials/Node/nodeMaterial.js +2 -2
- package/Materials/Node/nodeMaterial.js.map +1 -1
- package/Materials/Node/nodeMaterialBlock.d.ts +8 -14
- package/Materials/Node/nodeMaterialBlock.js +6 -12
- package/Materials/Node/nodeMaterialBlock.js.map +1 -1
- package/Materials/Node/nodeMaterialBlockConnectionPoint.d.ts +8 -8
- package/Materials/Node/nodeMaterialBlockConnectionPoint.js +7 -7
- package/Materials/Node/nodeMaterialBlockConnectionPoint.js.map +1 -1
- package/Materials/Node/nodeMaterialBuildState.d.ts +22 -58
- package/Materials/Node/nodeMaterialBuildState.js +21 -57
- package/Materials/Node/nodeMaterialBuildState.js.map +1 -1
- package/Materials/PBR/pbrAnisotropicConfiguration.d.ts +3 -3
- package/Materials/PBR/pbrAnisotropicConfiguration.js +2 -2
- package/Materials/PBR/pbrAnisotropicConfiguration.js.map +1 -1
- package/Materials/PBR/pbrBRDFConfiguration.d.ts +3 -3
- package/Materials/PBR/pbrBRDFConfiguration.js +2 -2
- package/Materials/PBR/pbrBRDFConfiguration.js.map +1 -1
- package/Materials/PBR/pbrBaseMaterial.d.ts +65 -65
- package/Materials/PBR/pbrBaseMaterial.js +65 -65
- package/Materials/PBR/pbrBaseMaterial.js.map +1 -1
- package/Materials/PBR/pbrClearCoatConfiguration.d.ts +4 -4
- package/Materials/PBR/pbrClearCoatConfiguration.js +3 -3
- package/Materials/PBR/pbrClearCoatConfiguration.js.map +1 -1
- package/Materials/PBR/pbrIridescenceConfiguration.d.ts +6 -6
- package/Materials/PBR/pbrIridescenceConfiguration.js +5 -5
- package/Materials/PBR/pbrIridescenceConfiguration.js.map +1 -1
- package/Materials/PBR/pbrSheenConfiguration.d.ts +3 -3
- package/Materials/PBR/pbrSheenConfiguration.js +2 -2
- package/Materials/PBR/pbrSheenConfiguration.js.map +1 -1
- package/Materials/PBR/pbrSubSurfaceConfiguration.d.ts +6 -6
- package/Materials/PBR/pbrSubSurfaceConfiguration.js +5 -5
- package/Materials/PBR/pbrSubSurfaceConfiguration.js.map +1 -1
- package/Materials/Textures/Loaders/ddsTextureLoader.d.ts +1 -1
- package/Materials/Textures/Loaders/ddsTextureLoader.js +1 -1
- package/Materials/Textures/Loaders/ddsTextureLoader.js.map +1 -1
- package/Materials/Textures/Loaders/envTextureLoader.d.ts +1 -1
- package/Materials/Textures/Loaders/envTextureLoader.js +1 -1
- package/Materials/Textures/Loaders/envTextureLoader.js.map +1 -1
- package/Materials/Textures/Loaders/hdrTextureLoader.d.ts +1 -1
- package/Materials/Textures/Loaders/hdrTextureLoader.js +1 -1
- package/Materials/Textures/Loaders/hdrTextureLoader.js.map +1 -1
- package/Materials/Textures/Loaders/ktxTextureLoader.d.ts +1 -1
- package/Materials/Textures/Loaders/ktxTextureLoader.js +1 -1
- package/Materials/Textures/Loaders/ktxTextureLoader.js.map +1 -1
- package/Materials/Textures/Loaders/tgaTextureLoader.d.ts +1 -1
- package/Materials/Textures/Loaders/tgaTextureLoader.js +1 -1
- package/Materials/Textures/Loaders/tgaTextureLoader.js.map +1 -1
- package/Materials/Textures/MultiviewRenderTarget.d.ts +1 -1
- package/Materials/Textures/MultiviewRenderTarget.js +1 -1
- package/Materials/Textures/MultiviewRenderTarget.js.map +1 -1
- package/Materials/Textures/Procedurals/proceduralTexture.d.ts +6 -7
- package/Materials/Textures/Procedurals/proceduralTexture.js +4 -5
- package/Materials/Textures/Procedurals/proceduralTexture.js.map +1 -1
- package/Materials/Textures/baseTexture.d.ts +17 -23
- package/Materials/Textures/baseTexture.js +20 -23
- package/Materials/Textures/baseTexture.js.map +1 -1
- package/Materials/Textures/cubeTexture.d.ts +1 -1
- package/Materials/Textures/cubeTexture.js +1 -1
- package/Materials/Textures/cubeTexture.js.map +1 -1
- package/Materials/Textures/dynamicTexture.d.ts +1 -1
- package/Materials/Textures/dynamicTexture.js +1 -1
- package/Materials/Textures/dynamicTexture.js.map +1 -1
- package/Materials/Textures/hardwareTextureWrapper.d.ts +1 -1
- package/Materials/Textures/hardwareTextureWrapper.js.map +1 -1
- package/Materials/Textures/internalTexture.d.ts +35 -37
- package/Materials/Textures/internalTexture.js +34 -36
- package/Materials/Textures/internalTexture.js.map +1 -1
- package/Materials/Textures/multiRenderTarget.d.ts +1 -3
- package/Materials/Textures/multiRenderTarget.js +1 -3
- package/Materials/Textures/multiRenderTarget.js.map +1 -1
- package/Materials/Textures/prePassRenderTarget.d.ts +9 -9
- package/Materials/Textures/prePassRenderTarget.js +6 -6
- package/Materials/Textures/prePassRenderTarget.js.map +1 -1
- package/Materials/Textures/renderTargetTexture.d.ts +7 -11
- package/Materials/Textures/renderTargetTexture.js +8 -9
- package/Materials/Textures/renderTargetTexture.js.map +1 -1
- package/Materials/Textures/texture.d.ts +6 -18
- package/Materials/Textures/texture.js +13 -23
- package/Materials/Textures/texture.js.map +1 -1
- package/Materials/Textures/textureSampler.d.ts +5 -5
- package/Materials/Textures/textureSampler.js +5 -5
- package/Materials/Textures/textureSampler.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 +2 -2
- package/Materials/Textures/thinTexture.js +2 -2
- package/Materials/Textures/thinTexture.js.map +1 -1
- package/Materials/Textures/videoTexture.d.ts +1 -1
- package/Materials/Textures/videoTexture.js +3 -3
- package/Materials/Textures/videoTexture.js.map +1 -1
- package/Materials/drawWrapper.d.ts +1 -1
- package/Materials/drawWrapper.js +1 -1
- package/Materials/drawWrapper.js.map +1 -1
- package/Materials/effect.d.ts +17 -17
- package/Materials/effect.js +28 -22
- package/Materials/effect.js.map +1 -1
- package/Materials/effectRenderer.d.ts +1 -1
- package/Materials/effectRenderer.js.map +1 -1
- package/Materials/imageProcessingConfiguration.d.ts +5 -5
- package/Materials/imageProcessingConfiguration.js +4 -4
- package/Materials/imageProcessingConfiguration.js.map +1 -1
- package/Materials/material.d.ts +21 -26
- package/Materials/material.detailMapConfiguration.d.ts +3 -3
- package/Materials/material.detailMapConfiguration.js +2 -2
- package/Materials/material.detailMapConfiguration.js.map +1 -1
- package/Materials/material.js +22 -24
- package/Materials/material.js.map +1 -1
- package/Materials/materialDefines.d.ts +14 -14
- package/Materials/materialDefines.js +13 -13
- package/Materials/materialDefines.js.map +1 -1
- package/Materials/materialHelper.js +2 -7
- package/Materials/materialHelper.js.map +1 -1
- package/Materials/materialPluginEvent.d.ts +15 -15
- package/Materials/materialPluginEvent.js +1 -1
- package/Materials/materialPluginEvent.js.map +1 -1
- package/Materials/materialPluginManager.d.ts +2 -4
- package/Materials/materialPluginManager.js +2 -4
- package/Materials/materialPluginManager.js.map +1 -1
- package/Materials/multiMaterial.d.ts +1 -1
- package/Materials/multiMaterial.js +1 -1
- package/Materials/multiMaterial.js.map +1 -1
- package/Materials/pushMaterial.d.ts +1 -1
- package/Materials/pushMaterial.js +1 -1
- package/Materials/pushMaterial.js.map +1 -1
- package/Materials/standardMaterial.d.ts +3 -3
- package/Materials/standardMaterial.js +3 -3
- package/Materials/standardMaterial.js.map +1 -1
- package/Materials/uniformBuffer.d.ts +4 -4
- package/Materials/uniformBuffer.js +4 -4
- package/Materials/uniformBuffer.js.map +1 -1
- package/Materials/uniformBufferEffectCommonAccessor.d.ts +1 -1
- package/Materials/uniformBufferEffectCommonAccessor.js +1 -1
- package/Materials/uniformBufferEffectCommonAccessor.js.map +1 -1
- package/Maths/math.color.d.ts +1 -1
- package/Maths/math.color.js +1 -1
- package/Maths/math.color.js.map +1 -1
- package/Maths/math.isovector.d.ts +1 -1
- package/Maths/math.isovector.js +1 -1
- package/Maths/math.isovector.js.map +1 -1
- package/Maths/math.like.d.ts +8 -8
- package/Maths/math.like.js.map +1 -1
- package/Maths/math.polar.d.ts +343 -0
- package/Maths/math.polar.js +537 -0
- package/Maths/math.polar.js.map +1 -1
- package/Maths/math.vector.d.ts +58 -24
- package/Maths/math.vector.js +94 -18
- package/Maths/math.vector.js.map +1 -1
- package/Meshes/Builders/tubeBuilder.d.ts +2 -2
- package/Meshes/Builders/tubeBuilder.js +2 -2
- package/Meshes/Builders/tubeBuilder.js.map +1 -1
- package/Meshes/WebGL/webGLDataBuffer.d.ts +1 -1
- package/Meshes/WebGL/webGLDataBuffer.js +1 -1
- package/Meshes/WebGL/webGLDataBuffer.js.map +1 -1
- package/Meshes/WebGPU/webgpuDataBuffer.d.ts +1 -1
- package/Meshes/WebGPU/webgpuDataBuffer.js +1 -1
- package/Meshes/WebGPU/webgpuDataBuffer.js.map +1 -1
- package/Meshes/abstractMesh.d.ts +48 -70
- package/Meshes/abstractMesh.js +47 -69
- package/Meshes/abstractMesh.js.map +1 -1
- package/Meshes/buffer.d.ts +1 -1
- package/Meshes/buffer.js +1 -1
- package/Meshes/buffer.js.map +1 -1
- package/Meshes/geodesicMesh.d.ts +15 -28
- package/Meshes/geodesicMesh.js +11 -24
- package/Meshes/geodesicMesh.js.map +1 -1
- package/Meshes/geometry.d.ts +15 -20
- package/Meshes/geometry.js +7 -12
- package/Meshes/geometry.js.map +1 -1
- package/Meshes/groundMesh.d.ts +8 -8
- package/Meshes/groundMesh.js.map +1 -1
- package/Meshes/instancedMesh.d.ts +12 -16
- package/Meshes/instancedMesh.js +11 -15
- package/Meshes/instancedMesh.js.map +1 -1
- package/Meshes/linesMesh.d.ts +5 -8
- package/Meshes/linesMesh.js +5 -8
- package/Meshes/linesMesh.js.map +1 -1
- package/Meshes/mesh.d.ts +47 -92
- package/Meshes/mesh.js +50 -98
- package/Meshes/mesh.js.map +1 -1
- package/Meshes/mesh.vertexData.d.ts +3 -18
- package/Meshes/mesh.vertexData.js +3 -18
- package/Meshes/mesh.vertexData.js.map +1 -1
- package/Meshes/meshSimplificationSceneComponent.d.ts +1 -1
- package/Meshes/meshSimplificationSceneComponent.js.map +1 -1
- package/Meshes/subMesh.d.ts +23 -51
- package/Meshes/subMesh.js +20 -48
- package/Meshes/subMesh.js.map +1 -1
- package/Meshes/subMesh.project.d.ts +2 -2
- package/Meshes/subMesh.project.js +2 -12
- package/Meshes/subMesh.project.js.map +1 -1
- package/Meshes/thinInstanceMesh.d.ts +4 -4
- package/Meshes/thinInstanceMesh.js.map +1 -1
- package/Meshes/transformNode.d.ts +8 -9
- package/Meshes/transformNode.js +8 -9
- package/Meshes/transformNode.js.map +1 -1
- package/Misc/arrayTools.d.ts +3 -3
- package/Misc/arrayTools.js +1 -1
- package/Misc/arrayTools.js.map +1 -1
- package/Misc/assetsManager.d.ts +1 -3
- package/Misc/assetsManager.js +1 -3
- package/Misc/assetsManager.js.map +1 -1
- package/Misc/basis.js +1 -1
- package/Misc/basis.js.map +1 -1
- package/Misc/coroutine.d.ts +11 -25
- package/Misc/coroutine.js +7 -21
- package/Misc/coroutine.js.map +1 -1
- package/Misc/dds.d.ts +1 -10
- package/Misc/dds.js +1 -10
- package/Misc/dds.js.map +1 -1
- package/Misc/decorators.d.ts +5 -15
- package/Misc/decorators.js +6 -16
- package/Misc/decorators.js.map +1 -1
- package/Misc/depthReducer.d.ts +1 -5
- package/Misc/depthReducer.js +1 -5
- package/Misc/depthReducer.js.map +1 -1
- package/Misc/devTools.d.ts +1 -2
- package/Misc/devTools.js +1 -2
- package/Misc/devTools.js.map +1 -1
- package/Misc/environmentTextureTools.d.ts +1 -6
- package/Misc/environmentTextureTools.js +1 -6
- package/Misc/environmentTextureTools.js.map +1 -1
- package/Misc/fileTools.d.ts +12 -24
- package/Misc/fileTools.js +14 -26
- package/Misc/fileTools.js.map +1 -1
- package/Misc/khronosTextureContainer.d.ts +1 -3
- package/Misc/khronosTextureContainer.js +1 -3
- package/Misc/khronosTextureContainer.js.map +1 -1
- package/Misc/khronosTextureContainer2.d.ts +1 -4
- package/Misc/khronosTextureContainer2.js +1 -4
- package/Misc/khronosTextureContainer2.js.map +1 -1
- package/Misc/observable.d.ts +3 -4
- package/Misc/observable.js +2 -3
- package/Misc/observable.js.map +1 -1
- package/Misc/pivotTools.d.ts +3 -5
- package/Misc/pivotTools.js +3 -5
- package/Misc/pivotTools.js.map +1 -1
- package/Misc/screenshotTools.js +1 -1
- package/Misc/screenshotTools.js.map +1 -1
- package/Misc/tags.d.ts +2 -6
- package/Misc/tags.js +2 -6
- package/Misc/tags.js.map +1 -1
- package/Misc/tga.d.ts +14 -70
- package/Misc/tga.js +14 -70
- package/Misc/tga.js.map +1 -1
- package/Misc/tools.d.ts +9 -0
- package/Misc/tools.js +14 -5
- package/Misc/tools.js.map +1 -1
- package/Misc/typeStore.d.ts +2 -5
- package/Misc/typeStore.js +3 -6
- package/Misc/typeStore.js.map +1 -1
- package/Misc/virtualJoystick.js +0 -1
- package/Misc/virtualJoystick.js.map +1 -1
- package/Misc/webRequest.d.ts +2 -2
- package/Misc/webRequest.js +1 -1
- package/Misc/webRequest.js.map +1 -1
- package/Morph/morphTarget.d.ts +1 -1
- package/Morph/morphTarget.js +1 -1
- package/Morph/morphTarget.js.map +1 -1
- package/Morph/morphTargetManager.d.ts +3 -4
- package/Morph/morphTargetManager.js +2 -3
- package/Morph/morphTargetManager.js.map +1 -1
- package/Particles/IGPUParticleSystemPlatform.d.ts +1 -1
- package/Particles/IGPUParticleSystemPlatform.js.map +1 -1
- package/Particles/IParticleSystem.d.ts +6 -0
- package/Particles/IParticleSystem.js.map +1 -1
- package/Particles/baseParticleSystem.d.ts +14 -9
- package/Particles/baseParticleSystem.js +17 -8
- package/Particles/baseParticleSystem.js.map +1 -1
- package/Particles/cloudPoint.d.ts +16 -19
- package/Particles/cloudPoint.js +21 -29
- package/Particles/cloudPoint.js.map +1 -1
- package/Particles/computeShaderParticleSystem.d.ts +1 -1
- package/Particles/computeShaderParticleSystem.js +1 -1
- package/Particles/computeShaderParticleSystem.js.map +1 -1
- package/Particles/gpuParticleSystem.d.ts +14 -20
- package/Particles/gpuParticleSystem.js +17 -13
- package/Particles/gpuParticleSystem.js.map +1 -1
- package/Particles/particle.d.ts +30 -31
- package/Particles/particle.js +16 -17
- package/Particles/particle.js.map +1 -1
- package/Particles/particleSystem.d.ts +16 -32
- package/Particles/particleSystem.js +30 -31
- package/Particles/particleSystem.js.map +1 -1
- package/Particles/pointsCloudSystem.d.ts +3 -4
- package/Particles/pointsCloudSystem.js +27 -20
- package/Particles/pointsCloudSystem.js.map +1 -1
- package/Particles/solidParticle.d.ts +21 -31
- package/Particles/solidParticle.js +9 -19
- package/Particles/solidParticle.js.map +1 -1
- package/Particles/solidParticleSystem.d.ts +14 -16
- package/Particles/solidParticleSystem.js +14 -16
- package/Particles/solidParticleSystem.js.map +1 -1
- package/Particles/subEmitter.d.ts +1 -5
- package/Particles/subEmitter.js +1 -5
- package/Particles/subEmitter.js.map +1 -1
- package/Particles/webgl2ParticleSystem.d.ts +1 -1
- package/Particles/webgl2ParticleSystem.js +1 -1
- package/Particles/webgl2ParticleSystem.js.map +1 -1
- package/Physics/IPhysicsEngine.d.ts +1 -1
- package/Physics/IPhysicsEngine.js.map +1 -1
- package/Physics/Plugins/ammoJSPlugin.d.ts +3 -0
- package/Physics/Plugins/ammoJSPlugin.js +21 -2
- package/Physics/Plugins/ammoJSPlugin.js.map +1 -1
- package/Physics/Plugins/cannonJSPlugin.d.ts +1 -1
- package/Physics/Plugins/cannonJSPlugin.js +1 -1
- package/Physics/Plugins/cannonJSPlugin.js.map +1 -1
- package/Physics/Plugins/oimoJSPlugin.d.ts +1 -1
- package/Physics/Plugins/oimoJSPlugin.js +3 -3
- package/Physics/Plugins/oimoJSPlugin.js.map +1 -1
- package/Physics/physicsEngineComponent.d.ts +4 -4
- package/Physics/physicsEngineComponent.js +1 -2
- package/Physics/physicsEngineComponent.js.map +1 -1
- package/Physics/physicsImpostor.d.ts +13 -7
- package/Physics/physicsImpostor.js +9 -6
- package/Physics/physicsImpostor.js.map +1 -1
- package/PostProcesses/RenderPipeline/Pipelines/ssao2RenderingPipeline.d.ts +1 -1
- package/PostProcesses/RenderPipeline/Pipelines/ssao2RenderingPipeline.js +2 -2
- package/PostProcesses/RenderPipeline/Pipelines/ssao2RenderingPipeline.js.map +1 -1
- package/PostProcesses/RenderPipeline/Pipelines/ssaoRenderingPipeline.d.ts +2 -4
- package/PostProcesses/RenderPipeline/Pipelines/ssaoRenderingPipeline.js +2 -4
- package/PostProcesses/RenderPipeline/Pipelines/ssaoRenderingPipeline.js.map +1 -1
- package/PostProcesses/RenderPipeline/postProcessRenderEffect.d.ts +10 -10
- package/PostProcesses/RenderPipeline/postProcessRenderEffect.js +5 -5
- package/PostProcesses/RenderPipeline/postProcessRenderEffect.js.map +1 -1
- package/PostProcesses/RenderPipeline/postProcessRenderPipeline.d.ts +13 -13
- package/PostProcesses/RenderPipeline/postProcessRenderPipeline.js +7 -14
- package/PostProcesses/RenderPipeline/postProcessRenderPipeline.js.map +1 -1
- package/PostProcesses/RenderPipeline/postProcessRenderPipelineManager.d.ts +1 -1
- package/PostProcesses/RenderPipeline/postProcessRenderPipelineManager.js +1 -1
- package/PostProcesses/RenderPipeline/postProcessRenderPipelineManager.js.map +1 -1
- package/PostProcesses/RenderPipeline/postProcessRenderPipelineManagerSceneComponent.d.ts +1 -1
- package/PostProcesses/RenderPipeline/postProcessRenderPipelineManagerSceneComponent.js.map +1 -1
- package/PostProcesses/blackAndWhitePostProcess.d.ts +1 -5
- package/PostProcesses/blackAndWhitePostProcess.js +1 -5
- package/PostProcesses/blackAndWhitePostProcess.js.map +1 -1
- package/PostProcesses/bloomEffect.d.ts +4 -4
- package/PostProcesses/bloomEffect.js +3 -3
- package/PostProcesses/bloomEffect.js.map +1 -1
- package/PostProcesses/blurPostProcess.d.ts +1 -5
- package/PostProcesses/blurPostProcess.js +1 -5
- package/PostProcesses/blurPostProcess.js.map +1 -1
- package/PostProcesses/chromaticAberrationPostProcess.d.ts +1 -5
- package/PostProcesses/chromaticAberrationPostProcess.js +1 -5
- package/PostProcesses/chromaticAberrationPostProcess.js.map +1 -1
- package/PostProcesses/colorCorrectionPostProcess.d.ts +1 -5
- package/PostProcesses/colorCorrectionPostProcess.js +1 -5
- package/PostProcesses/colorCorrectionPostProcess.js.map +1 -1
- package/PostProcesses/convolutionPostProcess.d.ts +1 -5
- package/PostProcesses/convolutionPostProcess.js +1 -5
- package/PostProcesses/convolutionPostProcess.js.map +1 -1
- package/PostProcesses/depthOfFieldEffect.d.ts +4 -4
- package/PostProcesses/depthOfFieldEffect.js +3 -3
- package/PostProcesses/depthOfFieldEffect.js.map +1 -1
- package/PostProcesses/displayPassPostProcess.d.ts +1 -5
- package/PostProcesses/displayPassPostProcess.js +1 -5
- package/PostProcesses/displayPassPostProcess.js.map +1 -1
- package/PostProcesses/extractHighlightsPostProcess.d.ts +2 -2
- package/PostProcesses/extractHighlightsPostProcess.js +2 -2
- package/PostProcesses/extractHighlightsPostProcess.js.map +1 -1
- package/PostProcesses/filterPostProcess.d.ts +1 -5
- package/PostProcesses/filterPostProcess.js +1 -5
- package/PostProcesses/filterPostProcess.js.map +1 -1
- package/PostProcesses/fxaaPostProcess.d.ts +1 -5
- package/PostProcesses/fxaaPostProcess.js +1 -5
- package/PostProcesses/fxaaPostProcess.js.map +1 -1
- package/PostProcesses/grainPostProcess.d.ts +1 -5
- package/PostProcesses/grainPostProcess.js +1 -5
- package/PostProcesses/grainPostProcess.js.map +1 -1
- package/PostProcesses/imageProcessingPostProcess.d.ts +1 -1
- package/PostProcesses/imageProcessingPostProcess.js +1 -1
- package/PostProcesses/imageProcessingPostProcess.js.map +1 -1
- package/PostProcesses/motionBlurPostProcess.d.ts +1 -5
- package/PostProcesses/motionBlurPostProcess.js +1 -5
- package/PostProcesses/motionBlurPostProcess.js.map +1 -1
- package/PostProcesses/passPostProcess.d.ts +2 -10
- package/PostProcesses/passPostProcess.js +2 -10
- package/PostProcesses/passPostProcess.js.map +1 -1
- package/PostProcesses/postProcess.d.ts +8 -12
- package/PostProcesses/postProcess.js +6 -10
- package/PostProcesses/postProcess.js.map +1 -1
- package/PostProcesses/postProcessManager.d.ts +3 -3
- package/PostProcesses/postProcessManager.js +3 -3
- package/PostProcesses/postProcessManager.js.map +1 -1
- package/PostProcesses/refractionPostProcess.d.ts +1 -5
- package/PostProcesses/refractionPostProcess.js +1 -5
- package/PostProcesses/refractionPostProcess.js.map +1 -1
- package/PostProcesses/screenSpaceCurvaturePostProcess.d.ts +1 -5
- package/PostProcesses/screenSpaceCurvaturePostProcess.js +1 -5
- package/PostProcesses/screenSpaceCurvaturePostProcess.js.map +1 -1
- package/PostProcesses/screenSpaceReflectionPostProcess.d.ts +1 -5
- package/PostProcesses/screenSpaceReflectionPostProcess.js +1 -5
- package/PostProcesses/screenSpaceReflectionPostProcess.js.map +1 -1
- package/PostProcesses/sharpenPostProcess.d.ts +1 -5
- package/PostProcesses/sharpenPostProcess.js +1 -5
- package/PostProcesses/sharpenPostProcess.js.map +1 -1
- package/PostProcesses/volumetricLightScatteringPostProcess.d.ts +1 -1
- package/PostProcesses/volumetricLightScatteringPostProcess.js +1 -1
- package/PostProcesses/volumetricLightScatteringPostProcess.js.map +1 -1
- package/Probes/reflectionProbe.d.ts +1 -1
- package/Probes/reflectionProbe.js +1 -1
- package/Probes/reflectionProbe.js.map +1 -1
- package/Rendering/boundingBoxRenderer.d.ts +5 -5
- package/Rendering/boundingBoxRenderer.js +2 -2
- package/Rendering/boundingBoxRenderer.js.map +1 -1
- package/Rendering/depthPeelingSceneComponent.d.ts +2 -2
- package/Rendering/depthPeelingSceneComponent.js.map +1 -1
- package/Rendering/depthRenderer.d.ts +1 -2
- package/Rendering/depthRenderer.js +1 -2
- package/Rendering/depthRenderer.js.map +1 -1
- package/Rendering/depthRendererSceneComponent.d.ts +1 -1
- package/Rendering/depthRendererSceneComponent.js.map +1 -1
- package/Rendering/edgesRenderer.d.ts +2 -2
- package/Rendering/edgesRenderer.js +1 -1
- package/Rendering/edgesRenderer.js.map +1 -1
- package/Rendering/geometryBufferRenderer.d.ts +10 -16
- package/Rendering/geometryBufferRenderer.js +9 -15
- package/Rendering/geometryBufferRenderer.js.map +1 -1
- package/Rendering/geometryBufferRendererSceneComponent.d.ts +1 -1
- package/Rendering/geometryBufferRendererSceneComponent.js.map +1 -1
- package/Rendering/outlineRenderer.d.ts +3 -3
- package/Rendering/outlineRenderer.js.map +1 -1
- package/Rendering/prePassRenderer.d.ts +7 -14
- package/Rendering/prePassRenderer.js +8 -15
- package/Rendering/prePassRenderer.js.map +1 -1
- package/Rendering/prePassRendererSceneComponent.d.ts +2 -2
- package/Rendering/prePassRendererSceneComponent.js.map +1 -1
- package/Rendering/renderingGroup.d.ts +3 -3
- package/Rendering/renderingGroup.js +3 -3
- package/Rendering/renderingGroup.js.map +1 -1
- package/Rendering/renderingManager.d.ts +15 -8
- package/Rendering/renderingManager.js +59 -17
- package/Rendering/renderingManager.js.map +1 -1
- package/Rendering/subSurfaceConfiguration.d.ts +2 -4
- package/Rendering/subSurfaceConfiguration.js +2 -4
- package/Rendering/subSurfaceConfiguration.js.map +1 -1
- package/Rendering/subSurfaceSceneComponent.d.ts +1 -1
- package/Rendering/subSurfaceSceneComponent.js.map +1 -1
- package/Rendering/utilityLayerRenderer.d.ts +4 -4
- package/Rendering/utilityLayerRenderer.js +15 -10
- package/Rendering/utilityLayerRenderer.js.map +1 -1
- package/Shaders/ShadersInclude/backgroundFragmentDeclaration.d.ts +1 -1
- package/Shaders/ShadersInclude/backgroundFragmentDeclaration.js +1 -1
- package/Shaders/ShadersInclude/backgroundFragmentDeclaration.js.map +1 -1
- package/Shaders/ShadersInclude/backgroundUboDeclaration.d.ts +1 -1
- package/Shaders/ShadersInclude/backgroundUboDeclaration.js +1 -1
- package/Shaders/ShadersInclude/backgroundUboDeclaration.js.map +1 -1
- package/Shaders/ShadersInclude/backgroundVertexDeclaration.d.ts +1 -1
- package/Shaders/ShadersInclude/backgroundVertexDeclaration.js +1 -1
- package/Shaders/ShadersInclude/backgroundVertexDeclaration.js.map +1 -1
- package/Shaders/ShadersInclude/bakedVertexAnimation.d.ts +1 -1
- package/Shaders/ShadersInclude/bakedVertexAnimation.js +1 -1
- package/Shaders/ShadersInclude/bakedVertexAnimation.js.map +1 -1
- package/Shaders/ShadersInclude/bakedVertexAnimationDeclaration.d.ts +1 -1
- package/Shaders/ShadersInclude/bakedVertexAnimationDeclaration.js +1 -1
- package/Shaders/ShadersInclude/bakedVertexAnimationDeclaration.js.map +1 -1
- package/Shaders/ShadersInclude/bayerDitherFunctions.d.ts +1 -1
- package/Shaders/ShadersInclude/bayerDitherFunctions.js +1 -1
- package/Shaders/ShadersInclude/bayerDitherFunctions.js.map +1 -1
- package/Shaders/ShadersInclude/bonesDeclaration.d.ts +1 -1
- package/Shaders/ShadersInclude/bonesDeclaration.js +1 -1
- package/Shaders/ShadersInclude/bonesDeclaration.js.map +1 -1
- package/Shaders/ShadersInclude/bonesVertex.d.ts +1 -1
- package/Shaders/ShadersInclude/bonesVertex.js +1 -1
- package/Shaders/ShadersInclude/bonesVertex.js.map +1 -1
- package/Shaders/ShadersInclude/boundingBoxRendererFragmentDeclaration.d.ts +1 -1
- package/Shaders/ShadersInclude/boundingBoxRendererFragmentDeclaration.js +1 -1
- package/Shaders/ShadersInclude/boundingBoxRendererFragmentDeclaration.js.map +1 -1
- package/Shaders/ShadersInclude/boundingBoxRendererUboDeclaration.d.ts +1 -1
- package/Shaders/ShadersInclude/boundingBoxRendererUboDeclaration.js +1 -1
- package/Shaders/ShadersInclude/boundingBoxRendererUboDeclaration.js.map +1 -1
- package/Shaders/ShadersInclude/boundingBoxRendererVertexDeclaration.d.ts +1 -1
- package/Shaders/ShadersInclude/boundingBoxRendererVertexDeclaration.js +1 -1
- package/Shaders/ShadersInclude/boundingBoxRendererVertexDeclaration.js.map +1 -1
- package/Shaders/ShadersInclude/bumpFragment.d.ts +1 -1
- package/Shaders/ShadersInclude/bumpFragment.js +1 -1
- package/Shaders/ShadersInclude/bumpFragment.js.map +1 -1
- package/Shaders/ShadersInclude/bumpFragmentFunctions.d.ts +1 -1
- package/Shaders/ShadersInclude/bumpFragmentFunctions.js +1 -1
- package/Shaders/ShadersInclude/bumpFragmentFunctions.js.map +1 -1
- package/Shaders/ShadersInclude/bumpFragmentMainFunctions.d.ts +1 -1
- package/Shaders/ShadersInclude/bumpFragmentMainFunctions.js +1 -1
- package/Shaders/ShadersInclude/bumpFragmentMainFunctions.js.map +1 -1
- package/Shaders/ShadersInclude/bumpVertex.d.ts +1 -1
- package/Shaders/ShadersInclude/bumpVertex.js +1 -1
- package/Shaders/ShadersInclude/bumpVertex.js.map +1 -1
- package/Shaders/ShadersInclude/bumpVertexDeclaration.d.ts +1 -1
- package/Shaders/ShadersInclude/bumpVertexDeclaration.js +1 -1
- package/Shaders/ShadersInclude/bumpVertexDeclaration.js.map +1 -1
- package/Shaders/ShadersInclude/clipPlaneFragment.d.ts +1 -1
- package/Shaders/ShadersInclude/clipPlaneFragment.js +1 -1
- package/Shaders/ShadersInclude/clipPlaneFragment.js.map +1 -1
- package/Shaders/ShadersInclude/clipPlaneFragmentDeclaration.d.ts +1 -1
- package/Shaders/ShadersInclude/clipPlaneFragmentDeclaration.js +1 -1
- package/Shaders/ShadersInclude/clipPlaneFragmentDeclaration.js.map +1 -1
- package/Shaders/ShadersInclude/clipPlaneFragmentDeclaration2.d.ts +1 -1
- package/Shaders/ShadersInclude/clipPlaneFragmentDeclaration2.js +1 -1
- package/Shaders/ShadersInclude/clipPlaneFragmentDeclaration2.js.map +1 -1
- package/Shaders/ShadersInclude/clipPlaneVertex.d.ts +1 -1
- package/Shaders/ShadersInclude/clipPlaneVertex.js +1 -1
- package/Shaders/ShadersInclude/clipPlaneVertex.js.map +1 -1
- package/Shaders/ShadersInclude/clipPlaneVertexDeclaration.d.ts +1 -1
- package/Shaders/ShadersInclude/clipPlaneVertexDeclaration.js +1 -1
- package/Shaders/ShadersInclude/clipPlaneVertexDeclaration.js.map +1 -1
- package/Shaders/ShadersInclude/clipPlaneVertexDeclaration2.d.ts +1 -1
- package/Shaders/ShadersInclude/clipPlaneVertexDeclaration2.js +1 -1
- package/Shaders/ShadersInclude/clipPlaneVertexDeclaration2.js.map +1 -1
- package/Shaders/ShadersInclude/defaultFragmentDeclaration.d.ts +1 -1
- package/Shaders/ShadersInclude/defaultFragmentDeclaration.js +1 -1
- package/Shaders/ShadersInclude/defaultFragmentDeclaration.js.map +1 -1
- package/Shaders/ShadersInclude/defaultUboDeclaration.d.ts +1 -1
- package/Shaders/ShadersInclude/defaultUboDeclaration.js +1 -1
- package/Shaders/ShadersInclude/defaultUboDeclaration.js.map +1 -1
- package/Shaders/ShadersInclude/defaultVertexDeclaration.d.ts +1 -1
- package/Shaders/ShadersInclude/defaultVertexDeclaration.js +1 -1
- package/Shaders/ShadersInclude/defaultVertexDeclaration.js.map +1 -1
- package/Shaders/ShadersInclude/depthPrePass.d.ts +1 -1
- package/Shaders/ShadersInclude/depthPrePass.js +1 -1
- package/Shaders/ShadersInclude/depthPrePass.js.map +1 -1
- package/Shaders/ShadersInclude/diffusionProfile.d.ts +1 -1
- package/Shaders/ShadersInclude/diffusionProfile.js +1 -1
- package/Shaders/ShadersInclude/diffusionProfile.js.map +1 -1
- package/Shaders/ShadersInclude/fibonacci.d.ts +1 -1
- package/Shaders/ShadersInclude/fibonacci.js +1 -1
- package/Shaders/ShadersInclude/fibonacci.js.map +1 -1
- package/Shaders/ShadersInclude/fogFragment.d.ts +1 -1
- package/Shaders/ShadersInclude/fogFragment.js +1 -1
- package/Shaders/ShadersInclude/fogFragment.js.map +1 -1
- package/Shaders/ShadersInclude/fogFragmentDeclaration.d.ts +1 -1
- package/Shaders/ShadersInclude/fogFragmentDeclaration.js +1 -1
- package/Shaders/ShadersInclude/fogFragmentDeclaration.js.map +1 -1
- package/Shaders/ShadersInclude/fogVertex.d.ts +1 -1
- package/Shaders/ShadersInclude/fogVertex.js +1 -1
- package/Shaders/ShadersInclude/fogVertex.js.map +1 -1
- package/Shaders/ShadersInclude/fogVertexDeclaration.d.ts +1 -1
- package/Shaders/ShadersInclude/fogVertexDeclaration.js +1 -1
- package/Shaders/ShadersInclude/fogVertexDeclaration.js.map +1 -1
- package/Shaders/ShadersInclude/fresnelFunction.d.ts +1 -1
- package/Shaders/ShadersInclude/fresnelFunction.js +1 -1
- package/Shaders/ShadersInclude/fresnelFunction.js.map +1 -1
- package/Shaders/ShadersInclude/geometryUboDeclaration.d.ts +1 -1
- package/Shaders/ShadersInclude/geometryUboDeclaration.js +1 -1
- package/Shaders/ShadersInclude/geometryUboDeclaration.js.map +1 -1
- package/Shaders/ShadersInclude/geometryVertexDeclaration.d.ts +1 -1
- package/Shaders/ShadersInclude/geometryVertexDeclaration.js +1 -1
- package/Shaders/ShadersInclude/geometryVertexDeclaration.js.map +1 -1
- package/Shaders/ShadersInclude/harmonicsFunctions.d.ts +1 -1
- package/Shaders/ShadersInclude/harmonicsFunctions.js +1 -1
- package/Shaders/ShadersInclude/harmonicsFunctions.js.map +1 -1
- package/Shaders/ShadersInclude/hdrFilteringFunctions.d.ts +1 -1
- package/Shaders/ShadersInclude/hdrFilteringFunctions.js +1 -1
- package/Shaders/ShadersInclude/hdrFilteringFunctions.js.map +1 -1
- package/Shaders/ShadersInclude/helperFunctions.d.ts +1 -1
- package/Shaders/ShadersInclude/helperFunctions.js +1 -1
- package/Shaders/ShadersInclude/helperFunctions.js.map +1 -1
- package/Shaders/ShadersInclude/imageProcessingCompatibility.d.ts +1 -1
- package/Shaders/ShadersInclude/imageProcessingCompatibility.js +1 -1
- package/Shaders/ShadersInclude/imageProcessingCompatibility.js.map +1 -1
- package/Shaders/ShadersInclude/imageProcessingDeclaration.d.ts +1 -1
- package/Shaders/ShadersInclude/imageProcessingDeclaration.js +1 -1
- package/Shaders/ShadersInclude/imageProcessingDeclaration.js.map +1 -1
- package/Shaders/ShadersInclude/imageProcessingFunctions.d.ts +1 -1
- package/Shaders/ShadersInclude/imageProcessingFunctions.js +1 -1
- package/Shaders/ShadersInclude/imageProcessingFunctions.js.map +1 -1
- package/Shaders/ShadersInclude/importanceSampling.d.ts +1 -1
- package/Shaders/ShadersInclude/importanceSampling.js +1 -1
- package/Shaders/ShadersInclude/importanceSampling.js.map +1 -1
- package/Shaders/ShadersInclude/instancesDeclaration.d.ts +1 -1
- package/Shaders/ShadersInclude/instancesDeclaration.js +1 -1
- package/Shaders/ShadersInclude/instancesDeclaration.js.map +1 -1
- package/Shaders/ShadersInclude/instancesVertex.d.ts +1 -1
- package/Shaders/ShadersInclude/instancesVertex.js +1 -1
- package/Shaders/ShadersInclude/instancesVertex.js.map +1 -1
- package/Shaders/ShadersInclude/kernelBlurFragment.d.ts +1 -1
- package/Shaders/ShadersInclude/kernelBlurFragment.js +1 -1
- package/Shaders/ShadersInclude/kernelBlurFragment.js.map +1 -1
- package/Shaders/ShadersInclude/kernelBlurFragment2.d.ts +1 -1
- package/Shaders/ShadersInclude/kernelBlurFragment2.js +1 -1
- package/Shaders/ShadersInclude/kernelBlurFragment2.js.map +1 -1
- package/Shaders/ShadersInclude/kernelBlurVaryingDeclaration.d.ts +1 -1
- package/Shaders/ShadersInclude/kernelBlurVaryingDeclaration.js +1 -1
- package/Shaders/ShadersInclude/kernelBlurVaryingDeclaration.js.map +1 -1
- package/Shaders/ShadersInclude/kernelBlurVertex.d.ts +1 -1
- package/Shaders/ShadersInclude/kernelBlurVertex.js +1 -1
- package/Shaders/ShadersInclude/kernelBlurVertex.js.map +1 -1
- package/Shaders/ShadersInclude/lightFragment.d.ts +1 -1
- package/Shaders/ShadersInclude/lightFragment.js +1 -1
- package/Shaders/ShadersInclude/lightFragment.js.map +1 -1
- package/Shaders/ShadersInclude/lightFragmentDeclaration.d.ts +1 -1
- package/Shaders/ShadersInclude/lightFragmentDeclaration.js +1 -1
- package/Shaders/ShadersInclude/lightFragmentDeclaration.js.map +1 -1
- package/Shaders/ShadersInclude/lightUboDeclaration.d.ts +1 -1
- package/Shaders/ShadersInclude/lightUboDeclaration.js +1 -1
- package/Shaders/ShadersInclude/lightUboDeclaration.js.map +1 -1
- package/Shaders/ShadersInclude/lightVxFragmentDeclaration.d.ts +1 -1
- package/Shaders/ShadersInclude/lightVxFragmentDeclaration.js +1 -1
- package/Shaders/ShadersInclude/lightVxFragmentDeclaration.js.map +1 -1
- package/Shaders/ShadersInclude/lightVxUboDeclaration.d.ts +1 -1
- package/Shaders/ShadersInclude/lightVxUboDeclaration.js +1 -1
- package/Shaders/ShadersInclude/lightVxUboDeclaration.js.map +1 -1
- package/Shaders/ShadersInclude/lightsFragmentFunctions.d.ts +1 -1
- package/Shaders/ShadersInclude/lightsFragmentFunctions.js +1 -1
- package/Shaders/ShadersInclude/lightsFragmentFunctions.js.map +1 -1
- package/Shaders/ShadersInclude/logDepthDeclaration.d.ts +1 -1
- package/Shaders/ShadersInclude/logDepthDeclaration.js +1 -1
- package/Shaders/ShadersInclude/logDepthDeclaration.js.map +1 -1
- package/Shaders/ShadersInclude/logDepthFragment.d.ts +1 -1
- package/Shaders/ShadersInclude/logDepthFragment.js +1 -1
- package/Shaders/ShadersInclude/logDepthFragment.js.map +1 -1
- package/Shaders/ShadersInclude/logDepthVertex.d.ts +1 -1
- package/Shaders/ShadersInclude/logDepthVertex.js +1 -1
- package/Shaders/ShadersInclude/logDepthVertex.js.map +1 -1
- package/Shaders/ShadersInclude/mainUVVaryingDeclaration.d.ts +1 -1
- package/Shaders/ShadersInclude/mainUVVaryingDeclaration.js +1 -1
- package/Shaders/ShadersInclude/mainUVVaryingDeclaration.js.map +1 -1
- package/Shaders/ShadersInclude/meshFragmentDeclaration.d.ts +1 -1
- package/Shaders/ShadersInclude/meshFragmentDeclaration.js +1 -1
- package/Shaders/ShadersInclude/meshFragmentDeclaration.js.map +1 -1
- package/Shaders/ShadersInclude/meshUboDeclaration.d.ts +1 -1
- package/Shaders/ShadersInclude/meshUboDeclaration.js +1 -1
- package/Shaders/ShadersInclude/meshUboDeclaration.js.map +1 -1
- package/Shaders/ShadersInclude/meshVertexDeclaration.d.ts +1 -1
- package/Shaders/ShadersInclude/meshVertexDeclaration.js +1 -1
- package/Shaders/ShadersInclude/meshVertexDeclaration.js.map +1 -1
- package/Shaders/ShadersInclude/morphTargetsVertex.d.ts +1 -1
- package/Shaders/ShadersInclude/morphTargetsVertex.js +1 -1
- package/Shaders/ShadersInclude/morphTargetsVertex.js.map +1 -1
- package/Shaders/ShadersInclude/morphTargetsVertexDeclaration.d.ts +1 -1
- package/Shaders/ShadersInclude/morphTargetsVertexDeclaration.js +1 -1
- package/Shaders/ShadersInclude/morphTargetsVertexDeclaration.js.map +1 -1
- package/Shaders/ShadersInclude/morphTargetsVertexGlobal.d.ts +1 -1
- package/Shaders/ShadersInclude/morphTargetsVertexGlobal.js +1 -1
- package/Shaders/ShadersInclude/morphTargetsVertexGlobal.js.map +1 -1
- package/Shaders/ShadersInclude/morphTargetsVertexGlobalDeclaration.d.ts +1 -1
- package/Shaders/ShadersInclude/morphTargetsVertexGlobalDeclaration.js +1 -1
- package/Shaders/ShadersInclude/morphTargetsVertexGlobalDeclaration.js.map +1 -1
- package/Shaders/ShadersInclude/mrtFragmentDeclaration.d.ts +1 -1
- package/Shaders/ShadersInclude/mrtFragmentDeclaration.js +1 -1
- package/Shaders/ShadersInclude/mrtFragmentDeclaration.js.map +1 -1
- package/Shaders/ShadersInclude/oitDeclaration.d.ts +1 -1
- package/Shaders/ShadersInclude/oitDeclaration.js +1 -1
- package/Shaders/ShadersInclude/oitDeclaration.js.map +1 -1
- package/Shaders/ShadersInclude/oitFragment.d.ts +1 -1
- package/Shaders/ShadersInclude/oitFragment.js +1 -1
- package/Shaders/ShadersInclude/oitFragment.js.map +1 -1
- package/Shaders/ShadersInclude/packingFunctions.d.ts +1 -1
- package/Shaders/ShadersInclude/packingFunctions.js +1 -1
- package/Shaders/ShadersInclude/packingFunctions.js.map +1 -1
- package/Shaders/ShadersInclude/pbrBRDFFunctions.d.ts +1 -1
- package/Shaders/ShadersInclude/pbrBRDFFunctions.js +1 -1
- package/Shaders/ShadersInclude/pbrBRDFFunctions.js.map +1 -1
- package/Shaders/ShadersInclude/pbrBlockAlbedoOpacity.d.ts +1 -1
- package/Shaders/ShadersInclude/pbrBlockAlbedoOpacity.js +3 -3
- package/Shaders/ShadersInclude/pbrBlockAlbedoOpacity.js.map +1 -1
- package/Shaders/ShadersInclude/pbrBlockAlphaFresnel.d.ts +1 -1
- package/Shaders/ShadersInclude/pbrBlockAlphaFresnel.js +1 -1
- package/Shaders/ShadersInclude/pbrBlockAlphaFresnel.js.map +1 -1
- package/Shaders/ShadersInclude/pbrBlockAmbientOcclusion.d.ts +1 -1
- package/Shaders/ShadersInclude/pbrBlockAmbientOcclusion.js +1 -1
- package/Shaders/ShadersInclude/pbrBlockAmbientOcclusion.js.map +1 -1
- package/Shaders/ShadersInclude/pbrBlockAnisotropic.d.ts +1 -1
- package/Shaders/ShadersInclude/pbrBlockAnisotropic.js +1 -1
- package/Shaders/ShadersInclude/pbrBlockAnisotropic.js.map +1 -1
- package/Shaders/ShadersInclude/pbrBlockClearcoat.d.ts +1 -1
- package/Shaders/ShadersInclude/pbrBlockClearcoat.js +1 -1
- package/Shaders/ShadersInclude/pbrBlockClearcoat.js.map +1 -1
- package/Shaders/ShadersInclude/pbrBlockDirectLighting.d.ts +1 -1
- package/Shaders/ShadersInclude/pbrBlockDirectLighting.js +1 -1
- package/Shaders/ShadersInclude/pbrBlockDirectLighting.js.map +1 -1
- package/Shaders/ShadersInclude/pbrBlockFinalColorComposition.d.ts +1 -1
- package/Shaders/ShadersInclude/pbrBlockFinalColorComposition.js +1 -1
- package/Shaders/ShadersInclude/pbrBlockFinalColorComposition.js.map +1 -1
- package/Shaders/ShadersInclude/pbrBlockFinalLitComponents.d.ts +1 -1
- package/Shaders/ShadersInclude/pbrBlockFinalLitComponents.js +1 -1
- package/Shaders/ShadersInclude/pbrBlockFinalLitComponents.js.map +1 -1
- package/Shaders/ShadersInclude/pbrBlockFinalUnlitComponents.d.ts +1 -1
- package/Shaders/ShadersInclude/pbrBlockFinalUnlitComponents.js +1 -1
- package/Shaders/ShadersInclude/pbrBlockFinalUnlitComponents.js.map +1 -1
- package/Shaders/ShadersInclude/pbrBlockGeometryInfo.d.ts +1 -1
- package/Shaders/ShadersInclude/pbrBlockGeometryInfo.js +1 -1
- package/Shaders/ShadersInclude/pbrBlockGeometryInfo.js.map +1 -1
- package/Shaders/ShadersInclude/pbrBlockImageProcessing.d.ts +1 -1
- package/Shaders/ShadersInclude/pbrBlockImageProcessing.js +1 -1
- package/Shaders/ShadersInclude/pbrBlockImageProcessing.js.map +1 -1
- package/Shaders/ShadersInclude/pbrBlockIridescence.d.ts +1 -1
- package/Shaders/ShadersInclude/pbrBlockIridescence.js +1 -1
- package/Shaders/ShadersInclude/pbrBlockIridescence.js.map +1 -1
- package/Shaders/ShadersInclude/pbrBlockLightmapInit.d.ts +1 -1
- package/Shaders/ShadersInclude/pbrBlockLightmapInit.js +1 -1
- package/Shaders/ShadersInclude/pbrBlockLightmapInit.js.map +1 -1
- package/Shaders/ShadersInclude/pbrBlockNormalFinal.d.ts +1 -1
- package/Shaders/ShadersInclude/pbrBlockNormalFinal.js +1 -1
- package/Shaders/ShadersInclude/pbrBlockNormalFinal.js.map +1 -1
- package/Shaders/ShadersInclude/pbrBlockNormalGeometric.d.ts +1 -1
- package/Shaders/ShadersInclude/pbrBlockNormalGeometric.js +1 -1
- package/Shaders/ShadersInclude/pbrBlockNormalGeometric.js.map +1 -1
- package/Shaders/ShadersInclude/pbrBlockReflectance.d.ts +1 -1
- package/Shaders/ShadersInclude/pbrBlockReflectance.js +1 -1
- package/Shaders/ShadersInclude/pbrBlockReflectance.js.map +1 -1
- package/Shaders/ShadersInclude/pbrBlockReflectance0.d.ts +1 -1
- package/Shaders/ShadersInclude/pbrBlockReflectance0.js +1 -1
- package/Shaders/ShadersInclude/pbrBlockReflectance0.js.map +1 -1
- package/Shaders/ShadersInclude/pbrBlockReflection.d.ts +1 -1
- package/Shaders/ShadersInclude/pbrBlockReflection.js +1 -1
- package/Shaders/ShadersInclude/pbrBlockReflection.js.map +1 -1
- package/Shaders/ShadersInclude/pbrBlockReflectivity.d.ts +1 -1
- package/Shaders/ShadersInclude/pbrBlockReflectivity.js +1 -1
- package/Shaders/ShadersInclude/pbrBlockReflectivity.js.map +1 -1
- package/Shaders/ShadersInclude/pbrBlockSheen.d.ts +1 -1
- package/Shaders/ShadersInclude/pbrBlockSheen.js +1 -1
- package/Shaders/ShadersInclude/pbrBlockSheen.js.map +1 -1
- package/Shaders/ShadersInclude/pbrBlockSubSurface.d.ts +1 -1
- package/Shaders/ShadersInclude/pbrBlockSubSurface.js +1 -1
- package/Shaders/ShadersInclude/pbrBlockSubSurface.js.map +1 -1
- package/Shaders/ShadersInclude/pbrDebug.d.ts +1 -1
- package/Shaders/ShadersInclude/pbrDebug.js +1 -1
- package/Shaders/ShadersInclude/pbrDebug.js.map +1 -1
- package/Shaders/ShadersInclude/pbrDirectLightingFalloffFunctions.d.ts +1 -1
- package/Shaders/ShadersInclude/pbrDirectLightingFalloffFunctions.js +1 -1
- package/Shaders/ShadersInclude/pbrDirectLightingFalloffFunctions.js.map +1 -1
- package/Shaders/ShadersInclude/pbrDirectLightingFunctions.d.ts +1 -1
- package/Shaders/ShadersInclude/pbrDirectLightingFunctions.js +1 -1
- package/Shaders/ShadersInclude/pbrDirectLightingFunctions.js.map +1 -1
- package/Shaders/ShadersInclude/pbrDirectLightingSetupFunctions.d.ts +1 -1
- package/Shaders/ShadersInclude/pbrDirectLightingSetupFunctions.js +1 -1
- package/Shaders/ShadersInclude/pbrDirectLightingSetupFunctions.js.map +1 -1
- package/Shaders/ShadersInclude/pbrFragmentDeclaration.d.ts +1 -1
- package/Shaders/ShadersInclude/pbrFragmentDeclaration.js +1 -1
- package/Shaders/ShadersInclude/pbrFragmentDeclaration.js.map +1 -1
- package/Shaders/ShadersInclude/pbrFragmentExtraDeclaration.d.ts +1 -1
- package/Shaders/ShadersInclude/pbrFragmentExtraDeclaration.js +2 -2
- package/Shaders/ShadersInclude/pbrFragmentExtraDeclaration.js.map +1 -1
- package/Shaders/ShadersInclude/pbrFragmentSamplersDeclaration.d.ts +1 -1
- package/Shaders/ShadersInclude/pbrFragmentSamplersDeclaration.js +1 -1
- package/Shaders/ShadersInclude/pbrFragmentSamplersDeclaration.js.map +1 -1
- package/Shaders/ShadersInclude/pbrHelperFunctions.d.ts +1 -1
- package/Shaders/ShadersInclude/pbrHelperFunctions.js +1 -1
- package/Shaders/ShadersInclude/pbrHelperFunctions.js.map +1 -1
- package/Shaders/ShadersInclude/pbrIBLFunctions.d.ts +1 -1
- package/Shaders/ShadersInclude/pbrIBLFunctions.js +1 -1
- package/Shaders/ShadersInclude/pbrIBLFunctions.js.map +1 -1
- package/Shaders/ShadersInclude/pbrUboDeclaration.d.ts +1 -1
- package/Shaders/ShadersInclude/pbrUboDeclaration.js +1 -1
- package/Shaders/ShadersInclude/pbrUboDeclaration.js.map +1 -1
- package/Shaders/ShadersInclude/pbrVertexDeclaration.d.ts +1 -1
- package/Shaders/ShadersInclude/pbrVertexDeclaration.js +1 -1
- package/Shaders/ShadersInclude/pbrVertexDeclaration.js.map +1 -1
- package/Shaders/ShadersInclude/pointCloudVertex.d.ts +1 -1
- package/Shaders/ShadersInclude/pointCloudVertex.js +1 -1
- package/Shaders/ShadersInclude/pointCloudVertex.js.map +1 -1
- package/Shaders/ShadersInclude/pointCloudVertexDeclaration.d.ts +1 -1
- package/Shaders/ShadersInclude/pointCloudVertexDeclaration.js +1 -1
- package/Shaders/ShadersInclude/pointCloudVertexDeclaration.js.map +1 -1
- package/Shaders/ShadersInclude/prePassDeclaration.d.ts +1 -1
- package/Shaders/ShadersInclude/prePassDeclaration.js +1 -1
- package/Shaders/ShadersInclude/prePassDeclaration.js.map +1 -1
- package/Shaders/ShadersInclude/prePassVertex.d.ts +1 -1
- package/Shaders/ShadersInclude/prePassVertex.js +1 -1
- package/Shaders/ShadersInclude/prePassVertex.js.map +1 -1
- package/Shaders/ShadersInclude/prePassVertexDeclaration.d.ts +1 -1
- package/Shaders/ShadersInclude/prePassVertexDeclaration.js +1 -1
- package/Shaders/ShadersInclude/prePassVertexDeclaration.js.map +1 -1
- package/Shaders/ShadersInclude/reflectionFunction.d.ts +1 -1
- package/Shaders/ShadersInclude/reflectionFunction.js +1 -1
- package/Shaders/ShadersInclude/reflectionFunction.js.map +1 -1
- package/Shaders/ShadersInclude/samplerFragmentAlternateDeclaration.d.ts +1 -1
- package/Shaders/ShadersInclude/samplerFragmentAlternateDeclaration.js +1 -1
- package/Shaders/ShadersInclude/samplerFragmentAlternateDeclaration.js.map +1 -1
- package/Shaders/ShadersInclude/samplerFragmentDeclaration.d.ts +1 -1
- package/Shaders/ShadersInclude/samplerFragmentDeclaration.js +1 -1
- package/Shaders/ShadersInclude/samplerFragmentDeclaration.js.map +1 -1
- package/Shaders/ShadersInclude/samplerVertexDeclaration.d.ts +1 -1
- package/Shaders/ShadersInclude/samplerVertexDeclaration.js +1 -1
- package/Shaders/ShadersInclude/samplerVertexDeclaration.js.map +1 -1
- package/Shaders/ShadersInclude/samplerVertexImplementation.d.ts +1 -1
- package/Shaders/ShadersInclude/samplerVertexImplementation.js +1 -1
- package/Shaders/ShadersInclude/samplerVertexImplementation.js.map +1 -1
- package/Shaders/ShadersInclude/sceneFragmentDeclaration.d.ts +1 -1
- package/Shaders/ShadersInclude/sceneFragmentDeclaration.js +1 -1
- package/Shaders/ShadersInclude/sceneFragmentDeclaration.js.map +1 -1
- package/Shaders/ShadersInclude/sceneUboDeclaration.d.ts +1 -1
- package/Shaders/ShadersInclude/sceneUboDeclaration.js +1 -1
- package/Shaders/ShadersInclude/sceneUboDeclaration.js.map +1 -1
- package/Shaders/ShadersInclude/sceneVertexDeclaration.d.ts +1 -1
- package/Shaders/ShadersInclude/sceneVertexDeclaration.js +1 -1
- package/Shaders/ShadersInclude/sceneVertexDeclaration.js.map +1 -1
- package/Shaders/ShadersInclude/shadowMapFragment.d.ts +1 -1
- package/Shaders/ShadersInclude/shadowMapFragment.js +1 -1
- package/Shaders/ShadersInclude/shadowMapFragment.js.map +1 -1
- package/Shaders/ShadersInclude/shadowMapFragmentExtraDeclaration.d.ts +1 -1
- package/Shaders/ShadersInclude/shadowMapFragmentExtraDeclaration.js +1 -1
- package/Shaders/ShadersInclude/shadowMapFragmentExtraDeclaration.js.map +1 -1
- package/Shaders/ShadersInclude/shadowMapFragmentSoftTransparentShadow.d.ts +1 -1
- package/Shaders/ShadersInclude/shadowMapFragmentSoftTransparentShadow.js +1 -1
- package/Shaders/ShadersInclude/shadowMapFragmentSoftTransparentShadow.js.map +1 -1
- package/Shaders/ShadersInclude/shadowMapUboDeclaration.d.ts +1 -1
- package/Shaders/ShadersInclude/shadowMapUboDeclaration.js +1 -1
- package/Shaders/ShadersInclude/shadowMapUboDeclaration.js.map +1 -1
- package/Shaders/ShadersInclude/shadowMapVertexDeclaration.d.ts +1 -1
- package/Shaders/ShadersInclude/shadowMapVertexDeclaration.js +1 -1
- package/Shaders/ShadersInclude/shadowMapVertexDeclaration.js.map +1 -1
- package/Shaders/ShadersInclude/shadowMapVertexExtraDeclaration.d.ts +1 -1
- package/Shaders/ShadersInclude/shadowMapVertexExtraDeclaration.js +1 -1
- package/Shaders/ShadersInclude/shadowMapVertexExtraDeclaration.js.map +1 -1
- package/Shaders/ShadersInclude/shadowMapVertexMetric.d.ts +1 -1
- package/Shaders/ShadersInclude/shadowMapVertexMetric.js +1 -1
- package/Shaders/ShadersInclude/shadowMapVertexMetric.js.map +1 -1
- package/Shaders/ShadersInclude/shadowMapVertexNormalBias.d.ts +1 -1
- package/Shaders/ShadersInclude/shadowMapVertexNormalBias.js +1 -1
- package/Shaders/ShadersInclude/shadowMapVertexNormalBias.js.map +1 -1
- package/Shaders/ShadersInclude/shadowsFragmentFunctions.d.ts +1 -1
- package/Shaders/ShadersInclude/shadowsFragmentFunctions.js +1 -1
- package/Shaders/ShadersInclude/shadowsFragmentFunctions.js.map +1 -1
- package/Shaders/ShadersInclude/shadowsVertex.d.ts +1 -1
- package/Shaders/ShadersInclude/shadowsVertex.js +1 -1
- package/Shaders/ShadersInclude/shadowsVertex.js.map +1 -1
- package/Shaders/ShadersInclude/subSurfaceScatteringFunctions.d.ts +1 -1
- package/Shaders/ShadersInclude/subSurfaceScatteringFunctions.js +1 -1
- package/Shaders/ShadersInclude/subSurfaceScatteringFunctions.js.map +1 -1
- package/Shaders/ShadersInclude/uvAttributeDeclaration.d.ts +1 -1
- package/Shaders/ShadersInclude/uvAttributeDeclaration.js +1 -1
- package/Shaders/ShadersInclude/uvAttributeDeclaration.js.map +1 -1
- package/Shaders/ShadersInclude/uvVariableDeclaration.d.ts +1 -1
- package/Shaders/ShadersInclude/uvVariableDeclaration.js +1 -1
- package/Shaders/ShadersInclude/uvVariableDeclaration.js.map +1 -1
- package/Shaders/ShadersInclude/vertexColorMixing.d.ts +1 -1
- package/Shaders/ShadersInclude/vertexColorMixing.js +2 -2
- package/Shaders/ShadersInclude/vertexColorMixing.js.map +1 -1
- package/Shaders/anaglyph.fragment.d.ts +1 -1
- package/Shaders/anaglyph.fragment.js +1 -1
- package/Shaders/anaglyph.fragment.js.map +1 -1
- package/Shaders/background.fragment.d.ts +1 -1
- package/Shaders/background.fragment.js +1 -1
- package/Shaders/background.fragment.js.map +1 -1
- package/Shaders/background.vertex.d.ts +1 -1
- package/Shaders/background.vertex.js +1 -1
- package/Shaders/background.vertex.js.map +1 -1
- package/Shaders/blackAndWhite.fragment.d.ts +1 -1
- package/Shaders/blackAndWhite.fragment.js +1 -1
- package/Shaders/blackAndWhite.fragment.js.map +1 -1
- package/Shaders/bloomMerge.fragment.d.ts +1 -1
- package/Shaders/bloomMerge.fragment.js +1 -1
- package/Shaders/bloomMerge.fragment.js.map +1 -1
- package/Shaders/blur.fragment.d.ts +1 -1
- package/Shaders/blur.fragment.js +1 -1
- package/Shaders/blur.fragment.js.map +1 -1
- package/Shaders/boundingBoxRenderer.fragment.d.ts +1 -1
- package/Shaders/boundingBoxRenderer.fragment.js +1 -1
- package/Shaders/boundingBoxRenderer.fragment.js.map +1 -1
- package/Shaders/boundingBoxRenderer.vertex.d.ts +1 -1
- package/Shaders/boundingBoxRenderer.vertex.js +1 -1
- package/Shaders/boundingBoxRenderer.vertex.js.map +1 -1
- package/Shaders/chromaticAberration.fragment.d.ts +1 -1
- package/Shaders/chromaticAberration.fragment.js +2 -1
- package/Shaders/chromaticAberration.fragment.js.map +1 -1
- package/Shaders/circleOfConfusion.fragment.d.ts +1 -1
- package/Shaders/circleOfConfusion.fragment.js +1 -1
- package/Shaders/circleOfConfusion.fragment.js.map +1 -1
- package/Shaders/clearQuad.fragment.d.ts +1 -1
- package/Shaders/clearQuad.fragment.js +1 -1
- package/Shaders/clearQuad.fragment.js.map +1 -1
- package/Shaders/clearQuad.vertex.d.ts +1 -1
- package/Shaders/clearQuad.vertex.js +1 -1
- package/Shaders/clearQuad.vertex.js.map +1 -1
- package/Shaders/color.fragment.d.ts +1 -1
- package/Shaders/color.fragment.js +4 -3
- package/Shaders/color.fragment.js.map +1 -1
- package/Shaders/color.vertex.d.ts +1 -1
- package/Shaders/color.vertex.js +2 -2
- package/Shaders/color.vertex.js.map +1 -1
- package/Shaders/colorCorrection.fragment.d.ts +1 -1
- package/Shaders/colorCorrection.fragment.js +1 -1
- package/Shaders/colorCorrection.fragment.js.map +1 -1
- package/Shaders/convolution.fragment.d.ts +1 -1
- package/Shaders/convolution.fragment.js +1 -1
- package/Shaders/convolution.fragment.js.map +1 -1
- package/Shaders/default.fragment.d.ts +1 -1
- package/Shaders/default.fragment.js +4 -4
- package/Shaders/default.fragment.js.map +1 -1
- package/Shaders/default.vertex.d.ts +1 -1
- package/Shaders/default.vertex.js +2 -2
- package/Shaders/default.vertex.js.map +1 -1
- package/Shaders/depth.fragment.d.ts +1 -1
- package/Shaders/depth.fragment.js +1 -1
- package/Shaders/depth.fragment.js.map +1 -1
- package/Shaders/depth.vertex.d.ts +1 -1
- package/Shaders/depth.vertex.js +1 -1
- package/Shaders/depth.vertex.js.map +1 -1
- package/Shaders/depthBoxBlur.fragment.d.ts +1 -1
- package/Shaders/depthBoxBlur.fragment.js +1 -1
- package/Shaders/depthBoxBlur.fragment.js.map +1 -1
- package/Shaders/depthOfField.fragment.d.ts +1 -1
- package/Shaders/depthOfField.fragment.js +1 -1
- package/Shaders/depthOfField.fragment.js.map +1 -1
- package/Shaders/depthOfFieldMerge.fragment.d.ts +1 -1
- package/Shaders/depthOfFieldMerge.fragment.js +1 -1
- package/Shaders/depthOfFieldMerge.fragment.js.map +1 -1
- package/Shaders/displayPass.fragment.d.ts +1 -1
- package/Shaders/displayPass.fragment.js +1 -1
- package/Shaders/displayPass.fragment.js.map +1 -1
- package/Shaders/extractHighlights.fragment.d.ts +1 -1
- package/Shaders/extractHighlights.fragment.js +1 -1
- package/Shaders/extractHighlights.fragment.js.map +1 -1
- package/Shaders/filter.fragment.d.ts +1 -1
- package/Shaders/filter.fragment.js +1 -1
- package/Shaders/filter.fragment.js.map +1 -1
- package/Shaders/fxaa.fragment.d.ts +1 -1
- package/Shaders/fxaa.fragment.js +1 -1
- package/Shaders/fxaa.fragment.js.map +1 -1
- package/Shaders/fxaa.vertex.d.ts +1 -1
- package/Shaders/fxaa.vertex.js +1 -1
- package/Shaders/fxaa.vertex.js.map +1 -1
- package/Shaders/geometry.fragment.d.ts +1 -1
- package/Shaders/geometry.fragment.js +14 -2
- package/Shaders/geometry.fragment.js.map +1 -1
- package/Shaders/geometry.vertex.d.ts +1 -1
- package/Shaders/geometry.vertex.js +1 -1
- package/Shaders/geometry.vertex.js.map +1 -1
- package/Shaders/glowBlurPostProcess.fragment.d.ts +1 -1
- package/Shaders/glowBlurPostProcess.fragment.js +1 -1
- package/Shaders/glowBlurPostProcess.fragment.js.map +1 -1
- package/Shaders/glowMapGeneration.fragment.d.ts +1 -1
- package/Shaders/glowMapGeneration.fragment.js +1 -1
- package/Shaders/glowMapGeneration.fragment.js.map +1 -1
- package/Shaders/glowMapGeneration.vertex.d.ts +1 -1
- package/Shaders/glowMapGeneration.vertex.js +1 -1
- package/Shaders/glowMapGeneration.vertex.js.map +1 -1
- package/Shaders/glowMapMerge.fragment.d.ts +1 -1
- package/Shaders/glowMapMerge.fragment.js +1 -1
- package/Shaders/glowMapMerge.fragment.js.map +1 -1
- package/Shaders/glowMapMerge.vertex.d.ts +1 -1
- package/Shaders/glowMapMerge.vertex.js +1 -1
- package/Shaders/glowMapMerge.vertex.js.map +1 -1
- package/Shaders/gpuRenderParticles.fragment.d.ts +3 -1
- package/Shaders/gpuRenderParticles.fragment.js +9 -2
- package/Shaders/gpuRenderParticles.fragment.js.map +1 -1
- package/Shaders/gpuRenderParticles.vertex.d.ts +3 -1
- package/Shaders/gpuRenderParticles.vertex.js +5 -1
- package/Shaders/gpuRenderParticles.vertex.js.map +1 -1
- package/Shaders/gpuUpdateParticles.fragment.d.ts +1 -1
- package/Shaders/gpuUpdateParticles.fragment.js +1 -1
- package/Shaders/gpuUpdateParticles.fragment.js.map +1 -1
- package/Shaders/gpuUpdateParticles.vertex.d.ts +1 -1
- package/Shaders/gpuUpdateParticles.vertex.js +1 -1
- package/Shaders/gpuUpdateParticles.vertex.js.map +1 -1
- package/Shaders/grain.fragment.d.ts +1 -1
- package/Shaders/grain.fragment.js +1 -1
- package/Shaders/grain.fragment.js.map +1 -1
- package/Shaders/hdrFiltering.fragment.d.ts +1 -1
- package/Shaders/hdrFiltering.fragment.js +1 -1
- package/Shaders/hdrFiltering.fragment.js.map +1 -1
- package/Shaders/hdrFiltering.vertex.d.ts +1 -1
- package/Shaders/hdrFiltering.vertex.js +1 -1
- package/Shaders/hdrFiltering.vertex.js.map +1 -1
- package/Shaders/highlights.fragment.d.ts +1 -1
- package/Shaders/highlights.fragment.js +1 -1
- package/Shaders/highlights.fragment.js.map +1 -1
- package/Shaders/imageProcessing.fragment.d.ts +1 -1
- package/Shaders/imageProcessing.fragment.js +1 -1
- package/Shaders/imageProcessing.fragment.js.map +1 -1
- package/Shaders/kernelBlur.fragment.d.ts +1 -1
- package/Shaders/kernelBlur.fragment.js +1 -1
- package/Shaders/kernelBlur.fragment.js.map +1 -1
- package/Shaders/kernelBlur.vertex.d.ts +1 -1
- package/Shaders/kernelBlur.vertex.js +1 -1
- package/Shaders/kernelBlur.vertex.js.map +1 -1
- package/Shaders/layer.fragment.d.ts +1 -1
- package/Shaders/layer.fragment.js +1 -1
- package/Shaders/layer.fragment.js.map +1 -1
- package/Shaders/layer.vertex.d.ts +1 -1
- package/Shaders/layer.vertex.js +1 -1
- package/Shaders/layer.vertex.js.map +1 -1
- package/Shaders/lensFlare.fragment.d.ts +1 -1
- package/Shaders/lensFlare.fragment.js +1 -1
- package/Shaders/lensFlare.fragment.js.map +1 -1
- package/Shaders/lensFlare.vertex.d.ts +1 -1
- package/Shaders/lensFlare.vertex.js +1 -1
- package/Shaders/lensFlare.vertex.js.map +1 -1
- package/Shaders/lensHighlights.fragment.d.ts +1 -1
- package/Shaders/lensHighlights.fragment.js +1 -1
- package/Shaders/lensHighlights.fragment.js.map +1 -1
- package/Shaders/line.fragment.d.ts +1 -1
- package/Shaders/line.fragment.js +1 -1
- package/Shaders/line.fragment.js.map +1 -1
- package/Shaders/line.vertex.d.ts +1 -1
- package/Shaders/line.vertex.js +1 -1
- package/Shaders/line.vertex.js.map +1 -1
- package/Shaders/minmaxRedux.fragment.d.ts +1 -1
- package/Shaders/minmaxRedux.fragment.js +1 -1
- package/Shaders/minmaxRedux.fragment.js.map +1 -1
- package/Shaders/motionBlur.fragment.d.ts +1 -1
- package/Shaders/motionBlur.fragment.js +1 -1
- package/Shaders/motionBlur.fragment.js.map +1 -1
- package/Shaders/noise.fragment.d.ts +1 -1
- package/Shaders/noise.fragment.js +1 -1
- package/Shaders/noise.fragment.js.map +1 -1
- package/Shaders/oitBackBlend.fragment.d.ts +1 -1
- package/Shaders/oitBackBlend.fragment.js +1 -1
- package/Shaders/oitBackBlend.fragment.js.map +1 -1
- package/Shaders/oitFinal.fragment.d.ts +1 -1
- package/Shaders/oitFinal.fragment.js +1 -1
- package/Shaders/oitFinal.fragment.js.map +1 -1
- package/Shaders/outline.fragment.d.ts +1 -1
- package/Shaders/outline.fragment.js +1 -1
- package/Shaders/outline.fragment.js.map +1 -1
- package/Shaders/outline.vertex.d.ts +1 -1
- package/Shaders/outline.vertex.js +1 -1
- package/Shaders/outline.vertex.js.map +1 -1
- package/Shaders/particles.fragment.d.ts +3 -1
- package/Shaders/particles.fragment.js +9 -2
- package/Shaders/particles.fragment.js.map +1 -1
- package/Shaders/particles.vertex.d.ts +3 -1
- package/Shaders/particles.vertex.js +5 -1
- package/Shaders/particles.vertex.js.map +1 -1
- package/Shaders/pass.fragment.d.ts +1 -1
- package/Shaders/pass.fragment.js +1 -1
- package/Shaders/pass.fragment.js.map +1 -1
- package/Shaders/passCube.fragment.d.ts +1 -1
- package/Shaders/passCube.fragment.js +1 -1
- package/Shaders/passCube.fragment.js.map +1 -1
- package/Shaders/pbr.fragment.d.ts +1 -1
- package/Shaders/pbr.fragment.js +1 -1
- package/Shaders/pbr.fragment.js.map +1 -1
- package/Shaders/pbr.vertex.d.ts +1 -1
- package/Shaders/pbr.vertex.js +2 -2
- package/Shaders/pbr.vertex.js.map +1 -1
- package/Shaders/postprocess.vertex.d.ts +1 -1
- package/Shaders/postprocess.vertex.js +1 -1
- package/Shaders/postprocess.vertex.js.map +1 -1
- package/Shaders/procedural.vertex.d.ts +1 -1
- package/Shaders/procedural.vertex.js +1 -1
- package/Shaders/procedural.vertex.js.map +1 -1
- package/Shaders/refraction.fragment.d.ts +1 -1
- package/Shaders/refraction.fragment.js +1 -1
- package/Shaders/refraction.fragment.js.map +1 -1
- package/Shaders/rgbdDecode.fragment.d.ts +1 -1
- package/Shaders/rgbdDecode.fragment.js +1 -1
- package/Shaders/rgbdDecode.fragment.js.map +1 -1
- package/Shaders/rgbdEncode.fragment.d.ts +1 -1
- package/Shaders/rgbdEncode.fragment.js +1 -1
- package/Shaders/rgbdEncode.fragment.js.map +1 -1
- package/Shaders/screenSpaceCurvature.fragment.d.ts +1 -1
- package/Shaders/screenSpaceCurvature.fragment.js +1 -1
- package/Shaders/screenSpaceCurvature.fragment.js.map +1 -1
- package/Shaders/screenSpaceReflection.fragment.d.ts +1 -1
- package/Shaders/screenSpaceReflection.fragment.js +1 -1
- package/Shaders/screenSpaceReflection.fragment.js.map +1 -1
- package/Shaders/shadowMap.fragment.d.ts +1 -1
- package/Shaders/shadowMap.fragment.js +1 -1
- package/Shaders/shadowMap.fragment.js.map +1 -1
- package/Shaders/shadowMap.vertex.d.ts +1 -1
- package/Shaders/shadowMap.vertex.js +1 -1
- package/Shaders/shadowMap.vertex.js.map +1 -1
- package/Shaders/sharpen.fragment.d.ts +1 -1
- package/Shaders/sharpen.fragment.js +1 -1
- package/Shaders/sharpen.fragment.js.map +1 -1
- package/Shaders/spriteMap.fragment.d.ts +1 -1
- package/Shaders/spriteMap.fragment.js +1 -1
- package/Shaders/spriteMap.fragment.js.map +1 -1
- package/Shaders/spriteMap.vertex.d.ts +1 -1
- package/Shaders/spriteMap.vertex.js +1 -1
- package/Shaders/spriteMap.vertex.js.map +1 -1
- package/Shaders/sprites.fragment.d.ts +1 -1
- package/Shaders/sprites.fragment.js +1 -1
- package/Shaders/sprites.fragment.js.map +1 -1
- package/Shaders/sprites.vertex.d.ts +1 -1
- package/Shaders/sprites.vertex.js +1 -1
- package/Shaders/sprites.vertex.js.map +1 -1
- package/Shaders/ssao.fragment.d.ts +1 -1
- package/Shaders/ssao.fragment.js +1 -1
- package/Shaders/ssao.fragment.js.map +1 -1
- package/Shaders/ssao2.fragment.d.ts +1 -1
- package/Shaders/ssao2.fragment.js +1 -1
- package/Shaders/ssao2.fragment.js.map +1 -1
- package/Shaders/ssaoCombine.fragment.d.ts +1 -1
- package/Shaders/ssaoCombine.fragment.js +1 -1
- package/Shaders/ssaoCombine.fragment.js.map +1 -1
- package/Shaders/standard.fragment.d.ts +1 -1
- package/Shaders/standard.fragment.js +1 -1
- package/Shaders/standard.fragment.js.map +1 -1
- package/Shaders/stereoscopicInterlace.fragment.d.ts +1 -1
- package/Shaders/stereoscopicInterlace.fragment.js +1 -1
- package/Shaders/stereoscopicInterlace.fragment.js.map +1 -1
- package/Shaders/subSurfaceScattering.fragment.d.ts +1 -1
- package/Shaders/subSurfaceScattering.fragment.js +1 -1
- package/Shaders/subSurfaceScattering.fragment.js.map +1 -1
- package/Shaders/tonemap.fragment.d.ts +1 -1
- package/Shaders/tonemap.fragment.js +1 -1
- package/Shaders/tonemap.fragment.js.map +1 -1
- package/Shaders/volumetricLightScattering.fragment.d.ts +1 -1
- package/Shaders/volumetricLightScattering.fragment.js +1 -1
- package/Shaders/volumetricLightScattering.fragment.js.map +1 -1
- package/Shaders/volumetricLightScatteringPass.fragment.d.ts +1 -1
- package/Shaders/volumetricLightScatteringPass.fragment.js +1 -1
- package/Shaders/volumetricLightScatteringPass.fragment.js.map +1 -1
- package/Shaders/volumetricLightScatteringPass.vertex.d.ts +1 -1
- package/Shaders/volumetricLightScatteringPass.vertex.js +1 -1
- package/Shaders/volumetricLightScatteringPass.vertex.js.map +1 -1
- package/Shaders/vrDistortionCorrection.fragment.d.ts +1 -1
- package/Shaders/vrDistortionCorrection.fragment.js +1 -1
- package/Shaders/vrDistortionCorrection.fragment.js.map +1 -1
- package/Shaders/vrMultiviewToSingleview.fragment.d.ts +1 -1
- package/Shaders/vrMultiviewToSingleview.fragment.js +1 -1
- package/Shaders/vrMultiviewToSingleview.fragment.js.map +1 -1
- package/ShadersWGSL/ShadersInclude/bakedVertexAnimation.d.ts +1 -1
- package/ShadersWGSL/ShadersInclude/bakedVertexAnimation.js +1 -1
- package/ShadersWGSL/ShadersInclude/bakedVertexAnimation.js.map +1 -1
- package/ShadersWGSL/ShadersInclude/bakedVertexAnimationDeclaration.d.ts +1 -1
- package/ShadersWGSL/ShadersInclude/bakedVertexAnimationDeclaration.js +1 -1
- package/ShadersWGSL/ShadersInclude/bakedVertexAnimationDeclaration.js.map +1 -1
- package/ShadersWGSL/ShadersInclude/bonesDeclaration.d.ts +1 -1
- package/ShadersWGSL/ShadersInclude/bonesDeclaration.js +1 -1
- package/ShadersWGSL/ShadersInclude/bonesDeclaration.js.map +1 -1
- package/ShadersWGSL/ShadersInclude/bonesVertex.d.ts +1 -1
- package/ShadersWGSL/ShadersInclude/bonesVertex.js +1 -1
- package/ShadersWGSL/ShadersInclude/bonesVertex.js.map +1 -1
- package/ShadersWGSL/ShadersInclude/clipPlaneFragment.d.ts +1 -1
- package/ShadersWGSL/ShadersInclude/clipPlaneFragment.js +1 -1
- package/ShadersWGSL/ShadersInclude/clipPlaneFragment.js.map +1 -1
- package/ShadersWGSL/ShadersInclude/clipPlaneFragmentDeclaration.d.ts +1 -1
- package/ShadersWGSL/ShadersInclude/clipPlaneFragmentDeclaration.js +1 -1
- package/ShadersWGSL/ShadersInclude/clipPlaneFragmentDeclaration.js.map +1 -1
- package/ShadersWGSL/ShadersInclude/clipPlaneVertex.d.ts +1 -1
- package/ShadersWGSL/ShadersInclude/clipPlaneVertex.js +1 -1
- package/ShadersWGSL/ShadersInclude/clipPlaneVertex.js.map +1 -1
- package/ShadersWGSL/ShadersInclude/clipPlaneVertexDeclaration.d.ts +1 -1
- package/ShadersWGSL/ShadersInclude/clipPlaneVertexDeclaration.js +1 -1
- package/ShadersWGSL/ShadersInclude/clipPlaneVertexDeclaration.js.map +1 -1
- package/ShadersWGSL/ShadersInclude/instancesDeclaration.d.ts +1 -1
- package/ShadersWGSL/ShadersInclude/instancesDeclaration.js +1 -1
- package/ShadersWGSL/ShadersInclude/instancesDeclaration.js.map +1 -1
- package/ShadersWGSL/ShadersInclude/instancesVertex.d.ts +1 -1
- package/ShadersWGSL/ShadersInclude/instancesVertex.js +1 -1
- package/ShadersWGSL/ShadersInclude/instancesVertex.js.map +1 -1
- package/ShadersWGSL/ShadersInclude/meshUboDeclaration.d.ts +1 -1
- package/ShadersWGSL/ShadersInclude/meshUboDeclaration.js +1 -1
- package/ShadersWGSL/ShadersInclude/meshUboDeclaration.js.map +1 -1
- package/ShadersWGSL/ShadersInclude/morphTargetsVertex.d.ts +1 -1
- package/ShadersWGSL/ShadersInclude/morphTargetsVertex.js +1 -1
- package/ShadersWGSL/ShadersInclude/morphTargetsVertex.js.map +1 -1
- package/ShadersWGSL/ShadersInclude/morphTargetsVertexDeclaration.d.ts +1 -1
- package/ShadersWGSL/ShadersInclude/morphTargetsVertexDeclaration.js +1 -1
- package/ShadersWGSL/ShadersInclude/morphTargetsVertexDeclaration.js.map +1 -1
- package/ShadersWGSL/ShadersInclude/morphTargetsVertexGlobal.d.ts +1 -1
- package/ShadersWGSL/ShadersInclude/morphTargetsVertexGlobal.js +1 -1
- package/ShadersWGSL/ShadersInclude/morphTargetsVertexGlobal.js.map +1 -1
- package/ShadersWGSL/ShadersInclude/morphTargetsVertexGlobalDeclaration.d.ts +1 -1
- package/ShadersWGSL/ShadersInclude/morphTargetsVertexGlobalDeclaration.js +1 -1
- package/ShadersWGSL/ShadersInclude/morphTargetsVertexGlobalDeclaration.js.map +1 -1
- package/ShadersWGSL/ShadersInclude/sceneUboDeclaration.d.ts +1 -1
- package/ShadersWGSL/ShadersInclude/sceneUboDeclaration.js +1 -1
- package/ShadersWGSL/ShadersInclude/sceneUboDeclaration.js.map +1 -1
- package/ShadersWGSL/gpuUpdateParticles.compute.d.ts +1 -1
- package/ShadersWGSL/gpuUpdateParticles.compute.js +1 -1
- package/ShadersWGSL/gpuUpdateParticles.compute.js.map +1 -1
- package/Sprites/spriteManager.d.ts +4 -0
- package/Sprites/spriteManager.js +2 -0
- package/Sprites/spriteManager.js.map +1 -1
- package/Sprites/spriteSceneComponent.d.ts +6 -6
- package/Sprites/spriteSceneComponent.js.map +1 -1
- package/Sprites/thinSprite.d.ts +5 -6
- package/Sprites/thinSprite.js +1 -2
- package/Sprites/thinSprite.js.map +1 -1
- package/States/IStencilState.d.ts +1 -1
- package/States/IStencilState.js.map +1 -1
- package/States/alphaCullingState.d.ts +1 -1
- package/States/alphaCullingState.js +1 -1
- package/States/alphaCullingState.js.map +1 -1
- package/States/depthCullingState.d.ts +1 -1
- package/States/depthCullingState.js +1 -1
- package/States/depthCullingState.js.map +1 -1
- package/States/stencilState.d.ts +1 -1
- package/States/stencilState.js +1 -1
- package/States/stencilState.js.map +1 -1
- package/States/stencilStateComposer.d.ts +1 -1
- package/States/stencilStateComposer.js +1 -1
- package/States/stencilStateComposer.js.map +1 -1
- package/XR/features/WebXRControllerPhysics.d.ts +1 -1
- package/XR/features/WebXRControllerPhysics.js +1 -1
- package/XR/features/WebXRControllerPhysics.js.map +1 -1
- package/XR/features/WebXRControllerPointerSelection.d.ts +3 -6
- package/XR/features/WebXRControllerPointerSelection.js +3 -6
- package/XR/features/WebXRControllerPointerSelection.js.map +1 -1
- package/XR/features/WebXRLayers.d.ts +2 -2
- package/XR/features/WebXRLayers.js +4 -4
- package/XR/features/WebXRLayers.js.map +1 -1
- package/XR/features/WebXRNearInteraction.js +2 -2
- package/XR/features/WebXRNearInteraction.js.map +1 -1
- package/XR/motionController/webXRAbstractMotionController.d.ts +3 -4
- package/XR/motionController/webXRAbstractMotionController.js +2 -3
- package/XR/motionController/webXRAbstractMotionController.js.map +1 -1
- package/XR/native/nativeXRFrame.d.ts +2 -2
- package/XR/native/nativeXRFrame.js +1 -1
- package/XR/native/nativeXRFrame.js.map +1 -1
- package/XR/native/nativeXRRenderTarget.d.ts +3 -3
- package/XR/native/nativeXRRenderTarget.js +3 -3
- package/XR/native/nativeXRRenderTarget.js.map +1 -1
- package/XR/webXRCamera.d.ts +2 -2
- package/XR/webXRCamera.js +1 -1
- package/XR/webXRCamera.js.map +1 -1
- package/XR/webXRDefaultExperience.d.ts +6 -6
- package/XR/webXRDefaultExperience.js.map +1 -1
- package/XR/webXRExperienceHelper.d.ts +21 -1
- package/XR/webXRExperienceHelper.js +37 -7
- package/XR/webXRExperienceHelper.js.map +1 -1
- package/XR/webXRInputSource.d.ts +1 -1
- package/XR/webXRInputSource.js.map +1 -1
- package/XR/webXRLayerWrapper.d.ts +1 -1
- package/XR/webXRLayerWrapper.js +1 -1
- package/XR/webXRLayerWrapper.js.map +1 -1
- package/XR/webXRRenderTargetTextureProvider.d.ts +1 -1
- package/XR/webXRRenderTargetTextureProvider.js +1 -1
- package/XR/webXRRenderTargetTextureProvider.js.map +1 -1
- package/XR/webXRSessionManager.d.ts +1 -2
- package/XR/webXRSessionManager.js +1 -2
- package/XR/webXRSessionManager.js.map +1 -1
- package/XR/webXRWebGLLayer.d.ts +2 -2
- package/XR/webXRWebGLLayer.js +2 -2
- package/XR/webXRWebGLLayer.js.map +1 -1
- package/abstractScene.d.ts +1 -1
- package/abstractScene.js +1 -1
- package/abstractScene.js.map +1 -1
- package/node.d.ts +40 -52
- package/node.js +40 -55
- package/node.js.map +1 -1
- package/package.json +1 -1
- package/scene.d.ts +83 -107
- package/scene.js +94 -108
- package/scene.js.map +1 -1
- package/sceneComponent.d.ts +4 -2
- package/sceneComponent.js +4 -2
- package/sceneComponent.js.map +1 -1
- package/types.d.ts +2 -2
- package/types.js +1 -1
- package/types.js.map +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"vrExperienceHelper.js","sourceRoot":"","sources":["../../../../../../lts/core/generated/Cameras/VR/vrExperienceHelper.ts"],"names":[],"mappings":"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","sourcesContent":["import { Logger } from \"../../Misc/logger\";\r\nimport type { Observer } from \"../../Misc/observable\";\r\nimport { Observable } from \"../../Misc/observable\";\r\nimport type { Nullable } from \"../../types\";\r\nimport type { Camera } from \"../../Cameras/camera\";\r\nimport { FreeCamera } from \"../../Cameras/freeCamera\";\r\nimport { TargetCamera } from \"../../Cameras/targetCamera\";\r\nimport { DeviceOrientationCamera } from \"../../Cameras/deviceOrientationCamera\";\r\nimport { VRDeviceOrientationFreeCamera } from \"../../Cameras/VR/vrDeviceOrientationFreeCamera\";\r\nimport type { WebVROptions } from \"../../Cameras/VR/webVRCamera\";\r\nimport { WebVRFreeCamera } from \"../../Cameras/VR/webVRCamera\";\r\nimport { PointerEventTypes } from \"../../Events/pointerEvents\";\r\nimport type { Scene, IDisposable } from \"../../scene\";\r\nimport { Quaternion, Matrix, Vector3 } from \"../../Maths/math.vector\";\r\nimport { Color3, Color4 } from \"../../Maths/math.color\";\r\nimport type { StickValues } from \"../../Gamepads/gamepad\";\r\nimport { Gamepad } from \"../../Gamepads/gamepad\";\r\nimport { PoseEnabledController, PoseEnabledControllerType } from \"../../Gamepads/Controllers/poseEnabledController\";\r\nimport { WebVRController } from \"../../Gamepads/Controllers/webVRController\";\r\nimport type { Xbox360Pad } from \"../../Gamepads/xboxGamepad\";\r\nimport { Xbox360Button } from \"../../Gamepads/xboxGamepad\";\r\nimport type { IDisplayChangedEventArgs } from \"../../Engines/engine\";\r\nimport type { AbstractMesh } from \"../../Meshes/abstractMesh\";\r\nimport type { TransformNode } from \"../../Meshes/transformNode\";\r\nimport { Mesh } from \"../../Meshes/mesh\";\r\nimport type { PickingInfo } from \"../../Collisions/pickingInfo\";\r\nimport { Ray } from \"../../Culling/ray\";\r\nimport { ImageProcessingConfiguration } from \"../../Materials/imageProcessingConfiguration\";\r\nimport { StandardMaterial } from \"../../Materials/standardMaterial\";\r\nimport { DynamicTexture } from \"../../Materials/Textures/dynamicTexture\";\r\nimport { ImageProcessingPostProcess } from \"../../PostProcesses/imageProcessingPostProcess\";\r\nimport { SineEase, EasingFunction, CircleEase } from \"../../Animations/easing\";\r\nimport { Animation } from \"../../Animations/animation\";\r\nimport { VRCameraMetrics } from \"../../Cameras/VR/vrCameraMetrics\";\r\nimport \"../../Gamepads/gamepadSceneComponent\";\r\nimport \"../../Animations/animatable\";\r\nimport { Axis } from \"../../Maths/math.axis\";\r\nimport { WebXRSessionManager } from \"../../XR/webXRSessionManager\";\r\nimport type { WebXRDefaultExperience } from \"../../XR/webXRDefaultExperience\";\r\nimport { WebXRState } from \"../../XR/webXRTypes\";\r\nimport { CreateCylinder } from \"../../Meshes/Builders/cylinderBuilder\";\r\nimport { CreateTorus } from \"../../Meshes/Builders/torusBuilder\";\r\nimport { CreateGround } from \"../../Meshes/Builders/groundBuilder\";\r\nimport type { IPointerEvent } from \"../../Events/deviceInputEvents\";\r\n\r\n/**\r\n * Options to modify the vr teleportation behavior.\r\n */\r\nexport interface VRTeleportationOptions {\r\n /**\r\n * The name of the mesh which should be used as the teleportation floor. (default: null)\r\n */\r\n floorMeshName?: string;\r\n /**\r\n * A list of meshes to be used as the teleportation floor. (default: empty)\r\n */\r\n floorMeshes?: Mesh[];\r\n /**\r\n * The teleportation mode. (default: TELEPORTATIONMODE_CONSTANTTIME)\r\n */\r\n teleportationMode?: number;\r\n /**\r\n * The duration of the animation in ms, apply when animationMode is TELEPORTATIONMODE_CONSTANTTIME. (default 122ms)\r\n */\r\n teleportationTime?: number;\r\n /**\r\n * The speed of the animation in distance/sec, apply when animationMode is TELEPORTATIONMODE_CONSTANTSPEED. (default 20 units / sec)\r\n */\r\n teleportationSpeed?: number;\r\n /**\r\n * The easing function used in the animation or null for Linear. (default CircleEase)\r\n */\r\n easingFunction?: EasingFunction;\r\n}\r\n\r\n/**\r\n * Options to modify the vr experience helper's behavior.\r\n */\r\nexport interface VRExperienceHelperOptions extends WebVROptions {\r\n /**\r\n * Create a DeviceOrientationCamera to be used as your out of vr camera. (default: true)\r\n */\r\n createDeviceOrientationCamera?: boolean;\r\n /**\r\n * Create a VRDeviceOrientationFreeCamera to be used for VR when no external HMD is found. (default: true)\r\n */\r\n createFallbackVRDeviceOrientationFreeCamera?: boolean;\r\n /**\r\n * Uses the main button on the controller to toggle the laser casted. (default: true)\r\n */\r\n laserToggle?: boolean;\r\n /**\r\n * A list of meshes to be used as the teleportation floor. If specified, teleportation will be enabled (default: undefined)\r\n */\r\n floorMeshes?: Mesh[];\r\n /**\r\n * Distortion metrics for the fallback vrDeviceOrientationCamera (default: VRCameraMetrics.Default)\r\n */\r\n vrDeviceOrientationCameraMetrics?: VRCameraMetrics;\r\n /**\r\n * Defines if WebXR should be used instead of WebVR (if available)\r\n */\r\n useXR?: boolean;\r\n}\r\n\r\nclass VRExperienceHelperGazer implements IDisposable {\r\n /** @hidden */\r\n public _gazeTracker: Mesh;\r\n\r\n /** @hidden */\r\n public _currentMeshSelected: Nullable<AbstractMesh>;\r\n /** @hidden */\r\n public _currentHit: Nullable<PickingInfo>;\r\n\r\n public static _IdCounter = 0;\r\n /** @hidden */\r\n public _id: number;\r\n\r\n /** @hidden */\r\n public _pointerDownOnMeshAsked: boolean = false;\r\n /** @hidden */\r\n public _isActionableMesh: boolean = false;\r\n\r\n /** @hidden */\r\n public _interactionsEnabled: boolean;\r\n /** @hidden */\r\n public _teleportationEnabled: boolean;\r\n /** @hidden */\r\n public _teleportationRequestInitiated = false;\r\n /** @hidden */\r\n public _teleportationBackRequestInitiated = false;\r\n /** @hidden */\r\n public _rotationRightAsked = false;\r\n /** @hidden */\r\n public _rotationLeftAsked = false;\r\n /** @hidden */\r\n public _dpadPressed = true;\r\n\r\n /** @hidden */\r\n public _activePointer = false;\r\n\r\n constructor(public scene: Scene, gazeTrackerToClone: Nullable<Mesh> = null) {\r\n this._id = VRExperienceHelperGazer._IdCounter++;\r\n\r\n // Gaze tracker\r\n if (!gazeTrackerToClone) {\r\n this._gazeTracker = CreateTorus(\r\n \"gazeTracker\",\r\n {\r\n diameter: 0.0035,\r\n thickness: 0.0025,\r\n tessellation: 20,\r\n updatable: false,\r\n },\r\n scene\r\n );\r\n this._gazeTracker.bakeCurrentTransformIntoVertices();\r\n this._gazeTracker.isPickable = false;\r\n this._gazeTracker.isVisible = false;\r\n const targetMat = new StandardMaterial(\"targetMat\", scene);\r\n targetMat.specularColor = Color3.Black();\r\n targetMat.emissiveColor = new Color3(0.7, 0.7, 0.7);\r\n targetMat.backFaceCulling = false;\r\n this._gazeTracker.material = targetMat;\r\n } else {\r\n this._gazeTracker = gazeTrackerToClone.clone(\"gazeTracker\") as Mesh;\r\n }\r\n }\r\n\r\n /**\r\n * @param length\r\n * @hidden\r\n */\r\n public _getForwardRay(length: number): Ray {\r\n return new Ray(Vector3.Zero(), new Vector3(0, 0, length));\r\n }\r\n\r\n /** @hidden */\r\n public _selectionPointerDown() {\r\n this._pointerDownOnMeshAsked = true;\r\n if (this._currentHit) {\r\n this.scene.simulatePointerDown(this._currentHit, { pointerId: this._id });\r\n }\r\n }\r\n\r\n /** @hidden */\r\n public _selectionPointerUp() {\r\n if (this._currentHit) {\r\n this.scene.simulatePointerUp(this._currentHit, { pointerId: this._id });\r\n }\r\n this._pointerDownOnMeshAsked = false;\r\n }\r\n\r\n /** @hidden */\r\n public _activatePointer() {\r\n this._activePointer = true;\r\n }\r\n\r\n /** @hidden */\r\n public _deactivatePointer() {\r\n this._activePointer = false;\r\n }\r\n\r\n /**\r\n * @param distance\r\n * @hidden\r\n */\r\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\r\n public _updatePointerDistance(distance: number = 100) {}\r\n\r\n public dispose() {\r\n this._interactionsEnabled = false;\r\n this._teleportationEnabled = false;\r\n if (this._gazeTracker) {\r\n this._gazeTracker.dispose();\r\n }\r\n }\r\n}\r\n\r\nclass VRExperienceHelperControllerGazer extends VRExperienceHelperGazer {\r\n private _laserPointer: Mesh;\r\n private _meshAttachedObserver: Nullable<Observer<AbstractMesh>>;\r\n constructor(public webVRController: WebVRController, scene: Scene, gazeTrackerToClone: Mesh) {\r\n super(scene, gazeTrackerToClone);\r\n // Laser pointer\r\n this._laserPointer = CreateCylinder(\r\n \"laserPointer\",\r\n {\r\n updatable: false,\r\n height: 1,\r\n diameterTop: 0.004,\r\n diameterBottom: 0.0002,\r\n tessellation: 20,\r\n subdivisions: 1,\r\n },\r\n scene\r\n );\r\n const laserPointerMaterial = new StandardMaterial(\"laserPointerMat\", scene);\r\n laserPointerMaterial.emissiveColor = new Color3(0.7, 0.7, 0.7);\r\n laserPointerMaterial.alpha = 0.6;\r\n this._laserPointer.material = laserPointerMaterial;\r\n this._laserPointer.rotation.x = Math.PI / 2;\r\n this._laserPointer.position.z = -0.5;\r\n this._laserPointer.isVisible = false;\r\n this._laserPointer.isPickable = false;\r\n\r\n if (!webVRController.mesh) {\r\n // Create an empty mesh that is used prior to loading the high quality model\r\n const preloadMesh = new Mesh(\"preloadControllerMesh\", scene);\r\n const preloadPointerPose = new Mesh(PoseEnabledController.POINTING_POSE, scene);\r\n preloadPointerPose.rotation.x = -0.7;\r\n preloadMesh.addChild(preloadPointerPose);\r\n webVRController.attachToMesh(preloadMesh);\r\n }\r\n\r\n this._setLaserPointerParent(webVRController.mesh!);\r\n\r\n this._meshAttachedObserver = webVRController._meshAttachedObservable.add((mesh) => {\r\n this._setLaserPointerParent(mesh);\r\n });\r\n }\r\n\r\n _getForwardRay(length: number): Ray {\r\n return this.webVRController.getForwardRay(length);\r\n }\r\n\r\n /** @hidden */\r\n public _activatePointer() {\r\n super._activatePointer();\r\n this._laserPointer.isVisible = true;\r\n }\r\n\r\n /** @hidden */\r\n public _deactivatePointer() {\r\n super._deactivatePointer();\r\n this._laserPointer.isVisible = false;\r\n }\r\n\r\n /**\r\n * @param color\r\n * @hidden\r\n */\r\n public _setLaserPointerColor(color: Color3) {\r\n (<StandardMaterial>this._laserPointer.material).emissiveColor = color;\r\n }\r\n\r\n /**\r\n * @param disabled\r\n * @hidden\r\n */\r\n public _setLaserPointerLightingDisabled(disabled: boolean) {\r\n (<StandardMaterial>this._laserPointer.material).disableLighting = disabled;\r\n }\r\n\r\n /**\r\n * @param mesh\r\n * @hidden\r\n */\r\n public _setLaserPointerParent(mesh: AbstractMesh) {\r\n const makeNotPick = (root: AbstractMesh) => {\r\n root.isPickable = false;\r\n root.getChildMeshes().forEach((c) => {\r\n makeNotPick(c);\r\n });\r\n };\r\n makeNotPick(mesh);\r\n const meshChildren = mesh.getChildren(undefined, false);\r\n\r\n let laserParent: TransformNode = mesh;\r\n this.webVRController._pointingPoseNode = null;\r\n for (let i = 0; i < meshChildren.length; i++) {\r\n if (meshChildren[i].name && meshChildren[i].name.indexOf(PoseEnabledController.POINTING_POSE) >= 0) {\r\n laserParent = <TransformNode>meshChildren[i];\r\n this.webVRController._pointingPoseNode = laserParent;\r\n break;\r\n }\r\n }\r\n this._laserPointer.parent = laserParent;\r\n }\r\n\r\n public _updatePointerDistance(distance: number = 100) {\r\n this._laserPointer.scaling.y = distance;\r\n this._laserPointer.position.z = -distance / 2;\r\n }\r\n\r\n dispose() {\r\n super.dispose();\r\n this._laserPointer.dispose();\r\n if (this._meshAttachedObserver) {\r\n this.webVRController._meshAttachedObservable.remove(this._meshAttachedObserver);\r\n }\r\n }\r\n}\r\n\r\nclass VRExperienceHelperCameraGazer extends VRExperienceHelperGazer {\r\n constructor(private _getCamera: () => Nullable<Camera>, scene: Scene) {\r\n super(scene);\r\n }\r\n\r\n _getForwardRay(length: number): Ray {\r\n const camera = this._getCamera();\r\n if (camera) {\r\n return camera.getForwardRay(length);\r\n } else {\r\n return new Ray(Vector3.Zero(), Vector3.Forward());\r\n }\r\n }\r\n}\r\n\r\n/**\r\n * Event containing information after VR has been entered\r\n */\r\nexport class OnAfterEnteringVRObservableEvent {\r\n /**\r\n * If entering vr was successful\r\n */\r\n public success: boolean;\r\n}\r\n\r\n/**\r\n * Helps to quickly add VR support to an existing scene.\r\n * See https://doc.babylonjs.com/divingDeeper/cameras/webVRHelper\r\n * @deprecated\r\n */\r\nexport class VRExperienceHelper {\r\n private _scene: Scene;\r\n private _position: Vector3;\r\n private _btnVR: Nullable<HTMLButtonElement>;\r\n private _btnVRDisplayed: boolean;\r\n\r\n // Can the system support WebVR, even if a headset isn't plugged in?\r\n private _webVRsupported = false;\r\n // If WebVR is supported, is a headset plugged in and are we ready to present?\r\n private _webVRready = false;\r\n // Are we waiting for the requestPresent callback to complete?\r\n private _webVRrequesting = false;\r\n // Are we presenting to the headset right now? (this is the vrDevice state)\r\n private _webVRpresenting = false;\r\n // Have we entered VR? (this is the VRExperienceHelper state)\r\n private _hasEnteredVR: boolean;\r\n\r\n // Are we presenting in the fullscreen fallback?\r\n private _fullscreenVRpresenting = false;\r\n\r\n private _inputElement: Nullable<HTMLElement>;\r\n private _webVRCamera: WebVRFreeCamera;\r\n private _vrDeviceOrientationCamera: Nullable<VRDeviceOrientationFreeCamera>;\r\n private _deviceOrientationCamera: Nullable<DeviceOrientationCamera>;\r\n private _existingCamera: Camera;\r\n\r\n private _onKeyDown: (event: KeyboardEvent) => void;\r\n private _onVrDisplayPresentChangeBind: any;\r\n private _onVRDisplayChangedBind: (eventArgs: IDisplayChangedEventArgs) => void;\r\n private _onVRRequestPresentStart: () => void;\r\n private _onVRRequestPresentComplete: (success: boolean) => void;\r\n\r\n /**\r\n * Gets or sets a boolean indicating that gaze can be enabled even if pointer lock is not engage (useful on iOS where fullscreen mode and pointer lock are not supported)\r\n */\r\n public enableGazeEvenWhenNoPointerLock = false;\r\n\r\n /**\r\n * Gets or sets a boolean indicating that the VREXperienceHelper will exit VR if double tap is detected\r\n */\r\n public exitVROnDoubleTap = true;\r\n\r\n /**\r\n * Observable raised right before entering VR.\r\n */\r\n public onEnteringVRObservable = new Observable<VRExperienceHelper>();\r\n\r\n /**\r\n * Observable raised when entering VR has completed.\r\n */\r\n public onAfterEnteringVRObservable = new Observable<OnAfterEnteringVRObservableEvent>();\r\n\r\n /**\r\n * Observable raised when exiting VR.\r\n */\r\n public onExitingVRObservable = new Observable<VRExperienceHelper>();\r\n\r\n /**\r\n * Observable raised when controller mesh is loaded.\r\n */\r\n public onControllerMeshLoadedObservable = new Observable<WebVRController>();\r\n\r\n /** Return this.onEnteringVRObservable\r\n * Note: This one is for backward compatibility. Please use onEnteringVRObservable directly\r\n */\r\n public get onEnteringVR(): Observable<VRExperienceHelper> {\r\n return this.onEnteringVRObservable;\r\n }\r\n\r\n /** Return this.onExitingVRObservable\r\n * Note: This one is for backward compatibility. Please use onExitingVRObservable directly\r\n */\r\n public get onExitingVR(): Observable<VRExperienceHelper> {\r\n return this.onExitingVRObservable;\r\n }\r\n\r\n /** Return this.onControllerMeshLoadedObservable\r\n * Note: This one is for backward compatibility. Please use onControllerMeshLoadedObservable directly\r\n */\r\n public get onControllerMeshLoaded(): Observable<WebVRController> {\r\n return this.onControllerMeshLoadedObservable;\r\n }\r\n\r\n private _rayLength: number;\r\n private _useCustomVRButton: boolean = false;\r\n private _teleportationRequested: boolean = false;\r\n private _teleportActive = false;\r\n private _floorMeshName: string;\r\n private _floorMeshesCollection: Mesh[] = [];\r\n private _teleportationMode: number = VRExperienceHelper.TELEPORTATIONMODE_CONSTANTTIME;\r\n private _teleportationTime: number = 122;\r\n private _teleportationSpeed: number = 20;\r\n private _teleportationEasing: EasingFunction;\r\n private _rotationAllowed: boolean = true;\r\n private _teleportBackwardsVector = new Vector3(0, -1, -1);\r\n private _teleportationTarget: Mesh;\r\n private _isDefaultTeleportationTarget = true;\r\n private _postProcessMove: ImageProcessingPostProcess;\r\n private _teleportationFillColor: string = \"#444444\";\r\n private _teleportationBorderColor: string = \"#FFFFFF\";\r\n private _rotationAngle: number = 0;\r\n private _haloCenter = new Vector3(0, 0, 0);\r\n private _cameraGazer: VRExperienceHelperCameraGazer;\r\n private _padSensibilityUp = 0.65;\r\n private _padSensibilityDown = 0.35;\r\n\r\n private _leftController: Nullable<VRExperienceHelperControllerGazer> = null;\r\n private _rightController: Nullable<VRExperienceHelperControllerGazer> = null;\r\n\r\n private _gazeColor: Color3 = new Color3(0.7, 0.7, 0.7);\r\n private _laserColor: Color3 = new Color3(0.7, 0.7, 0.7);\r\n private _pickedLaserColor: Color3 = new Color3(0.2, 0.2, 1);\r\n private _pickedGazeColor: Color3 = new Color3(0, 0, 1);\r\n\r\n /**\r\n * Observable raised when a new mesh is selected based on meshSelectionPredicate\r\n */\r\n public onNewMeshSelected = new Observable<AbstractMesh>();\r\n\r\n /**\r\n * Observable raised when a new mesh is selected based on meshSelectionPredicate.\r\n * This observable will provide the mesh and the controller used to select the mesh\r\n */\r\n public onMeshSelectedWithController = new Observable<{ mesh: AbstractMesh; controller: WebVRController }>();\r\n\r\n /**\r\n * Observable raised when a new mesh is picked based on meshSelectionPredicate\r\n */\r\n public onNewMeshPicked = new Observable<PickingInfo>();\r\n\r\n private _circleEase: CircleEase;\r\n\r\n /**\r\n * Observable raised before camera teleportation\r\n */\r\n public onBeforeCameraTeleport = new Observable<Vector3>();\r\n\r\n /**\r\n * Observable raised after camera teleportation\r\n */\r\n public onAfterCameraTeleport = new Observable<Vector3>();\r\n\r\n /**\r\n * Observable raised when current selected mesh gets unselected\r\n */\r\n public onSelectedMeshUnselected = new Observable<AbstractMesh>();\r\n\r\n private _raySelectionPredicate: (mesh: AbstractMesh) => boolean;\r\n\r\n /**\r\n * To be optionally changed by user to define custom ray selection\r\n */\r\n public raySelectionPredicate: (mesh: AbstractMesh) => boolean;\r\n\r\n /**\r\n * To be optionally changed by user to define custom selection logic (after ray selection)\r\n */\r\n public meshSelectionPredicate: (mesh: AbstractMesh) => boolean;\r\n\r\n /**\r\n * Set teleportation enabled. If set to false camera teleportation will be disabled but camera rotation will be kept.\r\n */\r\n public teleportationEnabled: boolean = true;\r\n\r\n private _defaultHeight: number;\r\n private _teleportationInitialized = false;\r\n private _interactionsEnabled = false;\r\n private _interactionsRequested = false;\r\n private _displayGaze = true;\r\n private _displayLaserPointer = true;\r\n\r\n /**\r\n * The mesh used to display where the user is going to teleport.\r\n */\r\n public get teleportationTarget(): Mesh {\r\n return this._teleportationTarget;\r\n }\r\n\r\n /**\r\n * Sets the mesh to be used to display where the user is going to teleport.\r\n */\r\n public set teleportationTarget(value: Mesh) {\r\n if (value) {\r\n value.name = \"teleportationTarget\";\r\n this._isDefaultTeleportationTarget = false;\r\n this._teleportationTarget = value;\r\n }\r\n }\r\n\r\n /**\r\n * The mesh used to display where the user is selecting, this mesh will be cloned and set as the gazeTracker for the left and right controller\r\n * when set bakeCurrentTransformIntoVertices will be called on the mesh.\r\n * See https://doc.babylonjs.com/resources/baking_transformations\r\n */\r\n public get gazeTrackerMesh(): Mesh {\r\n return this._cameraGazer._gazeTracker;\r\n }\r\n\r\n public set gazeTrackerMesh(value: Mesh) {\r\n if (value) {\r\n // Dispose of existing meshes\r\n if (this._cameraGazer._gazeTracker) {\r\n this._cameraGazer._gazeTracker.dispose();\r\n }\r\n if (this._leftController && this._leftController._gazeTracker) {\r\n this._leftController._gazeTracker.dispose();\r\n }\r\n if (this._rightController && this._rightController._gazeTracker) {\r\n this._rightController._gazeTracker.dispose();\r\n }\r\n\r\n // Set and create gaze trackers on head and controllers\r\n this._cameraGazer._gazeTracker = value;\r\n this._cameraGazer._gazeTracker.bakeCurrentTransformIntoVertices();\r\n this._cameraGazer._gazeTracker.isPickable = false;\r\n this._cameraGazer._gazeTracker.isVisible = false;\r\n this._cameraGazer._gazeTracker.name = \"gazeTracker\";\r\n if (this._leftController) {\r\n this._leftController._gazeTracker = this._cameraGazer._gazeTracker.clone(\"gazeTracker\") as Mesh;\r\n }\r\n\r\n if (this._rightController) {\r\n this._rightController._gazeTracker = this._cameraGazer._gazeTracker.clone(\"gazeTracker\") as Mesh;\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * If the gaze trackers scale should be updated to be constant size when pointing at near/far meshes\r\n */\r\n public updateGazeTrackerScale = true;\r\n /**\r\n * If the gaze trackers color should be updated when selecting meshes\r\n */\r\n public updateGazeTrackerColor = true;\r\n /**\r\n * If the controller laser color should be updated when selecting meshes\r\n */\r\n public updateControllerLaserColor = true;\r\n\r\n /**\r\n * The gaze tracking mesh corresponding to the left controller\r\n */\r\n public get leftControllerGazeTrackerMesh(): Nullable<Mesh> {\r\n if (this._leftController) {\r\n return this._leftController._gazeTracker;\r\n }\r\n return null;\r\n }\r\n\r\n /**\r\n * The gaze tracking mesh corresponding to the right controller\r\n */\r\n public get rightControllerGazeTrackerMesh(): Nullable<Mesh> {\r\n if (this._rightController) {\r\n return this._rightController._gazeTracker;\r\n }\r\n return null;\r\n }\r\n\r\n /**\r\n * If the ray of the gaze should be displayed.\r\n */\r\n public get displayGaze(): boolean {\r\n return this._displayGaze;\r\n }\r\n\r\n /**\r\n * Sets if the ray of the gaze should be displayed.\r\n */\r\n public set displayGaze(value: boolean) {\r\n this._displayGaze = value;\r\n if (!value) {\r\n this._cameraGazer._gazeTracker.isVisible = false;\r\n\r\n if (this._leftController) {\r\n this._leftController._gazeTracker.isVisible = false;\r\n }\r\n\r\n if (this._rightController) {\r\n this._rightController._gazeTracker.isVisible = false;\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * If the ray of the LaserPointer should be displayed.\r\n */\r\n public get displayLaserPointer(): boolean {\r\n return this._displayLaserPointer;\r\n }\r\n\r\n /**\r\n * Sets if the ray of the LaserPointer should be displayed.\r\n */\r\n public set displayLaserPointer(value: boolean) {\r\n this._displayLaserPointer = value;\r\n if (!value) {\r\n if (this._rightController) {\r\n this._rightController._deactivatePointer();\r\n this._rightController._gazeTracker.isVisible = false;\r\n }\r\n if (this._leftController) {\r\n this._leftController._deactivatePointer();\r\n this._leftController._gazeTracker.isVisible = false;\r\n }\r\n } else {\r\n if (this._rightController) {\r\n this._rightController._activatePointer();\r\n }\r\n if (this._leftController) {\r\n this._leftController._activatePointer();\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * The deviceOrientationCamera used as the camera when not in VR.\r\n */\r\n public get deviceOrientationCamera(): Nullable<DeviceOrientationCamera> {\r\n return this._deviceOrientationCamera;\r\n }\r\n\r\n /**\r\n * Based on the current WebVR support, returns the current VR camera used.\r\n */\r\n public get currentVRCamera(): Nullable<Camera> {\r\n if (this._webVRready) {\r\n return this._webVRCamera;\r\n } else {\r\n return this._scene.activeCamera;\r\n }\r\n }\r\n\r\n /**\r\n * The webVRCamera which is used when in VR.\r\n */\r\n public get webVRCamera(): WebVRFreeCamera {\r\n return this._webVRCamera;\r\n }\r\n\r\n /**\r\n * The deviceOrientationCamera that is used as a fallback when vr device is not connected.\r\n */\r\n public get vrDeviceOrientationCamera(): Nullable<VRDeviceOrientationFreeCamera> {\r\n return this._vrDeviceOrientationCamera;\r\n }\r\n\r\n /**\r\n * The html button that is used to trigger entering into VR.\r\n */\r\n public get vrButton(): Nullable<HTMLButtonElement> {\r\n return this._btnVR;\r\n }\r\n\r\n private get _teleportationRequestInitiated(): boolean {\r\n const result =\r\n this._cameraGazer._teleportationRequestInitiated ||\r\n (this._leftController !== null && this._leftController._teleportationRequestInitiated) ||\r\n (this._rightController !== null && this._rightController._teleportationRequestInitiated);\r\n return result;\r\n }\r\n\r\n /**\r\n * Defines whether or not Pointer lock should be requested when switching to\r\n * full screen.\r\n */\r\n public requestPointerLockOnFullScreen = true;\r\n\r\n // XR\r\n\r\n /**\r\n * If asking to force XR, this will be populated with the default xr experience\r\n */\r\n public xr: WebXRDefaultExperience;\r\n\r\n /**\r\n * Was the XR test done already. If this is true AND this.xr exists, xr is initialized.\r\n * If this is true and no this.xr, xr exists but is not supported, using WebVR.\r\n */\r\n public xrTestDone: boolean = false;\r\n\r\n /**\r\n * Instantiates a VRExperienceHelper.\r\n * Helps to quickly add VR support to an existing scene.\r\n * @param scene The scene the VRExperienceHelper belongs to.\r\n * @param webVROptions Options to modify the vr experience helper's behavior.\r\n */\r\n constructor(\r\n scene: Scene,\r\n /** Options to modify the vr experience helper's behavior. */\r\n public webVROptions: VRExperienceHelperOptions = {}\r\n ) {\r\n Logger.Warn(\"WebVR is deprecated. Please avoid using this experience helper and use the WebXR experience helper instead\");\r\n this._scene = scene;\r\n this._inputElement = scene.getEngine().getInputElement();\r\n\r\n // check for VR support:\r\n\r\n const vrSupported = \"getVRDisplays\" in navigator;\r\n // no VR support? force XR but only when it is not set because web vr can work without the getVRDisplays\r\n if (!vrSupported && webVROptions.useXR === undefined) {\r\n webVROptions.useXR = true;\r\n }\r\n\r\n // Parse options\r\n if (webVROptions.createFallbackVRDeviceOrientationFreeCamera === undefined) {\r\n webVROptions.createFallbackVRDeviceOrientationFreeCamera = true;\r\n }\r\n if (webVROptions.createDeviceOrientationCamera === undefined) {\r\n webVROptions.createDeviceOrientationCamera = true;\r\n }\r\n if (webVROptions.laserToggle === undefined) {\r\n webVROptions.laserToggle = true;\r\n }\r\n if (webVROptions.defaultHeight === undefined) {\r\n webVROptions.defaultHeight = 1.7;\r\n }\r\n if (webVROptions.useCustomVRButton) {\r\n this._useCustomVRButton = true;\r\n if (webVROptions.customVRButton) {\r\n this._btnVR = webVROptions.customVRButton;\r\n }\r\n }\r\n if (webVROptions.rayLength) {\r\n this._rayLength = webVROptions.rayLength;\r\n }\r\n this._defaultHeight = webVROptions.defaultHeight;\r\n\r\n if (webVROptions.positionScale) {\r\n this._rayLength *= webVROptions.positionScale;\r\n this._defaultHeight *= webVROptions.positionScale;\r\n }\r\n\r\n this._hasEnteredVR = false;\r\n\r\n // Set position\r\n if (this._scene.activeCamera) {\r\n this._position = this._scene.activeCamera.position.clone();\r\n } else {\r\n this._position = new Vector3(0, this._defaultHeight, 0);\r\n }\r\n\r\n // Set non-vr camera\r\n if (webVROptions.createDeviceOrientationCamera || !this._scene.activeCamera) {\r\n this._deviceOrientationCamera = new DeviceOrientationCamera(\"deviceOrientationVRHelper\", this._position.clone(), scene);\r\n\r\n // Copy data from existing camera\r\n if (this._scene.activeCamera) {\r\n this._deviceOrientationCamera.minZ = this._scene.activeCamera.minZ;\r\n this._deviceOrientationCamera.maxZ = this._scene.activeCamera.maxZ;\r\n // Set rotation from previous camera\r\n if (this._scene.activeCamera instanceof TargetCamera && this._scene.activeCamera.rotation) {\r\n const targetCamera = this._scene.activeCamera;\r\n if (targetCamera.rotationQuaternion) {\r\n this._deviceOrientationCamera.rotationQuaternion.copyFrom(targetCamera.rotationQuaternion);\r\n } else {\r\n this._deviceOrientationCamera.rotationQuaternion.copyFrom(\r\n Quaternion.RotationYawPitchRoll(targetCamera.rotation.y, targetCamera.rotation.x, targetCamera.rotation.z)\r\n );\r\n }\r\n this._deviceOrientationCamera.rotation = targetCamera.rotation.clone();\r\n }\r\n }\r\n\r\n this._scene.activeCamera = this._deviceOrientationCamera;\r\n if (this._inputElement) {\r\n this._scene.activeCamera.attachControl();\r\n }\r\n } else {\r\n this._existingCamera = this._scene.activeCamera;\r\n }\r\n\r\n if (this.webVROptions.useXR && (navigator as any).xr) {\r\n // force-check XR session support\r\n WebXRSessionManager.IsSessionSupportedAsync(\"immersive-vr\").then((supported) => {\r\n if (supported) {\r\n Logger.Log(\"Using WebXR. It is recommended to use the WebXRDefaultExperience directly\");\r\n // it is possible to use XR, let's do it!\r\n scene\r\n .createDefaultXRExperienceAsync({\r\n floorMeshes: webVROptions.floorMeshes || [],\r\n })\r\n .then((xr) => {\r\n this.xr = xr;\r\n // connect observables\r\n this.xrTestDone = true;\r\n\r\n this._cameraGazer = new VRExperienceHelperCameraGazer(() => {\r\n return this.xr.baseExperience.camera;\r\n }, scene);\r\n\r\n this.xr.baseExperience.onStateChangedObservable.add((state) => {\r\n // support for entering / exiting\r\n switch (state) {\r\n case WebXRState.ENTERING_XR:\r\n this.onEnteringVRObservable.notifyObservers(this);\r\n if (!this._interactionsEnabled) {\r\n this.xr.pointerSelection.detach();\r\n }\r\n this.xr.pointerSelection.displayLaserPointer = this._displayLaserPointer;\r\n break;\r\n case WebXRState.EXITING_XR:\r\n this.onExitingVRObservable.notifyObservers(this);\r\n\r\n // resize to update width and height when exiting vr exits fullscreen\r\n this._scene.getEngine().resize();\r\n break;\r\n case WebXRState.IN_XR:\r\n this._hasEnteredVR = true;\r\n break;\r\n case WebXRState.NOT_IN_XR:\r\n this._hasEnteredVR = false;\r\n break;\r\n }\r\n });\r\n });\r\n } else {\r\n // XR not supported (thou exists), continue WebVR init\r\n this._completeVRInit(scene, webVROptions);\r\n }\r\n });\r\n } else {\r\n // no XR, continue init synchronous\r\n this._completeVRInit(scene, webVROptions);\r\n }\r\n }\r\n\r\n private _completeVRInit(scene: Scene, webVROptions: VRExperienceHelperOptions): void {\r\n this.xrTestDone = true;\r\n // Create VR cameras\r\n if (webVROptions.createFallbackVRDeviceOrientationFreeCamera) {\r\n if (webVROptions.useMultiview) {\r\n if (!webVROptions.vrDeviceOrientationCameraMetrics) {\r\n webVROptions.vrDeviceOrientationCameraMetrics = VRCameraMetrics.GetDefault();\r\n }\r\n webVROptions.vrDeviceOrientationCameraMetrics.multiviewEnabled = true;\r\n }\r\n this._vrDeviceOrientationCamera = new VRDeviceOrientationFreeCamera(\r\n \"VRDeviceOrientationVRHelper\",\r\n this._position,\r\n this._scene,\r\n true,\r\n webVROptions.vrDeviceOrientationCameraMetrics\r\n );\r\n this._vrDeviceOrientationCamera.angularSensibility = Number.MAX_VALUE;\r\n }\r\n this._webVRCamera = new WebVRFreeCamera(\"WebVRHelper\", this._position, this._scene, webVROptions);\r\n this._webVRCamera.useStandingMatrix();\r\n\r\n this._cameraGazer = new VRExperienceHelperCameraGazer(() => {\r\n return this.currentVRCamera;\r\n }, scene);\r\n // Create default button\r\n if (!this._useCustomVRButton) {\r\n this._btnVR = <HTMLButtonElement>document.createElement(\"BUTTON\");\r\n this._btnVR.className = \"babylonVRicon\";\r\n this._btnVR.id = \"babylonVRiconbtn\";\r\n this._btnVR.title = \"Click to switch to VR\";\r\n const url = !window.SVGSVGElement\r\n ? \"https://cdn.babylonjs.com/Assets/vrButton.png\"\r\n : \"data:image/svg+xml;charset=UTF-8,%3Csvg%20xmlns%3D%22http%3A//www.w3.org/2000/svg%22%20width%3D%222048%22%20height%3D%221152%22%20viewBox%3D%220%200%202048%201152%22%20version%3D%221.1%22%3E%3Cpath%20transform%3D%22rotate%28180%201024%2C576.0000000000001%29%22%20d%3D%22m1109%2C896q17%2C0%2030%2C-12t13%2C-30t-12.5%2C-30.5t-30.5%2C-12.5l-170%2C0q-18%2C0%20-30.5%2C12.5t-12.5%2C30.5t13%2C30t30%2C12l170%2C0zm-85%2C256q59%2C0%20132.5%2C-1.5t154.5%2C-5.5t164.5%2C-11.5t163%2C-20t150%2C-30t124.5%2C-41.5q23%2C-11%2042%2C-24t38%2C-30q27%2C-25%2041%2C-61.5t14%2C-72.5l0%2C-257q0%2C-123%20-47%2C-232t-128%2C-190t-190%2C-128t-232%2C-47l-81%2C0q-37%2C0%20-68.5%2C14t-60.5%2C34.5t-55.5%2C45t-53%2C45t-53%2C34.5t-55.5%2C14t-55.5%2C-14t-53%2C-34.5t-53%2C-45t-55.5%2C-45t-60.5%2C-34.5t-68.5%2C-14l-81%2C0q-123%2C0%20-232%2C47t-190%2C128t-128%2C190t-47%2C232l0%2C257q0%2C68%2038%2C115t97%2C73q54%2C24%20124.5%2C41.5t150%2C30t163%2C20t164.5%2C11.5t154.5%2C5.5t132.5%2C1.5zm939%2C-298q0%2C39%20-24.5%2C67t-58.5%2C42q-54%2C23%20-122%2C39.5t-143.5%2C28t-155.5%2C19t-157%2C11t-148.5%2C5t-129.5%2C1.5q-59%2C0%20-130%2C-1.5t-148%2C-5t-157%2C-11t-155.5%2C-19t-143.5%2C-28t-122%2C-39.5q-34%2C-14%20-58.5%2C-42t-24.5%2C-67l0%2C-257q0%2C-106%2040.5%2C-199t110%2C-162.5t162.5%2C-109.5t199%2C-40l81%2C0q27%2C0%2052%2C14t50%2C34.5t51%2C44.5t55.5%2C44.5t63.5%2C34.5t74%2C14t74%2C-14t63.5%2C-34.5t55.5%2C-44.5t51%2C-44.5t50%2C-34.5t52%2C-14l14%2C0q37%2C0%2070%2C0.5t64.5%2C4.5t63.5%2C12t68%2C23q71%2C30%20128.5%2C78.5t98.5%2C110t63.5%2C133.5t22.5%2C149l0%2C257z%22%20fill%3D%22white%22%20/%3E%3C/svg%3E%0A\";\r\n let css =\r\n \".babylonVRicon { position: absolute; right: 20px; height: 50px; width: 80px; background-color: rgba(51,51,51,0.7); background-image: url(\" +\r\n url +\r\n \"); background-size: 80%; background-repeat:no-repeat; background-position: center; border: none; outline: none; transition: transform 0.125s ease-out } .babylonVRicon:hover { transform: scale(1.05) } .babylonVRicon:active {background-color: rgba(51,51,51,1) } .babylonVRicon:focus {background-color: rgba(51,51,51,1) }\";\r\n css += \".babylonVRicon.vrdisplaypresenting { display: none; }\";\r\n // TODO: Add user feedback so that they know what state the VRDisplay is in (disconnected, connected, entering-VR)\r\n // css += \".babylonVRicon.vrdisplaysupported { }\";\r\n // css += \".babylonVRicon.vrdisplayready { }\";\r\n // css += \".babylonVRicon.vrdisplayrequesting { }\";\r\n\r\n const style = document.createElement(\"style\");\r\n style.appendChild(document.createTextNode(css));\r\n document.getElementsByTagName(\"head\")[0].appendChild(style);\r\n\r\n this._moveButtonToBottomRight();\r\n }\r\n\r\n // VR button click event\r\n if (this._btnVR) {\r\n this._btnVR.addEventListener(\"click\", () => {\r\n if (!this.isInVRMode) {\r\n this.enterVR();\r\n } else {\r\n this._scene.getEngine().disableVR();\r\n }\r\n });\r\n }\r\n\r\n // Window events\r\n\r\n const hostWindow = this._scene.getEngine().getHostWindow();\r\n if (!hostWindow) {\r\n return;\r\n }\r\n\r\n hostWindow.addEventListener(\"resize\", this._onResize);\r\n document.addEventListener(\"fullscreenchange\", this._onFullscreenChange, false);\r\n document.addEventListener(\"mozfullscreenchange\", this._onFullscreenChange, false);\r\n document.addEventListener(\"webkitfullscreenchange\", this._onFullscreenChange, false);\r\n document.addEventListener(\"msfullscreenchange\", this._onFullscreenChange, false);\r\n (<any>document).onmsfullscreenchange = this._onFullscreenChange;\r\n\r\n // Display vr button when headset is connected\r\n if (webVROptions.createFallbackVRDeviceOrientationFreeCamera) {\r\n this._displayVRButton();\r\n } else {\r\n this._scene.getEngine().onVRDisplayChangedObservable.add((e) => {\r\n if (e.vrDisplay) {\r\n this._displayVRButton();\r\n }\r\n });\r\n }\r\n\r\n // Exiting VR mode using 'ESC' key on desktop\r\n this._onKeyDown = (event: KeyboardEvent) => {\r\n if (event.keyCode === 27 && this.isInVRMode) {\r\n this.exitVR();\r\n }\r\n };\r\n document.addEventListener(\"keydown\", this._onKeyDown);\r\n\r\n // Exiting VR mode double tapping the touch screen\r\n this._scene.onPrePointerObservable.add(\r\n () => {\r\n if (this._hasEnteredVR && this.exitVROnDoubleTap) {\r\n this.exitVR();\r\n if (this._fullscreenVRpresenting) {\r\n this._scene.getEngine().exitFullscreen();\r\n }\r\n }\r\n },\r\n PointerEventTypes.POINTERDOUBLETAP,\r\n false\r\n );\r\n\r\n // Listen for WebVR display changes\r\n this._onVRDisplayChangedBind = (eventArgs: IDisplayChangedEventArgs) => this._onVRDisplayChanged(eventArgs);\r\n this._onVrDisplayPresentChangeBind = () => this._onVrDisplayPresentChange();\r\n this._onVRRequestPresentStart = () => {\r\n this._webVRrequesting = true;\r\n this._updateButtonVisibility();\r\n };\r\n this._onVRRequestPresentComplete = () => {\r\n this._webVRrequesting = false;\r\n this._updateButtonVisibility();\r\n };\r\n scene.getEngine().onVRDisplayChangedObservable.add(this._onVRDisplayChangedBind);\r\n scene.getEngine().onVRRequestPresentStart.add(this._onVRRequestPresentStart);\r\n scene.getEngine().onVRRequestPresentComplete.add(this._onVRRequestPresentComplete);\r\n hostWindow.addEventListener(\"vrdisplaypresentchange\", this._onVrDisplayPresentChangeBind);\r\n\r\n scene.onDisposeObservable.add(() => {\r\n this.dispose();\r\n });\r\n\r\n // Gamepad connection events\r\n this._webVRCamera.onControllerMeshLoadedObservable.add((webVRController) => this._onDefaultMeshLoaded(webVRController));\r\n this._scene.gamepadManager.onGamepadConnectedObservable.add(this._onNewGamepadConnected);\r\n this._scene.gamepadManager.onGamepadDisconnectedObservable.add(this._onNewGamepadDisconnected);\r\n\r\n this._updateButtonVisibility();\r\n\r\n //create easing functions\r\n this._circleEase = new CircleEase();\r\n this._circleEase.setEasingMode(EasingFunction.EASINGMODE_EASEINOUT);\r\n this._teleportationEasing = this._circleEase;\r\n\r\n // Allow clicking in the vrDeviceOrientationCamera\r\n scene.onPointerObservable.add((e) => {\r\n if (this._interactionsEnabled) {\r\n if (scene.activeCamera === this.vrDeviceOrientationCamera && (e.event as IPointerEvent).pointerType === \"mouse\") {\r\n if (e.type === PointerEventTypes.POINTERDOWN) {\r\n this._cameraGazer._selectionPointerDown();\r\n } else if (e.type === PointerEventTypes.POINTERUP) {\r\n this._cameraGazer._selectionPointerUp();\r\n }\r\n }\r\n }\r\n });\r\n\r\n if (this.webVROptions.floorMeshes) {\r\n this.enableTeleportation({ floorMeshes: this.webVROptions.floorMeshes });\r\n }\r\n }\r\n\r\n // Raised when one of the controller has loaded successfully its associated default mesh\r\n private _onDefaultMeshLoaded(webVRController: WebVRController) {\r\n if (this._leftController && this._leftController.webVRController == webVRController) {\r\n if (webVRController.mesh) {\r\n this._leftController._setLaserPointerParent(webVRController.mesh);\r\n }\r\n }\r\n if (this._rightController && this._rightController.webVRController == webVRController) {\r\n if (webVRController.mesh) {\r\n this._rightController._setLaserPointerParent(webVRController.mesh);\r\n }\r\n }\r\n\r\n try {\r\n this.onControllerMeshLoadedObservable.notifyObservers(webVRController);\r\n } catch (err) {\r\n Logger.Warn(\"Error in your custom logic onControllerMeshLoaded: \" + err);\r\n }\r\n }\r\n\r\n private _onResize = () => {\r\n this._moveButtonToBottomRight();\r\n if (this._fullscreenVRpresenting && this._webVRready) {\r\n this.exitVR();\r\n }\r\n };\r\n\r\n private _onFullscreenChange = () => {\r\n const anyDoc = document as any;\r\n if (anyDoc.fullscreen !== undefined) {\r\n this._fullscreenVRpresenting = (<any>document).fullscreen;\r\n } else if (anyDoc.mozFullScreen !== undefined) {\r\n this._fullscreenVRpresenting = anyDoc.mozFullScreen;\r\n } else if (anyDoc.webkitIsFullScreen !== undefined) {\r\n this._fullscreenVRpresenting = anyDoc.webkitIsFullScreen;\r\n } else if (anyDoc.msIsFullScreen !== undefined) {\r\n this._fullscreenVRpresenting = anyDoc.msIsFullScreen;\r\n } else if ((<any>document).msFullscreenElement !== undefined) {\r\n this._fullscreenVRpresenting = (<any>document).msFullscreenElement;\r\n }\r\n if (!this._fullscreenVRpresenting && this._inputElement) {\r\n this.exitVR();\r\n if (!this._useCustomVRButton && this._btnVR) {\r\n this._btnVR.style.top = this._inputElement.offsetTop + this._inputElement.offsetHeight - 70 + \"px\";\r\n this._btnVR.style.left = this._inputElement.offsetLeft + this._inputElement.offsetWidth - 100 + \"px\";\r\n // make sure the button is visible after setting its position\r\n this._updateButtonVisibility();\r\n }\r\n }\r\n };\r\n\r\n /**\r\n * Gets a value indicating if we are currently in VR mode.\r\n */\r\n public get isInVRMode(): boolean {\r\n return (this.xr && this.webVROptions.useXR && this.xr.baseExperience.state === WebXRState.IN_XR) || this._webVRpresenting || this._fullscreenVRpresenting;\r\n }\r\n\r\n private _onVrDisplayPresentChange() {\r\n const vrDisplay = this._scene.getEngine().getVRDevice();\r\n if (vrDisplay) {\r\n const wasPresenting = this._webVRpresenting;\r\n this._webVRpresenting = vrDisplay.isPresenting;\r\n\r\n if (wasPresenting && !this._webVRpresenting) {\r\n this.exitVR();\r\n }\r\n } else {\r\n Logger.Warn(\"Detected VRDisplayPresentChange on an unknown VRDisplay. Did you can enterVR on the vrExperienceHelper?\");\r\n }\r\n\r\n this._updateButtonVisibility();\r\n }\r\n\r\n private _onVRDisplayChanged(eventArgs: IDisplayChangedEventArgs) {\r\n this._webVRsupported = eventArgs.vrSupported;\r\n this._webVRready = !!eventArgs.vrDisplay;\r\n this._webVRpresenting = eventArgs.vrDisplay && eventArgs.vrDisplay.isPresenting;\r\n\r\n this._updateButtonVisibility();\r\n }\r\n\r\n private _moveButtonToBottomRight() {\r\n if (this._inputElement && !this._useCustomVRButton && this._btnVR) {\r\n const rect: ClientRect = this._inputElement.getBoundingClientRect();\r\n this._btnVR.style.top = rect.top + rect.height - 70 + \"px\";\r\n this._btnVR.style.left = rect.left + rect.width - 100 + \"px\";\r\n }\r\n }\r\n\r\n private _displayVRButton() {\r\n if (!this._useCustomVRButton && !this._btnVRDisplayed && this._btnVR) {\r\n document.body.appendChild(this._btnVR);\r\n this._btnVRDisplayed = true;\r\n }\r\n }\r\n\r\n private _updateButtonVisibility() {\r\n if (!this._btnVR || this._useCustomVRButton) {\r\n return;\r\n }\r\n this._btnVR.className = \"babylonVRicon\";\r\n if (this.isInVRMode) {\r\n this._btnVR.className += \" vrdisplaypresenting\";\r\n } else {\r\n if (this._webVRready) {\r\n this._btnVR.className += \" vrdisplayready\";\r\n }\r\n if (this._webVRsupported) {\r\n this._btnVR.className += \" vrdisplaysupported\";\r\n }\r\n if (this._webVRrequesting) {\r\n this._btnVR.className += \" vrdisplayrequesting\";\r\n }\r\n }\r\n }\r\n\r\n private _cachedAngularSensibility = { angularSensibilityX: null, angularSensibilityY: null, angularSensibility: null };\r\n /**\r\n * Attempt to enter VR. If a headset is connected and ready, will request present on that.\r\n * Otherwise, will use the fullscreen API.\r\n */\r\n public enterVR() {\r\n if (this.xr) {\r\n this.xr.baseExperience.enterXRAsync(\"immersive-vr\", \"local-floor\", this.xr.renderTarget);\r\n return;\r\n }\r\n if (this.onEnteringVRObservable) {\r\n try {\r\n this.onEnteringVRObservable.notifyObservers(this);\r\n } catch (err) {\r\n Logger.Warn(\"Error in your custom logic onEnteringVR: \" + err);\r\n }\r\n }\r\n\r\n if (this._scene.activeCamera) {\r\n this._position = this._scene.activeCamera.position.clone();\r\n\r\n if (this.vrDeviceOrientationCamera) {\r\n this.vrDeviceOrientationCamera.rotation = Quaternion.FromRotationMatrix(this._scene.activeCamera.getWorldMatrix().getRotationMatrix()).toEulerAngles();\r\n this.vrDeviceOrientationCamera.angularSensibility = 2000;\r\n }\r\n if (this.webVRCamera) {\r\n const currentYRotation = this.webVRCamera.deviceRotationQuaternion.toEulerAngles().y;\r\n const desiredYRotation = Quaternion.FromRotationMatrix(this._scene.activeCamera.getWorldMatrix().getRotationMatrix()).toEulerAngles().y;\r\n const delta = desiredYRotation - currentYRotation;\r\n const currentGlobalRotation = this.webVRCamera.rotationQuaternion.toEulerAngles().y;\r\n this.webVRCamera.rotationQuaternion = Quaternion.FromEulerAngles(0, currentGlobalRotation + delta, 0);\r\n }\r\n\r\n // make sure that we return to the last active camera\r\n this._existingCamera = this._scene.activeCamera;\r\n\r\n // Remove and cache angular sensability to avoid camera rotation when in VR\r\n if ((<any>this._existingCamera).angularSensibilityX) {\r\n this._cachedAngularSensibility.angularSensibilityX = (<any>this._existingCamera).angularSensibilityX;\r\n (<any>this._existingCamera).angularSensibilityX = Number.MAX_VALUE;\r\n }\r\n if ((<any>this._existingCamera).angularSensibilityY) {\r\n this._cachedAngularSensibility.angularSensibilityY = (<any>this._existingCamera).angularSensibilityY;\r\n (<any>this._existingCamera).angularSensibilityY = Number.MAX_VALUE;\r\n }\r\n if ((<any>this._existingCamera).angularSensibility) {\r\n this._cachedAngularSensibility.angularSensibility = (<any>this._existingCamera).angularSensibility;\r\n (<any>this._existingCamera).angularSensibility = Number.MAX_VALUE;\r\n }\r\n }\r\n\r\n if (this._webVRrequesting) {\r\n return;\r\n }\r\n\r\n // If WebVR is supported and a headset is connected\r\n if (this._webVRready) {\r\n if (!this._webVRpresenting) {\r\n this._scene.getEngine().onVRRequestPresentComplete.addOnce((result) => {\r\n this.onAfterEnteringVRObservable.notifyObservers({ success: result });\r\n });\r\n this._webVRCamera.position = this._position;\r\n this._scene.activeCamera = this._webVRCamera;\r\n }\r\n } else if (this._vrDeviceOrientationCamera) {\r\n this._vrDeviceOrientationCamera.position = this._position;\r\n if (this._scene.activeCamera) {\r\n this._vrDeviceOrientationCamera.minZ = this._scene.activeCamera.minZ;\r\n }\r\n this._scene.activeCamera = this._vrDeviceOrientationCamera;\r\n this._scene.getEngine().enterFullscreen(this.requestPointerLockOnFullScreen);\r\n this._updateButtonVisibility();\r\n this._vrDeviceOrientationCamera.onViewMatrixChangedObservable.addOnce(() => {\r\n this.onAfterEnteringVRObservable.notifyObservers({ success: true });\r\n });\r\n }\r\n\r\n if (this._scene.activeCamera && this._inputElement) {\r\n this._scene.activeCamera.attachControl();\r\n }\r\n\r\n if (this._interactionsEnabled) {\r\n this._scene.registerBeforeRender(this._beforeRender);\r\n }\r\n\r\n if (this._displayLaserPointer) {\r\n [this._leftController, this._rightController].forEach((controller) => {\r\n if (controller) {\r\n controller._activatePointer();\r\n }\r\n });\r\n }\r\n\r\n this._hasEnteredVR = true;\r\n }\r\n\r\n /**\r\n * Attempt to exit VR, or fullscreen.\r\n */\r\n public exitVR() {\r\n if (this.xr) {\r\n this.xr.baseExperience.exitXRAsync();\r\n return;\r\n }\r\n if (this._hasEnteredVR) {\r\n if (this.onExitingVRObservable) {\r\n try {\r\n this.onExitingVRObservable.notifyObservers(this);\r\n } catch (err) {\r\n Logger.Warn(\"Error in your custom logic onExitingVR: \" + err);\r\n }\r\n }\r\n if (this._webVRpresenting) {\r\n this._scene.getEngine().disableVR();\r\n }\r\n if (this._scene.activeCamera) {\r\n this._position = this._scene.activeCamera.position.clone();\r\n }\r\n\r\n if (this.vrDeviceOrientationCamera) {\r\n this.vrDeviceOrientationCamera.angularSensibility = Number.MAX_VALUE;\r\n }\r\n\r\n if (this._deviceOrientationCamera) {\r\n this._deviceOrientationCamera.position = this._position;\r\n this._scene.activeCamera = this._deviceOrientationCamera;\r\n\r\n // Restore angular sensibility\r\n if (this._cachedAngularSensibility.angularSensibilityX) {\r\n (<any>this._deviceOrientationCamera).angularSensibilityX = this._cachedAngularSensibility.angularSensibilityX;\r\n this._cachedAngularSensibility.angularSensibilityX = null;\r\n }\r\n if (this._cachedAngularSensibility.angularSensibilityY) {\r\n (<any>this._deviceOrientationCamera).angularSensibilityY = this._cachedAngularSensibility.angularSensibilityY;\r\n this._cachedAngularSensibility.angularSensibilityY = null;\r\n }\r\n if (this._cachedAngularSensibility.angularSensibility) {\r\n (<any>this._deviceOrientationCamera).angularSensibility = this._cachedAngularSensibility.angularSensibility;\r\n this._cachedAngularSensibility.angularSensibility = null;\r\n }\r\n } else if (this._existingCamera) {\r\n this._existingCamera.position = this._position;\r\n this._scene.activeCamera = this._existingCamera;\r\n if (this._inputElement) {\r\n this._scene.activeCamera.attachControl();\r\n }\r\n\r\n // Restore angular sensibility\r\n if (this._cachedAngularSensibility.angularSensibilityX) {\r\n (<any>this._existingCamera).angularSensibilityX = this._cachedAngularSensibility.angularSensibilityX;\r\n this._cachedAngularSensibility.angularSensibilityX = null;\r\n }\r\n if (this._cachedAngularSensibility.angularSensibilityY) {\r\n (<any>this._existingCamera).angularSensibilityY = this._cachedAngularSensibility.angularSensibilityY;\r\n this._cachedAngularSensibility.angularSensibilityY = null;\r\n }\r\n if (this._cachedAngularSensibility.angularSensibility) {\r\n (<any>this._existingCamera).angularSensibility = this._cachedAngularSensibility.angularSensibility;\r\n this._cachedAngularSensibility.angularSensibility = null;\r\n }\r\n }\r\n\r\n this._updateButtonVisibility();\r\n\r\n if (this._interactionsEnabled) {\r\n this._scene.unregisterBeforeRender(this._beforeRender);\r\n this._cameraGazer._gazeTracker.isVisible = false;\r\n if (this._leftController) {\r\n this._leftController._gazeTracker.isVisible = false;\r\n }\r\n if (this._rightController) {\r\n this._rightController._gazeTracker.isVisible = false;\r\n }\r\n }\r\n\r\n // resize to update width and height when exiting vr exits fullscreen\r\n this._scene.getEngine().resize();\r\n\r\n [this._leftController, this._rightController].forEach((controller) => {\r\n if (controller) {\r\n controller._deactivatePointer();\r\n }\r\n });\r\n\r\n this._hasEnteredVR = false;\r\n\r\n // Update engine state to re enable non-vr camera input\r\n const engine = this._scene.getEngine();\r\n if (engine._onVrDisplayPresentChange) {\r\n engine._onVrDisplayPresentChange();\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * The position of the vr experience helper.\r\n */\r\n public get position(): Vector3 {\r\n return this._position;\r\n }\r\n\r\n /**\r\n * Sets the position of the vr experience helper.\r\n */\r\n public set position(value: Vector3) {\r\n this._position = value;\r\n\r\n if (this._scene.activeCamera) {\r\n this._scene.activeCamera.position = value;\r\n }\r\n }\r\n\r\n /**\r\n * Enables controllers and user interactions such as selecting and object or clicking on an object.\r\n */\r\n public enableInteractions() {\r\n if (!this._interactionsEnabled) {\r\n this._interactionsRequested = true;\r\n\r\n // in XR it is enabled by default, but just to make sure, re-attach\r\n if (this.xr) {\r\n if (this.xr.baseExperience.state === WebXRState.IN_XR) {\r\n this.xr.pointerSelection.attach();\r\n }\r\n return;\r\n }\r\n\r\n if (this._leftController) {\r\n this._enableInteractionOnController(this._leftController);\r\n }\r\n\r\n if (this._rightController) {\r\n this._enableInteractionOnController(this._rightController);\r\n }\r\n\r\n this.raySelectionPredicate = (mesh) => {\r\n return mesh.isVisible && (mesh.isPickable || mesh.name === this._floorMeshName);\r\n };\r\n\r\n this.meshSelectionPredicate = () => {\r\n return true;\r\n };\r\n\r\n this._raySelectionPredicate = (mesh) => {\r\n if (\r\n this._isTeleportationFloor(mesh) ||\r\n (mesh.name.indexOf(\"gazeTracker\") === -1 && mesh.name.indexOf(\"teleportationTarget\") === -1 && mesh.name.indexOf(\"torusTeleportation\") === -1)\r\n ) {\r\n return this.raySelectionPredicate(mesh);\r\n }\r\n return false;\r\n };\r\n\r\n this._interactionsEnabled = true;\r\n }\r\n }\r\n\r\n private get _noControllerIsActive() {\r\n return !(this._leftController && this._leftController._activePointer) && !(this._rightController && this._rightController._activePointer);\r\n }\r\n\r\n private _beforeRender = () => {\r\n if (this._leftController && this._leftController._activePointer) {\r\n this._castRayAndSelectObject(this._leftController);\r\n }\r\n\r\n if (this._rightController && this._rightController._activePointer) {\r\n this._castRayAndSelectObject(this._rightController);\r\n }\r\n\r\n if (this._noControllerIsActive && (this._scene.getEngine().isPointerLock || this.enableGazeEvenWhenNoPointerLock)) {\r\n this._castRayAndSelectObject(this._cameraGazer);\r\n } else {\r\n this._cameraGazer._gazeTracker.isVisible = false;\r\n }\r\n };\r\n\r\n private _isTeleportationFloor(mesh: AbstractMesh): boolean {\r\n for (let i = 0; i < this._floorMeshesCollection.length; i++) {\r\n if (this._floorMeshesCollection[i].id === mesh.id) {\r\n return true;\r\n }\r\n }\r\n if (this._floorMeshName && mesh.name === this._floorMeshName) {\r\n return true;\r\n }\r\n return false;\r\n }\r\n\r\n /**\r\n * Adds a floor mesh to be used for teleportation.\r\n * @param floorMesh the mesh to be used for teleportation.\r\n */\r\n public addFloorMesh(floorMesh: Mesh): void {\r\n if (!this._floorMeshesCollection) {\r\n return;\r\n }\r\n\r\n if (this._floorMeshesCollection.indexOf(floorMesh) > -1) {\r\n return;\r\n }\r\n\r\n this._floorMeshesCollection.push(floorMesh);\r\n }\r\n\r\n /**\r\n * Removes a floor mesh from being used for teleportation.\r\n * @param floorMesh the mesh to be removed.\r\n */\r\n public removeFloorMesh(floorMesh: Mesh): void {\r\n if (!this._floorMeshesCollection) {\r\n return;\r\n }\r\n\r\n const meshIndex = this._floorMeshesCollection.indexOf(floorMesh);\r\n if (meshIndex !== -1) {\r\n this._floorMeshesCollection.splice(meshIndex, 1);\r\n }\r\n }\r\n\r\n /**\r\n * Enables interactions and teleportation using the VR controllers and gaze.\r\n * @param vrTeleportationOptions options to modify teleportation behavior.\r\n */\r\n public enableTeleportation(vrTeleportationOptions: VRTeleportationOptions = {}) {\r\n if (!this._teleportationInitialized) {\r\n this._teleportationRequested = true;\r\n\r\n this.enableInteractions();\r\n\r\n if (this.webVROptions.useXR && (vrTeleportationOptions.floorMeshes || vrTeleportationOptions.floorMeshName)) {\r\n const floorMeshes: AbstractMesh[] = vrTeleportationOptions.floorMeshes || [];\r\n if (!floorMeshes.length) {\r\n const floorMesh = this._scene.getMeshByName(vrTeleportationOptions.floorMeshName!);\r\n if (floorMesh) {\r\n floorMeshes.push(floorMesh);\r\n }\r\n }\r\n if (this.xr) {\r\n floorMeshes.forEach((mesh) => {\r\n this.xr.teleportation.addFloorMesh(mesh);\r\n });\r\n if (!this.xr.teleportation.attached) {\r\n this.xr.teleportation.attach();\r\n }\r\n return;\r\n } else if (!this.xrTestDone) {\r\n const waitForXr = () => {\r\n if (this.xrTestDone) {\r\n this._scene.unregisterBeforeRender(waitForXr);\r\n if (this.xr) {\r\n if (!this.xr.teleportation.attached) {\r\n this.xr.teleportation.attach();\r\n }\r\n } else {\r\n this.enableTeleportation(vrTeleportationOptions);\r\n }\r\n }\r\n };\r\n this._scene.registerBeforeRender(waitForXr);\r\n return;\r\n }\r\n }\r\n\r\n if (vrTeleportationOptions.floorMeshName) {\r\n this._floorMeshName = vrTeleportationOptions.floorMeshName;\r\n }\r\n if (vrTeleportationOptions.floorMeshes) {\r\n this._floorMeshesCollection = vrTeleportationOptions.floorMeshes;\r\n }\r\n\r\n if (vrTeleportationOptions.teleportationMode) {\r\n this._teleportationMode = vrTeleportationOptions.teleportationMode;\r\n }\r\n if (vrTeleportationOptions.teleportationTime && vrTeleportationOptions.teleportationTime > 0) {\r\n this._teleportationTime = vrTeleportationOptions.teleportationTime;\r\n }\r\n if (vrTeleportationOptions.teleportationSpeed && vrTeleportationOptions.teleportationSpeed > 0) {\r\n this._teleportationSpeed = vrTeleportationOptions.teleportationSpeed;\r\n }\r\n if (vrTeleportationOptions.easingFunction !== undefined) {\r\n this._teleportationEasing = vrTeleportationOptions.easingFunction;\r\n }\r\n\r\n if (this._leftController != null) {\r\n this._enableTeleportationOnController(this._leftController);\r\n }\r\n if (this._rightController != null) {\r\n this._enableTeleportationOnController(this._rightController);\r\n }\r\n\r\n // Creates an image processing post process for the vignette not relying\r\n // on the main scene configuration for image processing to reduce setup and spaces\r\n // (gamma/linear) conflicts.\r\n const imageProcessingConfiguration = new ImageProcessingConfiguration();\r\n imageProcessingConfiguration.vignetteColor = new Color4(0, 0, 0, 0);\r\n imageProcessingConfiguration.vignetteEnabled = true;\r\n this._postProcessMove = new ImageProcessingPostProcess(\r\n \"postProcessMove\",\r\n 1.0,\r\n this._webVRCamera,\r\n undefined,\r\n undefined,\r\n undefined,\r\n undefined,\r\n imageProcessingConfiguration\r\n );\r\n\r\n this._webVRCamera.detachPostProcess(this._postProcessMove);\r\n this._teleportationInitialized = true;\r\n if (this._isDefaultTeleportationTarget) {\r\n this._createTeleportationCircles();\r\n this._teleportationTarget.scaling.scaleInPlace(this._webVRCamera.deviceScaleFactor);\r\n }\r\n }\r\n }\r\n\r\n private _onNewGamepadConnected = (gamepad: Gamepad) => {\r\n if (gamepad.type !== Gamepad.POSE_ENABLED) {\r\n if (gamepad.leftStick) {\r\n gamepad.onleftstickchanged((stickValues) => {\r\n if (this._teleportationInitialized && this.teleportationEnabled) {\r\n // Listening to classic/xbox gamepad only if no VR controller is active\r\n if (\r\n (!this._leftController && !this._rightController) ||\r\n (this._leftController && !this._leftController._activePointer && this._rightController && !this._rightController._activePointer)\r\n ) {\r\n this._checkTeleportWithRay(stickValues, this._cameraGazer);\r\n this._checkTeleportBackwards(stickValues, this._cameraGazer);\r\n }\r\n }\r\n });\r\n }\r\n if (gamepad.rightStick) {\r\n gamepad.onrightstickchanged((stickValues) => {\r\n if (this._teleportationInitialized) {\r\n this._checkRotate(stickValues, this._cameraGazer);\r\n }\r\n });\r\n }\r\n if (gamepad.type === Gamepad.XBOX) {\r\n (<Xbox360Pad>gamepad).onbuttondown((buttonPressed: Xbox360Button) => {\r\n if (this._interactionsEnabled && buttonPressed === Xbox360Button.A) {\r\n this._cameraGazer._selectionPointerDown();\r\n }\r\n });\r\n (<Xbox360Pad>gamepad).onbuttonup((buttonPressed: Xbox360Button) => {\r\n if (this._interactionsEnabled && buttonPressed === Xbox360Button.A) {\r\n this._cameraGazer._selectionPointerUp();\r\n }\r\n });\r\n }\r\n } else {\r\n const webVRController = <WebVRController>gamepad;\r\n const controller = new VRExperienceHelperControllerGazer(webVRController, this._scene, this._cameraGazer._gazeTracker);\r\n\r\n if (webVRController.hand === \"right\" || (this._leftController && this._leftController.webVRController != webVRController)) {\r\n this._rightController = controller;\r\n } else {\r\n this._leftController = controller;\r\n }\r\n\r\n this._tryEnableInteractionOnController(controller);\r\n }\r\n };\r\n\r\n // This only succeeds if the controller's mesh exists for the controller so this must be called whenever new controller is connected or when mesh is loaded\r\n private _tryEnableInteractionOnController = (controller: VRExperienceHelperControllerGazer) => {\r\n if (this._interactionsRequested && !controller._interactionsEnabled) {\r\n this._enableInteractionOnController(controller);\r\n }\r\n if (this._teleportationRequested && !controller._teleportationEnabled) {\r\n this._enableTeleportationOnController(controller);\r\n }\r\n };\r\n\r\n private _onNewGamepadDisconnected = (gamepad: Gamepad) => {\r\n if (gamepad instanceof WebVRController) {\r\n if (gamepad.hand === \"left\" && this._leftController != null) {\r\n this._leftController.dispose();\r\n this._leftController = null;\r\n }\r\n if (gamepad.hand === \"right\" && this._rightController != null) {\r\n this._rightController.dispose();\r\n this._rightController = null;\r\n }\r\n }\r\n };\r\n\r\n private _enableInteractionOnController(controller: VRExperienceHelperControllerGazer) {\r\n const controllerMesh = controller.webVRController.mesh;\r\n if (controllerMesh) {\r\n controller._interactionsEnabled = true;\r\n if (this.isInVRMode && this._displayLaserPointer) {\r\n controller._activatePointer();\r\n }\r\n if (this.webVROptions.laserToggle) {\r\n controller.webVRController.onMainButtonStateChangedObservable.add((stateObject) => {\r\n // Enabling / disabling laserPointer\r\n if (this._displayLaserPointer && stateObject.value === 1) {\r\n if (controller._activePointer) {\r\n controller._deactivatePointer();\r\n } else {\r\n controller._activatePointer();\r\n }\r\n if (this.displayGaze) {\r\n controller._gazeTracker.isVisible = controller._activePointer;\r\n }\r\n }\r\n });\r\n }\r\n controller.webVRController.onTriggerStateChangedObservable.add((stateObject) => {\r\n let gazer: VRExperienceHelperGazer = controller;\r\n if (this._noControllerIsActive) {\r\n gazer = this._cameraGazer;\r\n }\r\n if (!gazer._pointerDownOnMeshAsked) {\r\n if (stateObject.value > this._padSensibilityUp) {\r\n gazer._selectionPointerDown();\r\n }\r\n } else if (stateObject.value < this._padSensibilityDown) {\r\n gazer._selectionPointerUp();\r\n }\r\n });\r\n }\r\n }\r\n\r\n private _checkTeleportWithRay(stateObject: StickValues, gazer: VRExperienceHelperGazer) {\r\n // Dont teleport if another gaze already requested teleportation\r\n if (this._teleportationRequestInitiated && !gazer._teleportationRequestInitiated) {\r\n return;\r\n }\r\n if (!gazer._teleportationRequestInitiated) {\r\n if (stateObject.y < -this._padSensibilityUp && gazer._dpadPressed) {\r\n gazer._activatePointer();\r\n gazer._teleportationRequestInitiated = true;\r\n }\r\n } else {\r\n // Listening to the proper controller values changes to confirm teleportation\r\n if (Math.sqrt(stateObject.y * stateObject.y + stateObject.x * stateObject.x) < this._padSensibilityDown) {\r\n if (this._teleportActive) {\r\n this.teleportCamera(this._haloCenter);\r\n }\r\n\r\n gazer._teleportationRequestInitiated = false;\r\n }\r\n }\r\n }\r\n private _checkRotate(stateObject: StickValues, gazer: VRExperienceHelperGazer) {\r\n // Only rotate when user is not currently selecting a teleportation location\r\n if (gazer._teleportationRequestInitiated) {\r\n return;\r\n }\r\n\r\n if (!gazer._rotationLeftAsked) {\r\n if (stateObject.x < -this._padSensibilityUp && gazer._dpadPressed) {\r\n gazer._rotationLeftAsked = true;\r\n if (this._rotationAllowed) {\r\n this._rotateCamera(false);\r\n }\r\n }\r\n } else {\r\n if (stateObject.x > -this._padSensibilityDown) {\r\n gazer._rotationLeftAsked = false;\r\n }\r\n }\r\n\r\n if (!gazer._rotationRightAsked) {\r\n if (stateObject.x > this._padSensibilityUp && gazer._dpadPressed) {\r\n gazer._rotationRightAsked = true;\r\n if (this._rotationAllowed) {\r\n this._rotateCamera(true);\r\n }\r\n }\r\n } else {\r\n if (stateObject.x < this._padSensibilityDown) {\r\n gazer._rotationRightAsked = false;\r\n }\r\n }\r\n }\r\n private _checkTeleportBackwards(stateObject: StickValues, gazer: VRExperienceHelperGazer) {\r\n // Only teleport backwards when user is not currently selecting a teleportation location\r\n if (gazer._teleportationRequestInitiated) {\r\n return;\r\n }\r\n // Teleport backwards\r\n if (stateObject.y > this._padSensibilityUp && gazer._dpadPressed) {\r\n if (!gazer._teleportationBackRequestInitiated) {\r\n if (!this.currentVRCamera) {\r\n return;\r\n }\r\n\r\n // Get rotation and position of the current camera\r\n let rotation = Quaternion.FromRotationMatrix(this.currentVRCamera.getWorldMatrix().getRotationMatrix());\r\n let position = this.currentVRCamera.position;\r\n\r\n // If the camera has device position, use that instead\r\n if ((<WebVRFreeCamera>this.currentVRCamera).devicePosition && (<WebVRFreeCamera>this.currentVRCamera).deviceRotationQuaternion) {\r\n rotation = (<WebVRFreeCamera>this.currentVRCamera).deviceRotationQuaternion;\r\n position = (<WebVRFreeCamera>this.currentVRCamera).devicePosition;\r\n }\r\n\r\n // Get matrix with only the y rotation of the device rotation\r\n rotation.toEulerAnglesToRef(this._workingVector);\r\n this._workingVector.z = 0;\r\n this._workingVector.x = 0;\r\n Quaternion.RotationYawPitchRollToRef(this._workingVector.y, this._workingVector.x, this._workingVector.z, this._workingQuaternion);\r\n this._workingQuaternion.toRotationMatrix(this._workingMatrix);\r\n\r\n // Rotate backwards ray by device rotation to cast at the ground behind the user\r\n Vector3.TransformCoordinatesToRef(this._teleportBackwardsVector, this._workingMatrix, this._workingVector);\r\n\r\n // Teleport if ray hit the ground and is not to far away eg. backwards off a cliff\r\n const ray = new Ray(position, this._workingVector);\r\n const hit = this._scene.pickWithRay(ray, this._raySelectionPredicate);\r\n if (hit && hit.pickedPoint && hit.pickedMesh && this._isTeleportationFloor(hit.pickedMesh) && hit.distance < 5) {\r\n this.teleportCamera(hit.pickedPoint);\r\n }\r\n\r\n gazer._teleportationBackRequestInitiated = true;\r\n }\r\n } else {\r\n gazer._teleportationBackRequestInitiated = false;\r\n }\r\n }\r\n\r\n private _enableTeleportationOnController(controller: VRExperienceHelperControllerGazer) {\r\n const controllerMesh = controller.webVRController.mesh;\r\n if (controllerMesh) {\r\n if (!controller._interactionsEnabled) {\r\n this._enableInteractionOnController(controller);\r\n }\r\n controller._interactionsEnabled = true;\r\n controller._teleportationEnabled = true;\r\n if (controller.webVRController.controllerType === PoseEnabledControllerType.VIVE) {\r\n controller._dpadPressed = false;\r\n controller.webVRController.onPadStateChangedObservable.add((stateObject) => {\r\n controller._dpadPressed = stateObject.pressed;\r\n if (!controller._dpadPressed) {\r\n controller._rotationLeftAsked = false;\r\n controller._rotationRightAsked = false;\r\n controller._teleportationBackRequestInitiated = false;\r\n }\r\n });\r\n }\r\n controller.webVRController.onPadValuesChangedObservable.add((stateObject) => {\r\n if (this.teleportationEnabled) {\r\n this._checkTeleportBackwards(stateObject, controller);\r\n this._checkTeleportWithRay(stateObject, controller);\r\n }\r\n this._checkRotate(stateObject, controller);\r\n });\r\n }\r\n }\r\n\r\n private _createTeleportationCircles() {\r\n this._teleportationTarget = CreateGround(\"teleportationTarget\", { width: 2, height: 2, subdivisions: 2 }, this._scene);\r\n this._teleportationTarget.isPickable = false;\r\n\r\n const length = 512;\r\n const dynamicTexture = new DynamicTexture(\"DynamicTexture\", length, this._scene, true);\r\n dynamicTexture.hasAlpha = true;\r\n const context = dynamicTexture.getContext();\r\n\r\n const centerX = length / 2;\r\n const centerY = length / 2;\r\n const radius = 200;\r\n\r\n context.beginPath();\r\n context.arc(centerX, centerY, radius, 0, 2 * Math.PI, false);\r\n context.fillStyle = this._teleportationFillColor;\r\n context.fill();\r\n context.lineWidth = 10;\r\n context.strokeStyle = this._teleportationBorderColor;\r\n context.stroke();\r\n context.closePath();\r\n dynamicTexture.update();\r\n\r\n const teleportationCircleMaterial = new StandardMaterial(\"TextPlaneMaterial\", this._scene);\r\n teleportationCircleMaterial.diffuseTexture = dynamicTexture;\r\n this._teleportationTarget.material = teleportationCircleMaterial;\r\n\r\n const torus = CreateTorus(\r\n \"torusTeleportation\",\r\n {\r\n diameter: 0.75,\r\n thickness: 0.1,\r\n tessellation: 25,\r\n updatable: false,\r\n },\r\n this._scene\r\n );\r\n torus.isPickable = false;\r\n torus.parent = this._teleportationTarget;\r\n\r\n const animationInnerCircle = new Animation(\"animationInnerCircle\", \"position.y\", 30, Animation.ANIMATIONTYPE_FLOAT, Animation.ANIMATIONLOOPMODE_CYCLE);\r\n\r\n const keys = [];\r\n keys.push({\r\n frame: 0,\r\n value: 0,\r\n });\r\n keys.push({\r\n frame: 30,\r\n value: 0.4,\r\n });\r\n keys.push({\r\n frame: 60,\r\n value: 0,\r\n });\r\n\r\n animationInnerCircle.setKeys(keys);\r\n\r\n const easingFunction = new SineEase();\r\n easingFunction.setEasingMode(EasingFunction.EASINGMODE_EASEINOUT);\r\n animationInnerCircle.setEasingFunction(easingFunction);\r\n\r\n torus.animations = [];\r\n torus.animations.push(animationInnerCircle);\r\n\r\n this._scene.beginAnimation(torus, 0, 60, true);\r\n\r\n this._hideTeleportationTarget();\r\n }\r\n\r\n private _displayTeleportationTarget() {\r\n this._teleportActive = true;\r\n if (this._teleportationInitialized) {\r\n this._teleportationTarget.isVisible = true;\r\n if (this._isDefaultTeleportationTarget) {\r\n (<Mesh>this._teleportationTarget.getChildren()[0]).isVisible = true;\r\n }\r\n }\r\n }\r\n\r\n private _hideTeleportationTarget() {\r\n this._teleportActive = false;\r\n if (this._teleportationInitialized) {\r\n this._teleportationTarget.isVisible = false;\r\n if (this._isDefaultTeleportationTarget) {\r\n (<Mesh>this._teleportationTarget.getChildren()[0]).isVisible = false;\r\n }\r\n }\r\n }\r\n\r\n private _rotateCamera(right: boolean) {\r\n if (!(this.currentVRCamera instanceof FreeCamera)) {\r\n return;\r\n }\r\n\r\n if (right) {\r\n this._rotationAngle++;\r\n } else {\r\n this._rotationAngle--;\r\n }\r\n\r\n this.currentVRCamera.animations = [];\r\n\r\n const target = Quaternion.FromRotationMatrix(Matrix.RotationY((Math.PI / 4) * this._rotationAngle));\r\n\r\n const animationRotation = new Animation(\"animationRotation\", \"rotationQuaternion\", 90, Animation.ANIMATIONTYPE_QUATERNION, Animation.ANIMATIONLOOPMODE_CONSTANT);\r\n\r\n const animationRotationKeys = [];\r\n animationRotationKeys.push({\r\n frame: 0,\r\n value: this.currentVRCamera.rotationQuaternion,\r\n });\r\n animationRotationKeys.push({\r\n frame: 6,\r\n value: target,\r\n });\r\n\r\n animationRotation.setKeys(animationRotationKeys);\r\n\r\n animationRotation.setEasingFunction(this._circleEase);\r\n\r\n this.currentVRCamera.animations.push(animationRotation);\r\n\r\n this._postProcessMove.animations = [];\r\n\r\n const animationPP = new Animation(\"animationPP\", \"vignetteWeight\", 90, Animation.ANIMATIONTYPE_FLOAT, Animation.ANIMATIONLOOPMODE_CONSTANT);\r\n\r\n const vignetteWeightKeys = [];\r\n vignetteWeightKeys.push({\r\n frame: 0,\r\n value: 0,\r\n });\r\n vignetteWeightKeys.push({\r\n frame: 3,\r\n value: 4,\r\n });\r\n vignetteWeightKeys.push({\r\n frame: 6,\r\n value: 0,\r\n });\r\n\r\n animationPP.setKeys(vignetteWeightKeys);\r\n animationPP.setEasingFunction(this._circleEase);\r\n this._postProcessMove.animations.push(animationPP);\r\n\r\n const animationPP2 = new Animation(\"animationPP2\", \"vignetteStretch\", 90, Animation.ANIMATIONTYPE_FLOAT, Animation.ANIMATIONLOOPMODE_CONSTANT);\r\n\r\n const vignetteStretchKeys = [];\r\n vignetteStretchKeys.push({\r\n frame: 0,\r\n value: 0,\r\n });\r\n vignetteStretchKeys.push({\r\n frame: 3,\r\n value: 10,\r\n });\r\n vignetteStretchKeys.push({\r\n frame: 6,\r\n value: 0,\r\n });\r\n\r\n animationPP2.setKeys(vignetteStretchKeys);\r\n animationPP2.setEasingFunction(this._circleEase);\r\n this._postProcessMove.animations.push(animationPP2);\r\n\r\n this._postProcessMove.imageProcessingConfiguration.vignetteWeight = 0;\r\n this._postProcessMove.imageProcessingConfiguration.vignetteStretch = 0;\r\n this._postProcessMove.samples = 4;\r\n this._webVRCamera.attachPostProcess(this._postProcessMove);\r\n this._scene.beginAnimation(this._postProcessMove, 0, 6, false, 1, () => {\r\n this._webVRCamera.detachPostProcess(this._postProcessMove);\r\n });\r\n this._scene.beginAnimation(this.currentVRCamera, 0, 6, false, 1);\r\n }\r\n\r\n private _moveTeleportationSelectorTo(hit: PickingInfo, gazer: VRExperienceHelperGazer, ray: Ray) {\r\n if (hit.pickedPoint) {\r\n if (gazer._teleportationRequestInitiated) {\r\n this._displayTeleportationTarget();\r\n this._haloCenter.copyFrom(hit.pickedPoint);\r\n this._teleportationTarget.position.copyFrom(hit.pickedPoint);\r\n }\r\n\r\n const pickNormal = this._convertNormalToDirectionOfRay(hit.getNormal(true, false), ray);\r\n if (pickNormal) {\r\n const axis1 = Vector3.Cross(Axis.Y, pickNormal);\r\n const axis2 = Vector3.Cross(pickNormal, axis1);\r\n Vector3.RotationFromAxisToRef(axis2, pickNormal, axis1, this._teleportationTarget.rotation);\r\n }\r\n this._teleportationTarget.position.y += 0.1;\r\n }\r\n }\r\n private _workingVector = Vector3.Zero();\r\n private _workingQuaternion = Quaternion.Identity();\r\n private _workingMatrix = Matrix.Identity();\r\n\r\n /**\r\n * Time Constant Teleportation Mode\r\n */\r\n public static readonly TELEPORTATIONMODE_CONSTANTTIME = 0;\r\n /**\r\n * Speed Constant Teleportation Mode\r\n */\r\n public static readonly TELEPORTATIONMODE_CONSTANTSPEED = 1;\r\n\r\n /**\r\n * Teleports the users feet to the desired location\r\n * @param location The location where the user's feet should be placed\r\n */\r\n public teleportCamera(location: Vector3) {\r\n if (!(this.currentVRCamera instanceof FreeCamera)) {\r\n return;\r\n }\r\n // Teleport the hmd to where the user is looking by moving the anchor to where they are looking minus the\r\n // offset of the headset from the anchor.\r\n if (this.webVRCamera.leftCamera) {\r\n this._workingVector.copyFrom(this.webVRCamera.leftCamera.globalPosition);\r\n this._workingVector.subtractInPlace(this.webVRCamera.position);\r\n location.subtractToRef(this._workingVector, this._workingVector);\r\n } else {\r\n this._workingVector.copyFrom(location);\r\n }\r\n // Add height to account for user's height offset\r\n if (this.isInVRMode) {\r\n this._workingVector.y += this.webVRCamera.deviceDistanceToRoomGround() * this._webVRCamera.deviceScaleFactor;\r\n } else {\r\n this._workingVector.y += this._defaultHeight;\r\n }\r\n\r\n this.onBeforeCameraTeleport.notifyObservers(this._workingVector);\r\n\r\n // Animations FPS\r\n const FPS = 90;\r\n let speedRatio, lastFrame;\r\n if (this._teleportationMode == VRExperienceHelper.TELEPORTATIONMODE_CONSTANTSPEED) {\r\n lastFrame = FPS;\r\n const dist = Vector3.Distance(this.currentVRCamera.position, this._workingVector);\r\n speedRatio = this._teleportationSpeed / dist;\r\n } else {\r\n // teleportationMode is TELEPORTATIONMODE_CONSTANTTIME\r\n lastFrame = Math.round((this._teleportationTime * FPS) / 1000);\r\n speedRatio = 1;\r\n }\r\n\r\n // Create animation from the camera's position to the new location\r\n this.currentVRCamera.animations = [];\r\n const animationCameraTeleportation = new Animation(\"animationCameraTeleportation\", \"position\", FPS, Animation.ANIMATIONTYPE_VECTOR3, Animation.ANIMATIONLOOPMODE_CONSTANT);\r\n const animationCameraTeleportationKeys = [\r\n {\r\n frame: 0,\r\n value: this.currentVRCamera.position,\r\n },\r\n {\r\n frame: lastFrame,\r\n value: this._workingVector,\r\n },\r\n ];\r\n\r\n animationCameraTeleportation.setKeys(animationCameraTeleportationKeys);\r\n animationCameraTeleportation.setEasingFunction(this._teleportationEasing);\r\n this.currentVRCamera.animations.push(animationCameraTeleportation);\r\n\r\n this._postProcessMove.animations = [];\r\n\r\n // Calculate the mid frame for vignette animations\r\n const midFrame = Math.round(lastFrame / 2);\r\n\r\n const animationPP = new Animation(\"animationPP\", \"vignetteWeight\", FPS, Animation.ANIMATIONTYPE_FLOAT, Animation.ANIMATIONLOOPMODE_CONSTANT);\r\n\r\n const vignetteWeightKeys = [];\r\n vignetteWeightKeys.push({\r\n frame: 0,\r\n value: 0,\r\n });\r\n vignetteWeightKeys.push({\r\n frame: midFrame,\r\n value: 8,\r\n });\r\n vignetteWeightKeys.push({\r\n frame: lastFrame,\r\n value: 0,\r\n });\r\n\r\n animationPP.setKeys(vignetteWeightKeys);\r\n this._postProcessMove.animations.push(animationPP);\r\n\r\n const animationPP2 = new Animation(\"animationPP2\", \"vignetteStretch\", FPS, Animation.ANIMATIONTYPE_FLOAT, Animation.ANIMATIONLOOPMODE_CONSTANT);\r\n\r\n const vignetteStretchKeys = [];\r\n vignetteStretchKeys.push({\r\n frame: 0,\r\n value: 0,\r\n });\r\n vignetteStretchKeys.push({\r\n frame: midFrame,\r\n value: 10,\r\n });\r\n vignetteStretchKeys.push({\r\n frame: lastFrame,\r\n value: 0,\r\n });\r\n\r\n animationPP2.setKeys(vignetteStretchKeys);\r\n this._postProcessMove.animations.push(animationPP2);\r\n\r\n this._postProcessMove.imageProcessingConfiguration.vignetteWeight = 0;\r\n this._postProcessMove.imageProcessingConfiguration.vignetteStretch = 0;\r\n\r\n this._webVRCamera.attachPostProcess(this._postProcessMove);\r\n this._scene.beginAnimation(this._postProcessMove, 0, lastFrame, false, speedRatio, () => {\r\n this._webVRCamera.detachPostProcess(this._postProcessMove);\r\n });\r\n this._scene.beginAnimation(this.currentVRCamera, 0, lastFrame, false, speedRatio, () => {\r\n this.onAfterCameraTeleport.notifyObservers(this._workingVector);\r\n });\r\n\r\n this._hideTeleportationTarget();\r\n }\r\n\r\n private _convertNormalToDirectionOfRay(normal: Nullable<Vector3>, ray: Ray) {\r\n if (normal) {\r\n const angle = Math.acos(Vector3.Dot(normal, ray.direction));\r\n if (angle < Math.PI / 2) {\r\n normal.scaleInPlace(-1);\r\n }\r\n }\r\n return normal;\r\n }\r\n\r\n private _castRayAndSelectObject(gazer: VRExperienceHelperGazer) {\r\n if (!(this.currentVRCamera instanceof FreeCamera)) {\r\n return;\r\n }\r\n\r\n const ray = gazer._getForwardRay(this._rayLength);\r\n const hit = this._scene.pickWithRay(ray, this._raySelectionPredicate);\r\n\r\n if (hit) {\r\n this._scene.simulatePointerMove(hit, { pointerId: gazer._id });\r\n }\r\n gazer._currentHit = hit;\r\n\r\n // Moving the gazeTracker on the mesh face targetted\r\n if (hit && hit.pickedPoint) {\r\n if (this._displayGaze) {\r\n let multiplier = 1;\r\n\r\n gazer._gazeTracker.isVisible = true;\r\n\r\n if (gazer._isActionableMesh) {\r\n multiplier = 3;\r\n }\r\n if (this.updateGazeTrackerScale) {\r\n gazer._gazeTracker.scaling.x = hit.distance * multiplier;\r\n gazer._gazeTracker.scaling.y = hit.distance * multiplier;\r\n gazer._gazeTracker.scaling.z = hit.distance * multiplier;\r\n }\r\n\r\n const pickNormal = this._convertNormalToDirectionOfRay(hit.getNormal(), ray);\r\n // To avoid z-fighting\r\n const deltaFighting = 0.002;\r\n\r\n if (pickNormal) {\r\n const axis1 = Vector3.Cross(Axis.Y, pickNormal);\r\n const axis2 = Vector3.Cross(pickNormal, axis1);\r\n Vector3.RotationFromAxisToRef(axis2, pickNormal, axis1, gazer._gazeTracker.rotation);\r\n }\r\n gazer._gazeTracker.position.copyFrom(hit.pickedPoint);\r\n\r\n if (gazer._gazeTracker.position.x < 0) {\r\n gazer._gazeTracker.position.x += deltaFighting;\r\n } else {\r\n gazer._gazeTracker.position.x -= deltaFighting;\r\n }\r\n if (gazer._gazeTracker.position.y < 0) {\r\n gazer._gazeTracker.position.y += deltaFighting;\r\n } else {\r\n gazer._gazeTracker.position.y -= deltaFighting;\r\n }\r\n if (gazer._gazeTracker.position.z < 0) {\r\n gazer._gazeTracker.position.z += deltaFighting;\r\n } else {\r\n gazer._gazeTracker.position.z -= deltaFighting;\r\n }\r\n }\r\n\r\n // Changing the size of the laser pointer based on the distance from the targetted point\r\n gazer._updatePointerDistance(hit.distance);\r\n } else {\r\n gazer._updatePointerDistance();\r\n gazer._gazeTracker.isVisible = false;\r\n }\r\n\r\n if (hit && hit.pickedMesh) {\r\n // The object selected is the floor, we're in a teleportation scenario\r\n if (this._teleportationInitialized && this._isTeleportationFloor(hit.pickedMesh) && hit.pickedPoint) {\r\n // Moving the teleportation area to this targetted point\r\n\r\n //Raise onSelectedMeshUnselected observable if ray collided floor mesh/meshes and a non floor mesh was previously selected\r\n if (gazer._currentMeshSelected && !this._isTeleportationFloor(gazer._currentMeshSelected)) {\r\n this._notifySelectedMeshUnselected(gazer._currentMeshSelected);\r\n }\r\n\r\n gazer._currentMeshSelected = null;\r\n if (gazer._teleportationRequestInitiated) {\r\n this._moveTeleportationSelectorTo(hit, gazer, ray);\r\n }\r\n return;\r\n }\r\n // If not, we're in a selection scenario\r\n //this._teleportationAllowed = false;\r\n if (hit.pickedMesh !== gazer._currentMeshSelected) {\r\n if (this.meshSelectionPredicate(hit.pickedMesh)) {\r\n this.onNewMeshPicked.notifyObservers(hit);\r\n gazer._currentMeshSelected = hit.pickedMesh;\r\n if (hit.pickedMesh.isPickable && hit.pickedMesh.actionManager) {\r\n this.changeGazeColor(this._pickedGazeColor);\r\n this.changeLaserColor(this._pickedLaserColor);\r\n gazer._isActionableMesh = true;\r\n } else {\r\n this.changeGazeColor(this._gazeColor);\r\n this.changeLaserColor(this._laserColor);\r\n gazer._isActionableMesh = false;\r\n }\r\n try {\r\n this.onNewMeshSelected.notifyObservers(hit.pickedMesh);\r\n const gazerAsControllerGazer = gazer as VRExperienceHelperControllerGazer;\r\n if (gazerAsControllerGazer.webVRController) {\r\n this.onMeshSelectedWithController.notifyObservers({ mesh: hit.pickedMesh, controller: gazerAsControllerGazer.webVRController });\r\n }\r\n } catch (err) {\r\n Logger.Warn(\"Error while raising onNewMeshSelected or onMeshSelectedWithController: \" + err);\r\n }\r\n } else {\r\n this._notifySelectedMeshUnselected(gazer._currentMeshSelected);\r\n gazer._currentMeshSelected = null;\r\n this.changeGazeColor(this._gazeColor);\r\n this.changeLaserColor(this._laserColor);\r\n }\r\n }\r\n } else {\r\n this._notifySelectedMeshUnselected(gazer._currentMeshSelected);\r\n gazer._currentMeshSelected = null;\r\n //this._teleportationAllowed = false;\r\n this.changeGazeColor(this._gazeColor);\r\n this.changeLaserColor(this._laserColor);\r\n }\r\n }\r\n\r\n private _notifySelectedMeshUnselected(mesh: Nullable<AbstractMesh>) {\r\n if (mesh) {\r\n this.onSelectedMeshUnselected.notifyObservers(mesh);\r\n }\r\n }\r\n\r\n /**\r\n * Permanently set new colors for the laser pointer\r\n * @param color the new laser color\r\n * @param pickedColor the new laser color when picked mesh detected\r\n */\r\n public setLaserColor(color: Color3, pickedColor: Color3 = this._pickedLaserColor) {\r\n this._laserColor = color;\r\n this._pickedLaserColor = pickedColor;\r\n }\r\n\r\n /**\r\n * Set lighting enabled / disabled on the laser pointer of both controllers\r\n * @param enabled should the lighting be enabled on the laser pointer\r\n */\r\n public setLaserLightingState(enabled: boolean = true) {\r\n if (this._leftController) {\r\n this._leftController._setLaserPointerLightingDisabled(!enabled);\r\n }\r\n if (this._rightController) {\r\n this._rightController._setLaserPointerLightingDisabled(!enabled);\r\n }\r\n }\r\n\r\n /**\r\n * Permanently set new colors for the gaze pointer\r\n * @param color the new gaze color\r\n * @param pickedColor the new gaze color when picked mesh detected\r\n */\r\n public setGazeColor(color: Color3, pickedColor: Color3 = this._pickedGazeColor) {\r\n this._gazeColor = color;\r\n this._pickedGazeColor = pickedColor;\r\n }\r\n\r\n /**\r\n * Sets the color of the laser ray from the vr controllers.\r\n * @param color new color for the ray.\r\n */\r\n public changeLaserColor(color: Color3) {\r\n if (!this.updateControllerLaserColor) {\r\n return;\r\n }\r\n\r\n if (this._leftController) {\r\n this._leftController._setLaserPointerColor(color);\r\n }\r\n if (this._rightController) {\r\n this._rightController._setLaserPointerColor(color);\r\n }\r\n }\r\n\r\n /**\r\n * Sets the color of the ray from the vr headsets gaze.\r\n * @param color new color for the ray.\r\n */\r\n public changeGazeColor(color: Color3) {\r\n if (!this.updateGazeTrackerColor) {\r\n return;\r\n }\r\n if (!(<StandardMaterial>this._cameraGazer._gazeTracker.material)) {\r\n return;\r\n }\r\n (<StandardMaterial>this._cameraGazer._gazeTracker.material).emissiveColor = color;\r\n if (this._leftController) {\r\n (<StandardMaterial>this._leftController._gazeTracker.material).emissiveColor = color;\r\n }\r\n if (this._rightController) {\r\n (<StandardMaterial>this._rightController._gazeTracker.material).emissiveColor = color;\r\n }\r\n }\r\n\r\n /**\r\n * Exits VR and disposes of the vr experience helper\r\n */\r\n public dispose() {\r\n if (this.isInVRMode) {\r\n this.exitVR();\r\n }\r\n\r\n if (this._postProcessMove) {\r\n this._postProcessMove.dispose();\r\n }\r\n\r\n if (this._webVRCamera) {\r\n this._webVRCamera.dispose();\r\n }\r\n if (this._vrDeviceOrientationCamera) {\r\n this._vrDeviceOrientationCamera.dispose();\r\n }\r\n if (!this._useCustomVRButton && this._btnVR && this._btnVR.parentNode) {\r\n document.body.removeChild(this._btnVR);\r\n }\r\n\r\n if (this._deviceOrientationCamera && this._scene.activeCamera != this._deviceOrientationCamera) {\r\n this._deviceOrientationCamera.dispose();\r\n }\r\n\r\n if (this._cameraGazer) {\r\n this._cameraGazer.dispose();\r\n }\r\n if (this._leftController) {\r\n this._leftController.dispose();\r\n }\r\n if (this._rightController) {\r\n this._rightController.dispose();\r\n }\r\n\r\n if (this._teleportationTarget) {\r\n this._teleportationTarget.dispose();\r\n }\r\n\r\n if (this.xr) {\r\n this.xr.dispose();\r\n }\r\n\r\n this._floorMeshesCollection.length = 0;\r\n\r\n document.removeEventListener(\"keydown\", this._onKeyDown);\r\n window.removeEventListener(\"vrdisplaypresentchange\", this._onVrDisplayPresentChangeBind);\r\n\r\n window.removeEventListener(\"resize\", this._onResize);\r\n document.removeEventListener(\"fullscreenchange\", this._onFullscreenChange);\r\n document.removeEventListener(\"mozfullscreenchange\", this._onFullscreenChange);\r\n document.removeEventListener(\"webkitfullscreenchange\", this._onFullscreenChange);\r\n document.removeEventListener(\"msfullscreenchange\", this._onFullscreenChange);\r\n (<any>document).onmsfullscreenchange = null;\r\n\r\n this._scene.getEngine().onVRDisplayChangedObservable.removeCallback(this._onVRDisplayChangedBind);\r\n this._scene.getEngine().onVRRequestPresentStart.removeCallback(this._onVRRequestPresentStart);\r\n this._scene.getEngine().onVRRequestPresentComplete.removeCallback(this._onVRRequestPresentComplete);\r\n\r\n this._scene.gamepadManager.onGamepadConnectedObservable.removeCallback(this._onNewGamepadConnected);\r\n this._scene.gamepadManager.onGamepadDisconnectedObservable.removeCallback(this._onNewGamepadDisconnected);\r\n\r\n this._scene.unregisterBeforeRender(this._beforeRender);\r\n }\r\n\r\n /**\r\n * Gets the name of the VRExperienceHelper class\r\n * @returns \"VRExperienceHelper\"\r\n */\r\n public getClassName(): string {\r\n return \"VRExperienceHelper\";\r\n }\r\n}\r\n"]}
|
|
1
|
+
{"version":3,"file":"vrExperienceHelper.js","sourceRoot":"","sources":["../../../../../../lts/core/generated/Cameras/VR/vrExperienceHelper.ts"],"names":[],"mappings":"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","sourcesContent":["import { Logger } from \"../../Misc/logger\";\r\nimport type { Observer } from \"../../Misc/observable\";\r\nimport { Observable } from \"../../Misc/observable\";\r\nimport type { Nullable } from \"../../types\";\r\nimport type { Camera } from \"../../Cameras/camera\";\r\nimport { FreeCamera } from \"../../Cameras/freeCamera\";\r\nimport { TargetCamera } from \"../../Cameras/targetCamera\";\r\nimport { DeviceOrientationCamera } from \"../../Cameras/deviceOrientationCamera\";\r\nimport { VRDeviceOrientationFreeCamera } from \"../../Cameras/VR/vrDeviceOrientationFreeCamera\";\r\nimport type { WebVROptions } from \"../../Cameras/VR/webVRCamera\";\r\nimport { WebVRFreeCamera } from \"../../Cameras/VR/webVRCamera\";\r\nimport { PointerEventTypes } from \"../../Events/pointerEvents\";\r\nimport type { Scene, IDisposable } from \"../../scene\";\r\nimport { Quaternion, Matrix, Vector3 } from \"../../Maths/math.vector\";\r\nimport { Color3, Color4 } from \"../../Maths/math.color\";\r\nimport type { StickValues } from \"../../Gamepads/gamepad\";\r\nimport { Gamepad } from \"../../Gamepads/gamepad\";\r\nimport { PoseEnabledController, PoseEnabledControllerType } from \"../../Gamepads/Controllers/poseEnabledController\";\r\nimport { WebVRController } from \"../../Gamepads/Controllers/webVRController\";\r\nimport type { Xbox360Pad } from \"../../Gamepads/xboxGamepad\";\r\nimport { Xbox360Button } from \"../../Gamepads/xboxGamepad\";\r\nimport type { IDisplayChangedEventArgs } from \"../../Engines/engine\";\r\nimport type { AbstractMesh } from \"../../Meshes/abstractMesh\";\r\nimport type { TransformNode } from \"../../Meshes/transformNode\";\r\nimport { Mesh } from \"../../Meshes/mesh\";\r\nimport type { PickingInfo } from \"../../Collisions/pickingInfo\";\r\nimport { Ray } from \"../../Culling/ray\";\r\nimport { ImageProcessingConfiguration } from \"../../Materials/imageProcessingConfiguration\";\r\nimport { StandardMaterial } from \"../../Materials/standardMaterial\";\r\nimport { DynamicTexture } from \"../../Materials/Textures/dynamicTexture\";\r\nimport { ImageProcessingPostProcess } from \"../../PostProcesses/imageProcessingPostProcess\";\r\nimport { SineEase, EasingFunction, CircleEase } from \"../../Animations/easing\";\r\nimport { Animation } from \"../../Animations/animation\";\r\nimport { VRCameraMetrics } from \"../../Cameras/VR/vrCameraMetrics\";\r\nimport \"../../Gamepads/gamepadSceneComponent\";\r\nimport \"../../Animations/animatable\";\r\nimport { Axis } from \"../../Maths/math.axis\";\r\nimport { WebXRSessionManager } from \"../../XR/webXRSessionManager\";\r\nimport type { WebXRDefaultExperience } from \"../../XR/webXRDefaultExperience\";\r\nimport { WebXRState } from \"../../XR/webXRTypes\";\r\nimport { CreateCylinder } from \"../../Meshes/Builders/cylinderBuilder\";\r\nimport { CreateTorus } from \"../../Meshes/Builders/torusBuilder\";\r\nimport { CreateGround } from \"../../Meshes/Builders/groundBuilder\";\r\nimport type { IPointerEvent } from \"../../Events/deviceInputEvents\";\r\n\r\n/**\r\n * Options to modify the vr teleportation behavior.\r\n */\r\nexport interface VRTeleportationOptions {\r\n /**\r\n * The name of the mesh which should be used as the teleportation floor. (default: null)\r\n */\r\n floorMeshName?: string;\r\n /**\r\n * A list of meshes to be used as the teleportation floor. (default: empty)\r\n */\r\n floorMeshes?: Mesh[];\r\n /**\r\n * The teleportation mode. (default: TELEPORTATIONMODE_CONSTANTTIME)\r\n */\r\n teleportationMode?: number;\r\n /**\r\n * The duration of the animation in ms, apply when animationMode is TELEPORTATIONMODE_CONSTANTTIME. (default 122ms)\r\n */\r\n teleportationTime?: number;\r\n /**\r\n * The speed of the animation in distance/sec, apply when animationMode is TELEPORTATIONMODE_CONSTANTSPEED. (default 20 units / sec)\r\n */\r\n teleportationSpeed?: number;\r\n /**\r\n * The easing function used in the animation or null for Linear. (default CircleEase)\r\n */\r\n easingFunction?: EasingFunction;\r\n}\r\n\r\n/**\r\n * Options to modify the vr experience helper's behavior.\r\n */\r\nexport interface VRExperienceHelperOptions extends WebVROptions {\r\n /**\r\n * Create a DeviceOrientationCamera to be used as your out of vr camera. (default: true)\r\n */\r\n createDeviceOrientationCamera?: boolean;\r\n /**\r\n * Create a VRDeviceOrientationFreeCamera to be used for VR when no external HMD is found. (default: true)\r\n */\r\n createFallbackVRDeviceOrientationFreeCamera?: boolean;\r\n /**\r\n * Uses the main button on the controller to toggle the laser casted. (default: true)\r\n */\r\n laserToggle?: boolean;\r\n /**\r\n * A list of meshes to be used as the teleportation floor. If specified, teleportation will be enabled (default: undefined)\r\n */\r\n floorMeshes?: Mesh[];\r\n /**\r\n * Distortion metrics for the fallback vrDeviceOrientationCamera (default: VRCameraMetrics.Default)\r\n */\r\n vrDeviceOrientationCameraMetrics?: VRCameraMetrics;\r\n /**\r\n * Defines if WebXR should be used instead of WebVR (if available)\r\n */\r\n useXR?: boolean;\r\n}\r\n\r\nclass VRExperienceHelperGazer implements IDisposable {\r\n /** @internal */\r\n public _gazeTracker: Mesh;\r\n\r\n /** @internal */\r\n public _currentMeshSelected: Nullable<AbstractMesh>;\r\n /** @internal */\r\n public _currentHit: Nullable<PickingInfo>;\r\n\r\n public static _IdCounter = 0;\r\n /** @internal */\r\n public _id: number;\r\n\r\n /** @internal */\r\n public _pointerDownOnMeshAsked: boolean = false;\r\n /** @internal */\r\n public _isActionableMesh: boolean = false;\r\n\r\n /** @internal */\r\n public _interactionsEnabled: boolean;\r\n /** @internal */\r\n public _teleportationEnabled: boolean;\r\n /** @internal */\r\n public _teleportationRequestInitiated = false;\r\n /** @internal */\r\n public _teleportationBackRequestInitiated = false;\r\n /** @internal */\r\n public _rotationRightAsked = false;\r\n /** @internal */\r\n public _rotationLeftAsked = false;\r\n /** @internal */\r\n public _dpadPressed = true;\r\n\r\n /** @internal */\r\n public _activePointer = false;\r\n\r\n constructor(public scene: Scene, gazeTrackerToClone: Nullable<Mesh> = null) {\r\n this._id = VRExperienceHelperGazer._IdCounter++;\r\n\r\n // Gaze tracker\r\n if (!gazeTrackerToClone) {\r\n this._gazeTracker = CreateTorus(\r\n \"gazeTracker\",\r\n {\r\n diameter: 0.0035,\r\n thickness: 0.0025,\r\n tessellation: 20,\r\n updatable: false,\r\n },\r\n scene\r\n );\r\n this._gazeTracker.bakeCurrentTransformIntoVertices();\r\n this._gazeTracker.isPickable = false;\r\n this._gazeTracker.isVisible = false;\r\n const targetMat = new StandardMaterial(\"targetMat\", scene);\r\n targetMat.specularColor = Color3.Black();\r\n targetMat.emissiveColor = new Color3(0.7, 0.7, 0.7);\r\n targetMat.backFaceCulling = false;\r\n this._gazeTracker.material = targetMat;\r\n } else {\r\n this._gazeTracker = gazeTrackerToClone.clone(\"gazeTracker\") as Mesh;\r\n }\r\n }\r\n\r\n /**\r\n * @internal\r\n */\r\n public _getForwardRay(length: number): Ray {\r\n return new Ray(Vector3.Zero(), new Vector3(0, 0, length));\r\n }\r\n\r\n /** @internal */\r\n public _selectionPointerDown() {\r\n this._pointerDownOnMeshAsked = true;\r\n if (this._currentHit) {\r\n this.scene.simulatePointerDown(this._currentHit, { pointerId: this._id });\r\n }\r\n }\r\n\r\n /** @internal */\r\n public _selectionPointerUp() {\r\n if (this._currentHit) {\r\n this.scene.simulatePointerUp(this._currentHit, { pointerId: this._id });\r\n }\r\n this._pointerDownOnMeshAsked = false;\r\n }\r\n\r\n /** @internal */\r\n public _activatePointer() {\r\n this._activePointer = true;\r\n }\r\n\r\n /** @internal */\r\n public _deactivatePointer() {\r\n this._activePointer = false;\r\n }\r\n\r\n /**\r\n * @internal\r\n */\r\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\r\n public _updatePointerDistance(distance: number = 100) {}\r\n\r\n public dispose() {\r\n this._interactionsEnabled = false;\r\n this._teleportationEnabled = false;\r\n if (this._gazeTracker) {\r\n this._gazeTracker.dispose();\r\n }\r\n }\r\n}\r\n\r\nclass VRExperienceHelperControllerGazer extends VRExperienceHelperGazer {\r\n private _laserPointer: Mesh;\r\n private _meshAttachedObserver: Nullable<Observer<AbstractMesh>>;\r\n constructor(public webVRController: WebVRController, scene: Scene, gazeTrackerToClone: Mesh) {\r\n super(scene, gazeTrackerToClone);\r\n // Laser pointer\r\n this._laserPointer = CreateCylinder(\r\n \"laserPointer\",\r\n {\r\n updatable: false,\r\n height: 1,\r\n diameterTop: 0.004,\r\n diameterBottom: 0.0002,\r\n tessellation: 20,\r\n subdivisions: 1,\r\n },\r\n scene\r\n );\r\n const laserPointerMaterial = new StandardMaterial(\"laserPointerMat\", scene);\r\n laserPointerMaterial.emissiveColor = new Color3(0.7, 0.7, 0.7);\r\n laserPointerMaterial.alpha = 0.6;\r\n this._laserPointer.material = laserPointerMaterial;\r\n this._laserPointer.rotation.x = Math.PI / 2;\r\n this._laserPointer.position.z = -0.5;\r\n this._laserPointer.isVisible = false;\r\n this._laserPointer.isPickable = false;\r\n\r\n if (!webVRController.mesh) {\r\n // Create an empty mesh that is used prior to loading the high quality model\r\n const preloadMesh = new Mesh(\"preloadControllerMesh\", scene);\r\n const preloadPointerPose = new Mesh(PoseEnabledController.POINTING_POSE, scene);\r\n preloadPointerPose.rotation.x = -0.7;\r\n preloadMesh.addChild(preloadPointerPose);\r\n webVRController.attachToMesh(preloadMesh);\r\n }\r\n\r\n this._setLaserPointerParent(webVRController.mesh!);\r\n\r\n this._meshAttachedObserver = webVRController._meshAttachedObservable.add((mesh) => {\r\n this._setLaserPointerParent(mesh);\r\n });\r\n }\r\n\r\n _getForwardRay(length: number): Ray {\r\n return this.webVRController.getForwardRay(length);\r\n }\r\n\r\n /** @internal */\r\n public _activatePointer() {\r\n super._activatePointer();\r\n this._laserPointer.isVisible = true;\r\n }\r\n\r\n /** @internal */\r\n public _deactivatePointer() {\r\n super._deactivatePointer();\r\n this._laserPointer.isVisible = false;\r\n }\r\n\r\n /**\r\n * @internal\r\n */\r\n public _setLaserPointerColor(color: Color3) {\r\n (<StandardMaterial>this._laserPointer.material).emissiveColor = color;\r\n }\r\n\r\n /**\r\n * @internal\r\n */\r\n public _setLaserPointerLightingDisabled(disabled: boolean) {\r\n (<StandardMaterial>this._laserPointer.material).disableLighting = disabled;\r\n }\r\n\r\n /**\r\n * @internal\r\n */\r\n public _setLaserPointerParent(mesh: AbstractMesh) {\r\n const makeNotPick = (root: AbstractMesh) => {\r\n root.isPickable = false;\r\n root.getChildMeshes().forEach((c) => {\r\n makeNotPick(c);\r\n });\r\n };\r\n makeNotPick(mesh);\r\n const meshChildren = mesh.getChildren(undefined, false);\r\n\r\n let laserParent: TransformNode = mesh;\r\n this.webVRController._pointingPoseNode = null;\r\n for (let i = 0; i < meshChildren.length; i++) {\r\n if (meshChildren[i].name && meshChildren[i].name.indexOf(PoseEnabledController.POINTING_POSE) >= 0) {\r\n laserParent = <TransformNode>meshChildren[i];\r\n this.webVRController._pointingPoseNode = laserParent;\r\n break;\r\n }\r\n }\r\n this._laserPointer.parent = laserParent;\r\n }\r\n\r\n public _updatePointerDistance(distance: number = 100) {\r\n this._laserPointer.scaling.y = distance;\r\n this._laserPointer.position.z = -distance / 2;\r\n }\r\n\r\n dispose() {\r\n super.dispose();\r\n this._laserPointer.dispose();\r\n if (this._meshAttachedObserver) {\r\n this.webVRController._meshAttachedObservable.remove(this._meshAttachedObserver);\r\n }\r\n }\r\n}\r\n\r\nclass VRExperienceHelperCameraGazer extends VRExperienceHelperGazer {\r\n constructor(private _getCamera: () => Nullable<Camera>, scene: Scene) {\r\n super(scene);\r\n }\r\n\r\n _getForwardRay(length: number): Ray {\r\n const camera = this._getCamera();\r\n if (camera) {\r\n return camera.getForwardRay(length);\r\n } else {\r\n return new Ray(Vector3.Zero(), Vector3.Forward());\r\n }\r\n }\r\n}\r\n\r\n/**\r\n * Event containing information after VR has been entered\r\n */\r\nexport class OnAfterEnteringVRObservableEvent {\r\n /**\r\n * If entering vr was successful\r\n */\r\n public success: boolean;\r\n}\r\n\r\n/**\r\n * Helps to quickly add VR support to an existing scene.\r\n * See https://doc.babylonjs.com/divingDeeper/cameras/webVRHelper\r\n * @deprecated\r\n */\r\nexport class VRExperienceHelper {\r\n private _scene: Scene;\r\n private _position: Vector3;\r\n private _btnVR: Nullable<HTMLButtonElement>;\r\n private _btnVRDisplayed: boolean;\r\n\r\n // Can the system support WebVR, even if a headset isn't plugged in?\r\n private _webVRsupported = false;\r\n // If WebVR is supported, is a headset plugged in and are we ready to present?\r\n private _webVRready = false;\r\n // Are we waiting for the requestPresent callback to complete?\r\n private _webVRrequesting = false;\r\n // Are we presenting to the headset right now? (this is the vrDevice state)\r\n private _webVRpresenting = false;\r\n // Have we entered VR? (this is the VRExperienceHelper state)\r\n private _hasEnteredVR: boolean;\r\n\r\n // Are we presenting in the fullscreen fallback?\r\n private _fullscreenVRpresenting = false;\r\n\r\n private _inputElement: Nullable<HTMLElement>;\r\n private _webVRCamera: WebVRFreeCamera;\r\n private _vrDeviceOrientationCamera: Nullable<VRDeviceOrientationFreeCamera>;\r\n private _deviceOrientationCamera: Nullable<DeviceOrientationCamera>;\r\n private _existingCamera: Camera;\r\n\r\n private _onKeyDown: (event: KeyboardEvent) => void;\r\n private _onVrDisplayPresentChangeBind: any;\r\n private _onVRDisplayChangedBind: (eventArgs: IDisplayChangedEventArgs) => void;\r\n private _onVRRequestPresentStart: () => void;\r\n private _onVRRequestPresentComplete: (success: boolean) => void;\r\n\r\n /**\r\n * Gets or sets a boolean indicating that gaze can be enabled even if pointer lock is not engage (useful on iOS where fullscreen mode and pointer lock are not supported)\r\n */\r\n public enableGazeEvenWhenNoPointerLock = false;\r\n\r\n /**\r\n * Gets or sets a boolean indicating that the VREXperienceHelper will exit VR if double tap is detected\r\n */\r\n public exitVROnDoubleTap = true;\r\n\r\n /**\r\n * Observable raised right before entering VR.\r\n */\r\n public onEnteringVRObservable = new Observable<VRExperienceHelper>();\r\n\r\n /**\r\n * Observable raised when entering VR has completed.\r\n */\r\n public onAfterEnteringVRObservable = new Observable<OnAfterEnteringVRObservableEvent>();\r\n\r\n /**\r\n * Observable raised when exiting VR.\r\n */\r\n public onExitingVRObservable = new Observable<VRExperienceHelper>();\r\n\r\n /**\r\n * Observable raised when controller mesh is loaded.\r\n */\r\n public onControllerMeshLoadedObservable = new Observable<WebVRController>();\r\n\r\n /** Return this.onEnteringVRObservable\r\n * Note: This one is for backward compatibility. Please use onEnteringVRObservable directly\r\n */\r\n public get onEnteringVR(): Observable<VRExperienceHelper> {\r\n return this.onEnteringVRObservable;\r\n }\r\n\r\n /** Return this.onExitingVRObservable\r\n * Note: This one is for backward compatibility. Please use onExitingVRObservable directly\r\n */\r\n public get onExitingVR(): Observable<VRExperienceHelper> {\r\n return this.onExitingVRObservable;\r\n }\r\n\r\n /** Return this.onControllerMeshLoadedObservable\r\n * Note: This one is for backward compatibility. Please use onControllerMeshLoadedObservable directly\r\n */\r\n public get onControllerMeshLoaded(): Observable<WebVRController> {\r\n return this.onControllerMeshLoadedObservable;\r\n }\r\n\r\n private _rayLength: number;\r\n private _useCustomVRButton: boolean = false;\r\n private _teleportationRequested: boolean = false;\r\n private _teleportActive = false;\r\n private _floorMeshName: string;\r\n private _floorMeshesCollection: Mesh[] = [];\r\n private _teleportationMode: number = VRExperienceHelper.TELEPORTATIONMODE_CONSTANTTIME;\r\n private _teleportationTime: number = 122;\r\n private _teleportationSpeed: number = 20;\r\n private _teleportationEasing: EasingFunction;\r\n private _rotationAllowed: boolean = true;\r\n private _teleportBackwardsVector = new Vector3(0, -1, -1);\r\n private _teleportationTarget: Mesh;\r\n private _isDefaultTeleportationTarget = true;\r\n private _postProcessMove: ImageProcessingPostProcess;\r\n private _teleportationFillColor: string = \"#444444\";\r\n private _teleportationBorderColor: string = \"#FFFFFF\";\r\n private _rotationAngle: number = 0;\r\n private _haloCenter = new Vector3(0, 0, 0);\r\n private _cameraGazer: VRExperienceHelperCameraGazer;\r\n private _padSensibilityUp = 0.65;\r\n private _padSensibilityDown = 0.35;\r\n\r\n private _leftController: Nullable<VRExperienceHelperControllerGazer> = null;\r\n private _rightController: Nullable<VRExperienceHelperControllerGazer> = null;\r\n\r\n private _gazeColor: Color3 = new Color3(0.7, 0.7, 0.7);\r\n private _laserColor: Color3 = new Color3(0.7, 0.7, 0.7);\r\n private _pickedLaserColor: Color3 = new Color3(0.2, 0.2, 1);\r\n private _pickedGazeColor: Color3 = new Color3(0, 0, 1);\r\n\r\n /**\r\n * Observable raised when a new mesh is selected based on meshSelectionPredicate\r\n */\r\n public onNewMeshSelected = new Observable<AbstractMesh>();\r\n\r\n /**\r\n * Observable raised when a new mesh is selected based on meshSelectionPredicate.\r\n * This observable will provide the mesh and the controller used to select the mesh\r\n */\r\n public onMeshSelectedWithController = new Observable<{ mesh: AbstractMesh; controller: WebVRController }>();\r\n\r\n /**\r\n * Observable raised when a new mesh is picked based on meshSelectionPredicate\r\n */\r\n public onNewMeshPicked = new Observable<PickingInfo>();\r\n\r\n private _circleEase: CircleEase;\r\n\r\n /**\r\n * Observable raised before camera teleportation\r\n */\r\n public onBeforeCameraTeleport = new Observable<Vector3>();\r\n\r\n /**\r\n * Observable raised after camera teleportation\r\n */\r\n public onAfterCameraTeleport = new Observable<Vector3>();\r\n\r\n /**\r\n * Observable raised when current selected mesh gets unselected\r\n */\r\n public onSelectedMeshUnselected = new Observable<AbstractMesh>();\r\n\r\n private _raySelectionPredicate: (mesh: AbstractMesh) => boolean;\r\n\r\n /**\r\n * To be optionally changed by user to define custom ray selection\r\n */\r\n public raySelectionPredicate: (mesh: AbstractMesh) => boolean;\r\n\r\n /**\r\n * To be optionally changed by user to define custom selection logic (after ray selection)\r\n */\r\n public meshSelectionPredicate: (mesh: AbstractMesh) => boolean;\r\n\r\n /**\r\n * Set teleportation enabled. If set to false camera teleportation will be disabled but camera rotation will be kept.\r\n */\r\n public teleportationEnabled: boolean = true;\r\n\r\n private _defaultHeight: number;\r\n private _teleportationInitialized = false;\r\n private _interactionsEnabled = false;\r\n private _interactionsRequested = false;\r\n private _displayGaze = true;\r\n private _displayLaserPointer = true;\r\n\r\n /**\r\n * The mesh used to display where the user is going to teleport.\r\n */\r\n public get teleportationTarget(): Mesh {\r\n return this._teleportationTarget;\r\n }\r\n\r\n /**\r\n * Sets the mesh to be used to display where the user is going to teleport.\r\n */\r\n public set teleportationTarget(value: Mesh) {\r\n if (value) {\r\n value.name = \"teleportationTarget\";\r\n this._isDefaultTeleportationTarget = false;\r\n this._teleportationTarget = value;\r\n }\r\n }\r\n\r\n /**\r\n * The mesh used to display where the user is selecting, this mesh will be cloned and set as the gazeTracker for the left and right controller\r\n * when set bakeCurrentTransformIntoVertices will be called on the mesh.\r\n * See https://doc.babylonjs.com/resources/baking_transformations\r\n */\r\n public get gazeTrackerMesh(): Mesh {\r\n return this._cameraGazer._gazeTracker;\r\n }\r\n\r\n public set gazeTrackerMesh(value: Mesh) {\r\n if (value) {\r\n // Dispose of existing meshes\r\n if (this._cameraGazer._gazeTracker) {\r\n this._cameraGazer._gazeTracker.dispose();\r\n }\r\n if (this._leftController && this._leftController._gazeTracker) {\r\n this._leftController._gazeTracker.dispose();\r\n }\r\n if (this._rightController && this._rightController._gazeTracker) {\r\n this._rightController._gazeTracker.dispose();\r\n }\r\n\r\n // Set and create gaze trackers on head and controllers\r\n this._cameraGazer._gazeTracker = value;\r\n this._cameraGazer._gazeTracker.bakeCurrentTransformIntoVertices();\r\n this._cameraGazer._gazeTracker.isPickable = false;\r\n this._cameraGazer._gazeTracker.isVisible = false;\r\n this._cameraGazer._gazeTracker.name = \"gazeTracker\";\r\n if (this._leftController) {\r\n this._leftController._gazeTracker = this._cameraGazer._gazeTracker.clone(\"gazeTracker\") as Mesh;\r\n }\r\n\r\n if (this._rightController) {\r\n this._rightController._gazeTracker = this._cameraGazer._gazeTracker.clone(\"gazeTracker\") as Mesh;\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * If the gaze trackers scale should be updated to be constant size when pointing at near/far meshes\r\n */\r\n public updateGazeTrackerScale = true;\r\n /**\r\n * If the gaze trackers color should be updated when selecting meshes\r\n */\r\n public updateGazeTrackerColor = true;\r\n /**\r\n * If the controller laser color should be updated when selecting meshes\r\n */\r\n public updateControllerLaserColor = true;\r\n\r\n /**\r\n * The gaze tracking mesh corresponding to the left controller\r\n */\r\n public get leftControllerGazeTrackerMesh(): Nullable<Mesh> {\r\n if (this._leftController) {\r\n return this._leftController._gazeTracker;\r\n }\r\n return null;\r\n }\r\n\r\n /**\r\n * The gaze tracking mesh corresponding to the right controller\r\n */\r\n public get rightControllerGazeTrackerMesh(): Nullable<Mesh> {\r\n if (this._rightController) {\r\n return this._rightController._gazeTracker;\r\n }\r\n return null;\r\n }\r\n\r\n /**\r\n * If the ray of the gaze should be displayed.\r\n */\r\n public get displayGaze(): boolean {\r\n return this._displayGaze;\r\n }\r\n\r\n /**\r\n * Sets if the ray of the gaze should be displayed.\r\n */\r\n public set displayGaze(value: boolean) {\r\n this._displayGaze = value;\r\n if (!value) {\r\n this._cameraGazer._gazeTracker.isVisible = false;\r\n\r\n if (this._leftController) {\r\n this._leftController._gazeTracker.isVisible = false;\r\n }\r\n\r\n if (this._rightController) {\r\n this._rightController._gazeTracker.isVisible = false;\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * If the ray of the LaserPointer should be displayed.\r\n */\r\n public get displayLaserPointer(): boolean {\r\n return this._displayLaserPointer;\r\n }\r\n\r\n /**\r\n * Sets if the ray of the LaserPointer should be displayed.\r\n */\r\n public set displayLaserPointer(value: boolean) {\r\n this._displayLaserPointer = value;\r\n if (!value) {\r\n if (this._rightController) {\r\n this._rightController._deactivatePointer();\r\n this._rightController._gazeTracker.isVisible = false;\r\n }\r\n if (this._leftController) {\r\n this._leftController._deactivatePointer();\r\n this._leftController._gazeTracker.isVisible = false;\r\n }\r\n } else {\r\n if (this._rightController) {\r\n this._rightController._activatePointer();\r\n }\r\n if (this._leftController) {\r\n this._leftController._activatePointer();\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * The deviceOrientationCamera used as the camera when not in VR.\r\n */\r\n public get deviceOrientationCamera(): Nullable<DeviceOrientationCamera> {\r\n return this._deviceOrientationCamera;\r\n }\r\n\r\n /**\r\n * Based on the current WebVR support, returns the current VR camera used.\r\n */\r\n public get currentVRCamera(): Nullable<Camera> {\r\n if (this._webVRready) {\r\n return this._webVRCamera;\r\n } else {\r\n return this._scene.activeCamera;\r\n }\r\n }\r\n\r\n /**\r\n * The webVRCamera which is used when in VR.\r\n */\r\n public get webVRCamera(): WebVRFreeCamera {\r\n return this._webVRCamera;\r\n }\r\n\r\n /**\r\n * The deviceOrientationCamera that is used as a fallback when vr device is not connected.\r\n */\r\n public get vrDeviceOrientationCamera(): Nullable<VRDeviceOrientationFreeCamera> {\r\n return this._vrDeviceOrientationCamera;\r\n }\r\n\r\n /**\r\n * The html button that is used to trigger entering into VR.\r\n */\r\n public get vrButton(): Nullable<HTMLButtonElement> {\r\n return this._btnVR;\r\n }\r\n\r\n private get _teleportationRequestInitiated(): boolean {\r\n const result =\r\n this._cameraGazer._teleportationRequestInitiated ||\r\n (this._leftController !== null && this._leftController._teleportationRequestInitiated) ||\r\n (this._rightController !== null && this._rightController._teleportationRequestInitiated);\r\n return result;\r\n }\r\n\r\n /**\r\n * Defines whether or not Pointer lock should be requested when switching to\r\n * full screen.\r\n */\r\n public requestPointerLockOnFullScreen = true;\r\n\r\n // XR\r\n\r\n /**\r\n * If asking to force XR, this will be populated with the default xr experience\r\n */\r\n public xr: WebXRDefaultExperience;\r\n\r\n /**\r\n * Was the XR test done already. If this is true AND this.xr exists, xr is initialized.\r\n * If this is true and no this.xr, xr exists but is not supported, using WebVR.\r\n */\r\n public xrTestDone: boolean = false;\r\n\r\n /**\r\n * Instantiates a VRExperienceHelper.\r\n * Helps to quickly add VR support to an existing scene.\r\n * @param scene The scene the VRExperienceHelper belongs to.\r\n * @param webVROptions Options to modify the vr experience helper's behavior.\r\n */\r\n constructor(\r\n scene: Scene,\r\n /** Options to modify the vr experience helper's behavior. */\r\n public webVROptions: VRExperienceHelperOptions = {}\r\n ) {\r\n Logger.Warn(\"WebVR is deprecated. Please avoid using this experience helper and use the WebXR experience helper instead\");\r\n this._scene = scene;\r\n this._inputElement = scene.getEngine().getInputElement();\r\n\r\n // check for VR support:\r\n\r\n const vrSupported = \"getVRDisplays\" in navigator;\r\n // no VR support? force XR but only when it is not set because web vr can work without the getVRDisplays\r\n if (!vrSupported && webVROptions.useXR === undefined) {\r\n webVROptions.useXR = true;\r\n }\r\n\r\n // Parse options\r\n if (webVROptions.createFallbackVRDeviceOrientationFreeCamera === undefined) {\r\n webVROptions.createFallbackVRDeviceOrientationFreeCamera = true;\r\n }\r\n if (webVROptions.createDeviceOrientationCamera === undefined) {\r\n webVROptions.createDeviceOrientationCamera = true;\r\n }\r\n if (webVROptions.laserToggle === undefined) {\r\n webVROptions.laserToggle = true;\r\n }\r\n if (webVROptions.defaultHeight === undefined) {\r\n webVROptions.defaultHeight = 1.7;\r\n }\r\n if (webVROptions.useCustomVRButton) {\r\n this._useCustomVRButton = true;\r\n if (webVROptions.customVRButton) {\r\n this._btnVR = webVROptions.customVRButton;\r\n }\r\n }\r\n if (webVROptions.rayLength) {\r\n this._rayLength = webVROptions.rayLength;\r\n }\r\n this._defaultHeight = webVROptions.defaultHeight;\r\n\r\n if (webVROptions.positionScale) {\r\n this._rayLength *= webVROptions.positionScale;\r\n this._defaultHeight *= webVROptions.positionScale;\r\n }\r\n\r\n this._hasEnteredVR = false;\r\n\r\n // Set position\r\n if (this._scene.activeCamera) {\r\n this._position = this._scene.activeCamera.position.clone();\r\n } else {\r\n this._position = new Vector3(0, this._defaultHeight, 0);\r\n }\r\n\r\n // Set non-vr camera\r\n if (webVROptions.createDeviceOrientationCamera || !this._scene.activeCamera) {\r\n this._deviceOrientationCamera = new DeviceOrientationCamera(\"deviceOrientationVRHelper\", this._position.clone(), scene);\r\n\r\n // Copy data from existing camera\r\n if (this._scene.activeCamera) {\r\n this._deviceOrientationCamera.minZ = this._scene.activeCamera.minZ;\r\n this._deviceOrientationCamera.maxZ = this._scene.activeCamera.maxZ;\r\n // Set rotation from previous camera\r\n if (this._scene.activeCamera instanceof TargetCamera && this._scene.activeCamera.rotation) {\r\n const targetCamera = this._scene.activeCamera;\r\n if (targetCamera.rotationQuaternion) {\r\n this._deviceOrientationCamera.rotationQuaternion.copyFrom(targetCamera.rotationQuaternion);\r\n } else {\r\n this._deviceOrientationCamera.rotationQuaternion.copyFrom(\r\n Quaternion.RotationYawPitchRoll(targetCamera.rotation.y, targetCamera.rotation.x, targetCamera.rotation.z)\r\n );\r\n }\r\n this._deviceOrientationCamera.rotation = targetCamera.rotation.clone();\r\n }\r\n }\r\n\r\n this._scene.activeCamera = this._deviceOrientationCamera;\r\n if (this._inputElement) {\r\n this._scene.activeCamera.attachControl();\r\n }\r\n } else {\r\n this._existingCamera = this._scene.activeCamera;\r\n }\r\n\r\n if (this.webVROptions.useXR && (navigator as any).xr) {\r\n // force-check XR session support\r\n WebXRSessionManager.IsSessionSupportedAsync(\"immersive-vr\").then((supported) => {\r\n if (supported) {\r\n Logger.Log(\"Using WebXR. It is recommended to use the WebXRDefaultExperience directly\");\r\n // it is possible to use XR, let's do it!\r\n scene\r\n .createDefaultXRExperienceAsync({\r\n floorMeshes: webVROptions.floorMeshes || [],\r\n })\r\n .then((xr) => {\r\n this.xr = xr;\r\n // connect observables\r\n this.xrTestDone = true;\r\n\r\n this._cameraGazer = new VRExperienceHelperCameraGazer(() => {\r\n return this.xr.baseExperience.camera;\r\n }, scene);\r\n\r\n this.xr.baseExperience.onStateChangedObservable.add((state) => {\r\n // support for entering / exiting\r\n switch (state) {\r\n case WebXRState.ENTERING_XR:\r\n this.onEnteringVRObservable.notifyObservers(this);\r\n if (!this._interactionsEnabled) {\r\n this.xr.pointerSelection.detach();\r\n }\r\n this.xr.pointerSelection.displayLaserPointer = this._displayLaserPointer;\r\n break;\r\n case WebXRState.EXITING_XR:\r\n this.onExitingVRObservable.notifyObservers(this);\r\n\r\n // resize to update width and height when exiting vr exits fullscreen\r\n this._scene.getEngine().resize();\r\n break;\r\n case WebXRState.IN_XR:\r\n this._hasEnteredVR = true;\r\n break;\r\n case WebXRState.NOT_IN_XR:\r\n this._hasEnteredVR = false;\r\n break;\r\n }\r\n });\r\n });\r\n } else {\r\n // XR not supported (thou exists), continue WebVR init\r\n this._completeVRInit(scene, webVROptions);\r\n }\r\n });\r\n } else {\r\n // no XR, continue init synchronous\r\n this._completeVRInit(scene, webVROptions);\r\n }\r\n }\r\n\r\n private _completeVRInit(scene: Scene, webVROptions: VRExperienceHelperOptions): void {\r\n this.xrTestDone = true;\r\n // Create VR cameras\r\n if (webVROptions.createFallbackVRDeviceOrientationFreeCamera) {\r\n if (webVROptions.useMultiview) {\r\n if (!webVROptions.vrDeviceOrientationCameraMetrics) {\r\n webVROptions.vrDeviceOrientationCameraMetrics = VRCameraMetrics.GetDefault();\r\n }\r\n webVROptions.vrDeviceOrientationCameraMetrics.multiviewEnabled = true;\r\n }\r\n this._vrDeviceOrientationCamera = new VRDeviceOrientationFreeCamera(\r\n \"VRDeviceOrientationVRHelper\",\r\n this._position,\r\n this._scene,\r\n true,\r\n webVROptions.vrDeviceOrientationCameraMetrics\r\n );\r\n this._vrDeviceOrientationCamera.angularSensibility = Number.MAX_VALUE;\r\n }\r\n this._webVRCamera = new WebVRFreeCamera(\"WebVRHelper\", this._position, this._scene, webVROptions);\r\n this._webVRCamera.useStandingMatrix();\r\n\r\n this._cameraGazer = new VRExperienceHelperCameraGazer(() => {\r\n return this.currentVRCamera;\r\n }, scene);\r\n // Create default button\r\n if (!this._useCustomVRButton) {\r\n this._btnVR = <HTMLButtonElement>document.createElement(\"BUTTON\");\r\n this._btnVR.className = \"babylonVRicon\";\r\n this._btnVR.id = \"babylonVRiconbtn\";\r\n this._btnVR.title = \"Click to switch to VR\";\r\n const url = !window.SVGSVGElement\r\n ? \"https://cdn.babylonjs.com/Assets/vrButton.png\"\r\n : \"data:image/svg+xml;charset=UTF-8,%3Csvg%20xmlns%3D%22http%3A//www.w3.org/2000/svg%22%20width%3D%222048%22%20height%3D%221152%22%20viewBox%3D%220%200%202048%201152%22%20version%3D%221.1%22%3E%3Cpath%20transform%3D%22rotate%28180%201024%2C576.0000000000001%29%22%20d%3D%22m1109%2C896q17%2C0%2030%2C-12t13%2C-30t-12.5%2C-30.5t-30.5%2C-12.5l-170%2C0q-18%2C0%20-30.5%2C12.5t-12.5%2C30.5t13%2C30t30%2C12l170%2C0zm-85%2C256q59%2C0%20132.5%2C-1.5t154.5%2C-5.5t164.5%2C-11.5t163%2C-20t150%2C-30t124.5%2C-41.5q23%2C-11%2042%2C-24t38%2C-30q27%2C-25%2041%2C-61.5t14%2C-72.5l0%2C-257q0%2C-123%20-47%2C-232t-128%2C-190t-190%2C-128t-232%2C-47l-81%2C0q-37%2C0%20-68.5%2C14t-60.5%2C34.5t-55.5%2C45t-53%2C45t-53%2C34.5t-55.5%2C14t-55.5%2C-14t-53%2C-34.5t-53%2C-45t-55.5%2C-45t-60.5%2C-34.5t-68.5%2C-14l-81%2C0q-123%2C0%20-232%2C47t-190%2C128t-128%2C190t-47%2C232l0%2C257q0%2C68%2038%2C115t97%2C73q54%2C24%20124.5%2C41.5t150%2C30t163%2C20t164.5%2C11.5t154.5%2C5.5t132.5%2C1.5zm939%2C-298q0%2C39%20-24.5%2C67t-58.5%2C42q-54%2C23%20-122%2C39.5t-143.5%2C28t-155.5%2C19t-157%2C11t-148.5%2C5t-129.5%2C1.5q-59%2C0%20-130%2C-1.5t-148%2C-5t-157%2C-11t-155.5%2C-19t-143.5%2C-28t-122%2C-39.5q-34%2C-14%20-58.5%2C-42t-24.5%2C-67l0%2C-257q0%2C-106%2040.5%2C-199t110%2C-162.5t162.5%2C-109.5t199%2C-40l81%2C0q27%2C0%2052%2C14t50%2C34.5t51%2C44.5t55.5%2C44.5t63.5%2C34.5t74%2C14t74%2C-14t63.5%2C-34.5t55.5%2C-44.5t51%2C-44.5t50%2C-34.5t52%2C-14l14%2C0q37%2C0%2070%2C0.5t64.5%2C4.5t63.5%2C12t68%2C23q71%2C30%20128.5%2C78.5t98.5%2C110t63.5%2C133.5t22.5%2C149l0%2C257z%22%20fill%3D%22white%22%20/%3E%3C/svg%3E%0A\";\r\n let css =\r\n \".babylonVRicon { position: absolute; right: 20px; height: 50px; width: 80px; background-color: rgba(51,51,51,0.7); background-image: url(\" +\r\n url +\r\n \"); background-size: 80%; background-repeat:no-repeat; background-position: center; border: none; outline: none; transition: transform 0.125s ease-out } .babylonVRicon:hover { transform: scale(1.05) } .babylonVRicon:active {background-color: rgba(51,51,51,1) } .babylonVRicon:focus {background-color: rgba(51,51,51,1) }\";\r\n css += \".babylonVRicon.vrdisplaypresenting { display: none; }\";\r\n // TODO: Add user feedback so that they know what state the VRDisplay is in (disconnected, connected, entering-VR)\r\n // css += \".babylonVRicon.vrdisplaysupported { }\";\r\n // css += \".babylonVRicon.vrdisplayready { }\";\r\n // css += \".babylonVRicon.vrdisplayrequesting { }\";\r\n\r\n const style = document.createElement(\"style\");\r\n style.appendChild(document.createTextNode(css));\r\n document.getElementsByTagName(\"head\")[0].appendChild(style);\r\n\r\n this._moveButtonToBottomRight();\r\n }\r\n\r\n // VR button click event\r\n if (this._btnVR) {\r\n this._btnVR.addEventListener(\"click\", () => {\r\n if (!this.isInVRMode) {\r\n this.enterVR();\r\n } else {\r\n this._scene.getEngine().disableVR();\r\n }\r\n });\r\n }\r\n\r\n // Window events\r\n\r\n const hostWindow = this._scene.getEngine().getHostWindow();\r\n if (!hostWindow) {\r\n return;\r\n }\r\n\r\n hostWindow.addEventListener(\"resize\", this._onResize);\r\n document.addEventListener(\"fullscreenchange\", this._onFullscreenChange, false);\r\n\r\n // Display vr button when headset is connected\r\n if (webVROptions.createFallbackVRDeviceOrientationFreeCamera) {\r\n this._displayVRButton();\r\n } else {\r\n this._scene.getEngine().onVRDisplayChangedObservable.add((e) => {\r\n if (e.vrDisplay) {\r\n this._displayVRButton();\r\n }\r\n });\r\n }\r\n\r\n // Exiting VR mode using 'ESC' key on desktop\r\n this._onKeyDown = (event: KeyboardEvent) => {\r\n if (event.keyCode === 27 && this.isInVRMode) {\r\n this.exitVR();\r\n }\r\n };\r\n document.addEventListener(\"keydown\", this._onKeyDown);\r\n\r\n // Exiting VR mode double tapping the touch screen\r\n this._scene.onPrePointerObservable.add(\r\n () => {\r\n if (this._hasEnteredVR && this.exitVROnDoubleTap) {\r\n this.exitVR();\r\n if (this._fullscreenVRpresenting) {\r\n this._scene.getEngine().exitFullscreen();\r\n }\r\n }\r\n },\r\n PointerEventTypes.POINTERDOUBLETAP,\r\n false\r\n );\r\n\r\n // Listen for WebVR display changes\r\n this._onVRDisplayChangedBind = (eventArgs: IDisplayChangedEventArgs) => this._onVRDisplayChanged(eventArgs);\r\n this._onVrDisplayPresentChangeBind = () => this._onVrDisplayPresentChange();\r\n this._onVRRequestPresentStart = () => {\r\n this._webVRrequesting = true;\r\n this._updateButtonVisibility();\r\n };\r\n this._onVRRequestPresentComplete = () => {\r\n this._webVRrequesting = false;\r\n this._updateButtonVisibility();\r\n };\r\n scene.getEngine().onVRDisplayChangedObservable.add(this._onVRDisplayChangedBind);\r\n scene.getEngine().onVRRequestPresentStart.add(this._onVRRequestPresentStart);\r\n scene.getEngine().onVRRequestPresentComplete.add(this._onVRRequestPresentComplete);\r\n hostWindow.addEventListener(\"vrdisplaypresentchange\", this._onVrDisplayPresentChangeBind);\r\n\r\n scene.onDisposeObservable.add(() => {\r\n this.dispose();\r\n });\r\n\r\n // Gamepad connection events\r\n this._webVRCamera.onControllerMeshLoadedObservable.add((webVRController) => this._onDefaultMeshLoaded(webVRController));\r\n this._scene.gamepadManager.onGamepadConnectedObservable.add(this._onNewGamepadConnected);\r\n this._scene.gamepadManager.onGamepadDisconnectedObservable.add(this._onNewGamepadDisconnected);\r\n\r\n this._updateButtonVisibility();\r\n\r\n //create easing functions\r\n this._circleEase = new CircleEase();\r\n this._circleEase.setEasingMode(EasingFunction.EASINGMODE_EASEINOUT);\r\n this._teleportationEasing = this._circleEase;\r\n\r\n // Allow clicking in the vrDeviceOrientationCamera\r\n scene.onPointerObservable.add((e) => {\r\n if (this._interactionsEnabled) {\r\n if (scene.activeCamera === this.vrDeviceOrientationCamera && (e.event as IPointerEvent).pointerType === \"mouse\") {\r\n if (e.type === PointerEventTypes.POINTERDOWN) {\r\n this._cameraGazer._selectionPointerDown();\r\n } else if (e.type === PointerEventTypes.POINTERUP) {\r\n this._cameraGazer._selectionPointerUp();\r\n }\r\n }\r\n }\r\n });\r\n\r\n if (this.webVROptions.floorMeshes) {\r\n this.enableTeleportation({ floorMeshes: this.webVROptions.floorMeshes });\r\n }\r\n }\r\n\r\n // Raised when one of the controller has loaded successfully its associated default mesh\r\n private _onDefaultMeshLoaded(webVRController: WebVRController) {\r\n if (this._leftController && this._leftController.webVRController == webVRController) {\r\n if (webVRController.mesh) {\r\n this._leftController._setLaserPointerParent(webVRController.mesh);\r\n }\r\n }\r\n if (this._rightController && this._rightController.webVRController == webVRController) {\r\n if (webVRController.mesh) {\r\n this._rightController._setLaserPointerParent(webVRController.mesh);\r\n }\r\n }\r\n\r\n try {\r\n this.onControllerMeshLoadedObservable.notifyObservers(webVRController);\r\n } catch (err) {\r\n Logger.Warn(\"Error in your custom logic onControllerMeshLoaded: \" + err);\r\n }\r\n }\r\n\r\n private _onResize = () => {\r\n this._moveButtonToBottomRight();\r\n if (this._fullscreenVRpresenting && this._webVRready) {\r\n this.exitVR();\r\n }\r\n };\r\n\r\n private _onFullscreenChange = () => {\r\n this._fullscreenVRpresenting = !!document.fullscreenElement;\r\n if (!this._fullscreenVRpresenting && this._inputElement) {\r\n this.exitVR();\r\n if (!this._useCustomVRButton && this._btnVR) {\r\n this._btnVR.style.top = this._inputElement.offsetTop + this._inputElement.offsetHeight - 70 + \"px\";\r\n this._btnVR.style.left = this._inputElement.offsetLeft + this._inputElement.offsetWidth - 100 + \"px\";\r\n // make sure the button is visible after setting its position\r\n this._updateButtonVisibility();\r\n }\r\n }\r\n };\r\n\r\n /**\r\n * Gets a value indicating if we are currently in VR mode.\r\n */\r\n public get isInVRMode(): boolean {\r\n return (this.xr && this.webVROptions.useXR && this.xr.baseExperience.state === WebXRState.IN_XR) || this._webVRpresenting || this._fullscreenVRpresenting;\r\n }\r\n\r\n private _onVrDisplayPresentChange() {\r\n const vrDisplay = this._scene.getEngine().getVRDevice();\r\n if (vrDisplay) {\r\n const wasPresenting = this._webVRpresenting;\r\n this._webVRpresenting = vrDisplay.isPresenting;\r\n\r\n if (wasPresenting && !this._webVRpresenting) {\r\n this.exitVR();\r\n }\r\n } else {\r\n Logger.Warn(\"Detected VRDisplayPresentChange on an unknown VRDisplay. Did you can enterVR on the vrExperienceHelper?\");\r\n }\r\n\r\n this._updateButtonVisibility();\r\n }\r\n\r\n private _onVRDisplayChanged(eventArgs: IDisplayChangedEventArgs) {\r\n this._webVRsupported = eventArgs.vrSupported;\r\n this._webVRready = !!eventArgs.vrDisplay;\r\n this._webVRpresenting = eventArgs.vrDisplay && eventArgs.vrDisplay.isPresenting;\r\n\r\n this._updateButtonVisibility();\r\n }\r\n\r\n private _moveButtonToBottomRight() {\r\n if (this._inputElement && !this._useCustomVRButton && this._btnVR) {\r\n const rect: ClientRect = this._inputElement.getBoundingClientRect();\r\n this._btnVR.style.top = rect.top + rect.height - 70 + \"px\";\r\n this._btnVR.style.left = rect.left + rect.width - 100 + \"px\";\r\n }\r\n }\r\n\r\n private _displayVRButton() {\r\n if (!this._useCustomVRButton && !this._btnVRDisplayed && this._btnVR) {\r\n document.body.appendChild(this._btnVR);\r\n this._btnVRDisplayed = true;\r\n }\r\n }\r\n\r\n private _updateButtonVisibility() {\r\n if (!this._btnVR || this._useCustomVRButton) {\r\n return;\r\n }\r\n this._btnVR.className = \"babylonVRicon\";\r\n if (this.isInVRMode) {\r\n this._btnVR.className += \" vrdisplaypresenting\";\r\n } else {\r\n if (this._webVRready) {\r\n this._btnVR.className += \" vrdisplayready\";\r\n }\r\n if (this._webVRsupported) {\r\n this._btnVR.className += \" vrdisplaysupported\";\r\n }\r\n if (this._webVRrequesting) {\r\n this._btnVR.className += \" vrdisplayrequesting\";\r\n }\r\n }\r\n }\r\n\r\n private _cachedAngularSensibility = { angularSensibilityX: null, angularSensibilityY: null, angularSensibility: null };\r\n /**\r\n * Attempt to enter VR. If a headset is connected and ready, will request present on that.\r\n * Otherwise, will use the fullscreen API.\r\n */\r\n public enterVR() {\r\n if (this.xr) {\r\n this.xr.baseExperience.enterXRAsync(\"immersive-vr\", \"local-floor\", this.xr.renderTarget);\r\n return;\r\n }\r\n if (this.onEnteringVRObservable) {\r\n try {\r\n this.onEnteringVRObservable.notifyObservers(this);\r\n } catch (err) {\r\n Logger.Warn(\"Error in your custom logic onEnteringVR: \" + err);\r\n }\r\n }\r\n\r\n if (this._scene.activeCamera) {\r\n this._position = this._scene.activeCamera.position.clone();\r\n\r\n if (this.vrDeviceOrientationCamera) {\r\n this.vrDeviceOrientationCamera.rotation = Quaternion.FromRotationMatrix(this._scene.activeCamera.getWorldMatrix().getRotationMatrix()).toEulerAngles();\r\n this.vrDeviceOrientationCamera.angularSensibility = 2000;\r\n }\r\n if (this.webVRCamera) {\r\n const currentYRotation = this.webVRCamera.deviceRotationQuaternion.toEulerAngles().y;\r\n const desiredYRotation = Quaternion.FromRotationMatrix(this._scene.activeCamera.getWorldMatrix().getRotationMatrix()).toEulerAngles().y;\r\n const delta = desiredYRotation - currentYRotation;\r\n const currentGlobalRotation = this.webVRCamera.rotationQuaternion.toEulerAngles().y;\r\n this.webVRCamera.rotationQuaternion = Quaternion.FromEulerAngles(0, currentGlobalRotation + delta, 0);\r\n }\r\n\r\n // make sure that we return to the last active camera\r\n this._existingCamera = this._scene.activeCamera;\r\n\r\n // Remove and cache angular sensability to avoid camera rotation when in VR\r\n if ((<any>this._existingCamera).angularSensibilityX) {\r\n this._cachedAngularSensibility.angularSensibilityX = (<any>this._existingCamera).angularSensibilityX;\r\n (<any>this._existingCamera).angularSensibilityX = Number.MAX_VALUE;\r\n }\r\n if ((<any>this._existingCamera).angularSensibilityY) {\r\n this._cachedAngularSensibility.angularSensibilityY = (<any>this._existingCamera).angularSensibilityY;\r\n (<any>this._existingCamera).angularSensibilityY = Number.MAX_VALUE;\r\n }\r\n if ((<any>this._existingCamera).angularSensibility) {\r\n this._cachedAngularSensibility.angularSensibility = (<any>this._existingCamera).angularSensibility;\r\n (<any>this._existingCamera).angularSensibility = Number.MAX_VALUE;\r\n }\r\n }\r\n\r\n if (this._webVRrequesting) {\r\n return;\r\n }\r\n\r\n // If WebVR is supported and a headset is connected\r\n if (this._webVRready) {\r\n if (!this._webVRpresenting) {\r\n this._scene.getEngine().onVRRequestPresentComplete.addOnce((result) => {\r\n this.onAfterEnteringVRObservable.notifyObservers({ success: result });\r\n });\r\n this._webVRCamera.position = this._position;\r\n this._scene.activeCamera = this._webVRCamera;\r\n }\r\n } else if (this._vrDeviceOrientationCamera) {\r\n this._vrDeviceOrientationCamera.position = this._position;\r\n if (this._scene.activeCamera) {\r\n this._vrDeviceOrientationCamera.minZ = this._scene.activeCamera.minZ;\r\n }\r\n this._scene.activeCamera = this._vrDeviceOrientationCamera;\r\n this._scene.getEngine().enterFullscreen(this.requestPointerLockOnFullScreen);\r\n this._updateButtonVisibility();\r\n this._vrDeviceOrientationCamera.onViewMatrixChangedObservable.addOnce(() => {\r\n this.onAfterEnteringVRObservable.notifyObservers({ success: true });\r\n });\r\n }\r\n\r\n if (this._scene.activeCamera && this._inputElement) {\r\n this._scene.activeCamera.attachControl();\r\n }\r\n\r\n if (this._interactionsEnabled) {\r\n this._scene.registerBeforeRender(this._beforeRender);\r\n }\r\n\r\n if (this._displayLaserPointer) {\r\n [this._leftController, this._rightController].forEach((controller) => {\r\n if (controller) {\r\n controller._activatePointer();\r\n }\r\n });\r\n }\r\n\r\n this._hasEnteredVR = true;\r\n }\r\n\r\n /**\r\n * Attempt to exit VR, or fullscreen.\r\n */\r\n public exitVR() {\r\n if (this.xr) {\r\n this.xr.baseExperience.exitXRAsync();\r\n return;\r\n }\r\n if (this._hasEnteredVR) {\r\n if (this.onExitingVRObservable) {\r\n try {\r\n this.onExitingVRObservable.notifyObservers(this);\r\n } catch (err) {\r\n Logger.Warn(\"Error in your custom logic onExitingVR: \" + err);\r\n }\r\n }\r\n if (this._webVRpresenting) {\r\n this._scene.getEngine().disableVR();\r\n }\r\n if (this._scene.activeCamera) {\r\n this._position = this._scene.activeCamera.position.clone();\r\n }\r\n\r\n if (this.vrDeviceOrientationCamera) {\r\n this.vrDeviceOrientationCamera.angularSensibility = Number.MAX_VALUE;\r\n }\r\n\r\n if (this._deviceOrientationCamera) {\r\n this._deviceOrientationCamera.position = this._position;\r\n this._scene.activeCamera = this._deviceOrientationCamera;\r\n\r\n // Restore angular sensibility\r\n if (this._cachedAngularSensibility.angularSensibilityX) {\r\n (<any>this._deviceOrientationCamera).angularSensibilityX = this._cachedAngularSensibility.angularSensibilityX;\r\n this._cachedAngularSensibility.angularSensibilityX = null;\r\n }\r\n if (this._cachedAngularSensibility.angularSensibilityY) {\r\n (<any>this._deviceOrientationCamera).angularSensibilityY = this._cachedAngularSensibility.angularSensibilityY;\r\n this._cachedAngularSensibility.angularSensibilityY = null;\r\n }\r\n if (this._cachedAngularSensibility.angularSensibility) {\r\n (<any>this._deviceOrientationCamera).angularSensibility = this._cachedAngularSensibility.angularSensibility;\r\n this._cachedAngularSensibility.angularSensibility = null;\r\n }\r\n } else if (this._existingCamera) {\r\n this._existingCamera.position = this._position;\r\n this._scene.activeCamera = this._existingCamera;\r\n if (this._inputElement) {\r\n this._scene.activeCamera.attachControl();\r\n }\r\n\r\n // Restore angular sensibility\r\n if (this._cachedAngularSensibility.angularSensibilityX) {\r\n (<any>this._existingCamera).angularSensibilityX = this._cachedAngularSensibility.angularSensibilityX;\r\n this._cachedAngularSensibility.angularSensibilityX = null;\r\n }\r\n if (this._cachedAngularSensibility.angularSensibilityY) {\r\n (<any>this._existingCamera).angularSensibilityY = this._cachedAngularSensibility.angularSensibilityY;\r\n this._cachedAngularSensibility.angularSensibilityY = null;\r\n }\r\n if (this._cachedAngularSensibility.angularSensibility) {\r\n (<any>this._existingCamera).angularSensibility = this._cachedAngularSensibility.angularSensibility;\r\n this._cachedAngularSensibility.angularSensibility = null;\r\n }\r\n }\r\n\r\n this._updateButtonVisibility();\r\n\r\n if (this._interactionsEnabled) {\r\n this._scene.unregisterBeforeRender(this._beforeRender);\r\n this._cameraGazer._gazeTracker.isVisible = false;\r\n if (this._leftController) {\r\n this._leftController._gazeTracker.isVisible = false;\r\n }\r\n if (this._rightController) {\r\n this._rightController._gazeTracker.isVisible = false;\r\n }\r\n }\r\n\r\n // resize to update width and height when exiting vr exits fullscreen\r\n this._scene.getEngine().resize();\r\n\r\n [this._leftController, this._rightController].forEach((controller) => {\r\n if (controller) {\r\n controller._deactivatePointer();\r\n }\r\n });\r\n\r\n this._hasEnteredVR = false;\r\n\r\n // Update engine state to re enable non-vr camera input\r\n const engine = this._scene.getEngine();\r\n if (engine._onVrDisplayPresentChange) {\r\n engine._onVrDisplayPresentChange();\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * The position of the vr experience helper.\r\n */\r\n public get position(): Vector3 {\r\n return this._position;\r\n }\r\n\r\n /**\r\n * Sets the position of the vr experience helper.\r\n */\r\n public set position(value: Vector3) {\r\n this._position = value;\r\n\r\n if (this._scene.activeCamera) {\r\n this._scene.activeCamera.position = value;\r\n }\r\n }\r\n\r\n /**\r\n * Enables controllers and user interactions such as selecting and object or clicking on an object.\r\n */\r\n public enableInteractions() {\r\n if (!this._interactionsEnabled) {\r\n this._interactionsRequested = true;\r\n\r\n // in XR it is enabled by default, but just to make sure, re-attach\r\n if (this.xr) {\r\n if (this.xr.baseExperience.state === WebXRState.IN_XR) {\r\n this.xr.pointerSelection.attach();\r\n }\r\n return;\r\n }\r\n\r\n if (this._leftController) {\r\n this._enableInteractionOnController(this._leftController);\r\n }\r\n\r\n if (this._rightController) {\r\n this._enableInteractionOnController(this._rightController);\r\n }\r\n\r\n this.raySelectionPredicate = (mesh) => {\r\n return mesh.isVisible && (mesh.isPickable || mesh.name === this._floorMeshName);\r\n };\r\n\r\n this.meshSelectionPredicate = () => {\r\n return true;\r\n };\r\n\r\n this._raySelectionPredicate = (mesh) => {\r\n if (\r\n this._isTeleportationFloor(mesh) ||\r\n (mesh.name.indexOf(\"gazeTracker\") === -1 && mesh.name.indexOf(\"teleportationTarget\") === -1 && mesh.name.indexOf(\"torusTeleportation\") === -1)\r\n ) {\r\n return this.raySelectionPredicate(mesh);\r\n }\r\n return false;\r\n };\r\n\r\n this._interactionsEnabled = true;\r\n }\r\n }\r\n\r\n private get _noControllerIsActive() {\r\n return !(this._leftController && this._leftController._activePointer) && !(this._rightController && this._rightController._activePointer);\r\n }\r\n\r\n private _beforeRender = () => {\r\n if (this._leftController && this._leftController._activePointer) {\r\n this._castRayAndSelectObject(this._leftController);\r\n }\r\n\r\n if (this._rightController && this._rightController._activePointer) {\r\n this._castRayAndSelectObject(this._rightController);\r\n }\r\n\r\n if (this._noControllerIsActive && (this._scene.getEngine().isPointerLock || this.enableGazeEvenWhenNoPointerLock)) {\r\n this._castRayAndSelectObject(this._cameraGazer);\r\n } else {\r\n this._cameraGazer._gazeTracker.isVisible = false;\r\n }\r\n };\r\n\r\n private _isTeleportationFloor(mesh: AbstractMesh): boolean {\r\n for (let i = 0; i < this._floorMeshesCollection.length; i++) {\r\n if (this._floorMeshesCollection[i].id === mesh.id) {\r\n return true;\r\n }\r\n }\r\n if (this._floorMeshName && mesh.name === this._floorMeshName) {\r\n return true;\r\n }\r\n return false;\r\n }\r\n\r\n /**\r\n * Adds a floor mesh to be used for teleportation.\r\n * @param floorMesh the mesh to be used for teleportation.\r\n */\r\n public addFloorMesh(floorMesh: Mesh): void {\r\n if (!this._floorMeshesCollection) {\r\n return;\r\n }\r\n\r\n if (this._floorMeshesCollection.indexOf(floorMesh) > -1) {\r\n return;\r\n }\r\n\r\n this._floorMeshesCollection.push(floorMesh);\r\n }\r\n\r\n /**\r\n * Removes a floor mesh from being used for teleportation.\r\n * @param floorMesh the mesh to be removed.\r\n */\r\n public removeFloorMesh(floorMesh: Mesh): void {\r\n if (!this._floorMeshesCollection) {\r\n return;\r\n }\r\n\r\n const meshIndex = this._floorMeshesCollection.indexOf(floorMesh);\r\n if (meshIndex !== -1) {\r\n this._floorMeshesCollection.splice(meshIndex, 1);\r\n }\r\n }\r\n\r\n /**\r\n * Enables interactions and teleportation using the VR controllers and gaze.\r\n * @param vrTeleportationOptions options to modify teleportation behavior.\r\n */\r\n public enableTeleportation(vrTeleportationOptions: VRTeleportationOptions = {}) {\r\n if (!this._teleportationInitialized) {\r\n this._teleportationRequested = true;\r\n\r\n this.enableInteractions();\r\n\r\n if (this.webVROptions.useXR && (vrTeleportationOptions.floorMeshes || vrTeleportationOptions.floorMeshName)) {\r\n const floorMeshes: AbstractMesh[] = vrTeleportationOptions.floorMeshes || [];\r\n if (!floorMeshes.length) {\r\n const floorMesh = this._scene.getMeshByName(vrTeleportationOptions.floorMeshName!);\r\n if (floorMesh) {\r\n floorMeshes.push(floorMesh);\r\n }\r\n }\r\n if (this.xr) {\r\n floorMeshes.forEach((mesh) => {\r\n this.xr.teleportation.addFloorMesh(mesh);\r\n });\r\n if (!this.xr.teleportation.attached) {\r\n this.xr.teleportation.attach();\r\n }\r\n return;\r\n } else if (!this.xrTestDone) {\r\n const waitForXr = () => {\r\n if (this.xrTestDone) {\r\n this._scene.unregisterBeforeRender(waitForXr);\r\n if (this.xr) {\r\n if (!this.xr.teleportation.attached) {\r\n this.xr.teleportation.attach();\r\n }\r\n } else {\r\n this.enableTeleportation(vrTeleportationOptions);\r\n }\r\n }\r\n };\r\n this._scene.registerBeforeRender(waitForXr);\r\n return;\r\n }\r\n }\r\n\r\n if (vrTeleportationOptions.floorMeshName) {\r\n this._floorMeshName = vrTeleportationOptions.floorMeshName;\r\n }\r\n if (vrTeleportationOptions.floorMeshes) {\r\n this._floorMeshesCollection = vrTeleportationOptions.floorMeshes;\r\n }\r\n\r\n if (vrTeleportationOptions.teleportationMode) {\r\n this._teleportationMode = vrTeleportationOptions.teleportationMode;\r\n }\r\n if (vrTeleportationOptions.teleportationTime && vrTeleportationOptions.teleportationTime > 0) {\r\n this._teleportationTime = vrTeleportationOptions.teleportationTime;\r\n }\r\n if (vrTeleportationOptions.teleportationSpeed && vrTeleportationOptions.teleportationSpeed > 0) {\r\n this._teleportationSpeed = vrTeleportationOptions.teleportationSpeed;\r\n }\r\n if (vrTeleportationOptions.easingFunction !== undefined) {\r\n this._teleportationEasing = vrTeleportationOptions.easingFunction;\r\n }\r\n\r\n if (this._leftController != null) {\r\n this._enableTeleportationOnController(this._leftController);\r\n }\r\n if (this._rightController != null) {\r\n this._enableTeleportationOnController(this._rightController);\r\n }\r\n\r\n // Creates an image processing post process for the vignette not relying\r\n // on the main scene configuration for image processing to reduce setup and spaces\r\n // (gamma/linear) conflicts.\r\n const imageProcessingConfiguration = new ImageProcessingConfiguration();\r\n imageProcessingConfiguration.vignetteColor = new Color4(0, 0, 0, 0);\r\n imageProcessingConfiguration.vignetteEnabled = true;\r\n this._postProcessMove = new ImageProcessingPostProcess(\r\n \"postProcessMove\",\r\n 1.0,\r\n this._webVRCamera,\r\n undefined,\r\n undefined,\r\n undefined,\r\n undefined,\r\n imageProcessingConfiguration\r\n );\r\n\r\n this._webVRCamera.detachPostProcess(this._postProcessMove);\r\n this._teleportationInitialized = true;\r\n if (this._isDefaultTeleportationTarget) {\r\n this._createTeleportationCircles();\r\n this._teleportationTarget.scaling.scaleInPlace(this._webVRCamera.deviceScaleFactor);\r\n }\r\n }\r\n }\r\n\r\n private _onNewGamepadConnected = (gamepad: Gamepad) => {\r\n if (gamepad.type !== Gamepad.POSE_ENABLED) {\r\n if (gamepad.leftStick) {\r\n gamepad.onleftstickchanged((stickValues) => {\r\n if (this._teleportationInitialized && this.teleportationEnabled) {\r\n // Listening to classic/xbox gamepad only if no VR controller is active\r\n if (\r\n (!this._leftController && !this._rightController) ||\r\n (this._leftController && !this._leftController._activePointer && this._rightController && !this._rightController._activePointer)\r\n ) {\r\n this._checkTeleportWithRay(stickValues, this._cameraGazer);\r\n this._checkTeleportBackwards(stickValues, this._cameraGazer);\r\n }\r\n }\r\n });\r\n }\r\n if (gamepad.rightStick) {\r\n gamepad.onrightstickchanged((stickValues) => {\r\n if (this._teleportationInitialized) {\r\n this._checkRotate(stickValues, this._cameraGazer);\r\n }\r\n });\r\n }\r\n if (gamepad.type === Gamepad.XBOX) {\r\n (<Xbox360Pad>gamepad).onbuttondown((buttonPressed: Xbox360Button) => {\r\n if (this._interactionsEnabled && buttonPressed === Xbox360Button.A) {\r\n this._cameraGazer._selectionPointerDown();\r\n }\r\n });\r\n (<Xbox360Pad>gamepad).onbuttonup((buttonPressed: Xbox360Button) => {\r\n if (this._interactionsEnabled && buttonPressed === Xbox360Button.A) {\r\n this._cameraGazer._selectionPointerUp();\r\n }\r\n });\r\n }\r\n } else {\r\n const webVRController = <WebVRController>gamepad;\r\n const controller = new VRExperienceHelperControllerGazer(webVRController, this._scene, this._cameraGazer._gazeTracker);\r\n\r\n if (webVRController.hand === \"right\" || (this._leftController && this._leftController.webVRController != webVRController)) {\r\n this._rightController = controller;\r\n } else {\r\n this._leftController = controller;\r\n }\r\n\r\n this._tryEnableInteractionOnController(controller);\r\n }\r\n };\r\n\r\n // This only succeeds if the controller's mesh exists for the controller so this must be called whenever new controller is connected or when mesh is loaded\r\n private _tryEnableInteractionOnController = (controller: VRExperienceHelperControllerGazer) => {\r\n if (this._interactionsRequested && !controller._interactionsEnabled) {\r\n this._enableInteractionOnController(controller);\r\n }\r\n if (this._teleportationRequested && !controller._teleportationEnabled) {\r\n this._enableTeleportationOnController(controller);\r\n }\r\n };\r\n\r\n private _onNewGamepadDisconnected = (gamepad: Gamepad) => {\r\n if (gamepad instanceof WebVRController) {\r\n if (gamepad.hand === \"left\" && this._leftController != null) {\r\n this._leftController.dispose();\r\n this._leftController = null;\r\n }\r\n if (gamepad.hand === \"right\" && this._rightController != null) {\r\n this._rightController.dispose();\r\n this._rightController = null;\r\n }\r\n }\r\n };\r\n\r\n private _enableInteractionOnController(controller: VRExperienceHelperControllerGazer) {\r\n const controllerMesh = controller.webVRController.mesh;\r\n if (controllerMesh) {\r\n controller._interactionsEnabled = true;\r\n if (this.isInVRMode && this._displayLaserPointer) {\r\n controller._activatePointer();\r\n }\r\n if (this.webVROptions.laserToggle) {\r\n controller.webVRController.onMainButtonStateChangedObservable.add((stateObject) => {\r\n // Enabling / disabling laserPointer\r\n if (this._displayLaserPointer && stateObject.value === 1) {\r\n if (controller._activePointer) {\r\n controller._deactivatePointer();\r\n } else {\r\n controller._activatePointer();\r\n }\r\n if (this.displayGaze) {\r\n controller._gazeTracker.isVisible = controller._activePointer;\r\n }\r\n }\r\n });\r\n }\r\n controller.webVRController.onTriggerStateChangedObservable.add((stateObject) => {\r\n let gazer: VRExperienceHelperGazer = controller;\r\n if (this._noControllerIsActive) {\r\n gazer = this._cameraGazer;\r\n }\r\n if (!gazer._pointerDownOnMeshAsked) {\r\n if (stateObject.value > this._padSensibilityUp) {\r\n gazer._selectionPointerDown();\r\n }\r\n } else if (stateObject.value < this._padSensibilityDown) {\r\n gazer._selectionPointerUp();\r\n }\r\n });\r\n }\r\n }\r\n\r\n private _checkTeleportWithRay(stateObject: StickValues, gazer: VRExperienceHelperGazer) {\r\n // Dont teleport if another gaze already requested teleportation\r\n if (this._teleportationRequestInitiated && !gazer._teleportationRequestInitiated) {\r\n return;\r\n }\r\n if (!gazer._teleportationRequestInitiated) {\r\n if (stateObject.y < -this._padSensibilityUp && gazer._dpadPressed) {\r\n gazer._activatePointer();\r\n gazer._teleportationRequestInitiated = true;\r\n }\r\n } else {\r\n // Listening to the proper controller values changes to confirm teleportation\r\n if (Math.sqrt(stateObject.y * stateObject.y + stateObject.x * stateObject.x) < this._padSensibilityDown) {\r\n if (this._teleportActive) {\r\n this.teleportCamera(this._haloCenter);\r\n }\r\n\r\n gazer._teleportationRequestInitiated = false;\r\n }\r\n }\r\n }\r\n private _checkRotate(stateObject: StickValues, gazer: VRExperienceHelperGazer) {\r\n // Only rotate when user is not currently selecting a teleportation location\r\n if (gazer._teleportationRequestInitiated) {\r\n return;\r\n }\r\n\r\n if (!gazer._rotationLeftAsked) {\r\n if (stateObject.x < -this._padSensibilityUp && gazer._dpadPressed) {\r\n gazer._rotationLeftAsked = true;\r\n if (this._rotationAllowed) {\r\n this._rotateCamera(false);\r\n }\r\n }\r\n } else {\r\n if (stateObject.x > -this._padSensibilityDown) {\r\n gazer._rotationLeftAsked = false;\r\n }\r\n }\r\n\r\n if (!gazer._rotationRightAsked) {\r\n if (stateObject.x > this._padSensibilityUp && gazer._dpadPressed) {\r\n gazer._rotationRightAsked = true;\r\n if (this._rotationAllowed) {\r\n this._rotateCamera(true);\r\n }\r\n }\r\n } else {\r\n if (stateObject.x < this._padSensibilityDown) {\r\n gazer._rotationRightAsked = false;\r\n }\r\n }\r\n }\r\n private _checkTeleportBackwards(stateObject: StickValues, gazer: VRExperienceHelperGazer) {\r\n // Only teleport backwards when user is not currently selecting a teleportation location\r\n if (gazer._teleportationRequestInitiated) {\r\n return;\r\n }\r\n // Teleport backwards\r\n if (stateObject.y > this._padSensibilityUp && gazer._dpadPressed) {\r\n if (!gazer._teleportationBackRequestInitiated) {\r\n if (!this.currentVRCamera) {\r\n return;\r\n }\r\n\r\n // Get rotation and position of the current camera\r\n let rotation = Quaternion.FromRotationMatrix(this.currentVRCamera.getWorldMatrix().getRotationMatrix());\r\n let position = this.currentVRCamera.position;\r\n\r\n // If the camera has device position, use that instead\r\n if ((<WebVRFreeCamera>this.currentVRCamera).devicePosition && (<WebVRFreeCamera>this.currentVRCamera).deviceRotationQuaternion) {\r\n rotation = (<WebVRFreeCamera>this.currentVRCamera).deviceRotationQuaternion;\r\n position = (<WebVRFreeCamera>this.currentVRCamera).devicePosition;\r\n }\r\n\r\n // Get matrix with only the y rotation of the device rotation\r\n rotation.toEulerAnglesToRef(this._workingVector);\r\n this._workingVector.z = 0;\r\n this._workingVector.x = 0;\r\n Quaternion.RotationYawPitchRollToRef(this._workingVector.y, this._workingVector.x, this._workingVector.z, this._workingQuaternion);\r\n this._workingQuaternion.toRotationMatrix(this._workingMatrix);\r\n\r\n // Rotate backwards ray by device rotation to cast at the ground behind the user\r\n Vector3.TransformCoordinatesToRef(this._teleportBackwardsVector, this._workingMatrix, this._workingVector);\r\n\r\n // Teleport if ray hit the ground and is not to far away eg. backwards off a cliff\r\n const ray = new Ray(position, this._workingVector);\r\n const hit = this._scene.pickWithRay(ray, this._raySelectionPredicate);\r\n if (hit && hit.pickedPoint && hit.pickedMesh && this._isTeleportationFloor(hit.pickedMesh) && hit.distance < 5) {\r\n this.teleportCamera(hit.pickedPoint);\r\n }\r\n\r\n gazer._teleportationBackRequestInitiated = true;\r\n }\r\n } else {\r\n gazer._teleportationBackRequestInitiated = false;\r\n }\r\n }\r\n\r\n private _enableTeleportationOnController(controller: VRExperienceHelperControllerGazer) {\r\n const controllerMesh = controller.webVRController.mesh;\r\n if (controllerMesh) {\r\n if (!controller._interactionsEnabled) {\r\n this._enableInteractionOnController(controller);\r\n }\r\n controller._interactionsEnabled = true;\r\n controller._teleportationEnabled = true;\r\n if (controller.webVRController.controllerType === PoseEnabledControllerType.VIVE) {\r\n controller._dpadPressed = false;\r\n controller.webVRController.onPadStateChangedObservable.add((stateObject) => {\r\n controller._dpadPressed = stateObject.pressed;\r\n if (!controller._dpadPressed) {\r\n controller._rotationLeftAsked = false;\r\n controller._rotationRightAsked = false;\r\n controller._teleportationBackRequestInitiated = false;\r\n }\r\n });\r\n }\r\n controller.webVRController.onPadValuesChangedObservable.add((stateObject) => {\r\n if (this.teleportationEnabled) {\r\n this._checkTeleportBackwards(stateObject, controller);\r\n this._checkTeleportWithRay(stateObject, controller);\r\n }\r\n this._checkRotate(stateObject, controller);\r\n });\r\n }\r\n }\r\n\r\n private _createTeleportationCircles() {\r\n this._teleportationTarget = CreateGround(\"teleportationTarget\", { width: 2, height: 2, subdivisions: 2 }, this._scene);\r\n this._teleportationTarget.isPickable = false;\r\n\r\n const length = 512;\r\n const dynamicTexture = new DynamicTexture(\"DynamicTexture\", length, this._scene, true);\r\n dynamicTexture.hasAlpha = true;\r\n const context = dynamicTexture.getContext();\r\n\r\n const centerX = length / 2;\r\n const centerY = length / 2;\r\n const radius = 200;\r\n\r\n context.beginPath();\r\n context.arc(centerX, centerY, radius, 0, 2 * Math.PI, false);\r\n context.fillStyle = this._teleportationFillColor;\r\n context.fill();\r\n context.lineWidth = 10;\r\n context.strokeStyle = this._teleportationBorderColor;\r\n context.stroke();\r\n context.closePath();\r\n dynamicTexture.update();\r\n\r\n const teleportationCircleMaterial = new StandardMaterial(\"TextPlaneMaterial\", this._scene);\r\n teleportationCircleMaterial.diffuseTexture = dynamicTexture;\r\n this._teleportationTarget.material = teleportationCircleMaterial;\r\n\r\n const torus = CreateTorus(\r\n \"torusTeleportation\",\r\n {\r\n diameter: 0.75,\r\n thickness: 0.1,\r\n tessellation: 25,\r\n updatable: false,\r\n },\r\n this._scene\r\n );\r\n torus.isPickable = false;\r\n torus.parent = this._teleportationTarget;\r\n\r\n const animationInnerCircle = new Animation(\"animationInnerCircle\", \"position.y\", 30, Animation.ANIMATIONTYPE_FLOAT, Animation.ANIMATIONLOOPMODE_CYCLE);\r\n\r\n const keys = [];\r\n keys.push({\r\n frame: 0,\r\n value: 0,\r\n });\r\n keys.push({\r\n frame: 30,\r\n value: 0.4,\r\n });\r\n keys.push({\r\n frame: 60,\r\n value: 0,\r\n });\r\n\r\n animationInnerCircle.setKeys(keys);\r\n\r\n const easingFunction = new SineEase();\r\n easingFunction.setEasingMode(EasingFunction.EASINGMODE_EASEINOUT);\r\n animationInnerCircle.setEasingFunction(easingFunction);\r\n\r\n torus.animations = [];\r\n torus.animations.push(animationInnerCircle);\r\n\r\n this._scene.beginAnimation(torus, 0, 60, true);\r\n\r\n this._hideTeleportationTarget();\r\n }\r\n\r\n private _displayTeleportationTarget() {\r\n this._teleportActive = true;\r\n if (this._teleportationInitialized) {\r\n this._teleportationTarget.isVisible = true;\r\n if (this._isDefaultTeleportationTarget) {\r\n (<Mesh>this._teleportationTarget.getChildren()[0]).isVisible = true;\r\n }\r\n }\r\n }\r\n\r\n private _hideTeleportationTarget() {\r\n this._teleportActive = false;\r\n if (this._teleportationInitialized) {\r\n this._teleportationTarget.isVisible = false;\r\n if (this._isDefaultTeleportationTarget) {\r\n (<Mesh>this._teleportationTarget.getChildren()[0]).isVisible = false;\r\n }\r\n }\r\n }\r\n\r\n private _rotateCamera(right: boolean) {\r\n if (!(this.currentVRCamera instanceof FreeCamera)) {\r\n return;\r\n }\r\n\r\n if (right) {\r\n this._rotationAngle++;\r\n } else {\r\n this._rotationAngle--;\r\n }\r\n\r\n this.currentVRCamera.animations = [];\r\n\r\n const target = Quaternion.FromRotationMatrix(Matrix.RotationY((Math.PI / 4) * this._rotationAngle));\r\n\r\n const animationRotation = new Animation(\"animationRotation\", \"rotationQuaternion\", 90, Animation.ANIMATIONTYPE_QUATERNION, Animation.ANIMATIONLOOPMODE_CONSTANT);\r\n\r\n const animationRotationKeys = [];\r\n animationRotationKeys.push({\r\n frame: 0,\r\n value: this.currentVRCamera.rotationQuaternion,\r\n });\r\n animationRotationKeys.push({\r\n frame: 6,\r\n value: target,\r\n });\r\n\r\n animationRotation.setKeys(animationRotationKeys);\r\n\r\n animationRotation.setEasingFunction(this._circleEase);\r\n\r\n this.currentVRCamera.animations.push(animationRotation);\r\n\r\n this._postProcessMove.animations = [];\r\n\r\n const animationPP = new Animation(\"animationPP\", \"vignetteWeight\", 90, Animation.ANIMATIONTYPE_FLOAT, Animation.ANIMATIONLOOPMODE_CONSTANT);\r\n\r\n const vignetteWeightKeys = [];\r\n vignetteWeightKeys.push({\r\n frame: 0,\r\n value: 0,\r\n });\r\n vignetteWeightKeys.push({\r\n frame: 3,\r\n value: 4,\r\n });\r\n vignetteWeightKeys.push({\r\n frame: 6,\r\n value: 0,\r\n });\r\n\r\n animationPP.setKeys(vignetteWeightKeys);\r\n animationPP.setEasingFunction(this._circleEase);\r\n this._postProcessMove.animations.push(animationPP);\r\n\r\n const animationPP2 = new Animation(\"animationPP2\", \"vignetteStretch\", 90, Animation.ANIMATIONTYPE_FLOAT, Animation.ANIMATIONLOOPMODE_CONSTANT);\r\n\r\n const vignetteStretchKeys = [];\r\n vignetteStretchKeys.push({\r\n frame: 0,\r\n value: 0,\r\n });\r\n vignetteStretchKeys.push({\r\n frame: 3,\r\n value: 10,\r\n });\r\n vignetteStretchKeys.push({\r\n frame: 6,\r\n value: 0,\r\n });\r\n\r\n animationPP2.setKeys(vignetteStretchKeys);\r\n animationPP2.setEasingFunction(this._circleEase);\r\n this._postProcessMove.animations.push(animationPP2);\r\n\r\n this._postProcessMove.imageProcessingConfiguration.vignetteWeight = 0;\r\n this._postProcessMove.imageProcessingConfiguration.vignetteStretch = 0;\r\n this._postProcessMove.samples = 4;\r\n this._webVRCamera.attachPostProcess(this._postProcessMove);\r\n this._scene.beginAnimation(this._postProcessMove, 0, 6, false, 1, () => {\r\n this._webVRCamera.detachPostProcess(this._postProcessMove);\r\n });\r\n this._scene.beginAnimation(this.currentVRCamera, 0, 6, false, 1);\r\n }\r\n\r\n private _moveTeleportationSelectorTo(hit: PickingInfo, gazer: VRExperienceHelperGazer, ray: Ray) {\r\n if (hit.pickedPoint) {\r\n if (gazer._teleportationRequestInitiated) {\r\n this._displayTeleportationTarget();\r\n this._haloCenter.copyFrom(hit.pickedPoint);\r\n this._teleportationTarget.position.copyFrom(hit.pickedPoint);\r\n }\r\n\r\n const pickNormal = this._convertNormalToDirectionOfRay(hit.getNormal(true, false), ray);\r\n if (pickNormal) {\r\n const axis1 = Vector3.Cross(Axis.Y, pickNormal);\r\n const axis2 = Vector3.Cross(pickNormal, axis1);\r\n Vector3.RotationFromAxisToRef(axis2, pickNormal, axis1, this._teleportationTarget.rotation);\r\n }\r\n this._teleportationTarget.position.y += 0.1;\r\n }\r\n }\r\n private _workingVector = Vector3.Zero();\r\n private _workingQuaternion = Quaternion.Identity();\r\n private _workingMatrix = Matrix.Identity();\r\n\r\n /**\r\n * Time Constant Teleportation Mode\r\n */\r\n public static readonly TELEPORTATIONMODE_CONSTANTTIME = 0;\r\n /**\r\n * Speed Constant Teleportation Mode\r\n */\r\n public static readonly TELEPORTATIONMODE_CONSTANTSPEED = 1;\r\n\r\n /**\r\n * Teleports the users feet to the desired location\r\n * @param location The location where the user's feet should be placed\r\n */\r\n public teleportCamera(location: Vector3) {\r\n if (!(this.currentVRCamera instanceof FreeCamera)) {\r\n return;\r\n }\r\n // Teleport the hmd to where the user is looking by moving the anchor to where they are looking minus the\r\n // offset of the headset from the anchor.\r\n if (this.webVRCamera.leftCamera) {\r\n this._workingVector.copyFrom(this.webVRCamera.leftCamera.globalPosition);\r\n this._workingVector.subtractInPlace(this.webVRCamera.position);\r\n location.subtractToRef(this._workingVector, this._workingVector);\r\n } else {\r\n this._workingVector.copyFrom(location);\r\n }\r\n // Add height to account for user's height offset\r\n if (this.isInVRMode) {\r\n this._workingVector.y += this.webVRCamera.deviceDistanceToRoomGround() * this._webVRCamera.deviceScaleFactor;\r\n } else {\r\n this._workingVector.y += this._defaultHeight;\r\n }\r\n\r\n this.onBeforeCameraTeleport.notifyObservers(this._workingVector);\r\n\r\n // Animations FPS\r\n const FPS = 90;\r\n let speedRatio, lastFrame;\r\n if (this._teleportationMode == VRExperienceHelper.TELEPORTATIONMODE_CONSTANTSPEED) {\r\n lastFrame = FPS;\r\n const dist = Vector3.Distance(this.currentVRCamera.position, this._workingVector);\r\n speedRatio = this._teleportationSpeed / dist;\r\n } else {\r\n // teleportationMode is TELEPORTATIONMODE_CONSTANTTIME\r\n lastFrame = Math.round((this._teleportationTime * FPS) / 1000);\r\n speedRatio = 1;\r\n }\r\n\r\n // Create animation from the camera's position to the new location\r\n this.currentVRCamera.animations = [];\r\n const animationCameraTeleportation = new Animation(\"animationCameraTeleportation\", \"position\", FPS, Animation.ANIMATIONTYPE_VECTOR3, Animation.ANIMATIONLOOPMODE_CONSTANT);\r\n const animationCameraTeleportationKeys = [\r\n {\r\n frame: 0,\r\n value: this.currentVRCamera.position,\r\n },\r\n {\r\n frame: lastFrame,\r\n value: this._workingVector,\r\n },\r\n ];\r\n\r\n animationCameraTeleportation.setKeys(animationCameraTeleportationKeys);\r\n animationCameraTeleportation.setEasingFunction(this._teleportationEasing);\r\n this.currentVRCamera.animations.push(animationCameraTeleportation);\r\n\r\n this._postProcessMove.animations = [];\r\n\r\n // Calculate the mid frame for vignette animations\r\n const midFrame = Math.round(lastFrame / 2);\r\n\r\n const animationPP = new Animation(\"animationPP\", \"vignetteWeight\", FPS, Animation.ANIMATIONTYPE_FLOAT, Animation.ANIMATIONLOOPMODE_CONSTANT);\r\n\r\n const vignetteWeightKeys = [];\r\n vignetteWeightKeys.push({\r\n frame: 0,\r\n value: 0,\r\n });\r\n vignetteWeightKeys.push({\r\n frame: midFrame,\r\n value: 8,\r\n });\r\n vignetteWeightKeys.push({\r\n frame: lastFrame,\r\n value: 0,\r\n });\r\n\r\n animationPP.setKeys(vignetteWeightKeys);\r\n this._postProcessMove.animations.push(animationPP);\r\n\r\n const animationPP2 = new Animation(\"animationPP2\", \"vignetteStretch\", FPS, Animation.ANIMATIONTYPE_FLOAT, Animation.ANIMATIONLOOPMODE_CONSTANT);\r\n\r\n const vignetteStretchKeys = [];\r\n vignetteStretchKeys.push({\r\n frame: 0,\r\n value: 0,\r\n });\r\n vignetteStretchKeys.push({\r\n frame: midFrame,\r\n value: 10,\r\n });\r\n vignetteStretchKeys.push({\r\n frame: lastFrame,\r\n value: 0,\r\n });\r\n\r\n animationPP2.setKeys(vignetteStretchKeys);\r\n this._postProcessMove.animations.push(animationPP2);\r\n\r\n this._postProcessMove.imageProcessingConfiguration.vignetteWeight = 0;\r\n this._postProcessMove.imageProcessingConfiguration.vignetteStretch = 0;\r\n\r\n this._webVRCamera.attachPostProcess(this._postProcessMove);\r\n this._scene.beginAnimation(this._postProcessMove, 0, lastFrame, false, speedRatio, () => {\r\n this._webVRCamera.detachPostProcess(this._postProcessMove);\r\n });\r\n this._scene.beginAnimation(this.currentVRCamera, 0, lastFrame, false, speedRatio, () => {\r\n this.onAfterCameraTeleport.notifyObservers(this._workingVector);\r\n });\r\n\r\n this._hideTeleportationTarget();\r\n }\r\n\r\n private _convertNormalToDirectionOfRay(normal: Nullable<Vector3>, ray: Ray) {\r\n if (normal) {\r\n const angle = Math.acos(Vector3.Dot(normal, ray.direction));\r\n if (angle < Math.PI / 2) {\r\n normal.scaleInPlace(-1);\r\n }\r\n }\r\n return normal;\r\n }\r\n\r\n private _castRayAndSelectObject(gazer: VRExperienceHelperGazer) {\r\n if (!(this.currentVRCamera instanceof FreeCamera)) {\r\n return;\r\n }\r\n\r\n const ray = gazer._getForwardRay(this._rayLength);\r\n const hit = this._scene.pickWithRay(ray, this._raySelectionPredicate);\r\n\r\n if (hit) {\r\n this._scene.simulatePointerMove(hit, { pointerId: gazer._id });\r\n }\r\n gazer._currentHit = hit;\r\n\r\n // Moving the gazeTracker on the mesh face targetted\r\n if (hit && hit.pickedPoint) {\r\n if (this._displayGaze) {\r\n let multiplier = 1;\r\n\r\n gazer._gazeTracker.isVisible = true;\r\n\r\n if (gazer._isActionableMesh) {\r\n multiplier = 3;\r\n }\r\n if (this.updateGazeTrackerScale) {\r\n gazer._gazeTracker.scaling.x = hit.distance * multiplier;\r\n gazer._gazeTracker.scaling.y = hit.distance * multiplier;\r\n gazer._gazeTracker.scaling.z = hit.distance * multiplier;\r\n }\r\n\r\n const pickNormal = this._convertNormalToDirectionOfRay(hit.getNormal(), ray);\r\n // To avoid z-fighting\r\n const deltaFighting = 0.002;\r\n\r\n if (pickNormal) {\r\n const axis1 = Vector3.Cross(Axis.Y, pickNormal);\r\n const axis2 = Vector3.Cross(pickNormal, axis1);\r\n Vector3.RotationFromAxisToRef(axis2, pickNormal, axis1, gazer._gazeTracker.rotation);\r\n }\r\n gazer._gazeTracker.position.copyFrom(hit.pickedPoint);\r\n\r\n if (gazer._gazeTracker.position.x < 0) {\r\n gazer._gazeTracker.position.x += deltaFighting;\r\n } else {\r\n gazer._gazeTracker.position.x -= deltaFighting;\r\n }\r\n if (gazer._gazeTracker.position.y < 0) {\r\n gazer._gazeTracker.position.y += deltaFighting;\r\n } else {\r\n gazer._gazeTracker.position.y -= deltaFighting;\r\n }\r\n if (gazer._gazeTracker.position.z < 0) {\r\n gazer._gazeTracker.position.z += deltaFighting;\r\n } else {\r\n gazer._gazeTracker.position.z -= deltaFighting;\r\n }\r\n }\r\n\r\n // Changing the size of the laser pointer based on the distance from the targetted point\r\n gazer._updatePointerDistance(hit.distance);\r\n } else {\r\n gazer._updatePointerDistance();\r\n gazer._gazeTracker.isVisible = false;\r\n }\r\n\r\n if (hit && hit.pickedMesh) {\r\n // The object selected is the floor, we're in a teleportation scenario\r\n if (this._teleportationInitialized && this._isTeleportationFloor(hit.pickedMesh) && hit.pickedPoint) {\r\n // Moving the teleportation area to this targetted point\r\n\r\n //Raise onSelectedMeshUnselected observable if ray collided floor mesh/meshes and a non floor mesh was previously selected\r\n if (gazer._currentMeshSelected && !this._isTeleportationFloor(gazer._currentMeshSelected)) {\r\n this._notifySelectedMeshUnselected(gazer._currentMeshSelected);\r\n }\r\n\r\n gazer._currentMeshSelected = null;\r\n if (gazer._teleportationRequestInitiated) {\r\n this._moveTeleportationSelectorTo(hit, gazer, ray);\r\n }\r\n return;\r\n }\r\n // If not, we're in a selection scenario\r\n //this._teleportationAllowed = false;\r\n if (hit.pickedMesh !== gazer._currentMeshSelected) {\r\n if (this.meshSelectionPredicate(hit.pickedMesh)) {\r\n this.onNewMeshPicked.notifyObservers(hit);\r\n gazer._currentMeshSelected = hit.pickedMesh;\r\n if (hit.pickedMesh.isPickable && hit.pickedMesh.actionManager) {\r\n this.changeGazeColor(this._pickedGazeColor);\r\n this.changeLaserColor(this._pickedLaserColor);\r\n gazer._isActionableMesh = true;\r\n } else {\r\n this.changeGazeColor(this._gazeColor);\r\n this.changeLaserColor(this._laserColor);\r\n gazer._isActionableMesh = false;\r\n }\r\n try {\r\n this.onNewMeshSelected.notifyObservers(hit.pickedMesh);\r\n const gazerAsControllerGazer = gazer as VRExperienceHelperControllerGazer;\r\n if (gazerAsControllerGazer.webVRController) {\r\n this.onMeshSelectedWithController.notifyObservers({ mesh: hit.pickedMesh, controller: gazerAsControllerGazer.webVRController });\r\n }\r\n } catch (err) {\r\n Logger.Warn(\"Error while raising onNewMeshSelected or onMeshSelectedWithController: \" + err);\r\n }\r\n } else {\r\n this._notifySelectedMeshUnselected(gazer._currentMeshSelected);\r\n gazer._currentMeshSelected = null;\r\n this.changeGazeColor(this._gazeColor);\r\n this.changeLaserColor(this._laserColor);\r\n }\r\n }\r\n } else {\r\n this._notifySelectedMeshUnselected(gazer._currentMeshSelected);\r\n gazer._currentMeshSelected = null;\r\n //this._teleportationAllowed = false;\r\n this.changeGazeColor(this._gazeColor);\r\n this.changeLaserColor(this._laserColor);\r\n }\r\n }\r\n\r\n private _notifySelectedMeshUnselected(mesh: Nullable<AbstractMesh>) {\r\n if (mesh) {\r\n this.onSelectedMeshUnselected.notifyObservers(mesh);\r\n }\r\n }\r\n\r\n /**\r\n * Permanently set new colors for the laser pointer\r\n * @param color the new laser color\r\n * @param pickedColor the new laser color when picked mesh detected\r\n */\r\n public setLaserColor(color: Color3, pickedColor: Color3 = this._pickedLaserColor) {\r\n this._laserColor = color;\r\n this._pickedLaserColor = pickedColor;\r\n }\r\n\r\n /**\r\n * Set lighting enabled / disabled on the laser pointer of both controllers\r\n * @param enabled should the lighting be enabled on the laser pointer\r\n */\r\n public setLaserLightingState(enabled: boolean = true) {\r\n if (this._leftController) {\r\n this._leftController._setLaserPointerLightingDisabled(!enabled);\r\n }\r\n if (this._rightController) {\r\n this._rightController._setLaserPointerLightingDisabled(!enabled);\r\n }\r\n }\r\n\r\n /**\r\n * Permanently set new colors for the gaze pointer\r\n * @param color the new gaze color\r\n * @param pickedColor the new gaze color when picked mesh detected\r\n */\r\n public setGazeColor(color: Color3, pickedColor: Color3 = this._pickedGazeColor) {\r\n this._gazeColor = color;\r\n this._pickedGazeColor = pickedColor;\r\n }\r\n\r\n /**\r\n * Sets the color of the laser ray from the vr controllers.\r\n * @param color new color for the ray.\r\n */\r\n public changeLaserColor(color: Color3) {\r\n if (!this.updateControllerLaserColor) {\r\n return;\r\n }\r\n\r\n if (this._leftController) {\r\n this._leftController._setLaserPointerColor(color);\r\n }\r\n if (this._rightController) {\r\n this._rightController._setLaserPointerColor(color);\r\n }\r\n }\r\n\r\n /**\r\n * Sets the color of the ray from the vr headsets gaze.\r\n * @param color new color for the ray.\r\n */\r\n public changeGazeColor(color: Color3) {\r\n if (!this.updateGazeTrackerColor) {\r\n return;\r\n }\r\n if (!(<StandardMaterial>this._cameraGazer._gazeTracker.material)) {\r\n return;\r\n }\r\n (<StandardMaterial>this._cameraGazer._gazeTracker.material).emissiveColor = color;\r\n if (this._leftController) {\r\n (<StandardMaterial>this._leftController._gazeTracker.material).emissiveColor = color;\r\n }\r\n if (this._rightController) {\r\n (<StandardMaterial>this._rightController._gazeTracker.material).emissiveColor = color;\r\n }\r\n }\r\n\r\n /**\r\n * Exits VR and disposes of the vr experience helper\r\n */\r\n public dispose() {\r\n if (this.isInVRMode) {\r\n this.exitVR();\r\n }\r\n\r\n if (this._postProcessMove) {\r\n this._postProcessMove.dispose();\r\n }\r\n\r\n if (this._webVRCamera) {\r\n this._webVRCamera.dispose();\r\n }\r\n if (this._vrDeviceOrientationCamera) {\r\n this._vrDeviceOrientationCamera.dispose();\r\n }\r\n if (!this._useCustomVRButton && this._btnVR && this._btnVR.parentNode) {\r\n document.body.removeChild(this._btnVR);\r\n }\r\n\r\n if (this._deviceOrientationCamera && this._scene.activeCamera != this._deviceOrientationCamera) {\r\n this._deviceOrientationCamera.dispose();\r\n }\r\n\r\n if (this._cameraGazer) {\r\n this._cameraGazer.dispose();\r\n }\r\n if (this._leftController) {\r\n this._leftController.dispose();\r\n }\r\n if (this._rightController) {\r\n this._rightController.dispose();\r\n }\r\n\r\n if (this._teleportationTarget) {\r\n this._teleportationTarget.dispose();\r\n }\r\n\r\n if (this.xr) {\r\n this.xr.dispose();\r\n }\r\n\r\n this._floorMeshesCollection.length = 0;\r\n\r\n document.removeEventListener(\"keydown\", this._onKeyDown);\r\n window.removeEventListener(\"vrdisplaypresentchange\", this._onVrDisplayPresentChangeBind);\r\n\r\n window.removeEventListener(\"resize\", this._onResize);\r\n document.removeEventListener(\"fullscreenchange\", this._onFullscreenChange);\r\n\r\n this._scene.getEngine().onVRDisplayChangedObservable.removeCallback(this._onVRDisplayChangedBind);\r\n this._scene.getEngine().onVRRequestPresentStart.removeCallback(this._onVRRequestPresentStart);\r\n this._scene.getEngine().onVRRequestPresentComplete.removeCallback(this._onVRRequestPresentComplete);\r\n\r\n this._scene.gamepadManager.onGamepadConnectedObservable.removeCallback(this._onNewGamepadConnected);\r\n this._scene.gamepadManager.onGamepadDisconnectedObservable.removeCallback(this._onNewGamepadDisconnected);\r\n\r\n this._scene.unregisterBeforeRender(this._beforeRender);\r\n }\r\n\r\n /**\r\n * Gets the name of the VRExperienceHelper class\r\n * @returns \"VRExperienceHelper\"\r\n */\r\n public getClassName(): string {\r\n return \"VRExperienceHelper\";\r\n }\r\n}\r\n"]}
|