@babylonjs/core 5.45.2 → 5.47.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/actionManager.js +6 -1
- package/Actions/actionManager.js.map +1 -1
- package/Actions/condition.js +23 -23
- package/Actions/condition.js.map +1 -1
- package/Animations/animatable.js +48 -48
- package/Animations/animatable.js.map +1 -1
- package/Animations/animation.js +53 -53
- package/Animations/animation.js.map +1 -1
- package/Animations/animationGroup.js +53 -53
- package/Animations/animationGroup.js.map +1 -1
- package/Animations/runtimeAnimation.js +36 -36
- package/Animations/runtimeAnimation.js.map +1 -1
- package/Audio/audioEngine.js +14 -14
- package/Audio/audioEngine.js.map +1 -1
- package/Audio/audioSceneComponent.js +14 -14
- package/Audio/audioSceneComponent.js.map +1 -1
- package/Audio/sound.js +47 -47
- package/Audio/sound.js.map +1 -1
- package/Behaviors/Meshes/baseSixDofDragBehavior.d.ts +1 -1
- package/Behaviors/Meshes/fadeInOutBehavior.js +11 -11
- package/Behaviors/Meshes/fadeInOutBehavior.js.map +1 -1
- package/Behaviors/Meshes/pointerDragBehavior.js +34 -34
- package/Behaviors/Meshes/pointerDragBehavior.js.map +1 -1
- package/Bones/bone.js +15 -15
- package/Bones/bone.js.map +1 -1
- package/Bones/boneIKController.js +9 -9
- package/Bones/boneIKController.js.map +1 -1
- package/Bones/boneLookController.js +50 -50
- package/Bones/boneLookController.js.map +1 -1
- package/Bones/skeleton.js +35 -35
- package/Bones/skeleton.js.map +1 -1
- package/Buffers/buffer.js +14 -14
- package/Buffers/buffer.js.map +1 -1
- package/Buffers/dataBuffer.js +6 -6
- package/Buffers/dataBuffer.js.map +1 -1
- package/Cameras/Inputs/freeCameraDeviceOrientationInput.js +42 -42
- package/Cameras/Inputs/freeCameraDeviceOrientationInput.js.map +1 -1
- package/Cameras/Stereoscopic/stereoscopicScreenUniversalCamera.js +18 -18
- package/Cameras/Stereoscopic/stereoscopicScreenUniversalCamera.js.map +1 -1
- package/Cameras/VR/vrExperienceHelper.js +178 -178
- package/Cameras/VR/vrExperienceHelper.js.map +1 -1
- package/Cameras/arcRotateCamera.js +176 -176
- package/Cameras/arcRotateCamera.js.map +1 -1
- package/Cameras/camera.js +90 -90
- package/Cameras/camera.js.map +1 -1
- package/Cameras/flyCamera.js +82 -82
- package/Cameras/flyCamera.js.map +1 -1
- package/Cameras/freeCamera.js +54 -54
- package/Cameras/freeCamera.js.map +1 -1
- package/Compute/computeShader.js +12 -12
- package/Compute/computeShader.js.map +1 -1
- package/Culling/ray.d.ts +1 -1
- package/Debug/axesViewer.js +12 -12
- package/Debug/axesViewer.js.map +1 -1
- package/Debug/debugLayer.js +21 -21
- package/Debug/debugLayer.js.map +1 -1
- package/Debug/directionalLightFrustumViewer.js +20 -20
- package/Debug/directionalLightFrustumViewer.js.map +1 -1
- package/Debug/physicsViewer.js +3 -3
- package/Debug/physicsViewer.js.map +1 -1
- package/Debug/rayHelper.js +10 -10
- package/Debug/rayHelper.js.map +1 -1
- package/Debug/skeletonViewer.js +81 -81
- package/Debug/skeletonViewer.js.map +1 -1
- package/DeviceInput/InputDevices/deviceSource.d.ts +1 -1
- package/DeviceInput/InputDevices/deviceSourceManager.js +31 -31
- package/DeviceInput/InputDevices/deviceSourceManager.js.map +1 -1
- package/DeviceInput/InputDevices/deviceTypes.d.ts +1 -1
- package/DeviceInput/eventFactory.d.ts +1 -1
- package/DeviceInput/eventFactory.js +4 -4
- package/DeviceInput/eventFactory.js.map +1 -1
- package/DeviceInput/internalDeviceSourceManager.d.ts +2 -2
- package/DeviceInput/webDeviceInputSystem.js +2 -2
- package/DeviceInput/webDeviceInputSystem.js.map +1 -1
- package/Engines/Extensions/engine.computeShader.d.ts +3 -3
- package/Engines/Extensions/engine.multiRender.js +1 -1
- package/Engines/Extensions/engine.multiRender.js.map +1 -1
- package/Engines/Extensions/engine.query.d.ts +1 -1
- package/Engines/Extensions/engine.renderTarget.d.ts +1 -1
- package/Engines/Extensions/engine.renderTarget.js +1 -1
- package/Engines/Extensions/engine.renderTarget.js.map +1 -1
- package/Engines/Native/nativeDataStream.d.ts +1 -1
- package/Engines/Native/nativeHardwareTexture.js +3 -3
- package/Engines/Native/nativeHardwareTexture.js.map +1 -1
- package/Engines/Native/nativeInterfaces.d.ts +5 -5
- package/Engines/Native/nativePipelineContext.js +7 -7
- package/Engines/Native/nativePipelineContext.js.map +1 -1
- package/Engines/Native/nativeRenderTargetWrapper.js +6 -6
- package/Engines/Native/nativeRenderTargetWrapper.js.map +1 -1
- package/Engines/Processors/shaderCodeInliner.js +4 -4
- package/Engines/Processors/shaderCodeInliner.js.map +1 -1
- package/Engines/Processors/shaderProcessingOptions.d.ts +1 -1
- package/Engines/WebGL/webGLHardwareTexture.js +3 -3
- package/Engines/WebGL/webGLHardwareTexture.js.map +1 -1
- package/Engines/WebGPU/webgpuBufferManager.js +3 -3
- package/Engines/WebGPU/webgpuBufferManager.js.map +1 -1
- package/Engines/WebGPU/webgpuCacheBindGroups.js +6 -6
- package/Engines/WebGPU/webgpuCacheBindGroups.js.map +1 -1
- package/Engines/WebGPU/webgpuCacheRenderPipelineTree.js +5 -5
- package/Engines/WebGPU/webgpuCacheRenderPipelineTree.js.map +1 -1
- package/Engines/WebGPU/webgpuClearQuad.js +11 -11
- package/Engines/WebGPU/webgpuClearQuad.js.map +1 -1
- package/Engines/WebGPU/webgpuComputeContext.js +7 -7
- package/Engines/WebGPU/webgpuComputeContext.js.map +1 -1
- package/Engines/WebGPU/webgpuComputePipelineContext.js +4 -4
- package/Engines/WebGPU/webgpuComputePipelineContext.js.map +1 -1
- package/Engines/WebGPU/webgpuDrawContext.js +7 -7
- package/Engines/WebGPU/webgpuDrawContext.js.map +1 -1
- package/Engines/WebGPU/webgpuHardwareTexture.js +9 -9
- package/Engines/WebGPU/webgpuHardwareTexture.js.map +1 -1
- package/Engines/WebGPU/webgpuMaterialContext.js +5 -5
- package/Engines/WebGPU/webgpuMaterialContext.js.map +1 -1
- package/Engines/WebGPU/webgpuOcclusionQuery.js +10 -10
- package/Engines/WebGPU/webgpuOcclusionQuery.js.map +1 -1
- package/Engines/WebGPU/webgpuPipelineContext.js +6 -6
- package/Engines/WebGPU/webgpuPipelineContext.js.map +1 -1
- package/Engines/WebGPU/webgpuQuerySet.js +3 -3
- package/Engines/WebGPU/webgpuQuerySet.js.map +1 -1
- package/Engines/WebGPU/webgpuShaderProcessingContext.js +3 -3
- package/Engines/WebGPU/webgpuShaderProcessingContext.js.map +1 -1
- package/Engines/WebGPU/webgpuTextureHelper.js +3 -3
- package/Engines/WebGPU/webgpuTextureHelper.js.map +1 -1
- package/Engines/WebGPU/webgpuTimestampQuery.js +3 -3
- package/Engines/WebGPU/webgpuTimestampQuery.js.map +1 -1
- package/Engines/engine.js +134 -134
- package/Engines/engine.js.map +1 -1
- package/Engines/nativeEngine.js +6 -6
- package/Engines/nativeEngine.js.map +1 -1
- package/Engines/nullEngine.js +25 -25
- package/Engines/nullEngine.js.map +1 -1
- package/Engines/renderTargetWrapper.js +25 -25
- package/Engines/renderTargetWrapper.js.map +1 -1
- package/Engines/thinEngine.js +243 -243
- package/Engines/thinEngine.js.map +1 -1
- package/Engines/webgpuEngine.js +132 -132
- package/Engines/webgpuEngine.js.map +1 -1
- package/Events/keyboardEvents.js +10 -10
- package/Events/keyboardEvents.js.map +1 -1
- package/Events/pointerEvents.js +10 -10
- package/Events/pointerEvents.js.map +1 -1
- package/Gamepads/Controllers/poseEnabledController.js +9 -9
- package/Gamepads/Controllers/poseEnabledController.js.map +1 -1
- package/Gamepads/Controllers/webVRController.js +13 -13
- package/Gamepads/Controllers/webVRController.js.map +1 -1
- package/Gamepads/gamepad.js +20 -20
- package/Gamepads/gamepad.js.map +1 -1
- package/Gizmos/axisDragGizmo.js +45 -45
- package/Gizmos/axisDragGizmo.js.map +1 -1
- package/Gizmos/axisScaleGizmo.js +12 -12
- package/Gizmos/axisScaleGizmo.js.map +1 -1
- package/Gizmos/boundingBoxGizmo.js +74 -74
- package/Gizmos/boundingBoxGizmo.js.map +1 -1
- package/Gizmos/gizmo.js +34 -34
- package/Gizmos/gizmo.js.map +1 -1
- package/Gizmos/gizmoManager.js +40 -40
- package/Gizmos/gizmoManager.js.map +1 -1
- package/Gizmos/planeDragGizmo.js +23 -23
- package/Gizmos/planeDragGizmo.js.map +1 -1
- package/Gizmos/planeRotationGizmo.js +12 -12
- package/Gizmos/planeRotationGizmo.js.map +1 -1
- package/Gizmos/positionGizmo.js +40 -40
- package/Gizmos/positionGizmo.js.map +1 -1
- package/Gizmos/rotationGizmo.js +47 -47
- package/Gizmos/rotationGizmo.js.map +1 -1
- package/Gizmos/scaleGizmo.js +41 -41
- package/Gizmos/scaleGizmo.js.map +1 -1
- package/Helpers/environmentHelper.js +18 -18
- package/Helpers/environmentHelper.js.map +1 -1
- package/Helpers/textureDome.js +96 -96
- package/Helpers/textureDome.js.map +1 -1
- package/IAccessibilityTag.d.ts +2 -2
- package/Inputs/scene.inputManager.d.ts +4 -3
- package/Inputs/scene.inputManager.js +12 -11
- package/Inputs/scene.inputManager.js.map +1 -1
- package/Instrumentation/engineInstrumentation.js +21 -21
- package/Instrumentation/engineInstrumentation.js.map +1 -1
- package/Instrumentation/sceneInstrumentation.js +90 -90
- package/Instrumentation/sceneInstrumentation.js.map +1 -1
- package/Layers/effectLayer.js +48 -48
- package/Layers/effectLayer.js.map +1 -1
- package/Layers/glowLayer.js +32 -32
- package/Layers/glowLayer.js.map +1 -1
- package/Layers/highlightLayer.js +26 -26
- package/Layers/highlightLayer.js.map +1 -1
- package/Layers/layer.js +40 -40
- package/Layers/layer.js.map +1 -1
- package/LensFlares/lensFlare.js +15 -15
- package/LensFlares/lensFlare.js.map +1 -1
- package/LensFlares/lensFlareSystem.js +4 -4
- package/LensFlares/lensFlareSystem.js.map +1 -1
- package/Lights/Shadows/cascadedShadowGenerator.js +18 -18
- package/Lights/Shadows/cascadedShadowGenerator.js.map +1 -1
- package/Lights/Shadows/shadowGenerator.js +115 -115
- package/Lights/Shadows/shadowGenerator.js.map +1 -1
- package/Lights/directionalLight.js +31 -31
- package/Lights/directionalLight.js.map +1 -1
- package/Lights/light.js +72 -72
- package/Lights/light.js.map +1 -1
- package/Lights/pointLight.js +18 -18
- package/Lights/pointLight.js.map +1 -1
- package/Lights/spotLight.js +30 -30
- package/Lights/spotLight.js.map +1 -1
- package/Loading/sceneLoader.d.ts +1 -1
- package/Materials/Background/backgroundMaterial.js +124 -124
- package/Materials/Background/backgroundMaterial.js.map +1 -1
- package/Materials/Node/Blocks/Dual/imageSourceBlock.js +8 -8
- package/Materials/Node/Blocks/Dual/imageSourceBlock.js.map +1 -1
- package/Materials/Node/Blocks/Dual/lightBlock.js +14 -14
- package/Materials/Node/Blocks/Dual/lightBlock.js.map +1 -1
- package/Materials/Node/Blocks/Dual/reflectionTextureBaseBlock.js +9 -9
- package/Materials/Node/Blocks/Dual/reflectionTextureBaseBlock.js.map +1 -1
- package/Materials/Node/Blocks/Dual/textureBlock.js +26 -26
- package/Materials/Node/Blocks/Dual/textureBlock.js.map +1 -1
- package/Materials/Node/Blocks/Input/inputBlock.js +34 -34
- package/Materials/Node/Blocks/Input/inputBlock.js.map +1 -1
- package/Materials/Node/Blocks/PBR/pbrMetallicRoughnessBlock.js +14 -14
- package/Materials/Node/Blocks/PBR/pbrMetallicRoughnessBlock.js.map +1 -1
- package/Materials/Node/Blocks/PBR/reflectionBlock.js +16 -16
- package/Materials/Node/Blocks/PBR/reflectionBlock.js.map +1 -1
- package/Materials/Node/Blocks/customBlock.js +7 -7
- package/Materials/Node/Blocks/customBlock.js.map +1 -1
- package/Materials/Node/Blocks/gradientBlock.js +13 -13
- package/Materials/Node/Blocks/gradientBlock.js.map +1 -1
- package/Materials/Node/Blocks/triPlanarBlock.js +30 -30
- package/Materials/Node/Blocks/triPlanarBlock.js.map +1 -1
- package/Materials/Node/nodeMaterial.d.ts +1 -1
- package/Materials/Node/nodeMaterial.js +60 -60
- package/Materials/Node/nodeMaterial.js.map +1 -1
- package/Materials/Node/nodeMaterialBlock.js +35 -35
- package/Materials/Node/nodeMaterialBlock.js.map +1 -1
- package/Materials/Node/nodeMaterialBlockConnectionPoint.js +50 -50
- package/Materials/Node/nodeMaterialBlockConnectionPoint.js.map +1 -1
- package/Materials/PBR/pbrAnisotropicConfiguration.js +5 -5
- package/Materials/PBR/pbrAnisotropicConfiguration.js.map +1 -1
- package/Materials/PBR/pbrBRDFConfiguration.js +4 -4
- package/Materials/PBR/pbrBRDFConfiguration.js.map +1 -1
- package/Materials/PBR/pbrBaseMaterial.js +53 -55
- package/Materials/PBR/pbrBaseMaterial.js.map +1 -1
- package/Materials/PBR/pbrBaseSimpleMaterial.js +17 -17
- package/Materials/PBR/pbrBaseSimpleMaterial.js.map +1 -1
- package/Materials/PBR/pbrClearCoatConfiguration.js +5 -5
- package/Materials/PBR/pbrClearCoatConfiguration.js.map +1 -1
- package/Materials/PBR/pbrIridescenceConfiguration.js +5 -5
- package/Materials/PBR/pbrIridescenceConfiguration.js.map +1 -1
- package/Materials/PBR/pbrMaterial.js +209 -209
- package/Materials/PBR/pbrMaterial.js.map +1 -1
- package/Materials/PBR/pbrSheenConfiguration.js +5 -5
- package/Materials/PBR/pbrSheenConfiguration.js.map +1 -1
- package/Materials/PBR/pbrSpecularGlossinessMaterial.js +6 -6
- package/Materials/PBR/pbrSpecularGlossinessMaterial.js.map +1 -1
- package/Materials/PBR/pbrSubSurfaceConfiguration.js +51 -51
- package/Materials/PBR/pbrSubSurfaceConfiguration.js.map +1 -1
- package/Materials/Textures/baseTexture.js +99 -99
- package/Materials/Textures/baseTexture.js.map +1 -1
- package/Materials/Textures/cubeTexture.js +61 -61
- package/Materials/Textures/cubeTexture.js.map +1 -1
- package/Materials/Textures/externalTexture.js +16 -16
- package/Materials/Textures/externalTexture.js.map +1 -1
- package/Materials/Textures/hdrCubeTexture.js +44 -44
- package/Materials/Textures/hdrCubeTexture.js.map +1 -1
- package/Materials/Textures/internalTexture.js +31 -31
- package/Materials/Textures/internalTexture.js.map +1 -1
- package/Materials/Textures/mirrorTexture.js +73 -73
- package/Materials/Textures/mirrorTexture.js.map +1 -1
- package/Materials/Textures/multiRenderTarget.js +47 -47
- package/Materials/Textures/multiRenderTarget.js.map +1 -1
- package/Materials/Textures/rawTexture2DArray.js +6 -6
- package/Materials/Textures/rawTexture2DArray.js.map +1 -1
- package/Materials/Textures/renderTargetTexture.js +142 -142
- package/Materials/Textures/renderTargetTexture.js.map +1 -1
- package/Materials/Textures/texture.d.ts +1 -1
- package/Materials/Textures/texture.js +26 -26
- package/Materials/Textures/texture.js.map +1 -1
- package/Materials/Textures/textureCreationOptions.d.ts +1 -1
- package/Materials/Textures/textureSampler.js +20 -20
- package/Materials/Textures/textureSampler.js.map +1 -1
- package/Materials/Textures/thinRenderTargetTexture.js +6 -6
- package/Materials/Textures/thinRenderTargetTexture.js.map +1 -1
- package/Materials/Textures/thinTexture.js +39 -39
- package/Materials/Textures/thinTexture.js.map +1 -1
- package/Materials/Textures/videoTexture.js +41 -41
- package/Materials/Textures/videoTexture.js.map +1 -1
- package/Materials/drawWrapper.js +6 -6
- package/Materials/drawWrapper.js.map +1 -1
- package/Materials/effect.js +18 -18
- package/Materials/effect.js.map +1 -1
- package/Materials/effectRenderer.js +9 -9
- package/Materials/effectRenderer.js.map +1 -1
- package/Materials/fresnelParameters.d.ts +2 -2
- package/Materials/fresnelParameters.js +13 -13
- package/Materials/fresnelParameters.js.map +1 -1
- package/Materials/material.detailMapConfiguration.js +5 -5
- package/Materials/material.detailMapConfiguration.js.map +1 -1
- package/Materials/material.js +223 -223
- package/Materials/material.js.map +1 -1
- package/Materials/materialPluginBase.js +5 -5
- package/Materials/materialPluginBase.js.map +1 -1
- package/Materials/materialPluginEvent.d.ts +14 -14
- package/Materials/materialPluginManager.d.ts +1 -1
- package/Materials/multiMaterial.js +16 -16
- package/Materials/multiMaterial.js.map +1 -1
- package/Materials/shadowDepthWrapper.js +14 -14
- package/Materials/shadowDepthWrapper.js.map +1 -1
- package/Materials/standardMaterial.js +100 -100
- package/Materials/standardMaterial.js.map +1 -1
- package/Materials/uniformBufferEffectCommonAccessor.js +3 -3
- package/Materials/uniformBufferEffectCommonAccessor.js.map +1 -1
- package/Maths/math.functions.js +2 -0
- package/Maths/math.functions.js.map +1 -1
- package/Maths/math.path.js +11 -11
- package/Maths/math.path.js.map +1 -1
- package/Maths/math.vector.d.ts +27 -7
- package/Maths/math.vector.js +75 -48
- package/Maths/math.vector.js.map +1 -1
- package/Meshes/Builders/goldbergBuilder.d.ts +2 -2
- package/Meshes/Compression/dracoCompression.js +23 -23
- package/Meshes/Compression/dracoCompression.js.map +1 -1
- package/Meshes/Compression/meshoptCompression.js +9 -9
- package/Meshes/Compression/meshoptCompression.js.map +1 -1
- package/Meshes/abstractMesh.js +179 -179
- package/Meshes/abstractMesh.js.map +1 -1
- package/Meshes/geometry.js +32 -32
- package/Meshes/geometry.js.map +1 -1
- package/Meshes/goldbergMesh.d.ts +1 -1
- package/Meshes/linesMesh.js +3 -3
- package/Meshes/linesMesh.js.map +1 -1
- package/Meshes/mesh.js +166 -166
- package/Meshes/mesh.js.map +1 -1
- package/Meshes/mesh.vertexData.js.map +1 -1
- package/Meshes/polygonMesh.js +5 -5
- package/Meshes/polygonMesh.js.map +1 -1
- package/Meshes/subMesh.js +59 -59
- package/Meshes/subMesh.js.map +1 -1
- package/Meshes/transformNode.js +52 -52
- package/Meshes/transformNode.js.map +1 -1
- package/Misc/PerformanceViewer/performanceViewerCollectionStrategies.d.ts +1 -1
- package/Misc/PerformanceViewer/performanceViewerCollector.js +12 -12
- package/Misc/PerformanceViewer/performanceViewerCollector.js.map +1 -1
- package/Misc/arrayTools.d.ts +1 -1
- package/Misc/copyTextureToTexture.js +3 -3
- package/Misc/copyTextureToTexture.js.map +1 -1
- package/Misc/coroutine.d.ts +5 -5
- package/Misc/deferred.js +9 -9
- package/Misc/deferred.js.map +1 -1
- package/Misc/depthReducer.js +7 -7
- package/Misc/depthReducer.js.map +1 -1
- package/Misc/environmentTextureTools.d.ts +1 -1
- package/Misc/error.d.ts +1 -1
- package/Misc/fileTools.d.ts +5 -5
- package/Misc/filesInput.js +6 -6
- package/Misc/filesInput.js.map +1 -1
- package/Misc/khronosTextureContainer2.js +9 -9
- package/Misc/khronosTextureContainer2.js.map +1 -1
- package/Misc/observable.js +12 -12
- package/Misc/observable.js.map +1 -1
- package/Misc/perfCounter.js +16 -16
- package/Misc/perfCounter.js.map +1 -1
- package/Misc/sceneOptimizer.js +76 -76
- package/Misc/sceneOptimizer.js.map +1 -1
- package/Misc/stringDictionary.d.ts +1 -1
- package/Misc/trajectoryClassifier.js +67 -67
- package/Misc/trajectoryClassifier.js.map +1 -1
- package/Misc/videoRecorder.js +15 -15
- package/Misc/videoRecorder.js.map +1 -1
- package/Misc/virtualJoystick.js +12 -12
- package/Misc/virtualJoystick.js.map +1 -1
- package/Morph/morphTarget.js +28 -28
- package/Morph/morphTarget.js.map +1 -1
- package/Morph/morphTargetManager.js +18 -18
- package/Morph/morphTargetManager.js.map +1 -1
- package/Offline/database.js +12 -12
- package/Offline/database.js.map +1 -1
- package/Particles/EmitterTypes/coneParticleEmitter.js +25 -25
- package/Particles/EmitterTypes/coneParticleEmitter.js.map +1 -1
- package/Particles/EmitterTypes/meshParticleEmitter.js +20 -20
- package/Particles/EmitterTypes/meshParticleEmitter.js.map +1 -1
- package/Particles/baseParticleSystem.js +232 -232
- package/Particles/baseParticleSystem.js.map +1 -1
- package/Particles/cloudPoint.js +9 -9
- package/Particles/cloudPoint.js.map +1 -1
- package/Particles/gpuParticleSystem.js +123 -123
- package/Particles/gpuParticleSystem.js.map +1 -1
- package/Particles/particleSystem.js +102 -102
- package/Particles/particleSystem.js.map +1 -1
- package/Particles/particleSystemComponent.js +5 -0
- package/Particles/particleSystemComponent.js.map +1 -1
- package/Particles/pointsCloudSystem.js +18 -18
- package/Particles/pointsCloudSystem.js.map +1 -1
- package/Particles/solidParticle.js +23 -23
- package/Particles/solidParticle.js.map +1 -1
- package/Physics/index.d.ts +1 -0
- package/Physics/index.js +1 -0
- package/Physics/index.js.map +1 -1
- package/Physics/v1/physicsEngine.js +14 -14
- package/Physics/v1/physicsEngine.js.map +1 -1
- package/Physics/v1/physicsImpostor.js +149 -149
- package/Physics/v1/physicsImpostor.js.map +1 -1
- package/Physics/v2/IPhysicsEnginePlugin.d.ts +6 -8
- package/Physics/v2/IPhysicsEnginePlugin.js +1 -0
- package/Physics/v2/IPhysicsEnginePlugin.js.map +1 -1
- package/Physics/v2/physicsBody.d.ts +10 -1
- package/Physics/v2/physicsBody.js +13 -1
- package/Physics/v2/physicsBody.js.map +1 -1
- package/Physics/v2/physicsConstraint.d.ts +139 -66
- package/Physics/v2/physicsConstraint.js +145 -78
- package/Physics/v2/physicsConstraint.js.map +1 -1
- package/Physics/v2/physicsEngine.js +14 -14
- package/Physics/v2/physicsEngine.js.map +1 -1
- package/PostProcesses/RenderPipeline/Pipelines/defaultRenderingPipeline.js +137 -129
- package/PostProcesses/RenderPipeline/Pipelines/defaultRenderingPipeline.js.map +1 -1
- package/PostProcesses/RenderPipeline/Pipelines/ssao2RenderingPipeline.js +68 -68
- package/PostProcesses/RenderPipeline/Pipelines/ssao2RenderingPipeline.js.map +1 -1
- package/PostProcesses/RenderPipeline/Pipelines/ssaoRenderingPipeline.js +6 -6
- package/PostProcesses/RenderPipeline/Pipelines/ssaoRenderingPipeline.js.map +1 -1
- package/PostProcesses/RenderPipeline/Pipelines/standardRenderingPipeline.js +226 -225
- package/PostProcesses/RenderPipeline/Pipelines/standardRenderingPipeline.js.map +1 -1
- package/PostProcesses/RenderPipeline/postProcessRenderPipeline.js +10 -10
- package/PostProcesses/RenderPipeline/postProcessRenderPipeline.js.map +1 -1
- package/PostProcesses/anaglyphPostProcess.js +7 -7
- package/PostProcesses/anaglyphPostProcess.js.map +1 -1
- package/PostProcesses/blackAndWhitePostProcess.js +7 -7
- package/PostProcesses/blackAndWhitePostProcess.js.map +1 -1
- package/PostProcesses/bloomEffect.js +28 -28
- package/PostProcesses/bloomEffect.js.map +1 -1
- package/PostProcesses/bloomMergePostProcess.js +7 -7
- package/PostProcesses/bloomMergePostProcess.js.map +1 -1
- package/PostProcesses/blurPostProcess.js +32 -32
- package/PostProcesses/blurPostProcess.js.map +1 -1
- package/PostProcesses/chromaticAberrationPostProcess.js +7 -7
- package/PostProcesses/chromaticAberrationPostProcess.js.map +1 -1
- package/PostProcesses/circleOfConfusionPostProcess.js +7 -7
- package/PostProcesses/circleOfConfusionPostProcess.js.map +1 -1
- package/PostProcesses/colorCorrectionPostProcess.js +7 -7
- package/PostProcesses/colorCorrectionPostProcess.js.map +1 -1
- package/PostProcesses/convolutionPostProcess.js +7 -7
- package/PostProcesses/convolutionPostProcess.js.map +1 -1
- package/PostProcesses/depthOfFieldBlurPostProcess.js +7 -7
- package/PostProcesses/depthOfFieldBlurPostProcess.js.map +1 -1
- package/PostProcesses/depthOfFieldEffect.js +36 -36
- package/PostProcesses/depthOfFieldEffect.js.map +1 -1
- package/PostProcesses/depthOfFieldMergePostProcess.js +7 -7
- package/PostProcesses/depthOfFieldMergePostProcess.js.map +1 -1
- package/PostProcesses/extractHighlightsPostProcess.js +7 -7
- package/PostProcesses/extractHighlightsPostProcess.js.map +1 -1
- package/PostProcesses/filterPostProcess.js +7 -7
- package/PostProcesses/filterPostProcess.js.map +1 -1
- package/PostProcesses/grainPostProcess.js +7 -7
- package/PostProcesses/grainPostProcess.js.map +1 -1
- package/PostProcesses/imageProcessingPostProcess.js +42 -42
- package/PostProcesses/imageProcessingPostProcess.js.map +1 -1
- package/PostProcesses/motionBlurPostProcess.js +41 -41
- package/PostProcesses/motionBlurPostProcess.js.map +1 -1
- package/PostProcesses/passPostProcess.js +15 -15
- package/PostProcesses/passPostProcess.js.map +1 -1
- package/PostProcesses/postProcess.d.ts +2 -2
- package/PostProcesses/postProcess.js +123 -123
- package/PostProcesses/postProcess.js.map +1 -1
- package/PostProcesses/refractionPostProcess.js +21 -21
- package/PostProcesses/refractionPostProcess.js.map +1 -1
- package/PostProcesses/screenSpaceCurvaturePostProcess.js +7 -7
- package/PostProcesses/screenSpaceCurvaturePostProcess.js.map +1 -1
- package/PostProcesses/screenSpaceReflectionPostProcess.js +19 -19
- package/PostProcesses/screenSpaceReflectionPostProcess.js.map +1 -1
- package/PostProcesses/sharpenPostProcess.js +7 -7
- package/PostProcesses/sharpenPostProcess.js.map +1 -1
- package/PostProcesses/stereoscopicInterlacePostProcess.js +14 -14
- package/PostProcesses/stereoscopicInterlacePostProcess.js.map +1 -1
- package/PostProcesses/tonemapPostProcess.js +7 -7
- package/PostProcesses/tonemapPostProcess.js.map +1 -1
- package/PostProcesses/volumetricLightScatteringPostProcess.js +11 -11
- package/PostProcesses/volumetricLightScatteringPostProcess.js.map +1 -1
- package/PostProcesses/vrDistortionCorrectionPostProcess.js +7 -7
- package/PostProcesses/vrDistortionCorrectionPostProcess.js.map +1 -1
- package/Rendering/depthPeelingRenderer.js +36 -36
- package/Rendering/depthPeelingRenderer.js.map +1 -1
- package/Rendering/depthRenderer.js +8 -8
- package/Rendering/depthRenderer.js.map +1 -1
- package/Rendering/edgesRenderer.js +34 -34
- package/Rendering/edgesRenderer.js.map +1 -1
- package/Rendering/fluidRenderer/fluidRenderer.js +8 -8
- package/Rendering/fluidRenderer/fluidRenderer.js.map +1 -1
- package/Rendering/fluidRenderer/fluidRenderingDepthTextureCopy.js +3 -3
- package/Rendering/fluidRenderer/fluidRenderingDepthTextureCopy.js.map +1 -1
- package/Rendering/fluidRenderer/fluidRenderingObject.js +22 -19
- package/Rendering/fluidRenderer/fluidRenderingObject.js.map +1 -1
- package/Rendering/fluidRenderer/fluidRenderingObjectCustomParticles.js +12 -12
- package/Rendering/fluidRenderer/fluidRenderingObjectCustomParticles.js.map +1 -1
- package/Rendering/fluidRenderer/fluidRenderingObjectParticleSystem.js +18 -18
- package/Rendering/fluidRenderer/fluidRenderingObjectParticleSystem.js.map +1 -1
- package/Rendering/fluidRenderer/fluidRenderingTargetRenderer.js +71 -68
- package/Rendering/fluidRenderer/fluidRenderingTargetRenderer.js.map +1 -1
- package/Rendering/fluidRenderer/fluidRenderingTextures.js +29 -29
- package/Rendering/fluidRenderer/fluidRenderingTextures.js.map +1 -1
- package/Rendering/geometryBufferRenderer.js +173 -168
- package/Rendering/geometryBufferRenderer.js.map +1 -1
- package/Rendering/prePassRenderer.js +51 -51
- package/Rendering/prePassRenderer.js.map +1 -1
- package/Rendering/renderingGroup.js +25 -25
- package/Rendering/renderingGroup.js.map +1 -1
- package/Rendering/renderingManager.js +21 -21
- package/Rendering/renderingManager.js.map +1 -1
- package/Rendering/subSurfaceConfiguration.js +18 -18
- package/Rendering/subSurfaceConfiguration.js.map +1 -1
- package/Rendering/utilityLayerRenderer.js +76 -76
- package/Rendering/utilityLayerRenderer.js.map +1 -1
- package/Shaders/ShadersInclude/pbrBlockSubSurface.js +1 -1
- package/Shaders/ShadersInclude/pbrBlockSubSurface.js.map +1 -1
- package/Shaders/fluidRenderingParticleDepth.fragment.js +5 -1
- package/Shaders/fluidRenderingParticleDepth.fragment.js.map +1 -1
- package/Shaders/fluidRenderingRender.fragment.js +7 -2
- package/Shaders/fluidRenderingRender.fragment.js.map +1 -1
- package/Shaders/geometry.fragment.d.ts +2 -0
- package/Shaders/geometry.fragment.js +5 -1
- package/Shaders/geometry.fragment.js.map +1 -1
- package/Shaders/geometry.vertex.d.ts +2 -0
- package/Shaders/geometry.vertex.js +8 -4
- package/Shaders/geometry.vertex.js.map +1 -1
- package/Sprites/sprite.js +16 -16
- package/Sprites/sprite.js.map +1 -1
- package/Sprites/spriteManager.js +81 -81
- package/Sprites/spriteManager.js.map +1 -1
- package/Sprites/spriteMap.js +32 -32
- package/Sprites/spriteMap.js.map +1 -1
- package/Sprites/spriteRenderer.js +6 -6
- package/Sprites/spriteRenderer.js.map +1 -1
- package/Sprites/thinSprite.js +22 -22
- package/Sprites/thinSprite.js.map +1 -1
- package/States/stencilStateComposer.js +10 -10
- package/States/stencilStateComposer.js.map +1 -1
- package/XR/features/WebXRAnchorSystem.js +7 -7
- package/XR/features/WebXRAnchorSystem.js.map +1 -1
- package/XR/features/WebXRControllerMovement.d.ts +3 -3
- package/XR/features/WebXRControllerMovement.js +97 -97
- package/XR/features/WebXRControllerMovement.js.map +1 -1
- package/XR/features/WebXRControllerPhysics.js +24 -24
- package/XR/features/WebXRControllerPhysics.js.map +1 -1
- package/XR/features/WebXRControllerTeleportation.js +26 -26
- package/XR/features/WebXRControllerTeleportation.js.map +1 -1
- package/XR/features/WebXRDOMOverlay.d.ts +1 -1
- package/XR/features/WebXRFeaturePointSystem.js +6 -6
- package/XR/features/WebXRFeaturePointSystem.js.map +1 -1
- package/XR/features/WebXRHandTracking.d.ts +1 -1
- package/XR/features/WebXRHandTracking.js +95 -95
- package/XR/features/WebXRHandTracking.js.map +1 -1
- package/XR/features/WebXRWalkingLocomotion.js +21 -21
- package/XR/features/WebXRWalkingLocomotion.js.map +1 -1
- package/XR/motionController/webXRAbstractMotionController.d.ts +3 -3
- package/XR/motionController/webXRMotionControllerManager.d.ts +1 -1
- package/XR/native/nativeXRFrame.js +3 -3
- package/XR/native/nativeXRFrame.js.map +1 -1
- package/XR/webXRFeaturesManager.d.ts +1 -1
- package/XR/webXRLayerWrapper.d.ts +2 -2
- package/XR/webXRLayerWrapper.js +17 -17
- package/XR/webXRLayerWrapper.js.map +1 -1
- package/abstractScene.d.ts +2 -2
- package/node.d.ts +1 -1
- package/node.js +71 -71
- package/node.js.map +1 -1
- package/package.json +1 -1
- package/scene.js +777 -777
- package/scene.js.map +1 -1
- package/sceneComponent.d.ts +12 -12
- package/types.d.ts +11 -11
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"WebXRWalkingLocomotion.js","sourceRoot":"","sources":["../../../../../lts/core/generated/XR/features/WebXRWalkingLocomotion.ts"],"names":[],"mappings":"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","sourcesContent":["import type { Engine } from \"../../Engines/engine\";\r\nimport { TmpVectors, Vector2, Vector3 } from \"../../Maths/math.vector\";\r\nimport type { TransformNode } from \"../../Meshes/transformNode\";\r\nimport { Logger } from \"../../Misc/logger\";\r\nimport { Observable } from \"../../Misc/observable\";\r\nimport type { Nullable } from \"../../types\";\r\nimport type { WebXRCamera } from \"../webXRCamera\";\r\nimport { WebXRFeatureName, WebXRFeaturesManager } from \"../webXRFeaturesManager\";\r\nimport type { WebXRSessionManager } from \"../webXRSessionManager\";\r\nimport { WebXRAbstractFeature } from \"./WebXRAbstractFeature\";\r\n\r\nclass CircleBuffer {\r\n private _samples: Array<Vector2> = [];\r\n private _idx: number = 0;\r\n\r\n constructor(numSamples: number, initializer?: () => Vector2) {\r\n for (let idx = 0; idx < numSamples; ++idx) {\r\n this._samples.push(initializer ? initializer() : Vector2.Zero());\r\n }\r\n }\r\n\r\n public get length() {\r\n return this._samples.length;\r\n }\r\n\r\n public push(x: number, y: number) {\r\n this._idx = (this._idx + this._samples.length - 1) % this._samples.length;\r\n this.at(0).copyFromFloats(x, y);\r\n }\r\n\r\n public at(idx: number) {\r\n if (idx >= this._samples.length) {\r\n throw new Error(\"Index out of bounds\");\r\n }\r\n return this._samples[(this._idx + idx) % this._samples.length];\r\n }\r\n}\r\n\r\ninterface IDetectedStep {\r\n leftApex: Vector2;\r\n rightApex: Vector2;\r\n currentPosition: Vector2;\r\n currentStepDirection: \"left\" | \"right\";\r\n}\r\n\r\nclass FirstStepDetector {\r\n private _samples = new CircleBuffer(20);\r\n private _entropy = 0;\r\n\r\n public onFirstStepDetected: Observable<IDetectedStep> = new Observable<IDetectedStep>();\r\n\r\n public update(posX: number, posY: number, forwardX: number, forwardY: number) {\r\n this._samples.push(posX, posY);\r\n const origin = this._samples.at(0);\r\n\r\n this._entropy *= this._entropyDecayFactor;\r\n this._entropy += Vector2.Distance(origin, this._samples.at(1));\r\n if (this._entropy > this._entropyThreshold) {\r\n return;\r\n }\r\n\r\n let samePointIdx;\r\n for (samePointIdx = this._samePointCheckStartIdx; samePointIdx < this._samples.length; ++samePointIdx) {\r\n if (Vector2.DistanceSquared(origin, this._samples.at(samePointIdx)) < this._samePointSquaredDistanceThreshold) {\r\n break;\r\n }\r\n }\r\n\r\n if (samePointIdx === this._samples.length) {\r\n return;\r\n }\r\n\r\n let apexDistSquared = -1;\r\n let apexIdx = 0;\r\n for (let distSquared, idx = 1; idx < samePointIdx; ++idx) {\r\n distSquared = Vector2.DistanceSquared(origin, this._samples.at(idx));\r\n if (distSquared > apexDistSquared) {\r\n apexIdx = idx;\r\n apexDistSquared = distSquared;\r\n }\r\n }\r\n\r\n if (apexDistSquared < this._apexSquaredDistanceThreshold) {\r\n return;\r\n }\r\n\r\n const apex = this._samples.at(apexIdx);\r\n const axis = apex.subtract(origin);\r\n axis.normalize();\r\n\r\n const vec = TmpVectors.Vector2[0];\r\n let dot;\r\n let sample;\r\n let sumSquaredProjectionDistances = 0;\r\n for (let idx = 1; idx < samePointIdx; ++idx) {\r\n sample = this._samples.at(idx);\r\n sample.subtractToRef(origin, vec);\r\n dot = Vector2.Dot(axis, vec);\r\n sumSquaredProjectionDistances += vec.lengthSquared() - dot * dot;\r\n }\r\n\r\n if (sumSquaredProjectionDistances > samePointIdx * this._squaredProjectionDistanceThreshold) {\r\n return;\r\n }\r\n\r\n const forwardVec = TmpVectors.Vector3[0];\r\n forwardVec.set(forwardX, forwardY, 0);\r\n const axisVec = TmpVectors.Vector3[1];\r\n axisVec.set(axis.x, axis.y, 0);\r\n const isApexLeft = Vector3.Cross(forwardVec, axisVec).z > 0;\r\n const leftApex = origin.clone();\r\n const rightApex = origin.clone();\r\n apex.subtractToRef(origin, axis);\r\n if (isApexLeft) {\r\n axis.scaleAndAddToRef(this._axisToApexShrinkFactor, leftApex);\r\n axis.scaleAndAddToRef(this._axisToApexExtendFactor, rightApex);\r\n } else {\r\n axis.scaleAndAddToRef(this._axisToApexExtendFactor, leftApex);\r\n axis.scaleAndAddToRef(this._axisToApexShrinkFactor, rightApex);\r\n }\r\n this.onFirstStepDetected.notifyObservers({\r\n leftApex: leftApex,\r\n rightApex: rightApex,\r\n currentPosition: origin,\r\n currentStepDirection: isApexLeft ? \"right\" : \"left\",\r\n });\r\n }\r\n\r\n public reset() {\r\n for (let idx = 0; idx < this._samples.length; ++idx) {\r\n this._samples.at(idx).copyFromFloats(0, 0);\r\n }\r\n }\r\n\r\n private get _samePointCheckStartIdx() {\r\n return Math.floor(this._samples.length / 3);\r\n }\r\n\r\n private get _samePointSquaredDistanceThreshold() {\r\n return 0.03 * 0.03;\r\n }\r\n\r\n private get _apexSquaredDistanceThreshold() {\r\n return 0.09 * 0.09;\r\n }\r\n\r\n private get _squaredProjectionDistanceThreshold() {\r\n return 0.03 * 0.03;\r\n }\r\n\r\n private get _axisToApexShrinkFactor() {\r\n return 0.8;\r\n }\r\n\r\n private get _axisToApexExtendFactor() {\r\n return -1.6;\r\n }\r\n\r\n private get _entropyDecayFactor() {\r\n return 0.93;\r\n }\r\n\r\n private get _entropyThreshold() {\r\n return 0.4;\r\n }\r\n}\r\n\r\nclass WalkingTracker {\r\n private _leftApex = new Vector2();\r\n private _rightApex = new Vector2();\r\n private _currentPosition = new Vector2();\r\n private _axis = new Vector2();\r\n private _axisLength = -1;\r\n private _forward = new Vector2();\r\n private _steppingLeft = false;\r\n private _t = -1;\r\n private _maxT = -1;\r\n private _maxTPosition = new Vector2();\r\n private _vitality = 0;\r\n\r\n public onMovement = new Observable<{ deltaT: number }>();\r\n public onFootfall = new Observable<{ foot: \"left\" | \"right\" }>();\r\n\r\n constructor(leftApex: Vector2, rightApex: Vector2, currentPosition: Vector2, currentStepDirection: \"left\" | \"right\") {\r\n this._reset(leftApex, rightApex, currentPosition, currentStepDirection === \"left\");\r\n }\r\n\r\n private _reset(leftApex: Vector2, rightApex: Vector2, currentPosition: Vector2, steppingLeft: boolean) {\r\n this._leftApex.copyFrom(leftApex);\r\n this._rightApex.copyFrom(rightApex);\r\n this._steppingLeft = steppingLeft;\r\n\r\n if (this._steppingLeft) {\r\n this._leftApex.subtractToRef(this._rightApex, this._axis);\r\n this._forward.copyFromFloats(-this._axis.y, this._axis.x);\r\n } else {\r\n this._rightApex.subtractToRef(this._leftApex, this._axis);\r\n this._forward.copyFromFloats(this._axis.y, -this._axis.x);\r\n }\r\n this._axisLength = this._axis.length();\r\n this._forward.scaleInPlace(1 / this._axisLength);\r\n\r\n this._updateTAndVitality(currentPosition.x, currentPosition.y);\r\n this._maxT = this._t;\r\n this._maxTPosition.copyFrom(currentPosition);\r\n\r\n this._vitality = 1;\r\n }\r\n\r\n private _updateTAndVitality(x: number, y: number) {\r\n this._currentPosition.copyFromFloats(x, y);\r\n\r\n if (this._steppingLeft) {\r\n this._currentPosition.subtractInPlace(this._rightApex);\r\n } else {\r\n this._currentPosition.subtractInPlace(this._leftApex);\r\n }\r\n const priorT = this._t;\r\n const dot = Vector2.Dot(this._currentPosition, this._axis);\r\n this._t = dot / (this._axisLength * this._axisLength);\r\n const projDistSquared = this._currentPosition.lengthSquared() - (dot / this._axisLength) * (dot / this._axisLength);\r\n\r\n // TODO: Extricate the magic.\r\n this._vitality *= 0.92 - 100 * Math.max(projDistSquared - 0.0016, 0) + Math.max(this._t - priorT, 0);\r\n }\r\n\r\n public update(x: number, y: number) {\r\n if (this._vitality < this._vitalityThreshold) {\r\n return false;\r\n }\r\n\r\n const priorT = this._t;\r\n this._updateTAndVitality(x, y);\r\n\r\n if (this._t > this._maxT) {\r\n this._maxT = this._t;\r\n this._maxTPosition.copyFromFloats(x, y);\r\n }\r\n\r\n if (this._vitality < this._vitalityThreshold) {\r\n return false;\r\n }\r\n\r\n if (this._t > priorT) {\r\n this.onMovement.notifyObservers({ deltaT: this._t - priorT });\r\n\r\n if (priorT < 0.5 && this._t >= 0.5) {\r\n this.onFootfall.notifyObservers({ foot: this._steppingLeft ? \"left\" : \"right\" });\r\n }\r\n }\r\n\r\n if (this._t < 0.95 * this._maxT) {\r\n this._currentPosition.copyFromFloats(x, y);\r\n if (this._steppingLeft) {\r\n this._leftApex.copyFrom(this._maxTPosition);\r\n } else {\r\n this._rightApex.copyFrom(this._maxTPosition);\r\n }\r\n this._reset(this._leftApex, this._rightApex, this._currentPosition, !this._steppingLeft);\r\n }\r\n\r\n if (this._axisLength < 0.03) {\r\n return false;\r\n }\r\n\r\n return true;\r\n }\r\n\r\n private get _vitalityThreshold() {\r\n return 0.1;\r\n }\r\n\r\n get forward() {\r\n return this._forward;\r\n }\r\n}\r\n\r\nclass Walker {\r\n private _engine: Engine;\r\n private _detector = new FirstStepDetector();\r\n private _walker: Nullable<WalkingTracker> = null;\r\n private _movement = new Vector2();\r\n private _millisecondsSinceLastUpdate: number = Walker._MillisecondsPerUpdate;\r\n\r\n private static get _MillisecondsPerUpdate(): number {\r\n // 15 FPS\r\n return 1000 / 15;\r\n }\r\n\r\n public movementThisFrame: Vector3 = Vector3.Zero();\r\n\r\n constructor(engine: Engine) {\r\n this._engine = engine;\r\n this._detector.onFirstStepDetected.add((event) => {\r\n if (!this._walker) {\r\n this._walker = new WalkingTracker(event.leftApex, event.rightApex, event.currentPosition, event.currentStepDirection);\r\n this._walker.onFootfall.add(() => {\r\n console.log(\"Footfall!\");\r\n });\r\n this._walker.onMovement.add((event) => {\r\n this._walker!.forward.scaleAndAddToRef(0.024 * event.deltaT, this._movement);\r\n });\r\n }\r\n });\r\n }\r\n\r\n public update(position: Vector3, forward: Vector3) {\r\n forward.y = 0;\r\n forward.normalize();\r\n\r\n // Enforce reduced framerate\r\n this._millisecondsSinceLastUpdate += this._engine.getDeltaTime();\r\n if (this._millisecondsSinceLastUpdate >= Walker._MillisecondsPerUpdate) {\r\n this._millisecondsSinceLastUpdate -= Walker._MillisecondsPerUpdate;\r\n this._detector.update(position.x, position.z, forward.x, forward.z);\r\n if (this._walker) {\r\n const updated = this._walker.update(position.x, position.z);\r\n if (!updated) {\r\n this._walker = null;\r\n }\r\n }\r\n this._movement.scaleInPlace(0.85);\r\n }\r\n\r\n this.movementThisFrame.set(this._movement.x, 0, this._movement.y);\r\n }\r\n}\r\n\r\n/**\r\n * Options for the walking locomotion feature.\r\n */\r\nexport interface IWebXRWalkingLocomotionOptions {\r\n /**\r\n * The target to be moved by walking locomotion. This should be the transform node\r\n * which is the root of the XR space (i.e., the WebXRCamera's parent node). However,\r\n * for simple cases and legacy purposes, articulating the WebXRCamera itself is also\r\n * supported as a deprecated feature.\r\n */\r\n locomotionTarget: WebXRCamera | TransformNode;\r\n}\r\n\r\n/**\r\n * A module that will enable VR locomotion by detecting when the user walks in place.\r\n */\r\nexport class WebXRWalkingLocomotion extends WebXRAbstractFeature {\r\n /**\r\n * The module's name.\r\n */\r\n public static get Name(): string {\r\n return WebXRFeatureName.WALKING_LOCOMOTION;\r\n }\r\n\r\n /**\r\n * The (Babylon) version of this module.\r\n * This is an integer representing the implementation version.\r\n * This number has no external basis.\r\n */\r\n public static get Version(): number {\r\n return 1;\r\n }\r\n\r\n private _sessionManager: WebXRSessionManager;\r\n private _up: Vector3 = new Vector3();\r\n private _forward: Vector3 = new Vector3();\r\n private _position: Vector3 = new Vector3();\r\n private _movement: Vector3 = new Vector3();\r\n private _walker: Nullable<Walker>;\r\n\r\n private _locomotionTarget: WebXRCamera | TransformNode;\r\n private _isLocomotionTargetWebXRCamera: boolean;\r\n\r\n /**\r\n * The target to be articulated by walking locomotion.\r\n * When the walking locomotion feature detects walking in place, this element's\r\n * X and Z coordinates will be modified to reflect locomotion. This target should\r\n * be either the XR space's origin (i.e., the parent node of the WebXRCamera) or\r\n * the WebXRCamera itself. Note that the WebXRCamera path will modify the position\r\n * of the WebXRCamera directly and is thus discouraged.\r\n */\r\n public get locomotionTarget(): WebXRCamera | TransformNode {\r\n return this._locomotionTarget;\r\n }\r\n\r\n /**\r\n * The target to be articulated by walking locomotion.\r\n * When the walking locomotion feature detects walking in place, this element's\r\n * X and Z coordinates will be modified to reflect locomotion. This target should\r\n * be either the XR space's origin (i.e., the parent node of the WebXRCamera) or\r\n * the WebXRCamera itself. Note that the WebXRCamera path will modify the position\r\n * of the WebXRCamera directly and is thus discouraged.\r\n */\r\n public set locomotionTarget(locomotionTarget: WebXRCamera | TransformNode) {\r\n this._locomotionTarget = locomotionTarget;\r\n this._isLocomotionTargetWebXRCamera = this._locomotionTarget.getClassName() === \"WebXRCamera\";\r\n }\r\n\r\n /**\r\n * Construct a new Walking Locomotion feature.\r\n * @param sessionManager manager for the current XR session\r\n * @param options creation options, prominently including the vector target for locomotion\r\n */\r\n public constructor(sessionManager: WebXRSessionManager, options: IWebXRWalkingLocomotionOptions) {\r\n super(sessionManager);\r\n this._sessionManager = sessionManager;\r\n this.locomotionTarget = options.locomotionTarget;\r\n if (this._isLocomotionTargetWebXRCamera) {\r\n Logger.Warn(\r\n \"Using walking locomotion directly on a WebXRCamera may have unintended interactions with other XR techniques. Using an XR space parent is highly recommended\"\r\n );\r\n }\r\n }\r\n\r\n /**\r\n * Checks whether this feature is compatible with the current WebXR session.\r\n * Walking locomotion is only compatible with \"immersive-vr\" sessions.\r\n * @returns true if compatible, false otherwise\r\n */\r\n public isCompatible(): boolean {\r\n return this._sessionManager.sessionMode === undefined || this._sessionManager.sessionMode === \"immersive-vr\";\r\n }\r\n\r\n /**\r\n * Attaches the feature.\r\n * Typically called automatically by the features manager.\r\n * @returns true if attach succeeded, false otherwise\r\n */\r\n public attach(): boolean {\r\n if (!this.isCompatible || !super.attach()) {\r\n return false;\r\n }\r\n\r\n this._walker = new Walker(this._sessionManager.scene.getEngine());\r\n return true;\r\n }\r\n\r\n /**\r\n * Detaches the feature.\r\n * Typically called automatically by the features manager.\r\n * @returns true if detach succeeded, false otherwise\r\n */\r\n public detach(): boolean {\r\n if (!super.detach()) {\r\n return false;\r\n }\r\n\r\n this._walker = null;\r\n return true;\r\n }\r\n\r\n protected _onXRFrame(frame: XRFrame): void {\r\n const pose = frame.getViewerPose(this._sessionManager.baseReferenceSpace);\r\n if (!pose) {\r\n return;\r\n }\r\n\r\n const handednessScalar = this.locomotionTarget.getScene().useRightHandedSystem ? 1 : -1;\r\n\r\n const m = pose.transform.matrix;\r\n this._up.copyFromFloats(m[4], m[5], handednessScalar * m[6]);\r\n this._forward.copyFromFloats(m[8], m[9], handednessScalar * m[10]);\r\n this._position.copyFromFloats(m[12], m[13], handednessScalar * m[14]);\r\n\r\n // Compute the nape position\r\n this._forward.scaleAndAddToRef(0.05, this._position);\r\n this._up.scaleAndAddToRef(-0.05, this._position);\r\n this._walker!.update(this._position, this._forward);\r\n this._movement.copyFrom(this._walker!.movementThisFrame);\r\n if (!this._isLocomotionTargetWebXRCamera) {\r\n Vector3.TransformNormalToRef(this._movement, this.locomotionTarget.getWorldMatrix(), this._movement);\r\n }\r\n this.locomotionTarget.position.addInPlace(this._movement);\r\n }\r\n}\r\n\r\n//register the plugin\r\nWebXRFeaturesManager.AddWebXRFeature(\r\n WebXRWalkingLocomotion.Name,\r\n (xrSessionManager, options) => {\r\n return () => new WebXRWalkingLocomotion(xrSessionManager, options);\r\n },\r\n WebXRWalkingLocomotion.Version,\r\n false\r\n);\r\n"]}
|
|
1
|
+
{"version":3,"file":"WebXRWalkingLocomotion.js","sourceRoot":"","sources":["../../../../../lts/core/generated/XR/features/WebXRWalkingLocomotion.ts"],"names":[],"mappings":"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","sourcesContent":["import type { Engine } from \"../../Engines/engine\";\r\nimport { TmpVectors, Vector2, Vector3 } from \"../../Maths/math.vector\";\r\nimport type { TransformNode } from \"../../Meshes/transformNode\";\r\nimport { Logger } from \"../../Misc/logger\";\r\nimport { Observable } from \"../../Misc/observable\";\r\nimport type { Nullable } from \"../../types\";\r\nimport type { WebXRCamera } from \"../webXRCamera\";\r\nimport { WebXRFeatureName, WebXRFeaturesManager } from \"../webXRFeaturesManager\";\r\nimport type { WebXRSessionManager } from \"../webXRSessionManager\";\r\nimport { WebXRAbstractFeature } from \"./WebXRAbstractFeature\";\r\n\r\nclass CircleBuffer {\r\n private _samples: Array<Vector2> = [];\r\n private _idx: number = 0;\r\n\r\n constructor(numSamples: number, initializer?: () => Vector2) {\r\n for (let idx = 0; idx < numSamples; ++idx) {\r\n this._samples.push(initializer ? initializer() : Vector2.Zero());\r\n }\r\n }\r\n\r\n public get length() {\r\n return this._samples.length;\r\n }\r\n\r\n public push(x: number, y: number) {\r\n this._idx = (this._idx + this._samples.length - 1) % this._samples.length;\r\n this.at(0).copyFromFloats(x, y);\r\n }\r\n\r\n public at(idx: number) {\r\n if (idx >= this._samples.length) {\r\n throw new Error(\"Index out of bounds\");\r\n }\r\n return this._samples[(this._idx + idx) % this._samples.length];\r\n }\r\n}\r\n\r\ninterface IDetectedStep {\r\n leftApex: Vector2;\r\n rightApex: Vector2;\r\n currentPosition: Vector2;\r\n currentStepDirection: \"left\" | \"right\";\r\n}\r\n\r\nclass FirstStepDetector {\r\n private _samples = new CircleBuffer(20);\r\n private _entropy = 0;\r\n\r\n public onFirstStepDetected: Observable<IDetectedStep> = new Observable<IDetectedStep>();\r\n\r\n public update(posX: number, posY: number, forwardX: number, forwardY: number) {\r\n this._samples.push(posX, posY);\r\n const origin = this._samples.at(0);\r\n\r\n this._entropy *= this._entropyDecayFactor;\r\n this._entropy += Vector2.Distance(origin, this._samples.at(1));\r\n if (this._entropy > this._entropyThreshold) {\r\n return;\r\n }\r\n\r\n let samePointIdx;\r\n for (samePointIdx = this._samePointCheckStartIdx; samePointIdx < this._samples.length; ++samePointIdx) {\r\n if (Vector2.DistanceSquared(origin, this._samples.at(samePointIdx)) < this._samePointSquaredDistanceThreshold) {\r\n break;\r\n }\r\n }\r\n\r\n if (samePointIdx === this._samples.length) {\r\n return;\r\n }\r\n\r\n let apexDistSquared = -1;\r\n let apexIdx = 0;\r\n for (let distSquared, idx = 1; idx < samePointIdx; ++idx) {\r\n distSquared = Vector2.DistanceSquared(origin, this._samples.at(idx));\r\n if (distSquared > apexDistSquared) {\r\n apexIdx = idx;\r\n apexDistSquared = distSquared;\r\n }\r\n }\r\n\r\n if (apexDistSquared < this._apexSquaredDistanceThreshold) {\r\n return;\r\n }\r\n\r\n const apex = this._samples.at(apexIdx);\r\n const axis = apex.subtract(origin);\r\n axis.normalize();\r\n\r\n const vec = TmpVectors.Vector2[0];\r\n let dot;\r\n let sample;\r\n let sumSquaredProjectionDistances = 0;\r\n for (let idx = 1; idx < samePointIdx; ++idx) {\r\n sample = this._samples.at(idx);\r\n sample.subtractToRef(origin, vec);\r\n dot = Vector2.Dot(axis, vec);\r\n sumSquaredProjectionDistances += vec.lengthSquared() - dot * dot;\r\n }\r\n\r\n if (sumSquaredProjectionDistances > samePointIdx * this._squaredProjectionDistanceThreshold) {\r\n return;\r\n }\r\n\r\n const forwardVec = TmpVectors.Vector3[0];\r\n forwardVec.set(forwardX, forwardY, 0);\r\n const axisVec = TmpVectors.Vector3[1];\r\n axisVec.set(axis.x, axis.y, 0);\r\n const isApexLeft = Vector3.Cross(forwardVec, axisVec).z > 0;\r\n const leftApex = origin.clone();\r\n const rightApex = origin.clone();\r\n apex.subtractToRef(origin, axis);\r\n if (isApexLeft) {\r\n axis.scaleAndAddToRef(this._axisToApexShrinkFactor, leftApex);\r\n axis.scaleAndAddToRef(this._axisToApexExtendFactor, rightApex);\r\n } else {\r\n axis.scaleAndAddToRef(this._axisToApexExtendFactor, leftApex);\r\n axis.scaleAndAddToRef(this._axisToApexShrinkFactor, rightApex);\r\n }\r\n this.onFirstStepDetected.notifyObservers({\r\n leftApex: leftApex,\r\n rightApex: rightApex,\r\n currentPosition: origin,\r\n currentStepDirection: isApexLeft ? \"right\" : \"left\",\r\n });\r\n }\r\n\r\n public reset() {\r\n for (let idx = 0; idx < this._samples.length; ++idx) {\r\n this._samples.at(idx).copyFromFloats(0, 0);\r\n }\r\n }\r\n\r\n private get _samePointCheckStartIdx() {\r\n return Math.floor(this._samples.length / 3);\r\n }\r\n\r\n private get _samePointSquaredDistanceThreshold() {\r\n return 0.03 * 0.03;\r\n }\r\n\r\n private get _apexSquaredDistanceThreshold() {\r\n return 0.09 * 0.09;\r\n }\r\n\r\n private get _squaredProjectionDistanceThreshold() {\r\n return 0.03 * 0.03;\r\n }\r\n\r\n private get _axisToApexShrinkFactor() {\r\n return 0.8;\r\n }\r\n\r\n private get _axisToApexExtendFactor() {\r\n return -1.6;\r\n }\r\n\r\n private get _entropyDecayFactor() {\r\n return 0.93;\r\n }\r\n\r\n private get _entropyThreshold() {\r\n return 0.4;\r\n }\r\n}\r\n\r\nclass WalkingTracker {\r\n private _leftApex = new Vector2();\r\n private _rightApex = new Vector2();\r\n private _currentPosition = new Vector2();\r\n private _axis = new Vector2();\r\n private _axisLength = -1;\r\n private _forward = new Vector2();\r\n private _steppingLeft = false;\r\n private _t = -1;\r\n private _maxT = -1;\r\n private _maxTPosition = new Vector2();\r\n private _vitality = 0;\r\n\r\n public onMovement = new Observable<{ deltaT: number }>();\r\n public onFootfall = new Observable<{ foot: \"left\" | \"right\" }>();\r\n\r\n constructor(leftApex: Vector2, rightApex: Vector2, currentPosition: Vector2, currentStepDirection: \"left\" | \"right\") {\r\n this._reset(leftApex, rightApex, currentPosition, currentStepDirection === \"left\");\r\n }\r\n\r\n private _reset(leftApex: Vector2, rightApex: Vector2, currentPosition: Vector2, steppingLeft: boolean) {\r\n this._leftApex.copyFrom(leftApex);\r\n this._rightApex.copyFrom(rightApex);\r\n this._steppingLeft = steppingLeft;\r\n\r\n if (this._steppingLeft) {\r\n this._leftApex.subtractToRef(this._rightApex, this._axis);\r\n this._forward.copyFromFloats(-this._axis.y, this._axis.x);\r\n } else {\r\n this._rightApex.subtractToRef(this._leftApex, this._axis);\r\n this._forward.copyFromFloats(this._axis.y, -this._axis.x);\r\n }\r\n this._axisLength = this._axis.length();\r\n this._forward.scaleInPlace(1 / this._axisLength);\r\n\r\n this._updateTAndVitality(currentPosition.x, currentPosition.y);\r\n this._maxT = this._t;\r\n this._maxTPosition.copyFrom(currentPosition);\r\n\r\n this._vitality = 1;\r\n }\r\n\r\n private _updateTAndVitality(x: number, y: number) {\r\n this._currentPosition.copyFromFloats(x, y);\r\n\r\n if (this._steppingLeft) {\r\n this._currentPosition.subtractInPlace(this._rightApex);\r\n } else {\r\n this._currentPosition.subtractInPlace(this._leftApex);\r\n }\r\n const priorT = this._t;\r\n const dot = Vector2.Dot(this._currentPosition, this._axis);\r\n this._t = dot / (this._axisLength * this._axisLength);\r\n const projDistSquared = this._currentPosition.lengthSquared() - (dot / this._axisLength) * (dot / this._axisLength);\r\n\r\n // TODO: Extricate the magic.\r\n this._vitality *= 0.92 - 100 * Math.max(projDistSquared - 0.0016, 0) + Math.max(this._t - priorT, 0);\r\n }\r\n\r\n public update(x: number, y: number) {\r\n if (this._vitality < this._vitalityThreshold) {\r\n return false;\r\n }\r\n\r\n const priorT = this._t;\r\n this._updateTAndVitality(x, y);\r\n\r\n if (this._t > this._maxT) {\r\n this._maxT = this._t;\r\n this._maxTPosition.copyFromFloats(x, y);\r\n }\r\n\r\n if (this._vitality < this._vitalityThreshold) {\r\n return false;\r\n }\r\n\r\n if (this._t > priorT) {\r\n this.onMovement.notifyObservers({ deltaT: this._t - priorT });\r\n\r\n if (priorT < 0.5 && this._t >= 0.5) {\r\n this.onFootfall.notifyObservers({ foot: this._steppingLeft ? \"left\" : \"right\" });\r\n }\r\n }\r\n\r\n if (this._t < 0.95 * this._maxT) {\r\n this._currentPosition.copyFromFloats(x, y);\r\n if (this._steppingLeft) {\r\n this._leftApex.copyFrom(this._maxTPosition);\r\n } else {\r\n this._rightApex.copyFrom(this._maxTPosition);\r\n }\r\n this._reset(this._leftApex, this._rightApex, this._currentPosition, !this._steppingLeft);\r\n }\r\n\r\n if (this._axisLength < 0.03) {\r\n return false;\r\n }\r\n\r\n return true;\r\n }\r\n\r\n private get _vitalityThreshold() {\r\n return 0.1;\r\n }\r\n\r\n get forward() {\r\n return this._forward;\r\n }\r\n}\r\n\r\nclass Walker {\r\n private _engine: Engine;\r\n private _detector = new FirstStepDetector();\r\n private _walker: Nullable<WalkingTracker> = null;\r\n private _movement = new Vector2();\r\n private _millisecondsSinceLastUpdate: number = Walker._MillisecondsPerUpdate;\r\n\r\n private static get _MillisecondsPerUpdate(): number {\r\n // 15 FPS\r\n return 1000 / 15;\r\n }\r\n\r\n public movementThisFrame: Vector3 = Vector3.Zero();\r\n\r\n constructor(engine: Engine) {\r\n this._engine = engine;\r\n this._detector.onFirstStepDetected.add((event) => {\r\n if (!this._walker) {\r\n this._walker = new WalkingTracker(event.leftApex, event.rightApex, event.currentPosition, event.currentStepDirection);\r\n this._walker.onFootfall.add(() => {\r\n console.log(\"Footfall!\");\r\n });\r\n this._walker.onMovement.add((event) => {\r\n this._walker!.forward.scaleAndAddToRef(0.024 * event.deltaT, this._movement);\r\n });\r\n }\r\n });\r\n }\r\n\r\n public update(position: Vector3, forward: Vector3) {\r\n forward.y = 0;\r\n forward.normalize();\r\n\r\n // Enforce reduced framerate\r\n this._millisecondsSinceLastUpdate += this._engine.getDeltaTime();\r\n if (this._millisecondsSinceLastUpdate >= Walker._MillisecondsPerUpdate) {\r\n this._millisecondsSinceLastUpdate -= Walker._MillisecondsPerUpdate;\r\n this._detector.update(position.x, position.z, forward.x, forward.z);\r\n if (this._walker) {\r\n const updated = this._walker.update(position.x, position.z);\r\n if (!updated) {\r\n this._walker = null;\r\n }\r\n }\r\n this._movement.scaleInPlace(0.85);\r\n }\r\n\r\n this.movementThisFrame.set(this._movement.x, 0, this._movement.y);\r\n }\r\n}\r\n\r\n/**\r\n * Options for the walking locomotion feature.\r\n */\r\nexport interface IWebXRWalkingLocomotionOptions {\r\n /**\r\n * The target to be moved by walking locomotion. This should be the transform node\r\n * which is the root of the XR space (i.e., the WebXRCamera's parent node). However,\r\n * for simple cases and legacy purposes, articulating the WebXRCamera itself is also\r\n * supported as a deprecated feature.\r\n */\r\n locomotionTarget: WebXRCamera | TransformNode;\r\n}\r\n\r\n/**\r\n * A module that will enable VR locomotion by detecting when the user walks in place.\r\n */\r\nexport class WebXRWalkingLocomotion extends WebXRAbstractFeature {\r\n /**\r\n * The module's name.\r\n */\r\n public static get Name(): string {\r\n return WebXRFeatureName.WALKING_LOCOMOTION;\r\n }\r\n\r\n /**\r\n * The (Babylon) version of this module.\r\n * This is an integer representing the implementation version.\r\n * This number has no external basis.\r\n */\r\n public static get Version(): number {\r\n return 1;\r\n }\r\n\r\n private _sessionManager: WebXRSessionManager;\r\n private _up: Vector3 = new Vector3();\r\n private _forward: Vector3 = new Vector3();\r\n private _position: Vector3 = new Vector3();\r\n private _movement: Vector3 = new Vector3();\r\n private _walker: Nullable<Walker>;\r\n\r\n private _locomotionTarget: WebXRCamera | TransformNode;\r\n private _isLocomotionTargetWebXRCamera: boolean;\r\n\r\n /**\r\n * The target to be articulated by walking locomotion.\r\n * When the walking locomotion feature detects walking in place, this element's\r\n * X and Z coordinates will be modified to reflect locomotion. This target should\r\n * be either the XR space's origin (i.e., the parent node of the WebXRCamera) or\r\n * the WebXRCamera itself. Note that the WebXRCamera path will modify the position\r\n * of the WebXRCamera directly and is thus discouraged.\r\n */\r\n public get locomotionTarget(): WebXRCamera | TransformNode {\r\n return this._locomotionTarget;\r\n }\r\n\r\n /**\r\n * The target to be articulated by walking locomotion.\r\n * When the walking locomotion feature detects walking in place, this element's\r\n * X and Z coordinates will be modified to reflect locomotion. This target should\r\n * be either the XR space's origin (i.e., the parent node of the WebXRCamera) or\r\n * the WebXRCamera itself. Note that the WebXRCamera path will modify the position\r\n * of the WebXRCamera directly and is thus discouraged.\r\n */\r\n public set locomotionTarget(locomotionTarget: WebXRCamera | TransformNode) {\r\n this._locomotionTarget = locomotionTarget;\r\n this._isLocomotionTargetWebXRCamera = this._locomotionTarget.getClassName() === \"WebXRCamera\";\r\n }\r\n\r\n /**\r\n * Construct a new Walking Locomotion feature.\r\n * @param sessionManager manager for the current XR session\r\n * @param options creation options, prominently including the vector target for locomotion\r\n */\r\n public constructor(sessionManager: WebXRSessionManager, options: IWebXRWalkingLocomotionOptions) {\r\n super(sessionManager);\r\n this._sessionManager = sessionManager;\r\n this.locomotionTarget = options.locomotionTarget;\r\n if (this._isLocomotionTargetWebXRCamera) {\r\n Logger.Warn(\r\n \"Using walking locomotion directly on a WebXRCamera may have unintended interactions with other XR techniques. Using an XR space parent is highly recommended\"\r\n );\r\n }\r\n }\r\n\r\n /**\r\n * Checks whether this feature is compatible with the current WebXR session.\r\n * Walking locomotion is only compatible with \"immersive-vr\" sessions.\r\n * @returns true if compatible, false otherwise\r\n */\r\n public isCompatible(): boolean {\r\n return this._sessionManager.sessionMode === undefined || this._sessionManager.sessionMode === \"immersive-vr\";\r\n }\r\n\r\n /**\r\n * Attaches the feature.\r\n * Typically called automatically by the features manager.\r\n * @returns true if attach succeeded, false otherwise\r\n */\r\n public attach(): boolean {\r\n if (!this.isCompatible || !super.attach()) {\r\n return false;\r\n }\r\n\r\n this._walker = new Walker(this._sessionManager.scene.getEngine());\r\n return true;\r\n }\r\n\r\n /**\r\n * Detaches the feature.\r\n * Typically called automatically by the features manager.\r\n * @returns true if detach succeeded, false otherwise\r\n */\r\n public detach(): boolean {\r\n if (!super.detach()) {\r\n return false;\r\n }\r\n\r\n this._walker = null;\r\n return true;\r\n }\r\n\r\n protected _onXRFrame(frame: XRFrame): void {\r\n const pose = frame.getViewerPose(this._sessionManager.baseReferenceSpace);\r\n if (!pose) {\r\n return;\r\n }\r\n\r\n const handednessScalar = this.locomotionTarget.getScene().useRightHandedSystem ? 1 : -1;\r\n\r\n const m = pose.transform.matrix;\r\n this._up.copyFromFloats(m[4], m[5], handednessScalar * m[6]);\r\n this._forward.copyFromFloats(m[8], m[9], handednessScalar * m[10]);\r\n this._position.copyFromFloats(m[12], m[13], handednessScalar * m[14]);\r\n\r\n // Compute the nape position\r\n this._forward.scaleAndAddToRef(0.05, this._position);\r\n this._up.scaleAndAddToRef(-0.05, this._position);\r\n this._walker!.update(this._position, this._forward);\r\n this._movement.copyFrom(this._walker!.movementThisFrame);\r\n if (!this._isLocomotionTargetWebXRCamera) {\r\n Vector3.TransformNormalToRef(this._movement, this.locomotionTarget.getWorldMatrix(), this._movement);\r\n }\r\n this.locomotionTarget.position.addInPlace(this._movement);\r\n }\r\n}\r\n\r\n//register the plugin\r\nWebXRFeaturesManager.AddWebXRFeature(\r\n WebXRWalkingLocomotion.Name,\r\n (xrSessionManager, options) => {\r\n return () => new WebXRWalkingLocomotion(xrSessionManager, options);\r\n },\r\n WebXRWalkingLocomotion.Version,\r\n false\r\n);\r\n"]}
|
|
@@ -6,16 +6,16 @@ import type { Nullable } from "../../types";
|
|
|
6
6
|
/**
|
|
7
7
|
* Handedness type in xrInput profiles. These can be used to define layouts in the Layout Map.
|
|
8
8
|
*/
|
|
9
|
-
export
|
|
9
|
+
export type MotionControllerHandedness = "none" | "left" | "right";
|
|
10
10
|
/**
|
|
11
11
|
* The type of components available in motion controllers.
|
|
12
12
|
* This is not the name of the component.
|
|
13
13
|
*/
|
|
14
|
-
export
|
|
14
|
+
export type MotionControllerComponentType = "trigger" | "squeeze" | "touchpad" | "thumbstick" | "button";
|
|
15
15
|
/**
|
|
16
16
|
* The state of a controller component
|
|
17
17
|
*/
|
|
18
|
-
export
|
|
18
|
+
export type MotionControllerComponentStateType = "default" | "touched" | "pressed";
|
|
19
19
|
/**
|
|
20
20
|
* The schema of motion controller layout.
|
|
21
21
|
* No object will be initialized using this interface
|
|
@@ -3,7 +3,7 @@ import type { Scene } from "../../scene";
|
|
|
3
3
|
/**
|
|
4
4
|
* A construction function type to create a new controller based on an xrInput object
|
|
5
5
|
*/
|
|
6
|
-
export
|
|
6
|
+
export type MotionControllerConstructor = (xrInput: XRInputSource, scene: Scene) => WebXRAbstractMotionController;
|
|
7
7
|
/**
|
|
8
8
|
* Motion controller manager is managing the different webxr profiles and makes sure the right
|
|
9
9
|
* controller is being loaded.
|
|
@@ -1,6 +1,9 @@
|
|
|
1
1
|
import { RegisterNativeTypeAsync } from "../../Engines/nativeEngine.js";
|
|
2
2
|
/** @internal */
|
|
3
3
|
export class NativeXRFrame {
|
|
4
|
+
get session() {
|
|
5
|
+
return this._nativeImpl.session;
|
|
6
|
+
}
|
|
4
7
|
constructor(_nativeImpl) {
|
|
5
8
|
this._nativeImpl = _nativeImpl;
|
|
6
9
|
this._xrTransform = new XRRigidTransform();
|
|
@@ -27,9 +30,6 @@ export class NativeXRFrame {
|
|
|
27
30
|
return (_a = this._nativeImpl._imageTrackingResults) !== null && _a !== void 0 ? _a : [];
|
|
28
31
|
};
|
|
29
32
|
}
|
|
30
|
-
get session() {
|
|
31
|
-
return this._nativeImpl.session;
|
|
32
|
-
}
|
|
33
33
|
getPose(space, baseSpace) {
|
|
34
34
|
if (!this._nativeImpl.getPoseData(space, baseSpace, this._xrPoseVectorData.buffer, this._xrTransform.matrix.buffer)) {
|
|
35
35
|
return undefined;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"nativeXRFrame.js","sourceRoot":"","sources":["../../../../../lts/core/generated/XR/native/nativeXRFrame.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,uBAAuB,EAAE,MAAM,4BAA4B,CAAC;AASrE,gBAAgB;AAChB,MAAM,OAAO,aAAa;
|
|
1
|
+
{"version":3,"file":"nativeXRFrame.js","sourceRoot":"","sources":["../../../../../lts/core/generated/XR/native/nativeXRFrame.ts"],"names":[],"mappings":"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","sourcesContent":["import { RegisterNativeTypeAsync } from \"../../Engines/nativeEngine\";\r\n\r\n/** @internal */\r\ninterface INativeXRFrame extends XRFrame {\r\n // Native-only helper functions\r\n getPoseData: (space: XRSpace, baseSpace: XRReferenceSpace, vectorBuffer: ArrayBuffer, matrixBuffer: ArrayBuffer) => XRPose;\r\n _imageTrackingResults?: XRImageTrackingResult[];\r\n}\r\n\r\n/** @internal */\r\nexport class NativeXRFrame implements XRFrame {\r\n private readonly _xrTransform = new XRRigidTransform();\r\n private readonly _xrPose: XRPose = {\r\n transform: this._xrTransform,\r\n emulatedPosition: false,\r\n };\r\n // Enough space for position, orientation\r\n private readonly _xrPoseVectorData = new Float32Array(4 + 4);\r\n\r\n public get session(): XRSession {\r\n return this._nativeImpl.session;\r\n }\r\n\r\n constructor(private _nativeImpl: INativeXRFrame) {}\r\n\r\n public getPose(space: XRSpace, baseSpace: XRReferenceSpace): XRPose | undefined {\r\n if (!this._nativeImpl.getPoseData(space, baseSpace, this._xrPoseVectorData.buffer, this._xrTransform.matrix.buffer)) {\r\n return undefined;\r\n }\r\n const position = this._xrTransform.position as DOMPoint;\r\n position.x = this._xrPoseVectorData[0];\r\n position.y = this._xrPoseVectorData[1];\r\n position.z = this._xrPoseVectorData[2];\r\n position.w = this._xrPoseVectorData[3];\r\n\r\n const orientation = this._xrTransform.orientation as DOMPoint;\r\n orientation.x = this._xrPoseVectorData[4];\r\n orientation.y = this._xrPoseVectorData[5];\r\n orientation.z = this._xrPoseVectorData[6];\r\n orientation.w = this._xrPoseVectorData[7];\r\n return this._xrPose;\r\n }\r\n\r\n public readonly fillPoses = this._nativeImpl.fillPoses!.bind(this._nativeImpl);\r\n\r\n public readonly getViewerPose = this._nativeImpl.getViewerPose.bind(this._nativeImpl);\r\n\r\n public readonly getHitTestResults = this._nativeImpl.getHitTestResults.bind(this._nativeImpl);\r\n\r\n public readonly getHitTestResultsForTransientInput = () => {\r\n throw new Error(\"XRFrame.getHitTestResultsForTransientInput not supported on native.\");\r\n };\r\n\r\n public get trackedAnchors(): XRAnchorSet | undefined {\r\n return this._nativeImpl.trackedAnchors;\r\n }\r\n\r\n public readonly createAnchor = this._nativeImpl.createAnchor!.bind(this._nativeImpl);\r\n\r\n public get worldInformation(): XRWorldInformation | undefined {\r\n return this._nativeImpl.worldInformation;\r\n }\r\n\r\n public get detectedPlanes(): XRPlaneSet | undefined {\r\n return this._nativeImpl.detectedPlanes;\r\n }\r\n\r\n public readonly getJointPose = this._nativeImpl.getJointPose!.bind(this._nativeImpl);\r\n\r\n public readonly fillJointRadii = this._nativeImpl.fillJointRadii!.bind(this._nativeImpl);\r\n\r\n public readonly getLightEstimate = () => {\r\n throw new Error(\"XRFrame.getLightEstimate not supported on native.\");\r\n };\r\n\r\n public get featurePointCloud(): number[] | undefined {\r\n return this._nativeImpl.featurePointCloud;\r\n }\r\n\r\n public readonly getImageTrackingResults = (): XRImageTrackingResult[] => {\r\n return this._nativeImpl._imageTrackingResults ?? [];\r\n };\r\n}\r\n\r\nRegisterNativeTypeAsync(\"NativeXRFrame\", NativeXRFrame);\r\n"]}
|
|
@@ -131,7 +131,7 @@ export declare class WebXRFeatureName {
|
|
|
131
131
|
/**
|
|
132
132
|
* Defining the constructor of a feature. Used to register the modules.
|
|
133
133
|
*/
|
|
134
|
-
export
|
|
134
|
+
export type WebXRFeatureConstructor = (xrSessionManager: WebXRSessionManager, options?: any) => () => IWebXRFeature;
|
|
135
135
|
/**
|
|
136
136
|
* The WebXR features manager is responsible of enabling or disabling features required for the current XR session.
|
|
137
137
|
* It is mainly used in AR sessions.
|
|
@@ -2,9 +2,9 @@ import type { Nullable } from "../types";
|
|
|
2
2
|
import type { WebXRLayerRenderTargetTextureProvider } from "./webXRRenderTargetTextureProvider";
|
|
3
3
|
import type { WebXRSessionManager } from "./webXRSessionManager";
|
|
4
4
|
/** Covers all supported subclasses of WebXR's XRCompositionLayer */
|
|
5
|
-
export
|
|
5
|
+
export type WebXRCompositionLayerType = "XRProjectionLayer";
|
|
6
6
|
/** Covers all supported subclasses of WebXR's XRLayer */
|
|
7
|
-
export
|
|
7
|
+
export type WebXRLayerType = "XRWebGLLayer" | WebXRCompositionLayerType;
|
|
8
8
|
/**
|
|
9
9
|
* Wrapper over subclasses of XRLayer.
|
|
10
10
|
* @internal
|
package/XR/webXRLayerWrapper.js
CHANGED
|
@@ -3,23 +3,6 @@
|
|
|
3
3
|
* @internal
|
|
4
4
|
*/
|
|
5
5
|
export class WebXRLayerWrapper {
|
|
6
|
-
constructor(
|
|
7
|
-
/** The width of the layer's framebuffer. */
|
|
8
|
-
getWidth,
|
|
9
|
-
/** The height of the layer's framebuffer. */
|
|
10
|
-
getHeight,
|
|
11
|
-
/** The XR layer that this WebXRLayerWrapper wraps. */
|
|
12
|
-
layer,
|
|
13
|
-
/** The type of XR layer that is being wrapped. */
|
|
14
|
-
layerType,
|
|
15
|
-
/** Create a render target provider for the wrapped layer. */
|
|
16
|
-
createRenderTargetTextureProvider) {
|
|
17
|
-
this.getWidth = getWidth;
|
|
18
|
-
this.getHeight = getHeight;
|
|
19
|
-
this.layer = layer;
|
|
20
|
-
this.layerType = layerType;
|
|
21
|
-
this.createRenderTargetTextureProvider = createRenderTargetTextureProvider;
|
|
22
|
-
}
|
|
23
6
|
/**
|
|
24
7
|
* Check if fixed foveation is supported on this device
|
|
25
8
|
*/
|
|
@@ -46,5 +29,22 @@ export class WebXRLayerWrapper {
|
|
|
46
29
|
this.layer.fixedFoveation = val;
|
|
47
30
|
}
|
|
48
31
|
}
|
|
32
|
+
constructor(
|
|
33
|
+
/** The width of the layer's framebuffer. */
|
|
34
|
+
getWidth,
|
|
35
|
+
/** The height of the layer's framebuffer. */
|
|
36
|
+
getHeight,
|
|
37
|
+
/** The XR layer that this WebXRLayerWrapper wraps. */
|
|
38
|
+
layer,
|
|
39
|
+
/** The type of XR layer that is being wrapped. */
|
|
40
|
+
layerType,
|
|
41
|
+
/** Create a render target provider for the wrapped layer. */
|
|
42
|
+
createRenderTargetTextureProvider) {
|
|
43
|
+
this.getWidth = getWidth;
|
|
44
|
+
this.getHeight = getHeight;
|
|
45
|
+
this.layer = layer;
|
|
46
|
+
this.layerType = layerType;
|
|
47
|
+
this.createRenderTargetTextureProvider = createRenderTargetTextureProvider;
|
|
48
|
+
}
|
|
49
49
|
}
|
|
50
50
|
//# sourceMappingURL=webXRLayerWrapper.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"webXRLayerWrapper.js","sourceRoot":"","sources":["../../../../lts/core/generated/XR/webXRLayerWrapper.ts"],"names":[],"mappings":"AAWA;;;GAGG;AACH,MAAM,OAAO,iBAAiB;
|
|
1
|
+
{"version":3,"file":"webXRLayerWrapper.js","sourceRoot":"","sources":["../../../../lts/core/generated/XR/webXRLayerWrapper.ts"],"names":[],"mappings":"AAWA;;;GAGG;AACH,MAAM,OAAO,iBAAiB;IAC1B;;OAEG;IACH,IAAW,yBAAyB;QAChC,OAAO,IAAI,CAAC,SAAS,IAAI,cAAc,IAAI,OAAQ,IAAI,CAAC,KAAsB,CAAC,cAAc,IAAI,QAAQ,CAAC;IAC9G,CAAC;IAED;;;OAGG;IACH,IAAW,cAAc;QACrB,IAAI,IAAI,CAAC,yBAAyB,EAAE;YAChC,OAAQ,IAAI,CAAC,KAAsB,CAAC,cAAe,CAAC;SACvD;QACD,OAAO,IAAI,CAAC;IAChB,CAAC;IAED;;;OAGG;IACH,IAAW,cAAc,CAAC,KAAuB;QAC7C,IAAI,IAAI,CAAC,yBAAyB,EAAE;YAChC,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,KAAK,IAAI,CAAC,CAAC,CAAC,CAAC;YAChD,IAAI,CAAC,KAAsB,CAAC,cAAc,GAAG,GAAG,CAAC;SACrD;IACL,CAAC;IAED;IACI,4CAA4C;IACrC,QAAsB;IAC7B,6CAA6C;IACtC,SAAuB;IAC9B,sDAAsD;IACtC,KAAc;IAC9B,kDAAkD;IAClC,SAAyB;IACzC,6DAA6D;IACtD,iCAAmH;QARnH,aAAQ,GAAR,QAAQ,CAAc;QAEtB,cAAS,GAAT,SAAS,CAAc;QAEd,UAAK,GAAL,KAAK,CAAS;QAEd,cAAS,GAAT,SAAS,CAAgB;QAElC,sCAAiC,GAAjC,iCAAiC,CAAkF;IAC3H,CAAC;CACP","sourcesContent":["import type { Nullable } from \"../types\";\r\nimport type { WebXRLayerRenderTargetTextureProvider } from \"./webXRRenderTargetTextureProvider\";\r\nimport type { WebXRSessionManager } from \"./webXRSessionManager\";\r\n\r\n/** Covers all supported subclasses of WebXR's XRCompositionLayer */\r\n// TODO (rgerd): Extend for all other subclasses of XRCompositionLayer.\r\nexport type WebXRCompositionLayerType = \"XRProjectionLayer\";\r\n\r\n/** Covers all supported subclasses of WebXR's XRLayer */\r\nexport type WebXRLayerType = \"XRWebGLLayer\" | WebXRCompositionLayerType;\r\n\r\n/**\r\n * Wrapper over subclasses of XRLayer.\r\n * @internal\r\n */\r\nexport class WebXRLayerWrapper {\r\n /**\r\n * Check if fixed foveation is supported on this device\r\n */\r\n public get isFixedFoveationSupported(): boolean {\r\n return this.layerType == \"XRWebGLLayer\" && typeof (this.layer as XRWebGLLayer).fixedFoveation == \"number\";\r\n }\r\n\r\n /**\r\n * Get the fixed foveation currently set, as specified by the webxr specs\r\n * If this returns null, then fixed foveation is not supported\r\n */\r\n public get fixedFoveation(): Nullable<number> {\r\n if (this.isFixedFoveationSupported) {\r\n return (this.layer as XRWebGLLayer).fixedFoveation!;\r\n }\r\n return null;\r\n }\r\n\r\n /**\r\n * Set the fixed foveation to the specified value, as specified by the webxr specs\r\n * This value will be normalized to be between 0 and 1, 1 being max foveation, 0 being no foveation\r\n */\r\n public set fixedFoveation(value: Nullable<number>) {\r\n if (this.isFixedFoveationSupported) {\r\n const val = Math.max(0, Math.min(1, value || 0));\r\n (this.layer as XRWebGLLayer).fixedFoveation = val;\r\n }\r\n }\r\n\r\n protected constructor(\r\n /** The width of the layer's framebuffer. */\r\n public getWidth: () => number,\r\n /** The height of the layer's framebuffer. */\r\n public getHeight: () => number,\r\n /** The XR layer that this WebXRLayerWrapper wraps. */\r\n public readonly layer: XRLayer,\r\n /** The type of XR layer that is being wrapped. */\r\n public readonly layerType: WebXRLayerType,\r\n /** Create a render target provider for the wrapped layer. */\r\n public createRenderTargetTextureProvider: (xrSessionManager: WebXRSessionManager) => WebXRLayerRenderTargetTextureProvider\r\n ) {}\r\n}\r\n"]}
|
package/abstractScene.d.ts
CHANGED
|
@@ -20,12 +20,12 @@ declare type Animation = import("./Animations/animation").Animation;
|
|
|
20
20
|
* Defines how the parser contract is defined.
|
|
21
21
|
* These parsers are used to parse a list of specific assets (like particle systems, etc..)
|
|
22
22
|
*/
|
|
23
|
-
export
|
|
23
|
+
export type BabylonFileParser = (parsedData: any, scene: Scene, container: AssetContainer, rootUrl: string) => void;
|
|
24
24
|
/**
|
|
25
25
|
* Defines how the individual parser contract is defined.
|
|
26
26
|
* These parser can parse an individual asset
|
|
27
27
|
*/
|
|
28
|
-
export
|
|
28
|
+
export type IndividualBabylonFileParser = (parsedData: any, scene: Scene, rootUrl: string) => any;
|
|
29
29
|
/**
|
|
30
30
|
* Base class of the scene acting as a container for the different elements composing a scene.
|
|
31
31
|
* This class is dynamically extended by the different components of the scene increasing
|
package/node.d.ts
CHANGED
|
@@ -16,7 +16,7 @@ declare type AbstractMesh = import("./Meshes/abstractMesh").AbstractMesh;
|
|
|
16
16
|
/**
|
|
17
17
|
* Defines how a node can be built from a string name.
|
|
18
18
|
*/
|
|
19
|
-
export
|
|
19
|
+
export type NodeConstructor = (name: string, scene: Scene, options?: any) => () => Node;
|
|
20
20
|
/**
|
|
21
21
|
* Node is the basic class for all scene objects (Mesh, Light, Camera.)
|
|
22
22
|
*/
|
package/node.js
CHANGED
|
@@ -21,77 +21,6 @@ class _InternalNodeDataInfo {
|
|
|
21
21
|
* Node is the basic class for all scene objects (Mesh, Light, Camera.)
|
|
22
22
|
*/
|
|
23
23
|
export class Node {
|
|
24
|
-
/**
|
|
25
|
-
* Creates a new Node
|
|
26
|
-
* @param name the name and id to be given to this node
|
|
27
|
-
* @param scene the scene this node will be added to
|
|
28
|
-
*/
|
|
29
|
-
constructor(name, scene = null) {
|
|
30
|
-
this._isDirty = false;
|
|
31
|
-
this._nodeDataStorage = new _InternalNodeDataInfo();
|
|
32
|
-
/**
|
|
33
|
-
* Gets or sets a string used to store user defined state for the node
|
|
34
|
-
*/
|
|
35
|
-
this.state = "";
|
|
36
|
-
/**
|
|
37
|
-
* Gets or sets an object used to store user defined information for the node
|
|
38
|
-
*/
|
|
39
|
-
this.metadata = null;
|
|
40
|
-
/**
|
|
41
|
-
* For internal use only. Please do not use.
|
|
42
|
-
*/
|
|
43
|
-
this.reservedDataStore = null;
|
|
44
|
-
this._accessibilityTag = null;
|
|
45
|
-
this.onAccessibilityTagChangedObservable = new Observable();
|
|
46
|
-
/** @internal */
|
|
47
|
-
this._parentContainer = null;
|
|
48
|
-
/**
|
|
49
|
-
* Gets a list of Animations associated with the node
|
|
50
|
-
*/
|
|
51
|
-
this.animations = new Array();
|
|
52
|
-
this._ranges = {};
|
|
53
|
-
/**
|
|
54
|
-
* Callback raised when the node is ready to be used
|
|
55
|
-
*/
|
|
56
|
-
this.onReady = null;
|
|
57
|
-
/** @internal */
|
|
58
|
-
this._currentRenderId = -1;
|
|
59
|
-
this._parentUpdateId = -1;
|
|
60
|
-
/** @internal */
|
|
61
|
-
this._childUpdateId = -1;
|
|
62
|
-
/** @internal */
|
|
63
|
-
this._waitingParentId = null;
|
|
64
|
-
/** @internal */
|
|
65
|
-
this._waitingParentInstanceIndex = null;
|
|
66
|
-
/** @internal */
|
|
67
|
-
this._waitingParsedUniqueId = null;
|
|
68
|
-
/** @internal */
|
|
69
|
-
this._cache = {};
|
|
70
|
-
this._parentNode = null;
|
|
71
|
-
/** @internal */
|
|
72
|
-
this._children = null;
|
|
73
|
-
/** @internal */
|
|
74
|
-
this._worldMatrix = Matrix.Identity();
|
|
75
|
-
/** @internal */
|
|
76
|
-
this._worldMatrixDeterminant = 0;
|
|
77
|
-
/** @internal */
|
|
78
|
-
this._worldMatrixDeterminantIsDirty = true;
|
|
79
|
-
this._animationPropertiesOverride = null;
|
|
80
|
-
/** @internal */
|
|
81
|
-
this._isNode = true;
|
|
82
|
-
/**
|
|
83
|
-
* An event triggered when the mesh is disposed
|
|
84
|
-
*/
|
|
85
|
-
this.onDisposeObservable = new Observable();
|
|
86
|
-
this._onDisposeObserver = null;
|
|
87
|
-
// Behaviors
|
|
88
|
-
this._behaviors = new Array();
|
|
89
|
-
this.name = name;
|
|
90
|
-
this.id = name;
|
|
91
|
-
this._scene = (scene || EngineStore.LastCreatedScene);
|
|
92
|
-
this.uniqueId = this._scene.getUniqueId();
|
|
93
|
-
this._initCache();
|
|
94
|
-
}
|
|
95
24
|
/**
|
|
96
25
|
* Add a new node constructor
|
|
97
26
|
* @param type defines the type name of the node to construct
|
|
@@ -248,6 +177,77 @@ export class Node {
|
|
|
248
177
|
get onClonedObservable() {
|
|
249
178
|
return this._nodeDataStorage._onClonedObservable;
|
|
250
179
|
}
|
|
180
|
+
/**
|
|
181
|
+
* Creates a new Node
|
|
182
|
+
* @param name the name and id to be given to this node
|
|
183
|
+
* @param scene the scene this node will be added to
|
|
184
|
+
*/
|
|
185
|
+
constructor(name, scene = null) {
|
|
186
|
+
this._isDirty = false;
|
|
187
|
+
this._nodeDataStorage = new _InternalNodeDataInfo();
|
|
188
|
+
/**
|
|
189
|
+
* Gets or sets a string used to store user defined state for the node
|
|
190
|
+
*/
|
|
191
|
+
this.state = "";
|
|
192
|
+
/**
|
|
193
|
+
* Gets or sets an object used to store user defined information for the node
|
|
194
|
+
*/
|
|
195
|
+
this.metadata = null;
|
|
196
|
+
/**
|
|
197
|
+
* For internal use only. Please do not use.
|
|
198
|
+
*/
|
|
199
|
+
this.reservedDataStore = null;
|
|
200
|
+
this._accessibilityTag = null;
|
|
201
|
+
this.onAccessibilityTagChangedObservable = new Observable();
|
|
202
|
+
/** @internal */
|
|
203
|
+
this._parentContainer = null;
|
|
204
|
+
/**
|
|
205
|
+
* Gets a list of Animations associated with the node
|
|
206
|
+
*/
|
|
207
|
+
this.animations = new Array();
|
|
208
|
+
this._ranges = {};
|
|
209
|
+
/**
|
|
210
|
+
* Callback raised when the node is ready to be used
|
|
211
|
+
*/
|
|
212
|
+
this.onReady = null;
|
|
213
|
+
/** @internal */
|
|
214
|
+
this._currentRenderId = -1;
|
|
215
|
+
this._parentUpdateId = -1;
|
|
216
|
+
/** @internal */
|
|
217
|
+
this._childUpdateId = -1;
|
|
218
|
+
/** @internal */
|
|
219
|
+
this._waitingParentId = null;
|
|
220
|
+
/** @internal */
|
|
221
|
+
this._waitingParentInstanceIndex = null;
|
|
222
|
+
/** @internal */
|
|
223
|
+
this._waitingParsedUniqueId = null;
|
|
224
|
+
/** @internal */
|
|
225
|
+
this._cache = {};
|
|
226
|
+
this._parentNode = null;
|
|
227
|
+
/** @internal */
|
|
228
|
+
this._children = null;
|
|
229
|
+
/** @internal */
|
|
230
|
+
this._worldMatrix = Matrix.Identity();
|
|
231
|
+
/** @internal */
|
|
232
|
+
this._worldMatrixDeterminant = 0;
|
|
233
|
+
/** @internal */
|
|
234
|
+
this._worldMatrixDeterminantIsDirty = true;
|
|
235
|
+
this._animationPropertiesOverride = null;
|
|
236
|
+
/** @internal */
|
|
237
|
+
this._isNode = true;
|
|
238
|
+
/**
|
|
239
|
+
* An event triggered when the mesh is disposed
|
|
240
|
+
*/
|
|
241
|
+
this.onDisposeObservable = new Observable();
|
|
242
|
+
this._onDisposeObserver = null;
|
|
243
|
+
// Behaviors
|
|
244
|
+
this._behaviors = new Array();
|
|
245
|
+
this.name = name;
|
|
246
|
+
this.id = name;
|
|
247
|
+
this._scene = (scene || EngineStore.LastCreatedScene);
|
|
248
|
+
this.uniqueId = this._scene.getUniqueId();
|
|
249
|
+
this._initCache();
|
|
250
|
+
}
|
|
251
251
|
/**
|
|
252
252
|
* Gets the scene of the node
|
|
253
253
|
* @returns a scene
|