@babylonjs/core 7.12.0 → 7.13.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/Animations/animation.js +1 -2
- package/Animations/animation.js.map +1 -1
- package/Animations/animationGroupMask.d.ts +1 -1
- package/Animations/animationGroupMask.js +2 -2
- package/Animations/animationGroupMask.js.map +1 -1
- package/Animations/animationKey.d.ts +1 -1
- package/Animations/animationKey.js.map +1 -1
- package/Behaviors/Meshes/handConstraintBehavior.d.ts +3 -3
- package/Behaviors/Meshes/handConstraintBehavior.js +16 -17
- package/Behaviors/Meshes/handConstraintBehavior.js.map +1 -1
- package/Behaviors/Meshes/sixDofDragBehavior.js +2 -3
- package/Behaviors/Meshes/sixDofDragBehavior.js.map +1 -1
- package/Bones/bone.js +31 -32
- package/Bones/bone.js.map +1 -1
- package/Bones/boneIKController.js +5 -6
- package/Bones/boneIKController.js.map +1 -1
- package/Bones/boneLookController.js +13 -13
- package/Bones/boneLookController.js.map +1 -1
- package/Cameras/Inputs/freeCameraMouseWheelInput.js +5 -6
- package/Cameras/Inputs/freeCameraMouseWheelInput.js.map +1 -1
- package/Cameras/Inputs/freeCameraVirtualJoystickInput.js +5 -5
- package/Cameras/Inputs/freeCameraVirtualJoystickInput.js.map +1 -1
- package/Cameras/VR/vrExperienceHelper.js +8 -10
- package/Cameras/VR/vrExperienceHelper.js.map +1 -1
- package/Compute/computeEffect.js +2 -3
- package/Compute/computeEffect.js.map +1 -1
- package/Compute/computeShader.js +19 -20
- package/Compute/computeShader.js.map +1 -1
- package/Culling/Helper/IBoundingInfoHelperPlatform.d.ts +4 -0
- package/Culling/Helper/IBoundingInfoHelperPlatform.js.map +1 -1
- package/Culling/Helper/boundingInfoHelper.d.ts +26 -4
- package/Culling/Helper/boundingInfoHelper.js +41 -10
- package/Culling/Helper/boundingInfoHelper.js.map +1 -1
- package/Culling/Helper/computeShaderBoundingHelper.d.ts +12 -3
- package/Culling/Helper/computeShaderBoundingHelper.js +164 -76
- package/Culling/Helper/computeShaderBoundingHelper.js.map +1 -1
- package/Culling/Helper/transformFeedbackBoundingHelper.d.ts +11 -0
- package/Culling/Helper/transformFeedbackBoundingHelper.js +46 -14
- package/Culling/Helper/transformFeedbackBoundingHelper.js.map +1 -1
- package/Debug/debugLayer.d.ts +1 -1
- package/Debug/debugLayer.js.map +1 -1
- package/Decorators/nodeDecorator.d.ts +1 -1
- package/Decorators/nodeDecorator.js +1 -1
- package/Decorators/nodeDecorator.js.map +1 -1
- package/DeviceInput/InputDevices/deviceEnums.d.ts +5 -5
- package/DeviceInput/InputDevices/deviceEnums.js.map +1 -1
- package/DeviceInput/eventFactory.js +3 -3
- package/DeviceInput/eventFactory.js.map +1 -1
- package/Engines/AbstractEngine/abstractEngine.cubeTexture.js +2 -2
- package/Engines/AbstractEngine/abstractEngine.cubeTexture.js.map +1 -1
- package/Engines/Extensions/engine.computeShader.d.ts +1 -1
- package/Engines/Extensions/engine.computeShader.js.map +1 -1
- package/Engines/Extensions/engine.cubeTexture.js +2 -2
- package/Engines/Extensions/engine.cubeTexture.js.map +1 -1
- package/Engines/Extensions/engine.dynamicTexture.js +2 -2
- package/Engines/Extensions/engine.dynamicTexture.js.map +1 -1
- package/Engines/Extensions/engine.multiRender.js +3 -3
- package/Engines/Extensions/engine.multiRender.js.map +1 -1
- package/Engines/Extensions/engine.multiview.js +2 -2
- package/Engines/Extensions/engine.multiview.js.map +1 -1
- package/Engines/Extensions/engine.prefilteredCubeTexture.js +3 -3
- package/Engines/Extensions/engine.prefilteredCubeTexture.js.map +1 -1
- package/Engines/Extensions/engine.rawTexture.js +4 -4
- package/Engines/Extensions/engine.rawTexture.js.map +1 -1
- package/Engines/Extensions/engine.renderTarget.js +3 -3
- package/Engines/Extensions/engine.renderTarget.js.map +1 -1
- package/Engines/Extensions/engine.renderTargetCube.js +2 -2
- package/Engines/Extensions/engine.renderTargetCube.js.map +1 -1
- package/Engines/Native/nativeShaderProcessors.js +1 -2
- package/Engines/Native/nativeShaderProcessors.js.map +1 -1
- package/Engines/Processors/shaderProcessor.js +2 -3
- package/Engines/Processors/shaderProcessor.js.map +1 -1
- package/Engines/WebGL/webGL2ShaderProcessors.js +1 -2
- package/Engines/WebGL/webGL2ShaderProcessors.js.map +1 -1
- package/Engines/WebGL/webGLShaderProcessors.js +1 -2
- package/Engines/WebGL/webGLShaderProcessors.js.map +1 -1
- package/Engines/WebGPU/Extensions/engine.computeShader.js +1 -2
- package/Engines/WebGPU/Extensions/engine.computeShader.js.map +1 -1
- package/Engines/WebGPU/Extensions/engine.cubeTexture.js +2 -2
- package/Engines/WebGPU/Extensions/engine.cubeTexture.js.map +1 -1
- package/Engines/WebGPU/Extensions/engine.dynamicTexture.js +2 -2
- package/Engines/WebGPU/Extensions/engine.dynamicTexture.js.map +1 -1
- package/Engines/WebGPU/Extensions/engine.multiRender.js +2 -2
- package/Engines/WebGPU/Extensions/engine.multiRender.js.map +1 -1
- package/Engines/WebGPU/Extensions/engine.rawTexture.js +5 -5
- package/Engines/WebGPU/Extensions/engine.rawTexture.js.map +1 -1
- package/Engines/WebGPU/Extensions/engine.renderTarget.js +3 -3
- package/Engines/WebGPU/Extensions/engine.renderTarget.js.map +1 -1
- package/Engines/WebGPU/Extensions/engine.renderTargetCube.js +2 -2
- package/Engines/WebGPU/Extensions/engine.renderTargetCube.js.map +1 -1
- package/Engines/WebGPU/webgpuBufferManager.js +1 -1
- package/Engines/WebGPU/webgpuBufferManager.js.map +1 -1
- package/Engines/WebGPU/webgpuCacheRenderPipeline.js +81 -82
- package/Engines/WebGPU/webgpuCacheRenderPipeline.js.map +1 -1
- package/Engines/WebGPU/webgpuCacheSampler.js +60 -64
- package/Engines/WebGPU/webgpuCacheSampler.js.map +1 -1
- package/Engines/WebGPU/webgpuClearQuad.js +1 -2
- package/Engines/WebGPU/webgpuClearQuad.js.map +1 -1
- package/Engines/WebGPU/webgpuComputeContext.js +13 -15
- package/Engines/WebGPU/webgpuComputeContext.js.map +1 -1
- package/Engines/WebGPU/webgpuConstants.d.ts +39 -39
- package/Engines/WebGPU/webgpuConstants.js.map +1 -1
- package/Engines/WebGPU/webgpuHardwareTexture.js +6 -8
- package/Engines/WebGPU/webgpuHardwareTexture.js.map +1 -1
- package/Engines/WebGPU/webgpuOcclusionQuery.js +1 -2
- package/Engines/WebGPU/webgpuOcclusionQuery.js.map +1 -1
- package/Engines/WebGPU/webgpuQuerySet.js +3 -3
- package/Engines/WebGPU/webgpuQuerySet.js.map +1 -1
- package/Engines/WebGPU/webgpuShaderProcessor.js +15 -19
- package/Engines/WebGPU/webgpuShaderProcessor.js.map +1 -1
- package/Engines/WebGPU/webgpuShaderProcessorsGLSL.js +8 -10
- package/Engines/WebGPU/webgpuShaderProcessorsGLSL.js.map +1 -1
- package/Engines/WebGPU/webgpuShaderProcessorsWGSL.js +26 -28
- package/Engines/WebGPU/webgpuShaderProcessorsWGSL.js.map +1 -1
- package/Engines/WebGPU/webgpuTextureHelper.js +413 -416
- package/Engines/WebGPU/webgpuTextureHelper.js.map +1 -1
- package/Engines/WebGPU/webgpuTextureManager.js +50 -51
- package/Engines/WebGPU/webgpuTextureManager.js.map +1 -1
- package/Engines/WebGPU/webgpuTimestampQuery.js +1 -2
- package/Engines/WebGPU/webgpuTimestampQuery.js.map +1 -1
- package/Engines/abstractEngine.js +4 -4
- package/Engines/abstractEngine.js.map +1 -1
- package/Engines/engine.js +2 -2
- package/Engines/engine.js.map +1 -1
- package/Engines/nativeEngine.js +9 -9
- package/Engines/nativeEngine.js.map +1 -1
- package/Engines/nullEngine.js +5 -5
- package/Engines/nullEngine.js.map +1 -1
- package/Engines/renderTargetWrapper.js +1 -2
- package/Engines/renderTargetWrapper.js.map +1 -1
- package/Engines/shaderStore.js +6 -7
- package/Engines/shaderStore.js.map +1 -1
- package/Engines/thinEngine.js +4 -5
- package/Engines/thinEngine.js.map +1 -1
- package/Engines/webgpuEngine.d.ts +11 -0
- package/Engines/webgpuEngine.js +91 -72
- package/Engines/webgpuEngine.js.map +1 -1
- package/Events/deviceInputEvents.d.ts +1 -1
- package/Events/deviceInputEvents.js.map +1 -1
- package/FlowGraph/flowGraph.d.ts +1 -1
- package/FlowGraph/flowGraph.js +5 -5
- package/FlowGraph/flowGraph.js.map +1 -1
- package/FlowGraph/flowGraphBlock.js +2 -3
- package/FlowGraph/flowGraphBlock.js.map +1 -1
- package/FlowGraph/flowGraphConnection.d.ts +1 -1
- package/FlowGraph/flowGraphConnection.js.map +1 -1
- package/FlowGraph/flowGraphDataConnection.js +3 -3
- package/FlowGraph/flowGraphDataConnection.js.map +1 -1
- package/FlowGraph/flowGraphExecutionBlock.js +2 -3
- package/FlowGraph/flowGraphExecutionBlock.js.map +1 -1
- package/FlowGraph/flowGraphSignalConnection.js +3 -3
- package/FlowGraph/flowGraphSignalConnection.js.map +1 -1
- package/Gamepads/dualShockGamepad.d.ts +2 -2
- package/Gamepads/dualShockGamepad.js +14 -14
- package/Gamepads/dualShockGamepad.js.map +1 -1
- package/Gamepads/xboxGamepad.d.ts +2 -2
- package/Gamepads/xboxGamepad.js +14 -14
- package/Gamepads/xboxGamepad.js.map +1 -1
- package/Gizmos/gizmo.d.ts +2 -2
- package/Gizmos/gizmo.js +4 -4
- package/Gizmos/gizmo.js.map +1 -1
- package/Gizmos/gizmoManager.js +2 -2
- package/Gizmos/gizmoManager.js.map +1 -1
- package/Gizmos/scaleGizmo.js +3 -3
- package/Gizmos/scaleGizmo.js.map +1 -1
- package/Loading/sceneLoader.d.ts +1 -1
- package/Loading/sceneLoader.js +6 -6
- package/Loading/sceneLoader.js.map +1 -1
- package/Materials/GreasedLine/greasedLineMaterialInterfaces.d.ts +3 -3
- package/Materials/GreasedLine/greasedLineMaterialInterfaces.js.map +1 -1
- package/Materials/GreasedLine/greasedLinePluginMaterial.js +10 -11
- package/Materials/GreasedLine/greasedLinePluginMaterial.js.map +1 -1
- package/Materials/GreasedLine/greasedLineSimpleMaterial.js +8 -9
- package/Materials/GreasedLine/greasedLineSimpleMaterial.js.map +1 -1
- package/Materials/Node/Blocks/Dual/currentScreenBlock.js +3 -4
- package/Materials/Node/Blocks/Dual/currentScreenBlock.js.map +1 -1
- package/Materials/Node/Blocks/Dual/fogBlock.js +2 -3
- package/Materials/Node/Blocks/Dual/fogBlock.js.map +1 -1
- package/Materials/Node/Blocks/Dual/imageSourceBlock.js +1 -2
- package/Materials/Node/Blocks/Dual/imageSourceBlock.js.map +1 -1
- package/Materials/Node/Blocks/Dual/lightBlock.js +5 -6
- package/Materials/Node/Blocks/Dual/lightBlock.js.map +1 -1
- package/Materials/Node/Blocks/Dual/reflectionTextureBaseBlock.js +4 -5
- package/Materials/Node/Blocks/Dual/reflectionTextureBaseBlock.js.map +1 -1
- package/Materials/Node/Blocks/Dual/sceneDepthBlock.js +7 -8
- package/Materials/Node/Blocks/Dual/sceneDepthBlock.js.map +1 -1
- package/Materials/Node/Blocks/Dual/textureBlock.js +4 -6
- package/Materials/Node/Blocks/Dual/textureBlock.js.map +1 -1
- package/Materials/Node/Blocks/Fragment/TBNBlock.js +2 -4
- package/Materials/Node/Blocks/Fragment/TBNBlock.js.map +1 -1
- package/Materials/Node/Blocks/Fragment/derivativeBlock.js +1 -2
- package/Materials/Node/Blocks/Fragment/derivativeBlock.js.map +1 -1
- package/Materials/Node/Blocks/Fragment/fragCoordBlock.js +1 -2
- package/Materials/Node/Blocks/Fragment/fragCoordBlock.js.map +1 -1
- package/Materials/Node/Blocks/Fragment/fragDepthBlock.js +1 -2
- package/Materials/Node/Blocks/Fragment/fragDepthBlock.js.map +1 -1
- package/Materials/Node/Blocks/Fragment/fragmentOutputBlock.js +5 -6
- package/Materials/Node/Blocks/Fragment/fragmentOutputBlock.js.map +1 -1
- package/Materials/Node/Blocks/Fragment/frontFacingBlock.js +1 -2
- package/Materials/Node/Blocks/Fragment/frontFacingBlock.js.map +1 -1
- package/Materials/Node/Blocks/Fragment/heightToNormalBlock.js +5 -6
- package/Materials/Node/Blocks/Fragment/heightToNormalBlock.js.map +1 -1
- package/Materials/Node/Blocks/Fragment/imageProcessingBlock.js +3 -4
- package/Materials/Node/Blocks/Fragment/imageProcessingBlock.js.map +1 -1
- package/Materials/Node/Blocks/Fragment/perturbNormalBlock.js +7 -9
- package/Materials/Node/Blocks/Fragment/perturbNormalBlock.js.map +1 -1
- package/Materials/Node/Blocks/Fragment/screenSizeBlock.js +1 -2
- package/Materials/Node/Blocks/Fragment/screenSizeBlock.js.map +1 -1
- package/Materials/Node/Blocks/Input/inputBlock.js +19 -21
- package/Materials/Node/Blocks/Input/inputBlock.js.map +1 -1
- package/Materials/Node/Blocks/Input/prePassTextureBlock.js +3 -4
- package/Materials/Node/Blocks/Input/prePassTextureBlock.js.map +1 -1
- package/Materials/Node/Blocks/PBR/anisotropyBlock.js +2 -3
- package/Materials/Node/Blocks/PBR/anisotropyBlock.js.map +1 -1
- package/Materials/Node/Blocks/PBR/clearCoatBlock.js +4 -5
- package/Materials/Node/Blocks/PBR/clearCoatBlock.js.map +1 -1
- package/Materials/Node/Blocks/PBR/iridescenceBlock.js +1 -2
- package/Materials/Node/Blocks/PBR/iridescenceBlock.js.map +1 -1
- package/Materials/Node/Blocks/PBR/pbrMetallicRoughnessBlock.js +28 -29
- package/Materials/Node/Blocks/PBR/pbrMetallicRoughnessBlock.js.map +1 -1
- package/Materials/Node/Blocks/PBR/reflectionBlock.js +4 -5
- package/Materials/Node/Blocks/PBR/reflectionBlock.js.map +1 -1
- package/Materials/Node/Blocks/PBR/refractionBlock.js +5 -6
- package/Materials/Node/Blocks/PBR/refractionBlock.js.map +1 -1
- package/Materials/Node/Blocks/PBR/sheenBlock.js +4 -5
- package/Materials/Node/Blocks/PBR/sheenBlock.js.map +1 -1
- package/Materials/Node/Blocks/PBR/subSurfaceBlock.js +2 -3
- package/Materials/Node/Blocks/PBR/subSurfaceBlock.js.map +1 -1
- package/Materials/Node/Blocks/Vertex/instancesBlock.js +1 -2
- package/Materials/Node/Blocks/Vertex/instancesBlock.js.map +1 -1
- package/Materials/Node/Blocks/Vertex/lightInformationBlock.js +1 -2
- package/Materials/Node/Blocks/Vertex/lightInformationBlock.js.map +1 -1
- package/Materials/Node/Blocks/Vertex/morphTargetsBlock.js +1 -2
- package/Materials/Node/Blocks/Vertex/morphTargetsBlock.js.map +1 -1
- package/Materials/Node/Blocks/Vertex/vertexOutputBlock.js +1 -2
- package/Materials/Node/Blocks/Vertex/vertexOutputBlock.js.map +1 -1
- package/Materials/Node/Blocks/arcTan2Block.js +1 -2
- package/Materials/Node/Blocks/arcTan2Block.js.map +1 -1
- package/Materials/Node/Blocks/biPlanarBlock.js +3 -4
- package/Materials/Node/Blocks/biPlanarBlock.js.map +1 -1
- package/Materials/Node/Blocks/clampBlock.js +4 -5
- package/Materials/Node/Blocks/clampBlock.js.map +1 -1
- package/Materials/Node/Blocks/cloudBlock.js +3 -4
- package/Materials/Node/Blocks/cloudBlock.js.map +1 -1
- package/Materials/Node/Blocks/curveBlock.js +1 -2
- package/Materials/Node/Blocks/curveBlock.js.map +1 -1
- package/Materials/Node/Blocks/customBlock.js +1 -2
- package/Materials/Node/Blocks/customBlock.js.map +1 -1
- package/Materials/Node/Blocks/matrixBuilderBlock.js +1 -2
- package/Materials/Node/Blocks/matrixBuilderBlock.js.map +1 -1
- package/Materials/Node/Blocks/meshAttributeExistsBlock.d.ts +1 -1
- package/Materials/Node/Blocks/meshAttributeExistsBlock.js +35 -35
- package/Materials/Node/Blocks/meshAttributeExistsBlock.js.map +1 -1
- package/Materials/Node/Blocks/modBlock.js +1 -2
- package/Materials/Node/Blocks/modBlock.js.map +1 -1
- package/Materials/Node/Blocks/remapBlock.js +3 -3
- package/Materials/Node/Blocks/remapBlock.js.map +1 -1
- package/Materials/Node/Blocks/simplexPerlin3DBlock.js +1 -2
- package/Materials/Node/Blocks/simplexPerlin3DBlock.js.map +1 -1
- package/Materials/Node/Blocks/transformBlock.js +1 -2
- package/Materials/Node/Blocks/transformBlock.js.map +1 -1
- package/Materials/Node/Blocks/triPlanarBlock.js +10 -12
- package/Materials/Node/Blocks/triPlanarBlock.js.map +1 -1
- package/Materials/Node/Blocks/voronoiNoiseBlock.js +3 -4
- package/Materials/Node/Blocks/voronoiNoiseBlock.js.map +1 -1
- package/Materials/Node/Blocks/waveBlock.d.ts +1 -1
- package/Materials/Node/Blocks/waveBlock.js +4 -4
- package/Materials/Node/Blocks/waveBlock.js.map +1 -1
- package/Materials/Node/Blocks/worleyNoise3DBlock.js +3 -4
- package/Materials/Node/Blocks/worleyNoise3DBlock.js.map +1 -1
- package/Materials/Node/Enums/nodeMaterialBlockConnectionPointMode.d.ts +1 -1
- package/Materials/Node/Enums/nodeMaterialBlockConnectionPointMode.js.map +1 -1
- package/Materials/Node/nodeMaterial.js +3 -4
- package/Materials/Node/nodeMaterial.js.map +1 -1
- package/Materials/Node/nodeMaterialBlock.js +5 -6
- package/Materials/Node/nodeMaterialBlock.js.map +1 -1
- package/Materials/Node/nodeMaterialBlockConnectionPoint.d.ts +2 -2
- package/Materials/Node/nodeMaterialBlockConnectionPoint.js +10 -10
- package/Materials/Node/nodeMaterialBlockConnectionPoint.js.map +1 -1
- package/Materials/Node/nodeMaterialBuildState.js +18 -19
- package/Materials/Node/nodeMaterialBuildState.js.map +1 -1
- package/Materials/Node/nodeMaterialConnectionPointCustomObject.js +3 -3
- package/Materials/Node/nodeMaterialConnectionPointCustomObject.js.map +1 -1
- package/Materials/PBR/pbrBaseMaterial.js +3 -4
- package/Materials/PBR/pbrBaseMaterial.js.map +1 -1
- package/Materials/Textures/internalTexture.d.ts +1 -1
- package/Materials/Textures/internalTexture.js +13 -13
- package/Materials/Textures/internalTexture.js.map +1 -1
- package/Materials/Textures/ktx2decoderTypes.d.ts +1 -1
- package/Materials/Textures/ktx2decoderTypes.js.map +1 -1
- package/Materials/Textures/rawCubeTexture.js +1 -2
- package/Materials/Textures/rawCubeTexture.js.map +1 -1
- package/Materials/effect.functions.js +2 -3
- package/Materials/effect.functions.js.map +1 -1
- package/Materials/effect.js +3 -4
- package/Materials/effect.js.map +1 -1
- package/Materials/effect.webgl.functions.js +1 -2
- package/Materials/effect.webgl.functions.js.map +1 -1
- package/Materials/material.js +7 -9
- package/Materials/material.js.map +1 -1
- package/Materials/materialPluginEvent.d.ts +1 -1
- package/Materials/materialPluginEvent.js.map +1 -1
- package/Materials/materialPluginManager.js +9 -11
- package/Materials/materialPluginManager.js.map +1 -1
- package/Materials/meshDebugPluginMaterial.d.ts +1 -1
- package/Materials/meshDebugPluginMaterial.js +2 -2
- package/Materials/meshDebugPluginMaterial.js.map +1 -1
- package/Materials/shaderLanguage.d.ts +1 -1
- package/Materials/shaderLanguage.js.map +1 -1
- package/Materials/shadowDepthWrapper.js +1 -2
- package/Materials/shadowDepthWrapper.js.map +1 -1
- package/Materials/standardMaterial.js +2 -3
- package/Materials/standardMaterial.js.map +1 -1
- package/Maths/math.axis.d.ts +2 -2
- package/Maths/math.axis.js.map +1 -1
- package/Maths/math.path.d.ts +1 -1
- package/Maths/math.path.js +3 -3
- package/Maths/math.path.js.map +1 -1
- package/Meshes/Builders/greasedLineBuilder.d.ts +2 -2
- package/Meshes/Builders/greasedLineBuilder.js +21 -23
- package/Meshes/Builders/greasedLineBuilder.js.map +1 -1
- package/Meshes/GreasedLine/greasedLineBaseMesh.d.ts +3 -3
- package/Meshes/GreasedLine/greasedLineBaseMesh.js.map +1 -1
- package/Meshes/GreasedLine/greasedLineRibbonMesh.js +14 -14
- package/Meshes/GreasedLine/greasedLineRibbonMesh.js.map +1 -1
- package/Meshes/Node/Blocks/Instances/instantiateBaseBlock.js +2 -2
- package/Meshes/Node/Blocks/Instances/instantiateBaseBlock.js.map +1 -1
- package/Meshes/Node/Blocks/Instances/instantiateOnFacesBlock.js +2 -2
- package/Meshes/Node/Blocks/Instances/instantiateOnFacesBlock.js.map +1 -1
- package/Meshes/Node/Blocks/Instances/instantiateOnVerticesBlock.js +3 -3
- package/Meshes/Node/Blocks/Instances/instantiateOnVerticesBlock.js.map +1 -1
- package/Meshes/Node/Blocks/Instances/instantiateOnVolumeBlock.js +3 -3
- package/Meshes/Node/Blocks/Instances/instantiateOnVolumeBlock.js.map +1 -1
- package/Meshes/Node/Blocks/Set/setColorsBlock.js +2 -2
- package/Meshes/Node/Blocks/Set/setColorsBlock.js.map +1 -1
- package/Meshes/Node/Blocks/Set/setMaterialIDBlock.js +2 -2
- package/Meshes/Node/Blocks/Set/setMaterialIDBlock.js.map +1 -1
- package/Meshes/Node/Blocks/Set/setNormalsBlock.js +2 -2
- package/Meshes/Node/Blocks/Set/setNormalsBlock.js.map +1 -1
- package/Meshes/Node/Blocks/Set/setPositionsBlock.js +2 -2
- package/Meshes/Node/Blocks/Set/setPositionsBlock.js.map +1 -1
- package/Meshes/Node/Blocks/Set/setTangentsBlock.js +2 -2
- package/Meshes/Node/Blocks/Set/setTangentsBlock.js.map +1 -1
- package/Meshes/Node/Blocks/Set/setUVsBlock.js +3 -3
- package/Meshes/Node/Blocks/Set/setUVsBlock.js.map +1 -1
- package/Meshes/Node/Blocks/Sources/boxBlock.js +2 -2
- package/Meshes/Node/Blocks/Sources/boxBlock.js.map +1 -1
- package/Meshes/Node/Blocks/Sources/capsuleBlock.js +2 -2
- package/Meshes/Node/Blocks/Sources/capsuleBlock.js.map +1 -1
- package/Meshes/Node/Blocks/Sources/cylinderBlock.js +2 -2
- package/Meshes/Node/Blocks/Sources/cylinderBlock.js.map +1 -1
- package/Meshes/Node/Blocks/Sources/discBlock.js +2 -2
- package/Meshes/Node/Blocks/Sources/discBlock.js.map +1 -1
- package/Meshes/Node/Blocks/Sources/gridBlock.js +2 -2
- package/Meshes/Node/Blocks/Sources/gridBlock.js.map +1 -1
- package/Meshes/Node/Blocks/Sources/icoSphereBlock.js +2 -2
- package/Meshes/Node/Blocks/Sources/icoSphereBlock.js.map +1 -1
- package/Meshes/Node/Blocks/Sources/meshBlock.js +2 -2
- package/Meshes/Node/Blocks/Sources/meshBlock.js.map +1 -1
- package/Meshes/Node/Blocks/Sources/planeBlock.js +2 -2
- package/Meshes/Node/Blocks/Sources/planeBlock.js.map +1 -1
- package/Meshes/Node/Blocks/Sources/sphereBlock.js +2 -2
- package/Meshes/Node/Blocks/Sources/sphereBlock.js.map +1 -1
- package/Meshes/Node/Blocks/Sources/torusBlock.js +2 -2
- package/Meshes/Node/Blocks/Sources/torusBlock.js.map +1 -1
- package/Meshes/Node/Blocks/Textures/geometryTextureBlock.js +2 -2
- package/Meshes/Node/Blocks/Textures/geometryTextureBlock.js.map +1 -1
- package/Meshes/Node/Blocks/Textures/geometryTextureFetchBlock.js +2 -2
- package/Meshes/Node/Blocks/Textures/geometryTextureFetchBlock.js.map +1 -1
- package/Meshes/Node/Blocks/booleanGeometryBlock.js +3 -3
- package/Meshes/Node/Blocks/booleanGeometryBlock.js.map +1 -1
- package/Meshes/Node/Blocks/conditionBlock.js +2 -2
- package/Meshes/Node/Blocks/conditionBlock.js.map +1 -1
- package/Meshes/Node/Blocks/geometryClampBlock.js +3 -3
- package/Meshes/Node/Blocks/geometryClampBlock.js.map +1 -1
- package/Meshes/Node/Blocks/geometryCollectionBlock.js +2 -2
- package/Meshes/Node/Blocks/geometryCollectionBlock.js.map +1 -1
- package/Meshes/Node/Blocks/geometryCurveBlock.js +2 -2
- package/Meshes/Node/Blocks/geometryCurveBlock.js.map +1 -1
- package/Meshes/Node/Blocks/geometryOptimizeBlock.js +3 -3
- package/Meshes/Node/Blocks/geometryOptimizeBlock.js.map +1 -1
- package/Meshes/Node/Blocks/geometryTransformBlock.js +2 -2
- package/Meshes/Node/Blocks/geometryTransformBlock.js.map +1 -1
- package/Meshes/Node/Blocks/geometryTrigonometryBlock.js +2 -2
- package/Meshes/Node/Blocks/geometryTrigonometryBlock.js.map +1 -1
- package/Meshes/Node/Blocks/mappingBlock.js +2 -2
- package/Meshes/Node/Blocks/mappingBlock.js.map +1 -1
- package/Meshes/Node/Blocks/mathBlock.js +2 -2
- package/Meshes/Node/Blocks/mathBlock.js.map +1 -1
- package/Meshes/Node/Blocks/mergeGeometryBlock.js +2 -2
- package/Meshes/Node/Blocks/mergeGeometryBlock.js.map +1 -1
- package/Meshes/Node/Blocks/randomBlock.js +2 -2
- package/Meshes/Node/Blocks/randomBlock.js.map +1 -1
- package/Meshes/Node/nodeGeometryBlock.js +3 -3
- package/Meshes/Node/nodeGeometryBlock.js.map +1 -1
- package/Meshes/Node/nodeGeometryBlockConnectionPoint.d.ts +2 -2
- package/Meshes/Node/nodeGeometryBlockConnectionPoint.js +7 -7
- package/Meshes/Node/nodeGeometryBlockConnectionPoint.js.map +1 -1
- package/Meshes/abstractMesh.js +2 -3
- package/Meshes/abstractMesh.js.map +1 -1
- package/Meshes/mesh.js +1 -2
- package/Meshes/mesh.js.map +1 -1
- package/Meshes/meshSimplification.d.ts +1 -1
- package/Meshes/meshSimplification.js +1 -1
- package/Meshes/meshSimplification.js.map +1 -1
- package/Meshes/meshSimplificationSceneComponent.js +2 -2
- package/Meshes/meshSimplificationSceneComponent.js.map +1 -1
- package/Meshes/transformNode.js +7 -8
- package/Meshes/transformNode.js.map +1 -1
- package/Misc/assetsManager.d.ts +1 -1
- package/Misc/assetsManager.js +9 -9
- package/Misc/assetsManager.js.map +1 -1
- package/Misc/basis.js +2 -2
- package/Misc/basis.js.map +1 -1
- package/Misc/copyTextureToTexture.d.ts +1 -1
- package/Misc/copyTextureToTexture.js +1 -1
- package/Misc/copyTextureToTexture.js.map +1 -1
- package/Misc/environmentTextureTools.js +3 -3
- package/Misc/environmentTextureTools.js.map +1 -1
- package/Misc/iInspectable.d.ts +1 -1
- package/Misc/iInspectable.js.map +1 -1
- package/Misc/khronosTextureContainer2.js +2 -2
- package/Misc/khronosTextureContainer2.js.map +1 -1
- package/Misc/timer.d.ts +1 -1
- package/Misc/timer.js +5 -5
- package/Misc/timer.js.map +1 -1
- package/Misc/virtualJoystick.d.ts +1 -1
- package/Misc/virtualJoystick.js +16 -16
- package/Misc/virtualJoystick.js.map +1 -1
- package/Particles/particleSystem.js +3 -3
- package/Particles/particleSystem.js.map +1 -1
- package/Particles/particleSystemComponent.js +1 -2
- package/Particles/particleSystemComponent.js.map +1 -1
- package/Particles/pointsCloudSystem.d.ts +1 -1
- package/Particles/pointsCloudSystem.js +14 -14
- package/Particles/pointsCloudSystem.js.map +1 -1
- package/Particles/subEmitter.d.ts +1 -1
- package/Particles/subEmitter.js +1 -1
- package/Particles/subEmitter.js.map +1 -1
- package/Physics/physicsHelper.d.ts +2 -2
- package/Physics/physicsHelper.js +6 -7
- package/Physics/physicsHelper.js.map +1 -1
- package/Physics/v1/physicsImpostor.js +4 -5
- package/Physics/v1/physicsImpostor.js.map +1 -1
- package/Physics/v2/IPhysicsEnginePlugin.d.ts +16 -8
- package/Physics/v2/IPhysicsEnginePlugin.js +9 -0
- package/Physics/v2/IPhysicsEnginePlugin.js.map +1 -1
- package/Physics/v2/Plugins/havokPlugin.js +96 -79
- package/Physics/v2/Plugins/havokPlugin.js.map +1 -1
- package/Physics/v2/physicsAggregate.js +8 -9
- package/Physics/v2/physicsAggregate.js.map +1 -1
- package/Physics/v2/physicsBody.d.ts +14 -2
- package/Physics/v2/physicsBody.js +30 -11
- package/Physics/v2/physicsBody.js.map +1 -1
- package/Physics/v2/physicsConstraint.js +8 -9
- package/Physics/v2/physicsConstraint.js.map +1 -1
- package/Physics/v2/physicsMaterial.d.ts +1 -1
- package/Physics/v2/physicsMaterial.js.map +1 -1
- package/Physics/v2/physicsShape.js +9 -10
- package/Physics/v2/physicsShape.js.map +1 -1
- package/Physics/v2/ragdoll.js +11 -12
- package/Physics/v2/ragdoll.js.map +1 -1
- package/PostProcesses/RenderPipeline/Pipelines/defaultRenderingPipeline.js +2 -2
- package/PostProcesses/RenderPipeline/Pipelines/defaultRenderingPipeline.js.map +1 -1
- package/PostProcesses/depthOfFieldEffect.d.ts +1 -1
- package/PostProcesses/depthOfFieldEffect.js +3 -3
- package/PostProcesses/depthOfFieldEffect.js.map +1 -1
- package/PostProcesses/postProcess.js +2 -3
- package/PostProcesses/postProcess.js.map +1 -1
- package/PostProcesses/tonemapPostProcess.d.ts +1 -1
- package/PostProcesses/tonemapPostProcess.js +4 -4
- package/PostProcesses/tonemapPostProcess.js.map +1 -1
- package/Rendering/fluidRenderer/fluidRenderingTargetRenderer.d.ts +1 -1
- package/Rendering/fluidRenderer/fluidRenderingTargetRenderer.js +10 -10
- package/Rendering/fluidRenderer/fluidRenderingTargetRenderer.js.map +1 -1
- package/Shaders/spriteMap.fragment.js +3 -2
- package/Shaders/spriteMap.fragment.js.map +1 -1
- package/ShadersWGSL/boundingInfo.compute.js +8 -8
- package/ShadersWGSL/boundingInfo.compute.js.map +1 -1
- package/XR/features/WebXRDepthSensing.js +2 -2
- package/XR/features/WebXRDepthSensing.js.map +1 -1
- package/XR/features/WebXRHandTracking.d.ts +2 -2
- package/XR/features/WebXRHandTracking.js +76 -76
- package/XR/features/WebXRHandTracking.js.map +1 -1
- package/XR/features/WebXRLightEstimation.js +2 -2
- package/XR/features/WebXRLightEstimation.js.map +1 -1
- package/XR/features/WebXRNearInteraction.d.ts +1 -1
- package/XR/features/WebXRNearInteraction.js +5 -5
- package/XR/features/WebXRNearInteraction.js.map +1 -1
- package/XR/features/WebXRRawCameraAccess.js +2 -2
- package/XR/features/WebXRRawCameraAccess.js.map +1 -1
- package/XR/motionController/webXRProfiledMotionController.js +2 -2
- package/XR/motionController/webXRProfiledMotionController.js.map +1 -1
- package/XR/webXRCamera.js +3 -4
- package/XR/webXRCamera.js.map +1 -1
- package/XR/webXREnterExitUI.js +3 -4
- package/XR/webXREnterExitUI.js.map +1 -1
- package/XR/webXRExperienceHelper.js +12 -13
- package/XR/webXRExperienceHelper.js.map +1 -1
- package/XR/webXRManagedOutputCanvas.d.ts +1 -1
- package/XR/webXRManagedOutputCanvas.js +15 -6
- package/XR/webXRManagedOutputCanvas.js.map +1 -1
- package/XR/webXRRenderTargetTextureProvider.js +2 -2
- package/XR/webXRRenderTargetTextureProvider.js.map +1 -1
- package/XR/webXRTypes.d.ts +2 -2
- package/XR/webXRTypes.js.map +1 -1
- package/package.json +1 -1
- package/scene.d.ts +1 -1
- package/scene.js +4 -4
- package/scene.js.map +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"boneIKController.js","sourceRoot":"","sources":["../../../../dev/core/src/Bones/boneIKController.ts"],"names":[],"mappings":"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","sourcesContent":["import type { Bone } from \"./bone\";\r\nimport { Vector3, Quaternion, Matrix } from \"../Maths/math.vector\";\r\nimport type { TransformNode } from \"../Meshes/transformNode\";\r\nimport type { Nullable } from \"../types\";\r\nimport { Space } from \"../Maths/math.axis\";\r\nimport { Logger } from \"../Misc/logger\";\r\n\r\n/**\r\n * Class used to apply inverse kinematics to bones\r\n * @see https://doc.babylonjs.com/features/featuresDeepDive/mesh/bonesSkeletons#boneikcontroller\r\n */\r\nexport class BoneIKController {\r\n private static _TmpVecs: Vector3[] = [Vector3.Zero(), Vector3.Zero(), Vector3.Zero(), Vector3.Zero(), Vector3.Zero(), Vector3.Zero()];\r\n private static _TmpQuat = Quaternion.Identity();\r\n private static _TmpMats: Matrix[] = [Matrix.Identity(), Matrix.Identity()];\r\n\r\n /**\r\n * Gets or sets the target TransformNode\r\n * Name kept as mesh for back compatibility\r\n */\r\n public targetMesh: TransformNode;\r\n\r\n /** Gets or sets the mesh used as pole */\r\n public poleTargetMesh: TransformNode;\r\n\r\n /**\r\n * Gets or sets the bone used as pole\r\n */\r\n public poleTargetBone: Nullable<Bone>;\r\n\r\n /**\r\n * Gets or sets the target position\r\n */\r\n public targetPosition = Vector3.Zero();\r\n\r\n /**\r\n * Gets or sets the pole target position\r\n */\r\n public poleTargetPosition = Vector3.Zero();\r\n\r\n /**\r\n * Gets or sets the pole target local offset\r\n */\r\n public poleTargetLocalOffset = Vector3.Zero();\r\n\r\n /**\r\n * Gets or sets the pole angle\r\n */\r\n public poleAngle = 0;\r\n\r\n /**\r\n * Gets or sets the TransformNode associated with the controller\r\n * Name kept as mesh for back compatibility\r\n */\r\n public mesh: TransformNode;\r\n\r\n /**\r\n * The amount to slerp (spherical linear interpolation) to the target. Set this to a value between 0 and 1 (a value of 1 disables slerp)\r\n */\r\n public slerpAmount = 1;\r\n\r\n private _bone1Quat = Quaternion.Identity();\r\n private _bone1Mat = Matrix.Identity();\r\n private _bone2Ang = Math.PI;\r\n\r\n private _bone1: Bone;\r\n private _bone2: Bone;\r\n private _bone1Length: number;\r\n private _bone2Length: number;\r\n private _maxAngle = Math.PI;\r\n private _maxReach: number;\r\n\r\n private _rightHandedSystem = false;\r\n\r\n private _bendAxis = Vector3.Right();\r\n private _slerping = false;\r\n\r\n private _adjustRoll = 0;\r\n\r\n private _notEnoughInformation = false;\r\n\r\n /**\r\n * Gets or sets maximum allowed angle\r\n */\r\n public get maxAngle(): number {\r\n return this._maxAngle;\r\n }\r\n\r\n public set maxAngle(value: number) {\r\n this._setMaxAngle(value);\r\n }\r\n\r\n /**\r\n * Creates a new BoneIKController\r\n * @param mesh defines the TransformNode to control\r\n * @param bone defines the bone to control. The bone needs to have a parent bone. It also needs to have a length greater than 0 or a children we can use to infer its length.\r\n * @param options defines options to set up the controller\r\n * @param options.targetMesh\r\n * @param options.poleTargetMesh\r\n * @param options.poleTargetBone\r\n * @param options.poleTargetLocalOffset\r\n * @param options.poleAngle\r\n * @param options.bendAxis\r\n * @param options.maxAngle\r\n * @param options.slerpAmount\r\n */\r\n constructor(\r\n mesh: TransformNode,\r\n bone: Bone,\r\n options?: {\r\n targetMesh?: TransformNode;\r\n poleTargetMesh?: TransformNode;\r\n poleTargetBone?: Bone;\r\n poleTargetLocalOffset?: Vector3;\r\n poleAngle?: number;\r\n bendAxis?: Vector3;\r\n maxAngle?: number;\r\n slerpAmount?: number;\r\n }\r\n ) {\r\n this._bone2 = bone;\r\n const bone1 = bone.getParent();\r\n\r\n if (!bone1) {\r\n this._notEnoughInformation = true;\r\n Logger.Error(\"BoneIKController: bone must have a parent for IK to work.\");\r\n return;\r\n }\r\n this._bone1 = bone1;\r\n\r\n if (this._bone2.children.length === 0 && !this._bone2.length) {\r\n this._notEnoughInformation = true;\r\n Logger.Error(\"BoneIKController: bone must not be a leaf or it should have a length for IK to work.\");\r\n return;\r\n }\r\n\r\n this.mesh = mesh;\r\n\r\n bone.getSkeleton().computeAbsoluteMatrices();\r\n\r\n const bonePos = bone.getPosition();\r\n\r\n if (bone.getAbsoluteMatrix().determinant() > 0) {\r\n this._rightHandedSystem = true;\r\n this._bendAxis.x = 0;\r\n this._bendAxis.y = 0;\r\n this._bendAxis.z = -1;\r\n\r\n if (bonePos.x > bonePos.y && bonePos.x > bonePos.z) {\r\n this._adjustRoll = Math.PI * 0.5;\r\n this._bendAxis.z = 1;\r\n }\r\n }\r\n\r\n if (this._bone1.length && this._bone2.length) {\r\n const boneScale1 = this._bone1.getScale();\r\n const boneScale2 = this._bone2.getScale();\r\n\r\n this._bone1Length = this._bone1.length * boneScale1.y * this.mesh.scaling.y;\r\n this._bone2Length = this._bone2.length * boneScale2.y * this.mesh.scaling.y;\r\n } else if (this._bone2.children[0]) {\r\n mesh.computeWorldMatrix(true);\r\n\r\n const pos1 = this._bone2.children[0].getAbsolutePosition(mesh);\r\n const pos2 = this._bone2.getAbsolutePosition(mesh);\r\n const pos3 = this._bone1.getAbsolutePosition(mesh);\r\n\r\n this._bone2Length = Vector3.Distance(pos1, pos2);\r\n this._bone1Length = Vector3.Distance(pos2, pos3);\r\n } else {\r\n mesh.computeWorldMatrix(true);\r\n\r\n const boneScale2 = this._bone2.getScale();\r\n this._bone2Length = this._bone2.length * boneScale2.y * this.mesh.scaling.y;\r\n\r\n const pos2 = this._bone2.getAbsolutePosition(mesh);\r\n const pos3 = this._bone1.getAbsolutePosition(mesh);\r\n\r\n this._bone1Length = Vector3.Distance(pos2, pos3);\r\n }\r\n\r\n this._bone1.getRotationMatrixToRef(Space.WORLD, mesh, this._bone1Mat);\r\n this.maxAngle = Math.PI;\r\n\r\n if (options) {\r\n if (options.targetMesh) {\r\n this.targetMesh = options.targetMesh;\r\n this.targetMesh.computeWorldMatrix(true);\r\n }\r\n\r\n if (options.poleTargetMesh) {\r\n this.poleTargetMesh = options.poleTargetMesh;\r\n this.poleTargetMesh.computeWorldMatrix(true);\r\n } else if (options.poleTargetBone) {\r\n this.poleTargetBone = options.poleTargetBone;\r\n } else if (this._bone1.getParent()) {\r\n this.poleTargetBone = this._bone1.getParent();\r\n }\r\n\r\n if (options.poleTargetLocalOffset) {\r\n this.poleTargetLocalOffset.copyFrom(options.poleTargetLocalOffset);\r\n }\r\n\r\n if (options.poleAngle) {\r\n this.poleAngle = options.poleAngle;\r\n }\r\n\r\n if (options.bendAxis) {\r\n this._bendAxis.copyFrom(options.bendAxis);\r\n }\r\n\r\n if (options.maxAngle) {\r\n this.maxAngle = options.maxAngle;\r\n }\r\n\r\n if (options.slerpAmount) {\r\n this.slerpAmount = options.slerpAmount;\r\n }\r\n }\r\n }\r\n\r\n private _setMaxAngle(ang: number): void {\r\n if (ang < 0) {\r\n ang = 0;\r\n }\r\n\r\n if (ang > Math.PI || ang == undefined) {\r\n ang = Math.PI;\r\n }\r\n\r\n this._maxAngle = ang;\r\n\r\n const a = this._bone1Length;\r\n const b = this._bone2Length;\r\n\r\n this._maxReach = Math.sqrt(a * a + b * b - 2 * a * b * Math.cos(ang));\r\n }\r\n\r\n /**\r\n * Force the controller to update the bones\r\n */\r\n public update(): void {\r\n if (this._notEnoughInformation) {\r\n return;\r\n }\r\n\r\n const target = this.targetPosition;\r\n const poleTarget = this.poleTargetPosition;\r\n\r\n const mat1 = BoneIKController._TmpMats[0];\r\n const mat2 = BoneIKController._TmpMats[1];\r\n\r\n if (this.targetMesh) {\r\n target.copyFrom(this.targetMesh.getAbsolutePosition());\r\n }\r\n\r\n if (this.poleTargetBone) {\r\n this.poleTargetBone.getAbsolutePositionFromLocalToRef(this.poleTargetLocalOffset, this.mesh, poleTarget);\r\n } else if (this.poleTargetMesh) {\r\n Vector3.TransformCoordinatesToRef(this.poleTargetLocalOffset, this.poleTargetMesh.getWorldMatrix(), poleTarget);\r\n }\r\n\r\n const bonePos = BoneIKController._TmpVecs[0];\r\n const zaxis = BoneIKController._TmpVecs[1];\r\n const xaxis = BoneIKController._TmpVecs[2];\r\n const yaxis = BoneIKController._TmpVecs[3];\r\n const upAxis = BoneIKController._TmpVecs[4];\r\n\r\n const tmpQuat = BoneIKController._TmpQuat;\r\n\r\n this._bone1.getAbsolutePositionToRef(this.mesh, bonePos);\r\n\r\n poleTarget.subtractToRef(bonePos, upAxis);\r\n\r\n if (upAxis.x == 0 && upAxis.y == 0 && upAxis.z == 0) {\r\n upAxis.y = 1;\r\n } else {\r\n upAxis.normalize();\r\n }\r\n\r\n target.subtractToRef(bonePos, yaxis);\r\n yaxis.normalize();\r\n\r\n Vector3.CrossToRef(yaxis, upAxis, zaxis);\r\n zaxis.normalize();\r\n\r\n Vector3.CrossToRef(yaxis, zaxis, xaxis);\r\n xaxis.normalize();\r\n\r\n Matrix.FromXYZAxesToRef(xaxis, yaxis, zaxis, mat1);\r\n\r\n const a = this._bone1Length;\r\n const b = this._bone2Length;\r\n\r\n let c = Vector3.Distance(bonePos, target);\r\n\r\n if (this._maxReach > 0) {\r\n c = Math.min(this._maxReach, c);\r\n }\r\n\r\n let acosa = (b * b + c * c - a * a) / (2 * b * c);\r\n let acosb = (c * c + a * a - b * b) / (2 * c * a);\r\n\r\n if (acosa > 1) {\r\n acosa = 1;\r\n }\r\n\r\n if (acosb > 1) {\r\n acosb = 1;\r\n }\r\n\r\n if (acosa < -1) {\r\n acosa = -1;\r\n }\r\n\r\n if (acosb < -1) {\r\n acosb = -1;\r\n }\r\n\r\n const angA = Math.acos(acosa);\r\n const angB = Math.acos(acosb);\r\n\r\n let angC = -angA - angB;\r\n\r\n if (this._rightHandedSystem) {\r\n Matrix.RotationYawPitchRollToRef(0, 0, this._adjustRoll, mat2);\r\n mat2.multiplyToRef(mat1, mat1);\r\n\r\n Matrix.RotationAxisToRef(this._bendAxis, angB, mat2);\r\n mat2.multiplyToRef(mat1, mat1);\r\n } else {\r\n const _tmpVec = BoneIKController._TmpVecs[5];\r\n\r\n _tmpVec.copyFrom(this._bendAxis);\r\n _tmpVec.x *= -1;\r\n\r\n Matrix.RotationAxisToRef(_tmpVec, -angB, mat2);\r\n mat2.multiplyToRef(mat1, mat1);\r\n }\r\n\r\n if (this.poleAngle) {\r\n Matrix.RotationAxisToRef(yaxis, this.poleAngle, mat2);\r\n mat1.multiplyToRef(mat2, mat1);\r\n }\r\n\r\n if (this._bone1) {\r\n if (this.slerpAmount < 1) {\r\n if (!this._slerping) {\r\n Quaternion.FromRotationMatrixToRef(this._bone1Mat, this._bone1Quat);\r\n }\r\n Quaternion.FromRotationMatrixToRef(mat1, tmpQuat);\r\n Quaternion.SlerpToRef(this._bone1Quat, tmpQuat, this.slerpAmount, this._bone1Quat);\r\n angC = this._bone2Ang * (1.0 - this.slerpAmount) + angC * this.slerpAmount;\r\n\r\n this._bone1.setRotationQuaternion(this._bone1Quat, Space.WORLD, this.mesh);\r\n this._slerping = true;\r\n } else {\r\n this._bone1.setRotationMatrix(mat1, Space.WORLD, this.mesh);\r\n this._bone1Mat.copyFrom(mat1);\r\n this._slerping = false;\r\n }\r\n this._updateLinkedTransformRotation(this._bone1);\r\n }\r\n\r\n this._bone2.setAxisAngle(this._bendAxis, angC, Space.LOCAL);\r\n this._updateLinkedTransformRotation(this._bone2);\r\n this._bone2Ang = angC;\r\n }\r\n\r\n private _updateLinkedTransformRotation(bone: Bone): void {\r\n if (bone._linkedTransformNode) {\r\n if (!bone._linkedTransformNode.rotationQuaternion) {\r\n bone._linkedTransformNode.rotationQuaternion = new Quaternion();\r\n }\r\n bone.getRotationQuaternionToRef(Space.LOCAL, null, bone._linkedTransformNode.rotationQuaternion);\r\n }\r\n }\r\n}\r\n"]}
|
|
1
|
+
{"version":3,"file":"boneIKController.js","sourceRoot":"","sources":["../../../../dev/core/src/Bones/boneIKController.ts"],"names":[],"mappings":"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","sourcesContent":["import type { Bone } from \"./bone\";\r\nimport { Vector3, Quaternion, Matrix } from \"../Maths/math.vector\";\r\nimport type { TransformNode } from \"../Meshes/transformNode\";\r\nimport type { Nullable } from \"../types\";\r\nimport { Space } from \"../Maths/math.axis\";\r\nimport { Logger } from \"../Misc/logger\";\r\n\r\n/**\r\n * Class used to apply inverse kinematics to bones\r\n * @see https://doc.babylonjs.com/features/featuresDeepDive/mesh/bonesSkeletons#boneikcontroller\r\n */\r\nexport class BoneIKController {\r\n private static _TmpVecs: Vector3[] = [Vector3.Zero(), Vector3.Zero(), Vector3.Zero(), Vector3.Zero(), Vector3.Zero(), Vector3.Zero()];\r\n private static _TmpQuat = Quaternion.Identity();\r\n private static _TmpMats: Matrix[] = [Matrix.Identity(), Matrix.Identity()];\r\n\r\n /**\r\n * Gets or sets the target TransformNode\r\n * Name kept as mesh for back compatibility\r\n */\r\n public targetMesh: TransformNode;\r\n\r\n /** Gets or sets the mesh used as pole */\r\n public poleTargetMesh: TransformNode;\r\n\r\n /**\r\n * Gets or sets the bone used as pole\r\n */\r\n public poleTargetBone: Nullable<Bone>;\r\n\r\n /**\r\n * Gets or sets the target position\r\n */\r\n public targetPosition = Vector3.Zero();\r\n\r\n /**\r\n * Gets or sets the pole target position\r\n */\r\n public poleTargetPosition = Vector3.Zero();\r\n\r\n /**\r\n * Gets or sets the pole target local offset\r\n */\r\n public poleTargetLocalOffset = Vector3.Zero();\r\n\r\n /**\r\n * Gets or sets the pole angle\r\n */\r\n public poleAngle = 0;\r\n\r\n /**\r\n * Gets or sets the TransformNode associated with the controller\r\n * Name kept as mesh for back compatibility\r\n */\r\n public mesh: TransformNode;\r\n\r\n /**\r\n * The amount to slerp (spherical linear interpolation) to the target. Set this to a value between 0 and 1 (a value of 1 disables slerp)\r\n */\r\n public slerpAmount = 1;\r\n\r\n private _bone1Quat = Quaternion.Identity();\r\n private _bone1Mat = Matrix.Identity();\r\n private _bone2Ang = Math.PI;\r\n\r\n private _bone1: Bone;\r\n private _bone2: Bone;\r\n private _bone1Length: number;\r\n private _bone2Length: number;\r\n private _maxAngle = Math.PI;\r\n private _maxReach: number;\r\n\r\n private _rightHandedSystem = false;\r\n\r\n private _bendAxis = Vector3.Right();\r\n private _slerping = false;\r\n\r\n private _adjustRoll = 0;\r\n\r\n private _notEnoughInformation = false;\r\n\r\n /**\r\n * Gets or sets maximum allowed angle\r\n */\r\n public get maxAngle(): number {\r\n return this._maxAngle;\r\n }\r\n\r\n public set maxAngle(value: number) {\r\n this._setMaxAngle(value);\r\n }\r\n\r\n /**\r\n * Creates a new BoneIKController\r\n * @param mesh defines the TransformNode to control\r\n * @param bone defines the bone to control. The bone needs to have a parent bone. It also needs to have a length greater than 0 or a children we can use to infer its length.\r\n * @param options defines options to set up the controller\r\n * @param options.targetMesh\r\n * @param options.poleTargetMesh\r\n * @param options.poleTargetBone\r\n * @param options.poleTargetLocalOffset\r\n * @param options.poleAngle\r\n * @param options.bendAxis\r\n * @param options.maxAngle\r\n * @param options.slerpAmount\r\n */\r\n constructor(\r\n mesh: TransformNode,\r\n bone: Bone,\r\n options?: {\r\n targetMesh?: TransformNode;\r\n poleTargetMesh?: TransformNode;\r\n poleTargetBone?: Bone;\r\n poleTargetLocalOffset?: Vector3;\r\n poleAngle?: number;\r\n bendAxis?: Vector3;\r\n maxAngle?: number;\r\n slerpAmount?: number;\r\n }\r\n ) {\r\n this._bone2 = bone;\r\n const bone1 = bone.getParent();\r\n\r\n if (!bone1) {\r\n this._notEnoughInformation = true;\r\n Logger.Error(\"BoneIKController: bone must have a parent for IK to work.\");\r\n return;\r\n }\r\n this._bone1 = bone1;\r\n\r\n if (this._bone2.children.length === 0 && !this._bone2.length) {\r\n this._notEnoughInformation = true;\r\n Logger.Error(\"BoneIKController: bone must not be a leaf or it should have a length for IK to work.\");\r\n return;\r\n }\r\n\r\n this.mesh = mesh;\r\n\r\n bone.getSkeleton().computeAbsoluteMatrices();\r\n\r\n const bonePos = bone.getPosition();\r\n\r\n if (bone.getAbsoluteMatrix().determinant() > 0) {\r\n this._rightHandedSystem = true;\r\n this._bendAxis.x = 0;\r\n this._bendAxis.y = 0;\r\n this._bendAxis.z = -1;\r\n\r\n if (bonePos.x > bonePos.y && bonePos.x > bonePos.z) {\r\n this._adjustRoll = Math.PI * 0.5;\r\n this._bendAxis.z = 1;\r\n }\r\n }\r\n\r\n if (this._bone1.length && this._bone2.length) {\r\n const boneScale1 = this._bone1.getScale();\r\n const boneScale2 = this._bone2.getScale();\r\n\r\n this._bone1Length = this._bone1.length * boneScale1.y * this.mesh.scaling.y;\r\n this._bone2Length = this._bone2.length * boneScale2.y * this.mesh.scaling.y;\r\n } else if (this._bone2.children[0]) {\r\n mesh.computeWorldMatrix(true);\r\n\r\n const pos1 = this._bone2.children[0].getAbsolutePosition(mesh);\r\n const pos2 = this._bone2.getAbsolutePosition(mesh);\r\n const pos3 = this._bone1.getAbsolutePosition(mesh);\r\n\r\n this._bone2Length = Vector3.Distance(pos1, pos2);\r\n this._bone1Length = Vector3.Distance(pos2, pos3);\r\n } else {\r\n mesh.computeWorldMatrix(true);\r\n\r\n const boneScale2 = this._bone2.getScale();\r\n this._bone2Length = this._bone2.length * boneScale2.y * this.mesh.scaling.y;\r\n\r\n const pos2 = this._bone2.getAbsolutePosition(mesh);\r\n const pos3 = this._bone1.getAbsolutePosition(mesh);\r\n\r\n this._bone1Length = Vector3.Distance(pos2, pos3);\r\n }\r\n\r\n this._bone1.getRotationMatrixToRef(Space.WORLD, mesh, this._bone1Mat);\r\n this.maxAngle = Math.PI;\r\n\r\n if (options) {\r\n if (options.targetMesh) {\r\n this.targetMesh = options.targetMesh;\r\n this.targetMesh.computeWorldMatrix(true);\r\n }\r\n\r\n if (options.poleTargetMesh) {\r\n this.poleTargetMesh = options.poleTargetMesh;\r\n this.poleTargetMesh.computeWorldMatrix(true);\r\n } else if (options.poleTargetBone) {\r\n this.poleTargetBone = options.poleTargetBone;\r\n } else if (this._bone1.getParent()) {\r\n this.poleTargetBone = this._bone1.getParent();\r\n }\r\n\r\n if (options.poleTargetLocalOffset) {\r\n this.poleTargetLocalOffset.copyFrom(options.poleTargetLocalOffset);\r\n }\r\n\r\n if (options.poleAngle) {\r\n this.poleAngle = options.poleAngle;\r\n }\r\n\r\n if (options.bendAxis) {\r\n this._bendAxis.copyFrom(options.bendAxis);\r\n }\r\n\r\n if (options.maxAngle) {\r\n this.maxAngle = options.maxAngle;\r\n }\r\n\r\n if (options.slerpAmount) {\r\n this.slerpAmount = options.slerpAmount;\r\n }\r\n }\r\n }\r\n\r\n private _setMaxAngle(ang: number): void {\r\n if (ang < 0) {\r\n ang = 0;\r\n }\r\n\r\n if (ang > Math.PI || ang == undefined) {\r\n ang = Math.PI;\r\n }\r\n\r\n this._maxAngle = ang;\r\n\r\n const a = this._bone1Length;\r\n const b = this._bone2Length;\r\n\r\n this._maxReach = Math.sqrt(a * a + b * b - 2 * a * b * Math.cos(ang));\r\n }\r\n\r\n /**\r\n * Force the controller to update the bones\r\n */\r\n public update(): void {\r\n if (this._notEnoughInformation) {\r\n return;\r\n }\r\n\r\n const target = this.targetPosition;\r\n const poleTarget = this.poleTargetPosition;\r\n\r\n const mat1 = BoneIKController._TmpMats[0];\r\n const mat2 = BoneIKController._TmpMats[1];\r\n\r\n if (this.targetMesh) {\r\n target.copyFrom(this.targetMesh.getAbsolutePosition());\r\n }\r\n\r\n if (this.poleTargetBone) {\r\n this.poleTargetBone.getAbsolutePositionFromLocalToRef(this.poleTargetLocalOffset, this.mesh, poleTarget);\r\n } else if (this.poleTargetMesh) {\r\n Vector3.TransformCoordinatesToRef(this.poleTargetLocalOffset, this.poleTargetMesh.getWorldMatrix(), poleTarget);\r\n }\r\n\r\n const bonePos = BoneIKController._TmpVecs[0];\r\n const zaxis = BoneIKController._TmpVecs[1];\r\n const xaxis = BoneIKController._TmpVecs[2];\r\n const yaxis = BoneIKController._TmpVecs[3];\r\n const upAxis = BoneIKController._TmpVecs[4];\r\n\r\n const tmpQuat = BoneIKController._TmpQuat;\r\n\r\n this._bone1.getAbsolutePositionToRef(this.mesh, bonePos);\r\n\r\n poleTarget.subtractToRef(bonePos, upAxis);\r\n\r\n if (upAxis.x == 0 && upAxis.y == 0 && upAxis.z == 0) {\r\n upAxis.y = 1;\r\n } else {\r\n upAxis.normalize();\r\n }\r\n\r\n target.subtractToRef(bonePos, yaxis);\r\n yaxis.normalize();\r\n\r\n Vector3.CrossToRef(yaxis, upAxis, zaxis);\r\n zaxis.normalize();\r\n\r\n Vector3.CrossToRef(yaxis, zaxis, xaxis);\r\n xaxis.normalize();\r\n\r\n Matrix.FromXYZAxesToRef(xaxis, yaxis, zaxis, mat1);\r\n\r\n const a = this._bone1Length;\r\n const b = this._bone2Length;\r\n\r\n let c = Vector3.Distance(bonePos, target);\r\n\r\n if (this._maxReach > 0) {\r\n c = Math.min(this._maxReach, c);\r\n }\r\n\r\n let acosa = (b * b + c * c - a * a) / (2 * b * c);\r\n let acosb = (c * c + a * a - b * b) / (2 * c * a);\r\n\r\n if (acosa > 1) {\r\n acosa = 1;\r\n }\r\n\r\n if (acosb > 1) {\r\n acosb = 1;\r\n }\r\n\r\n if (acosa < -1) {\r\n acosa = -1;\r\n }\r\n\r\n if (acosb < -1) {\r\n acosb = -1;\r\n }\r\n\r\n const angA = Math.acos(acosa);\r\n const angB = Math.acos(acosb);\r\n\r\n let angC = -angA - angB;\r\n\r\n if (this._rightHandedSystem) {\r\n Matrix.RotationYawPitchRollToRef(0, 0, this._adjustRoll, mat2);\r\n mat2.multiplyToRef(mat1, mat1);\r\n\r\n Matrix.RotationAxisToRef(this._bendAxis, angB, mat2);\r\n mat2.multiplyToRef(mat1, mat1);\r\n } else {\r\n const _tmpVec = BoneIKController._TmpVecs[5];\r\n\r\n _tmpVec.copyFrom(this._bendAxis);\r\n _tmpVec.x *= -1;\r\n\r\n Matrix.RotationAxisToRef(_tmpVec, -angB, mat2);\r\n mat2.multiplyToRef(mat1, mat1);\r\n }\r\n\r\n if (this.poleAngle) {\r\n Matrix.RotationAxisToRef(yaxis, this.poleAngle, mat2);\r\n mat1.multiplyToRef(mat2, mat1);\r\n }\r\n\r\n if (this._bone1) {\r\n if (this.slerpAmount < 1) {\r\n if (!this._slerping) {\r\n Quaternion.FromRotationMatrixToRef(this._bone1Mat, this._bone1Quat);\r\n }\r\n Quaternion.FromRotationMatrixToRef(mat1, tmpQuat);\r\n Quaternion.SlerpToRef(this._bone1Quat, tmpQuat, this.slerpAmount, this._bone1Quat);\r\n angC = this._bone2Ang * (1.0 - this.slerpAmount) + angC * this.slerpAmount;\r\n\r\n this._bone1.setRotationQuaternion(this._bone1Quat, Space.WORLD, this.mesh);\r\n this._slerping = true;\r\n } else {\r\n this._bone1.setRotationMatrix(mat1, Space.WORLD, this.mesh);\r\n this._bone1Mat.copyFrom(mat1);\r\n this._slerping = false;\r\n }\r\n this._updateLinkedTransformRotation(this._bone1);\r\n }\r\n\r\n this._bone2.setAxisAngle(this._bendAxis, angC, Space.LOCAL);\r\n this._updateLinkedTransformRotation(this._bone2);\r\n this._bone2Ang = angC;\r\n }\r\n\r\n private _updateLinkedTransformRotation(bone: Bone): void {\r\n if (bone._linkedTransformNode) {\r\n if (!bone._linkedTransformNode.rotationQuaternion) {\r\n bone._linkedTransformNode.rotationQuaternion = new Quaternion();\r\n }\r\n bone.getRotationQuaternionToRef(Space.LOCAL, null, bone._linkedTransformNode.rotationQuaternion);\r\n }\r\n }\r\n}\r\n"]}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { ArrayTools } from "../Misc/arrayTools.js";
|
|
2
2
|
import { Vector3, Quaternion, Matrix } from "../Maths/math.vector.js";
|
|
3
|
-
import {
|
|
3
|
+
import { Axis } from "../Maths/math.axis.js";
|
|
4
4
|
/**
|
|
5
5
|
* Class used to make a bone look toward a point in space
|
|
6
6
|
* @see https://doc.babylonjs.com/features/featuresDeepDive/mesh/bonesSkeletons#bonelookcontroller
|
|
@@ -95,7 +95,7 @@ export class BoneLookController {
|
|
|
95
95
|
/**
|
|
96
96
|
* The space that the up axis is in - Space.BONE, Space.LOCAL (default), or Space.WORLD
|
|
97
97
|
*/
|
|
98
|
-
this.upAxisSpace = Space.LOCAL
|
|
98
|
+
this.upAxisSpace = 0 /* Space.LOCAL */;
|
|
99
99
|
/**
|
|
100
100
|
* Used to make an adjustment to the yaw of the bone
|
|
101
101
|
*/
|
|
@@ -187,8 +187,8 @@ export class BoneLookController {
|
|
|
187
187
|
this.useAbsoluteValueForYaw = options.useAbsoluteValueForYaw;
|
|
188
188
|
}
|
|
189
189
|
}
|
|
190
|
-
if (!bone.getParent() && this.upAxisSpace == Space.BONE) {
|
|
191
|
-
this.upAxisSpace = Space.LOCAL
|
|
190
|
+
if (!bone.getParent() && this.upAxisSpace == 2 /* Space.BONE */) {
|
|
191
|
+
this.upAxisSpace = 0 /* Space.LOCAL */;
|
|
192
192
|
}
|
|
193
193
|
}
|
|
194
194
|
/**
|
|
@@ -210,13 +210,13 @@ export class BoneLookController {
|
|
|
210
210
|
const parentBone = bone.getParent();
|
|
211
211
|
const upAxis = BoneLookController._TmpVecs[1];
|
|
212
212
|
upAxis.copyFrom(this.upAxis);
|
|
213
|
-
if (this.upAxisSpace == Space.BONE && parentBone) {
|
|
213
|
+
if (this.upAxisSpace == 2 /* Space.BONE */ && parentBone) {
|
|
214
214
|
if (this._transformYawPitch) {
|
|
215
215
|
Vector3.TransformCoordinatesToRef(upAxis, this._transformYawPitchInv, upAxis);
|
|
216
216
|
}
|
|
217
217
|
parentBone.getDirectionToRef(upAxis, this.mesh, upAxis);
|
|
218
218
|
}
|
|
219
|
-
else if (this.upAxisSpace == Space.LOCAL) {
|
|
219
|
+
else if (this.upAxisSpace == 0 /* Space.LOCAL */) {
|
|
220
220
|
mesh.getDirectionToRef(upAxis, upAxis);
|
|
221
221
|
if (mesh.scaling.x != 1 || mesh.scaling.y != 1 || mesh.scaling.z != 1) {
|
|
222
222
|
upAxis.normalize();
|
|
@@ -233,10 +233,10 @@ export class BoneLookController {
|
|
|
233
233
|
if (checkYaw || checkPitch) {
|
|
234
234
|
const spaceMat = BoneLookController._TmpMats[2];
|
|
235
235
|
const spaceMatInv = BoneLookController._TmpMats[3];
|
|
236
|
-
if (this.upAxisSpace == Space.BONE && upAxis.y == 1 && parentBone) {
|
|
237
|
-
parentBone.getRotationMatrixToRef(Space.WORLD
|
|
236
|
+
if (this.upAxisSpace == 2 /* Space.BONE */ && upAxis.y == 1 && parentBone) {
|
|
237
|
+
parentBone.getRotationMatrixToRef(1 /* Space.WORLD */, this.mesh, spaceMat);
|
|
238
238
|
}
|
|
239
|
-
else if (this.upAxisSpace == Space.LOCAL && upAxis.y == 1 && !parentBone) {
|
|
239
|
+
else if (this.upAxisSpace == 0 /* Space.LOCAL */ && upAxis.y == 1 && !parentBone) {
|
|
240
240
|
spaceMat.copyFrom(mesh.getWorldMatrix());
|
|
241
241
|
}
|
|
242
242
|
else {
|
|
@@ -389,21 +389,21 @@ export class BoneLookController {
|
|
|
389
389
|
boneScaling.copyFrom(this.bone.getScale());
|
|
390
390
|
if (this.slerpAmount < 1) {
|
|
391
391
|
if (!this._slerping) {
|
|
392
|
-
this.bone.getRotationQuaternionToRef(Space.WORLD
|
|
392
|
+
this.bone.getRotationQuaternionToRef(1 /* Space.WORLD */, this.mesh, this._boneQuat);
|
|
393
393
|
}
|
|
394
394
|
if (this._transformYawPitch) {
|
|
395
395
|
this._transformYawPitch.multiplyToRef(_tmpMat1, _tmpMat1);
|
|
396
396
|
}
|
|
397
397
|
Quaternion.FromRotationMatrixToRef(_tmpMat1, tmpQuat);
|
|
398
398
|
Quaternion.SlerpToRef(this._boneQuat, tmpQuat, this.slerpAmount, this._boneQuat);
|
|
399
|
-
this.bone.setRotationQuaternion(this._boneQuat, Space.WORLD
|
|
399
|
+
this.bone.setRotationQuaternion(this._boneQuat, 1 /* Space.WORLD */, this.mesh);
|
|
400
400
|
this._slerping = true;
|
|
401
401
|
}
|
|
402
402
|
else {
|
|
403
403
|
if (this._transformYawPitch) {
|
|
404
404
|
this._transformYawPitch.multiplyToRef(_tmpMat1, _tmpMat1);
|
|
405
405
|
}
|
|
406
|
-
this.bone.setRotationMatrix(_tmpMat1, Space.WORLD
|
|
406
|
+
this.bone.setRotationMatrix(_tmpMat1, 1 /* Space.WORLD */, this.mesh);
|
|
407
407
|
this._slerping = false;
|
|
408
408
|
}
|
|
409
409
|
this.bone.setScale(boneScaling);
|
|
@@ -462,7 +462,7 @@ export class BoneLookController {
|
|
|
462
462
|
if (!bone._linkedTransformNode.rotationQuaternion) {
|
|
463
463
|
bone._linkedTransformNode.rotationQuaternion = new Quaternion();
|
|
464
464
|
}
|
|
465
|
-
bone.getRotationQuaternionToRef(Space.LOCAL
|
|
465
|
+
bone.getRotationQuaternionToRef(0 /* Space.LOCAL */, null, bone._linkedTransformNode.rotationQuaternion);
|
|
466
466
|
}
|
|
467
467
|
}
|
|
468
468
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"boneLookController.js","sourceRoot":"","sources":["../../../../dev/core/src/Bones/boneLookController.ts"],"names":[],"mappings":"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","sourcesContent":["import type { Nullable } from \"../types\";\r\nimport { ArrayTools } from \"../Misc/arrayTools\";\r\nimport { Vector3, Quaternion, Matrix } from \"../Maths/math.vector\";\r\nimport type { TransformNode } from \"../Meshes/transformNode\";\r\nimport type { Bone } from \"./bone\";\r\nimport { Space, Axis } from \"../Maths/math.axis\";\r\n\r\n/**\r\n * Class used to make a bone look toward a point in space\r\n * @see https://doc.babylonjs.com/features/featuresDeepDive/mesh/bonesSkeletons#bonelookcontroller\r\n */\r\nexport class BoneLookController {\r\n private static _TmpVecs: Vector3[] = ArrayTools.BuildArray(10, Vector3.Zero);\r\n private static _TmpQuat = Quaternion.Identity();\r\n private static _TmpMats: Matrix[] = ArrayTools.BuildArray(5, Matrix.Identity);\r\n\r\n /**\r\n * The target Vector3 that the bone will look at\r\n */\r\n public target: Vector3;\r\n\r\n /**\r\n * The TransformNode that the bone is attached to\r\n * Name kept as mesh for back compatibility\r\n */\r\n public mesh: TransformNode;\r\n\r\n /**\r\n * The bone that will be looking to the target\r\n */\r\n public bone: Bone;\r\n\r\n /**\r\n * The up axis of the coordinate system that is used when the bone is rotated\r\n */\r\n public upAxis: Vector3 = Vector3.Up();\r\n\r\n /**\r\n * The space that the up axis is in - Space.BONE, Space.LOCAL (default), or Space.WORLD\r\n */\r\n public upAxisSpace: Space = Space.LOCAL;\r\n\r\n /**\r\n * Used to make an adjustment to the yaw of the bone\r\n */\r\n public adjustYaw = 0;\r\n\r\n /**\r\n * Used to make an adjustment to the pitch of the bone\r\n */\r\n public adjustPitch = 0;\r\n\r\n /**\r\n * Used to make an adjustment to the roll of the bone\r\n */\r\n public adjustRoll = 0;\r\n\r\n /**\r\n * The amount to slerp (spherical linear interpolation) to the target. Set this to a value between 0 and 1 (a value of 1 disables slerp)\r\n */\r\n public slerpAmount = 1;\r\n\r\n private _minYaw: number;\r\n private _maxYaw: number;\r\n private _minPitch: number;\r\n private _maxPitch: number;\r\n private _minYawSin: number;\r\n private _minYawCos: number;\r\n private _maxYawSin: number;\r\n private _maxYawCos: number;\r\n private _midYawConstraint: number;\r\n private _minPitchTan: number;\r\n private _maxPitchTan: number;\r\n\r\n private _boneQuat: Quaternion = Quaternion.Identity();\r\n private _slerping = false;\r\n private _transformYawPitch: Matrix;\r\n private _transformYawPitchInv: Matrix;\r\n private _firstFrameSkipped = false;\r\n private _yawRange: number;\r\n private _fowardAxis: Vector3 = Vector3.Forward();\r\n\r\n /**\r\n * Gets or sets the minimum yaw angle that the bone can look to\r\n */\r\n get minYaw(): number {\r\n return this._minYaw;\r\n }\r\n\r\n set minYaw(value: number) {\r\n this._minYaw = value;\r\n this._minYawSin = Math.sin(value);\r\n this._minYawCos = Math.cos(value);\r\n if (this._maxYaw != null) {\r\n this._midYawConstraint = this._getAngleDiff(this._minYaw, this._maxYaw) * 0.5 + this._minYaw;\r\n this._yawRange = this._maxYaw - this._minYaw;\r\n }\r\n }\r\n\r\n /**\r\n * Gets or sets the maximum yaw angle that the bone can look to\r\n */\r\n get maxYaw(): number {\r\n return this._maxYaw;\r\n }\r\n\r\n set maxYaw(value: number) {\r\n this._maxYaw = value;\r\n this._maxYawSin = Math.sin(value);\r\n this._maxYawCos = Math.cos(value);\r\n if (this._minYaw != null) {\r\n this._midYawConstraint = this._getAngleDiff(this._minYaw, this._maxYaw) * 0.5 + this._minYaw;\r\n this._yawRange = this._maxYaw - this._minYaw;\r\n }\r\n }\r\n\r\n /**\r\n * Use the absolute value for yaw when checking the min/max constraints\r\n */\r\n public useAbsoluteValueForYaw = false;\r\n\r\n /**\r\n * Gets or sets the minimum pitch angle that the bone can look to\r\n */\r\n get minPitch(): number {\r\n return this._minPitch;\r\n }\r\n\r\n set minPitch(value: number) {\r\n this._minPitch = value;\r\n this._minPitchTan = Math.tan(value);\r\n }\r\n\r\n /**\r\n * Gets or sets the maximum pitch angle that the bone can look to\r\n */\r\n get maxPitch(): number {\r\n return this._maxPitch;\r\n }\r\n\r\n set maxPitch(value: number) {\r\n this._maxPitch = value;\r\n this._maxPitchTan = Math.tan(value);\r\n }\r\n\r\n /**\r\n * Create a BoneLookController\r\n * @param mesh the TransformNode that the bone belongs to\r\n * @param bone the bone that will be looking to the target\r\n * @param target the target Vector3 to look at\r\n * @param options optional settings:\r\n * * maxYaw: the maximum angle the bone will yaw to\r\n * * minYaw: the minimum angle the bone will yaw to\r\n * * maxPitch: the maximum angle the bone will pitch to\r\n * * minPitch: the minimum angle the bone will yaw to\r\n * * slerpAmount: set the between 0 and 1 to make the bone slerp to the target.\r\n * * upAxis: the up axis of the coordinate system\r\n * * upAxisSpace: the space that the up axis is in - Space.BONE, Space.LOCAL (default), or Space.WORLD.\r\n * * yawAxis: set yawAxis if the bone does not yaw on the y axis\r\n * * pitchAxis: set pitchAxis if the bone does not pitch on the x axis\r\n * * adjustYaw: used to make an adjustment to the yaw of the bone\r\n * * adjustPitch: used to make an adjustment to the pitch of the bone\r\n * * adjustRoll: used to make an adjustment to the roll of the bone\r\n * @param options.maxYaw\r\n * @param options.minYaw\r\n * @param options.maxPitch\r\n * @param options.minPitch\r\n * @param options.slerpAmount\r\n * @param options.upAxis\r\n * @param options.upAxisSpace\r\n * @param options.yawAxis\r\n * @param options.pitchAxis\r\n * @param options.adjustYaw\r\n * @param options.adjustPitch\r\n * @param options.adjustRoll\r\n **/\r\n constructor(\r\n mesh: TransformNode,\r\n bone: Bone,\r\n target: Vector3,\r\n options?: {\r\n maxYaw?: number;\r\n minYaw?: number;\r\n maxPitch?: number;\r\n minPitch?: number;\r\n slerpAmount?: number;\r\n upAxis?: Vector3;\r\n upAxisSpace?: Space;\r\n yawAxis?: Vector3;\r\n pitchAxis?: Vector3;\r\n adjustYaw?: number;\r\n adjustPitch?: number;\r\n adjustRoll?: number;\r\n useAbsoluteValueForYaw?: boolean;\r\n }\r\n ) {\r\n this.mesh = mesh;\r\n this.bone = bone;\r\n this.target = target;\r\n\r\n if (options) {\r\n if (options.adjustYaw) {\r\n this.adjustYaw = options.adjustYaw;\r\n }\r\n\r\n if (options.adjustPitch) {\r\n this.adjustPitch = options.adjustPitch;\r\n }\r\n\r\n if (options.adjustRoll) {\r\n this.adjustRoll = options.adjustRoll;\r\n }\r\n\r\n if (options.maxYaw != null) {\r\n this.maxYaw = options.maxYaw;\r\n } else {\r\n this.maxYaw = Math.PI;\r\n }\r\n\r\n if (options.minYaw != null) {\r\n this.minYaw = options.minYaw;\r\n } else {\r\n this.minYaw = -Math.PI;\r\n }\r\n\r\n if (options.maxPitch != null) {\r\n this.maxPitch = options.maxPitch;\r\n } else {\r\n this.maxPitch = Math.PI;\r\n }\r\n\r\n if (options.minPitch != null) {\r\n this.minPitch = options.minPitch;\r\n } else {\r\n this.minPitch = -Math.PI;\r\n }\r\n\r\n if (options.slerpAmount != null) {\r\n this.slerpAmount = options.slerpAmount;\r\n }\r\n\r\n if (options.upAxis != null) {\r\n this.upAxis = options.upAxis;\r\n }\r\n\r\n if (options.upAxisSpace != null) {\r\n this.upAxisSpace = options.upAxisSpace;\r\n }\r\n\r\n if (options.yawAxis != null || options.pitchAxis != null) {\r\n let newYawAxis = Axis.Y;\r\n let newPitchAxis = Axis.X;\r\n\r\n if (options.yawAxis != null) {\r\n newYawAxis = options.yawAxis.clone();\r\n newYawAxis.normalize();\r\n }\r\n\r\n if (options.pitchAxis != null) {\r\n newPitchAxis = options.pitchAxis.clone();\r\n newPitchAxis.normalize();\r\n }\r\n\r\n const newRollAxis = Vector3.Cross(newPitchAxis, newYawAxis);\r\n\r\n this._transformYawPitch = Matrix.Identity();\r\n Matrix.FromXYZAxesToRef(newPitchAxis, newYawAxis, newRollAxis, this._transformYawPitch);\r\n\r\n this._transformYawPitchInv = this._transformYawPitch.clone();\r\n this._transformYawPitch.invert();\r\n }\r\n\r\n if (options.useAbsoluteValueForYaw !== undefined) {\r\n this.useAbsoluteValueForYaw = options.useAbsoluteValueForYaw;\r\n }\r\n }\r\n\r\n if (!bone.getParent() && this.upAxisSpace == Space.BONE) {\r\n this.upAxisSpace = Space.LOCAL;\r\n }\r\n }\r\n\r\n /**\r\n * Update the bone to look at the target. This should be called before the scene is rendered (use scene.registerBeforeRender())\r\n */\r\n public update(): void {\r\n //skip the first frame when slerping so that the TransformNode rotation is correct\r\n if (this.slerpAmount < 1 && !this._firstFrameSkipped) {\r\n this._firstFrameSkipped = true;\r\n return;\r\n }\r\n\r\n const bone = this.bone;\r\n const bonePos = BoneLookController._TmpVecs[0];\r\n bone.getAbsolutePositionToRef(this.mesh, bonePos);\r\n\r\n let target = this.target;\r\n const _tmpMat1 = BoneLookController._TmpMats[0];\r\n const _tmpMat2 = BoneLookController._TmpMats[1];\r\n\r\n const mesh = this.mesh;\r\n const parentBone = bone.getParent();\r\n\r\n const upAxis = BoneLookController._TmpVecs[1];\r\n upAxis.copyFrom(this.upAxis);\r\n\r\n if (this.upAxisSpace == Space.BONE && parentBone) {\r\n if (this._transformYawPitch) {\r\n Vector3.TransformCoordinatesToRef(upAxis, this._transformYawPitchInv, upAxis);\r\n }\r\n parentBone.getDirectionToRef(upAxis, this.mesh, upAxis);\r\n } else if (this.upAxisSpace == Space.LOCAL) {\r\n mesh.getDirectionToRef(upAxis, upAxis);\r\n if (mesh.scaling.x != 1 || mesh.scaling.y != 1 || mesh.scaling.z != 1) {\r\n upAxis.normalize();\r\n }\r\n }\r\n\r\n let checkYaw = false;\r\n let checkPitch = false;\r\n\r\n if (this._maxYaw != Math.PI || this._minYaw != -Math.PI) {\r\n checkYaw = true;\r\n }\r\n if (this._maxPitch != Math.PI || this._minPitch != -Math.PI) {\r\n checkPitch = true;\r\n }\r\n\r\n if (checkYaw || checkPitch) {\r\n const spaceMat = BoneLookController._TmpMats[2];\r\n const spaceMatInv = BoneLookController._TmpMats[3];\r\n\r\n if (this.upAxisSpace == Space.BONE && upAxis.y == 1 && parentBone) {\r\n parentBone.getRotationMatrixToRef(Space.WORLD, this.mesh, spaceMat);\r\n } else if (this.upAxisSpace == Space.LOCAL && upAxis.y == 1 && !parentBone) {\r\n spaceMat.copyFrom(mesh.getWorldMatrix());\r\n } else {\r\n let forwardAxis = BoneLookController._TmpVecs[2];\r\n forwardAxis.copyFrom(this._fowardAxis);\r\n\r\n if (this._transformYawPitch) {\r\n Vector3.TransformCoordinatesToRef(forwardAxis, this._transformYawPitchInv, forwardAxis);\r\n }\r\n\r\n if (parentBone) {\r\n parentBone.getDirectionToRef(forwardAxis, this.mesh, forwardAxis);\r\n } else {\r\n mesh.getDirectionToRef(forwardAxis, forwardAxis);\r\n }\r\n\r\n const rightAxis = Vector3.Cross(upAxis, forwardAxis);\r\n rightAxis.normalize();\r\n forwardAxis = Vector3.Cross(rightAxis, upAxis);\r\n\r\n Matrix.FromXYZAxesToRef(rightAxis, upAxis, forwardAxis, spaceMat);\r\n }\r\n\r\n spaceMat.invertToRef(spaceMatInv);\r\n\r\n let xzlen: Nullable<number> = null;\r\n\r\n if (checkPitch) {\r\n const localTarget = BoneLookController._TmpVecs[3];\r\n target.subtractToRef(bonePos, localTarget);\r\n Vector3.TransformCoordinatesToRef(localTarget, spaceMatInv, localTarget);\r\n\r\n xzlen = Math.sqrt(localTarget.x * localTarget.x + localTarget.z * localTarget.z);\r\n const pitch = Math.atan2(localTarget.y, xzlen);\r\n let newPitch = pitch;\r\n\r\n if (pitch > this._maxPitch) {\r\n localTarget.y = this._maxPitchTan * xzlen;\r\n newPitch = this._maxPitch;\r\n } else if (pitch < this._minPitch) {\r\n localTarget.y = this._minPitchTan * xzlen;\r\n newPitch = this._minPitch;\r\n }\r\n\r\n if (pitch != newPitch) {\r\n Vector3.TransformCoordinatesToRef(localTarget, spaceMat, localTarget);\r\n localTarget.addInPlace(bonePos);\r\n target = localTarget;\r\n }\r\n }\r\n\r\n if (checkYaw) {\r\n const localTarget = BoneLookController._TmpVecs[4];\r\n target.subtractToRef(bonePos, localTarget);\r\n Vector3.TransformCoordinatesToRef(localTarget, spaceMatInv, localTarget);\r\n\r\n const yaw = Math.atan2(localTarget.x, localTarget.z);\r\n const yawCheck = this.useAbsoluteValueForYaw ? Math.abs(yaw) : yaw;\r\n let newYaw = yaw;\r\n\r\n if (yawCheck > this._maxYaw || yawCheck < this._minYaw) {\r\n if (xzlen == null) {\r\n xzlen = Math.sqrt(localTarget.x * localTarget.x + localTarget.z * localTarget.z);\r\n }\r\n\r\n if (this._yawRange > Math.PI) {\r\n if (this._isAngleBetween(yaw, this._maxYaw, this._midYawConstraint)) {\r\n localTarget.z = this._maxYawCos * xzlen;\r\n localTarget.x = this._maxYawSin * xzlen;\r\n newYaw = this._maxYaw;\r\n } else if (this._isAngleBetween(yaw, this._midYawConstraint, this._minYaw)) {\r\n localTarget.z = this._minYawCos * xzlen;\r\n localTarget.x = this._minYawSin * xzlen;\r\n newYaw = this._minYaw;\r\n }\r\n } else {\r\n if (yawCheck > this._maxYaw) {\r\n localTarget.z = this._maxYawCos * xzlen;\r\n localTarget.x = this._maxYawSin * xzlen;\r\n if (yaw < 0 && this.useAbsoluteValueForYaw) {\r\n localTarget.x *= -1;\r\n }\r\n newYaw = this._maxYaw;\r\n } else if (yawCheck < this._minYaw) {\r\n localTarget.z = this._minYawCos * xzlen;\r\n localTarget.x = this._minYawSin * xzlen;\r\n if (yaw < 0 && this.useAbsoluteValueForYaw) {\r\n localTarget.x *= -1;\r\n }\r\n newYaw = this._minYaw;\r\n }\r\n }\r\n }\r\n\r\n if (this._slerping && this._yawRange > Math.PI) {\r\n //are we going to be crossing into the min/max region?\r\n const boneFwd = BoneLookController._TmpVecs[8];\r\n boneFwd.copyFrom(Axis.Z);\r\n if (this._transformYawPitch) {\r\n Vector3.TransformCoordinatesToRef(boneFwd, this._transformYawPitchInv, boneFwd);\r\n }\r\n\r\n const boneRotMat = BoneLookController._TmpMats[4];\r\n this._boneQuat.toRotationMatrix(boneRotMat);\r\n this.mesh.getWorldMatrix().multiplyToRef(boneRotMat, boneRotMat);\r\n Vector3.TransformCoordinatesToRef(boneFwd, boneRotMat, boneFwd);\r\n Vector3.TransformCoordinatesToRef(boneFwd, spaceMatInv, boneFwd);\r\n\r\n const boneYaw = Math.atan2(boneFwd.x, boneFwd.z);\r\n const angBtwTar = this._getAngleBetween(boneYaw, yaw);\r\n const angBtwMidYaw = this._getAngleBetween(boneYaw, this._midYawConstraint);\r\n\r\n if (angBtwTar > angBtwMidYaw) {\r\n if (xzlen == null) {\r\n xzlen = Math.sqrt(localTarget.x * localTarget.x + localTarget.z * localTarget.z);\r\n }\r\n\r\n const angBtwMax = this._getAngleBetween(boneYaw, this._maxYaw);\r\n const angBtwMin = this._getAngleBetween(boneYaw, this._minYaw);\r\n\r\n if (angBtwMin < angBtwMax) {\r\n newYaw = boneYaw + Math.PI * 0.75;\r\n localTarget.z = Math.cos(newYaw) * xzlen;\r\n localTarget.x = Math.sin(newYaw) * xzlen;\r\n } else {\r\n newYaw = boneYaw - Math.PI * 0.75;\r\n localTarget.z = Math.cos(newYaw) * xzlen;\r\n localTarget.x = Math.sin(newYaw) * xzlen;\r\n }\r\n }\r\n }\r\n\r\n if (yaw != newYaw) {\r\n Vector3.TransformCoordinatesToRef(localTarget, spaceMat, localTarget);\r\n localTarget.addInPlace(bonePos);\r\n target = localTarget;\r\n }\r\n }\r\n }\r\n\r\n const zaxis = BoneLookController._TmpVecs[5];\r\n const xaxis = BoneLookController._TmpVecs[6];\r\n const yaxis = BoneLookController._TmpVecs[7];\r\n const tmpQuat = BoneLookController._TmpQuat;\r\n const boneScaling = BoneLookController._TmpVecs[9];\r\n\r\n target.subtractToRef(bonePos, zaxis);\r\n zaxis.normalize();\r\n Vector3.CrossToRef(upAxis, zaxis, xaxis);\r\n xaxis.normalize();\r\n Vector3.CrossToRef(zaxis, xaxis, yaxis);\r\n yaxis.normalize();\r\n Matrix.FromXYZAxesToRef(xaxis, yaxis, zaxis, _tmpMat1);\r\n\r\n if (xaxis.x === 0 && xaxis.y === 0 && xaxis.z === 0) {\r\n return;\r\n }\r\n\r\n if (yaxis.x === 0 && yaxis.y === 0 && yaxis.z === 0) {\r\n return;\r\n }\r\n\r\n if (zaxis.x === 0 && zaxis.y === 0 && zaxis.z === 0) {\r\n return;\r\n }\r\n\r\n if (this.adjustYaw || this.adjustPitch || this.adjustRoll) {\r\n Matrix.RotationYawPitchRollToRef(this.adjustYaw, this.adjustPitch, this.adjustRoll, _tmpMat2);\r\n _tmpMat2.multiplyToRef(_tmpMat1, _tmpMat1);\r\n }\r\n\r\n boneScaling.copyFrom(this.bone.getScale());\r\n\r\n if (this.slerpAmount < 1) {\r\n if (!this._slerping) {\r\n this.bone.getRotationQuaternionToRef(Space.WORLD, this.mesh, this._boneQuat);\r\n }\r\n if (this._transformYawPitch) {\r\n this._transformYawPitch.multiplyToRef(_tmpMat1, _tmpMat1);\r\n }\r\n Quaternion.FromRotationMatrixToRef(_tmpMat1, tmpQuat);\r\n Quaternion.SlerpToRef(this._boneQuat, tmpQuat, this.slerpAmount, this._boneQuat);\r\n\r\n this.bone.setRotationQuaternion(this._boneQuat, Space.WORLD, this.mesh);\r\n this._slerping = true;\r\n } else {\r\n if (this._transformYawPitch) {\r\n this._transformYawPitch.multiplyToRef(_tmpMat1, _tmpMat1);\r\n }\r\n this.bone.setRotationMatrix(_tmpMat1, Space.WORLD, this.mesh);\r\n this._slerping = false;\r\n }\r\n\r\n this.bone.setScale(boneScaling);\r\n\r\n this._updateLinkedTransformRotation();\r\n }\r\n\r\n private _getAngleDiff(ang1: number, ang2: number): number {\r\n let angDiff = ang2 - ang1;\r\n angDiff %= Math.PI * 2;\r\n\r\n if (angDiff > Math.PI) {\r\n angDiff -= Math.PI * 2;\r\n } else if (angDiff < -Math.PI) {\r\n angDiff += Math.PI * 2;\r\n }\r\n\r\n return angDiff;\r\n }\r\n\r\n private _getAngleBetween(ang1: number, ang2: number): number {\r\n ang1 %= 2 * Math.PI;\r\n ang1 = ang1 < 0 ? ang1 + 2 * Math.PI : ang1;\r\n\r\n ang2 %= 2 * Math.PI;\r\n ang2 = ang2 < 0 ? ang2 + 2 * Math.PI : ang2;\r\n\r\n let ab = 0;\r\n\r\n if (ang1 < ang2) {\r\n ab = ang2 - ang1;\r\n } else {\r\n ab = ang1 - ang2;\r\n }\r\n\r\n if (ab > Math.PI) {\r\n ab = Math.PI * 2 - ab;\r\n }\r\n\r\n return ab;\r\n }\r\n\r\n private _isAngleBetween(ang: number, ang1: number, ang2: number): boolean {\r\n ang %= 2 * Math.PI;\r\n ang = ang < 0 ? ang + 2 * Math.PI : ang;\r\n ang1 %= 2 * Math.PI;\r\n ang1 = ang1 < 0 ? ang1 + 2 * Math.PI : ang1;\r\n ang2 %= 2 * Math.PI;\r\n ang2 = ang2 < 0 ? ang2 + 2 * Math.PI : ang2;\r\n\r\n if (ang1 < ang2) {\r\n if (ang > ang1 && ang < ang2) {\r\n return true;\r\n }\r\n } else {\r\n if (ang > ang2 && ang < ang1) {\r\n return true;\r\n }\r\n }\r\n return false;\r\n }\r\n\r\n private _updateLinkedTransformRotation(): void {\r\n const bone = this.bone;\r\n if (bone._linkedTransformNode) {\r\n if (!bone._linkedTransformNode.rotationQuaternion) {\r\n bone._linkedTransformNode.rotationQuaternion = new Quaternion();\r\n }\r\n bone.getRotationQuaternionToRef(Space.LOCAL, null, bone._linkedTransformNode.rotationQuaternion);\r\n }\r\n }\r\n}\r\n"]}
|
|
1
|
+
{"version":3,"file":"boneLookController.js","sourceRoot":"","sources":["../../../../dev/core/src/Bones/boneLookController.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAChD,OAAO,EAAE,OAAO,EAAE,UAAU,EAAE,MAAM,EAAE,MAAM,sBAAsB,CAAC;AAGnE,OAAO,EAAS,IAAI,EAAE,MAAM,oBAAoB,CAAC;AAEjD;;;GAGG;AACH,MAAM,OAAO,kBAAkB;IAuE3B;;OAEG;IACH,IAAI,MAAM;QACN,OAAO,IAAI,CAAC,OAAO,CAAC;IACxB,CAAC;IAED,IAAI,MAAM,CAAC,KAAa;QACpB,IAAI,CAAC,OAAO,GAAG,KAAK,CAAC;QACrB,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;QAClC,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;QAClC,IAAI,IAAI,CAAC,OAAO,IAAI,IAAI,EAAE;YACtB,IAAI,CAAC,iBAAiB,GAAG,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,OAAO,CAAC,GAAG,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC;YAC7F,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC;SAChD;IACL,CAAC;IAED;;OAEG;IACH,IAAI,MAAM;QACN,OAAO,IAAI,CAAC,OAAO,CAAC;IACxB,CAAC;IAED,IAAI,MAAM,CAAC,KAAa;QACpB,IAAI,CAAC,OAAO,GAAG,KAAK,CAAC;QACrB,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;QAClC,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;QAClC,IAAI,IAAI,CAAC,OAAO,IAAI,IAAI,EAAE;YACtB,IAAI,CAAC,iBAAiB,GAAG,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,OAAO,CAAC,GAAG,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC;YAC7F,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC;SAChD;IACL,CAAC;IAOD;;OAEG;IACH,IAAI,QAAQ;QACR,OAAO,IAAI,CAAC,SAAS,CAAC;IAC1B,CAAC;IAED,IAAI,QAAQ,CAAC,KAAa;QACtB,IAAI,CAAC,SAAS,GAAG,KAAK,CAAC;QACvB,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;IACxC,CAAC;IAED;;OAEG;IACH,IAAI,QAAQ;QACR,OAAO,IAAI,CAAC,SAAS,CAAC;IAC1B,CAAC;IAED,IAAI,QAAQ,CAAC,KAAa;QACtB,IAAI,CAAC,SAAS,GAAG,KAAK,CAAC;QACvB,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;IACxC,CAAC;IAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;QA8BI;IACJ,YACI,IAAmB,EACnB,IAAU,EACV,MAAe,EACf,OAcC;QAlKL;;WAEG;QACI,WAAM,GAAY,OAAO,CAAC,EAAE,EAAE,CAAC;QAEtC;;WAEG;QACI,gBAAW,uBAAsB;QAExC;;WAEG;QACI,cAAS,GAAG,CAAC,CAAC;QAErB;;WAEG;QACI,gBAAW,GAAG,CAAC,CAAC;QAEvB;;WAEG;QACI,eAAU,GAAG,CAAC,CAAC;QAEtB;;WAEG;QACI,gBAAW,GAAG,CAAC,CAAC;QAcf,cAAS,GAAe,UAAU,CAAC,QAAQ,EAAE,CAAC;QAC9C,cAAS,GAAG,KAAK,CAAC;QAGlB,uBAAkB,GAAG,KAAK,CAAC;QAE3B,gBAAW,GAAY,OAAO,CAAC,OAAO,EAAE,CAAC;QAoCjD;;WAEG;QACI,2BAAsB,GAAG,KAAK,CAAC;QA6ElC,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;QACjB,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;QACjB,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;QAErB,IAAI,OAAO,EAAE;YACT,IAAI,OAAO,CAAC,SAAS,EAAE;gBACnB,IAAI,CAAC,SAAS,GAAG,OAAO,CAAC,SAAS,CAAC;aACtC;YAED,IAAI,OAAO,CAAC,WAAW,EAAE;gBACrB,IAAI,CAAC,WAAW,GAAG,OAAO,CAAC,WAAW,CAAC;aAC1C;YAED,IAAI,OAAO,CAAC,UAAU,EAAE;gBACpB,IAAI,CAAC,UAAU,GAAG,OAAO,CAAC,UAAU,CAAC;aACxC;YAED,IAAI,OAAO,CAAC,MAAM,IAAI,IAAI,EAAE;gBACxB,IAAI,CAAC,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;aAChC;iBAAM;gBACH,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,EAAE,CAAC;aACzB;YAED,IAAI,OAAO,CAAC,MAAM,IAAI,IAAI,EAAE;gBACxB,IAAI,CAAC,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;aAChC;iBAAM;gBACH,IAAI,CAAC,MAAM,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC;aAC1B;YAED,IAAI,OAAO,CAAC,QAAQ,IAAI,IAAI,EAAE;gBAC1B,IAAI,CAAC,QAAQ,GAAG,OAAO,CAAC,QAAQ,CAAC;aACpC;iBAAM;gBACH,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,EAAE,CAAC;aAC3B;YAED,IAAI,OAAO,CAAC,QAAQ,IAAI,IAAI,EAAE;gBAC1B,IAAI,CAAC,QAAQ,GAAG,OAAO,CAAC,QAAQ,CAAC;aACpC;iBAAM;gBACH,IAAI,CAAC,QAAQ,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC;aAC5B;YAED,IAAI,OAAO,CAAC,WAAW,IAAI,IAAI,EAAE;gBAC7B,IAAI,CAAC,WAAW,GAAG,OAAO,CAAC,WAAW,CAAC;aAC1C;YAED,IAAI,OAAO,CAAC,MAAM,IAAI,IAAI,EAAE;gBACxB,IAAI,CAAC,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;aAChC;YAED,IAAI,OAAO,CAAC,WAAW,IAAI,IAAI,EAAE;gBAC7B,IAAI,CAAC,WAAW,GAAG,OAAO,CAAC,WAAW,CAAC;aAC1C;YAED,IAAI,OAAO,CAAC,OAAO,IAAI,IAAI,IAAI,OAAO,CAAC,SAAS,IAAI,IAAI,EAAE;gBACtD,IAAI,UAAU,GAAG,IAAI,CAAC,CAAC,CAAC;gBACxB,IAAI,YAAY,GAAG,IAAI,CAAC,CAAC,CAAC;gBAE1B,IAAI,OAAO,CAAC,OAAO,IAAI,IAAI,EAAE;oBACzB,UAAU,GAAG,OAAO,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC;oBACrC,UAAU,CAAC,SAAS,EAAE,CAAC;iBAC1B;gBAED,IAAI,OAAO,CAAC,SAAS,IAAI,IAAI,EAAE;oBAC3B,YAAY,GAAG,OAAO,CAAC,SAAS,CAAC,KAAK,EAAE,CAAC;oBACzC,YAAY,CAAC,SAAS,EAAE,CAAC;iBAC5B;gBAED,MAAM,WAAW,GAAG,OAAO,CAAC,KAAK,CAAC,YAAY,EAAE,UAAU,CAAC,CAAC;gBAE5D,IAAI,CAAC,kBAAkB,GAAG,MAAM,CAAC,QAAQ,EAAE,CAAC;gBAC5C,MAAM,CAAC,gBAAgB,CAAC,YAAY,EAAE,UAAU,EAAE,WAAW,EAAE,IAAI,CAAC,kBAAkB,CAAC,CAAC;gBAExF,IAAI,CAAC,qBAAqB,GAAG,IAAI,CAAC,kBAAkB,CAAC,KAAK,EAAE,CAAC;gBAC7D,IAAI,CAAC,kBAAkB,CAAC,MAAM,EAAE,CAAC;aACpC;YAED,IAAI,OAAO,CAAC,sBAAsB,KAAK,SAAS,EAAE;gBAC9C,IAAI,CAAC,sBAAsB,GAAG,OAAO,CAAC,sBAAsB,CAAC;aAChE;SACJ;QAED,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,IAAI,CAAC,WAAW,sBAAc,EAAE;YACrD,IAAI,CAAC,WAAW,sBAAc,CAAC;SAClC;IACL,CAAC;IAED;;OAEG;IACI,MAAM;QACT,kFAAkF;QAClF,IAAI,IAAI,CAAC,WAAW,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,kBAAkB,EAAE;YAClD,IAAI,CAAC,kBAAkB,GAAG,IAAI,CAAC;YAC/B,OAAO;SACV;QAED,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC;QACvB,MAAM,OAAO,GAAG,kBAAkB,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;QAC/C,IAAI,CAAC,wBAAwB,CAAC,IAAI,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;QAElD,IAAI,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC;QACzB,MAAM,QAAQ,GAAG,kBAAkB,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;QAChD,MAAM,QAAQ,GAAG,kBAAkB,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;QAEhD,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC;QACvB,MAAM,UAAU,GAAG,IAAI,CAAC,SAAS,EAAE,CAAC;QAEpC,MAAM,MAAM,GAAG,kBAAkB,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;QAC9C,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QAE7B,IAAI,IAAI,CAAC,WAAW,sBAAc,IAAI,UAAU,EAAE;YAC9C,IAAI,IAAI,CAAC,kBAAkB,EAAE;gBACzB,OAAO,CAAC,yBAAyB,CAAC,MAAM,EAAE,IAAI,CAAC,qBAAqB,EAAE,MAAM,CAAC,CAAC;aACjF;YACD,UAAU,CAAC,iBAAiB,CAAC,MAAM,EAAE,IAAI,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;SAC3D;aAAM,IAAI,IAAI,CAAC,WAAW,uBAAe,EAAE;YACxC,IAAI,CAAC,iBAAiB,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;YACvC,IAAI,IAAI,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,EAAE;gBACnE,MAAM,CAAC,SAAS,EAAE,CAAC;aACtB;SACJ;QAED,IAAI,QAAQ,GAAG,KAAK,CAAC;QACrB,IAAI,UAAU,GAAG,KAAK,CAAC;QAEvB,IAAI,IAAI,CAAC,OAAO,IAAI,IAAI,CAAC,EAAE,IAAI,IAAI,CAAC,OAAO,IAAI,CAAC,IAAI,CAAC,EAAE,EAAE;YACrD,QAAQ,GAAG,IAAI,CAAC;SACnB;QACD,IAAI,IAAI,CAAC,SAAS,IAAI,IAAI,CAAC,EAAE,IAAI,IAAI,CAAC,SAAS,IAAI,CAAC,IAAI,CAAC,EAAE,EAAE;YACzD,UAAU,GAAG,IAAI,CAAC;SACrB;QAED,IAAI,QAAQ,IAAI,UAAU,EAAE;YACxB,MAAM,QAAQ,GAAG,kBAAkB,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;YAChD,MAAM,WAAW,GAAG,kBAAkB,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;YAEnD,IAAI,IAAI,CAAC,WAAW,sBAAc,IAAI,MAAM,CAAC,CAAC,IAAI,CAAC,IAAI,UAAU,EAAE;gBAC/D,UAAU,CAAC,sBAAsB,sBAAc,IAAI,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;aACvE;iBAAM,IAAI,IAAI,CAAC,WAAW,uBAAe,IAAI,MAAM,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE;gBACxE,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC,cAAc,EAAE,CAAC,CAAC;aAC5C;iBAAM;gBACH,IAAI,WAAW,GAAG,kBAAkB,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;gBACjD,WAAW,CAAC,QAAQ,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;gBAEvC,IAAI,IAAI,CAAC,kBAAkB,EAAE;oBACzB,OAAO,CAAC,yBAAyB,CAAC,WAAW,EAAE,IAAI,CAAC,qBAAqB,EAAE,WAAW,CAAC,CAAC;iBAC3F;gBAED,IAAI,UAAU,EAAE;oBACZ,UAAU,CAAC,iBAAiB,CAAC,WAAW,EAAE,IAAI,CAAC,IAAI,EAAE,WAAW,CAAC,CAAC;iBACrE;qBAAM;oBACH,IAAI,CAAC,iBAAiB,CAAC,WAAW,EAAE,WAAW,CAAC,CAAC;iBACpD;gBAED,MAAM,SAAS,GAAG,OAAO,CAAC,KAAK,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC;gBACrD,SAAS,CAAC,SAAS,EAAE,CAAC;gBACtB,WAAW,GAAG,OAAO,CAAC,KAAK,CAAC,SAAS,EAAE,MAAM,CAAC,CAAC;gBAE/C,MAAM,CAAC,gBAAgB,CAAC,SAAS,EAAE,MAAM,EAAE,WAAW,EAAE,QAAQ,CAAC,CAAC;aACrE;YAED,QAAQ,CAAC,WAAW,CAAC,WAAW,CAAC,CAAC;YAElC,IAAI,KAAK,GAAqB,IAAI,CAAC;YAEnC,IAAI,UAAU,EAAE;gBACZ,MAAM,WAAW,GAAG,kBAAkB,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;gBACnD,MAAM,CAAC,aAAa,CAAC,OAAO,EAAE,WAAW,CAAC,CAAC;gBAC3C,OAAO,CAAC,yBAAyB,CAAC,WAAW,EAAE,WAAW,EAAE,WAAW,CAAC,CAAC;gBAEzE,KAAK,GAAG,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,GAAG,WAAW,CAAC,CAAC,GAAG,WAAW,CAAC,CAAC,GAAG,WAAW,CAAC,CAAC,CAAC,CAAC;gBACjF,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC;gBAC/C,IAAI,QAAQ,GAAG,KAAK,CAAC;gBAErB,IAAI,KAAK,GAAG,IAAI,CAAC,SAAS,EAAE;oBACxB,WAAW,CAAC,CAAC,GAAG,IAAI,CAAC,YAAY,GAAG,KAAK,CAAC;oBAC1C,QAAQ,GAAG,IAAI,CAAC,SAAS,CAAC;iBAC7B;qBAAM,IAAI,KAAK,GAAG,IAAI,CAAC,SAAS,EAAE;oBAC/B,WAAW,CAAC,CAAC,GAAG,IAAI,CAAC,YAAY,GAAG,KAAK,CAAC;oBAC1C,QAAQ,GAAG,IAAI,CAAC,SAAS,CAAC;iBAC7B;gBAED,IAAI,KAAK,IAAI,QAAQ,EAAE;oBACnB,OAAO,CAAC,yBAAyB,CAAC,WAAW,EAAE,QAAQ,EAAE,WAAW,CAAC,CAAC;oBACtE,WAAW,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC;oBAChC,MAAM,GAAG,WAAW,CAAC;iBACxB;aACJ;YAED,IAAI,QAAQ,EAAE;gBACV,MAAM,WAAW,GAAG,kBAAkB,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;gBACnD,MAAM,CAAC,aAAa,CAAC,OAAO,EAAE,WAAW,CAAC,CAAC;gBAC3C,OAAO,CAAC,yBAAyB,CAAC,WAAW,EAAE,WAAW,EAAE,WAAW,CAAC,CAAC;gBAEzE,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC,EAAE,WAAW,CAAC,CAAC,CAAC,CAAC;gBACrD,MAAM,QAAQ,GAAG,IAAI,CAAC,sBAAsB,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC;gBACnE,IAAI,MAAM,GAAG,GAAG,CAAC;gBAEjB,IAAI,QAAQ,GAAG,IAAI,CAAC,OAAO,IAAI,QAAQ,GAAG,IAAI,CAAC,OAAO,EAAE;oBACpD,IAAI,KAAK,IAAI,IAAI,EAAE;wBACf,KAAK,GAAG,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,GAAG,WAAW,CAAC,CAAC,GAAG,WAAW,CAAC,CAAC,GAAG,WAAW,CAAC,CAAC,CAAC,CAAC;qBACpF;oBAED,IAAI,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,EAAE,EAAE;wBAC1B,IAAI,IAAI,CAAC,eAAe,CAAC,GAAG,EAAE,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,iBAAiB,CAAC,EAAE;4BACjE,WAAW,CAAC,CAAC,GAAG,IAAI,CAAC,UAAU,GAAG,KAAK,CAAC;4BACxC,WAAW,CAAC,CAAC,GAAG,IAAI,CAAC,UAAU,GAAG,KAAK,CAAC;4BACxC,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC;yBACzB;6BAAM,IAAI,IAAI,CAAC,eAAe,CAAC,GAAG,EAAE,IAAI,CAAC,iBAAiB,EAAE,IAAI,CAAC,OAAO,CAAC,EAAE;4BACxE,WAAW,CAAC,CAAC,GAAG,IAAI,CAAC,UAAU,GAAG,KAAK,CAAC;4BACxC,WAAW,CAAC,CAAC,GAAG,IAAI,CAAC,UAAU,GAAG,KAAK,CAAC;4BACxC,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC;yBACzB;qBACJ;yBAAM;wBACH,IAAI,QAAQ,GAAG,IAAI,CAAC,OAAO,EAAE;4BACzB,WAAW,CAAC,CAAC,GAAG,IAAI,CAAC,UAAU,GAAG,KAAK,CAAC;4BACxC,WAAW,CAAC,CAAC,GAAG,IAAI,CAAC,UAAU,GAAG,KAAK,CAAC;4BACxC,IAAI,GAAG,GAAG,CAAC,IAAI,IAAI,CAAC,sBAAsB,EAAE;gCACxC,WAAW,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;6BACvB;4BACD,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC;yBACzB;6BAAM,IAAI,QAAQ,GAAG,IAAI,CAAC,OAAO,EAAE;4BAChC,WAAW,CAAC,CAAC,GAAG,IAAI,CAAC,UAAU,GAAG,KAAK,CAAC;4BACxC,WAAW,CAAC,CAAC,GAAG,IAAI,CAAC,UAAU,GAAG,KAAK,CAAC;4BACxC,IAAI,GAAG,GAAG,CAAC,IAAI,IAAI,CAAC,sBAAsB,EAAE;gCACxC,WAAW,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;6BACvB;4BACD,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC;yBACzB;qBACJ;iBACJ;gBAED,IAAI,IAAI,CAAC,SAAS,IAAI,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,EAAE,EAAE;oBAC5C,sDAAsD;oBACtD,MAAM,OAAO,GAAG,kBAAkB,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;oBAC/C,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;oBACzB,IAAI,IAAI,CAAC,kBAAkB,EAAE;wBACzB,OAAO,CAAC,yBAAyB,CAAC,OAAO,EAAE,IAAI,CAAC,qBAAqB,EAAE,OAAO,CAAC,CAAC;qBACnF;oBAED,MAAM,UAAU,GAAG,kBAAkB,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;oBAClD,IAAI,CAAC,SAAS,CAAC,gBAAgB,CAAC,UAAU,CAAC,CAAC;oBAC5C,IAAI,CAAC,IAAI,CAAC,cAAc,EAAE,CAAC,aAAa,CAAC,UAAU,EAAE,UAAU,CAAC,CAAC;oBACjE,OAAO,CAAC,yBAAyB,CAAC,OAAO,EAAE,UAAU,EAAE,OAAO,CAAC,CAAC;oBAChE,OAAO,CAAC,yBAAyB,CAAC,OAAO,EAAE,WAAW,EAAE,OAAO,CAAC,CAAC;oBAEjE,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC;oBACjD,MAAM,SAAS,GAAG,IAAI,CAAC,gBAAgB,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC;oBACtD,MAAM,YAAY,GAAG,IAAI,CAAC,gBAAgB,CAAC,OAAO,EAAE,IAAI,CAAC,iBAAiB,CAAC,CAAC;oBAE5E,IAAI,SAAS,GAAG,YAAY,EAAE;wBAC1B,IAAI,KAAK,IAAI,IAAI,EAAE;4BACf,KAAK,GAAG,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,GAAG,WAAW,CAAC,CAAC,GAAG,WAAW,CAAC,CAAC,GAAG,WAAW,CAAC,CAAC,CAAC,CAAC;yBACpF;wBAED,MAAM,SAAS,GAAG,IAAI,CAAC,gBAAgB,CAAC,OAAO,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC;wBAC/D,MAAM,SAAS,GAAG,IAAI,CAAC,gBAAgB,CAAC,OAAO,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC;wBAE/D,IAAI,SAAS,GAAG,SAAS,EAAE;4BACvB,MAAM,GAAG,OAAO,GAAG,IAAI,CAAC,EAAE,GAAG,IAAI,CAAC;4BAClC,WAAW,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,GAAG,KAAK,CAAC;4BACzC,WAAW,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,GAAG,KAAK,CAAC;yBAC5C;6BAAM;4BACH,MAAM,GAAG,OAAO,GAAG,IAAI,CAAC,EAAE,GAAG,IAAI,CAAC;4BAClC,WAAW,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,GAAG,KAAK,CAAC;4BACzC,WAAW,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,GAAG,KAAK,CAAC;yBAC5C;qBACJ;iBACJ;gBAED,IAAI,GAAG,IAAI,MAAM,EAAE;oBACf,OAAO,CAAC,yBAAyB,CAAC,WAAW,EAAE,QAAQ,EAAE,WAAW,CAAC,CAAC;oBACtE,WAAW,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC;oBAChC,MAAM,GAAG,WAAW,CAAC;iBACxB;aACJ;SACJ;QAED,MAAM,KAAK,GAAG,kBAAkB,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;QAC7C,MAAM,KAAK,GAAG,kBAAkB,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;QAC7C,MAAM,KAAK,GAAG,kBAAkB,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;QAC7C,MAAM,OAAO,GAAG,kBAAkB,CAAC,QAAQ,CAAC;QAC5C,MAAM,WAAW,GAAG,kBAAkB,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;QAEnD,MAAM,CAAC,aAAa,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;QACrC,KAAK,CAAC,SAAS,EAAE,CAAC;QAClB,OAAO,CAAC,UAAU,CAAC,MAAM,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC;QACzC,KAAK,CAAC,SAAS,EAAE,CAAC;QAClB,OAAO,CAAC,UAAU,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC;QACxC,KAAK,CAAC,SAAS,EAAE,CAAC;QAClB,MAAM,CAAC,gBAAgB,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,QAAQ,CAAC,CAAC;QAEvD,IAAI,KAAK,CAAC,CAAC,KAAK,CAAC,IAAI,KAAK,CAAC,CAAC,KAAK,CAAC,IAAI,KAAK,CAAC,CAAC,KAAK,CAAC,EAAE;YACjD,OAAO;SACV;QAED,IAAI,KAAK,CAAC,CAAC,KAAK,CAAC,IAAI,KAAK,CAAC,CAAC,KAAK,CAAC,IAAI,KAAK,CAAC,CAAC,KAAK,CAAC,EAAE;YACjD,OAAO;SACV;QAED,IAAI,KAAK,CAAC,CAAC,KAAK,CAAC,IAAI,KAAK,CAAC,CAAC,KAAK,CAAC,IAAI,KAAK,CAAC,CAAC,KAAK,CAAC,EAAE;YACjD,OAAO;SACV;QAED,IAAI,IAAI,CAAC,SAAS,IAAI,IAAI,CAAC,WAAW,IAAI,IAAI,CAAC,UAAU,EAAE;YACvD,MAAM,CAAC,yBAAyB,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,WAAW,EAAE,IAAI,CAAC,UAAU,EAAE,QAAQ,CAAC,CAAC;YAC9F,QAAQ,CAAC,aAAa,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;SAC9C;QAED,WAAW,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAC;QAE3C,IAAI,IAAI,CAAC,WAAW,GAAG,CAAC,EAAE;YACtB,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE;gBACjB,IAAI,CAAC,IAAI,CAAC,0BAA0B,sBAAc,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC;aAChF;YACD,IAAI,IAAI,CAAC,kBAAkB,EAAE;gBACzB,IAAI,CAAC,kBAAkB,CAAC,aAAa,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;aAC7D;YACD,UAAU,CAAC,uBAAuB,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;YACtD,UAAU,CAAC,UAAU,CAAC,IAAI,CAAC,SAAS,EAAE,OAAO,EAAE,IAAI,CAAC,WAAW,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC;YAEjF,IAAI,CAAC,IAAI,CAAC,qBAAqB,CAAC,IAAI,CAAC,SAAS,uBAAe,IAAI,CAAC,IAAI,CAAC,CAAC;YACxE,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC;SACzB;aAAM;YACH,IAAI,IAAI,CAAC,kBAAkB,EAAE;gBACzB,IAAI,CAAC,kBAAkB,CAAC,aAAa,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;aAC7D;YACD,IAAI,CAAC,IAAI,CAAC,iBAAiB,CAAC,QAAQ,uBAAe,IAAI,CAAC,IAAI,CAAC,CAAC;YAC9D,IAAI,CAAC,SAAS,GAAG,KAAK,CAAC;SAC1B;QAED,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC;QAEhC,IAAI,CAAC,8BAA8B,EAAE,CAAC;IAC1C,CAAC;IAEO,aAAa,CAAC,IAAY,EAAE,IAAY;QAC5C,IAAI,OAAO,GAAG,IAAI,GAAG,IAAI,CAAC;QAC1B,OAAO,IAAI,IAAI,CAAC,EAAE,GAAG,CAAC,CAAC;QAEvB,IAAI,OAAO,GAAG,IAAI,CAAC,EAAE,EAAE;YACnB,OAAO,IAAI,IAAI,CAAC,EAAE,GAAG,CAAC,CAAC;SAC1B;aAAM,IAAI,OAAO,GAAG,CAAC,IAAI,CAAC,EAAE,EAAE;YAC3B,OAAO,IAAI,IAAI,CAAC,EAAE,GAAG,CAAC,CAAC;SAC1B;QAED,OAAO,OAAO,CAAC;IACnB,CAAC;IAEO,gBAAgB,CAAC,IAAY,EAAE,IAAY;QAC/C,IAAI,IAAI,CAAC,GAAG,IAAI,CAAC,EAAE,CAAC;QACpB,IAAI,GAAG,IAAI,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,GAAG,CAAC,GAAG,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC;QAE5C,IAAI,IAAI,CAAC,GAAG,IAAI,CAAC,EAAE,CAAC;QACpB,IAAI,GAAG,IAAI,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,GAAG,CAAC,GAAG,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC;QAE5C,IAAI,EAAE,GAAG,CAAC,CAAC;QAEX,IAAI,IAAI,GAAG,IAAI,EAAE;YACb,EAAE,GAAG,IAAI,GAAG,IAAI,CAAC;SACpB;aAAM;YACH,EAAE,GAAG,IAAI,GAAG,IAAI,CAAC;SACpB;QAED,IAAI,EAAE,GAAG,IAAI,CAAC,EAAE,EAAE;YACd,EAAE,GAAG,IAAI,CAAC,EAAE,GAAG,CAAC,GAAG,EAAE,CAAC;SACzB;QAED,OAAO,EAAE,CAAC;IACd,CAAC;IAEO,eAAe,CAAC,GAAW,EAAE,IAAY,EAAE,IAAY;QAC3D,GAAG,IAAI,CAAC,GAAG,IAAI,CAAC,EAAE,CAAC;QACnB,GAAG,GAAG,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,GAAG,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC;QACxC,IAAI,IAAI,CAAC,GAAG,IAAI,CAAC,EAAE,CAAC;QACpB,IAAI,GAAG,IAAI,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,GAAG,CAAC,GAAG,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC;QAC5C,IAAI,IAAI,CAAC,GAAG,IAAI,CAAC,EAAE,CAAC;QACpB,IAAI,GAAG,IAAI,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,GAAG,CAAC,GAAG,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC;QAE5C,IAAI,IAAI,GAAG,IAAI,EAAE;YACb,IAAI,GAAG,GAAG,IAAI,IAAI,GAAG,GAAG,IAAI,EAAE;gBAC1B,OAAO,IAAI,CAAC;aACf;SACJ;aAAM;YACH,IAAI,GAAG,GAAG,IAAI,IAAI,GAAG,GAAG,IAAI,EAAE;gBAC1B,OAAO,IAAI,CAAC;aACf;SACJ;QACD,OAAO,KAAK,CAAC;IACjB,CAAC;IAEO,8BAA8B;QAClC,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC;QACvB,IAAI,IAAI,CAAC,oBAAoB,EAAE;YAC3B,IAAI,CAAC,IAAI,CAAC,oBAAoB,CAAC,kBAAkB,EAAE;gBAC/C,IAAI,CAAC,oBAAoB,CAAC,kBAAkB,GAAG,IAAI,UAAU,EAAE,CAAC;aACnE;YACD,IAAI,CAAC,0BAA0B,sBAAc,IAAI,EAAE,IAAI,CAAC,oBAAoB,CAAC,kBAAkB,CAAC,CAAC;SACpG;IACL,CAAC;;AAvkBc,2BAAQ,GAAc,UAAU,CAAC,UAAU,CAAC,EAAE,EAAE,OAAO,CAAC,IAAI,CAAC,AAArD,CAAsD;AAC9D,2BAAQ,GAAG,UAAU,CAAC,QAAQ,EAAE,AAAxB,CAAyB;AACjC,2BAAQ,GAAa,UAAU,CAAC,UAAU,CAAC,CAAC,EAAE,MAAM,CAAC,QAAQ,CAAC,AAAtD,CAAuD","sourcesContent":["import type { Nullable } from \"../types\";\r\nimport { ArrayTools } from \"../Misc/arrayTools\";\r\nimport { Vector3, Quaternion, Matrix } from \"../Maths/math.vector\";\r\nimport type { TransformNode } from \"../Meshes/transformNode\";\r\nimport type { Bone } from \"./bone\";\r\nimport { Space, Axis } from \"../Maths/math.axis\";\r\n\r\n/**\r\n * Class used to make a bone look toward a point in space\r\n * @see https://doc.babylonjs.com/features/featuresDeepDive/mesh/bonesSkeletons#bonelookcontroller\r\n */\r\nexport class BoneLookController {\r\n private static _TmpVecs: Vector3[] = ArrayTools.BuildArray(10, Vector3.Zero);\r\n private static _TmpQuat = Quaternion.Identity();\r\n private static _TmpMats: Matrix[] = ArrayTools.BuildArray(5, Matrix.Identity);\r\n\r\n /**\r\n * The target Vector3 that the bone will look at\r\n */\r\n public target: Vector3;\r\n\r\n /**\r\n * The TransformNode that the bone is attached to\r\n * Name kept as mesh for back compatibility\r\n */\r\n public mesh: TransformNode;\r\n\r\n /**\r\n * The bone that will be looking to the target\r\n */\r\n public bone: Bone;\r\n\r\n /**\r\n * The up axis of the coordinate system that is used when the bone is rotated\r\n */\r\n public upAxis: Vector3 = Vector3.Up();\r\n\r\n /**\r\n * The space that the up axis is in - Space.BONE, Space.LOCAL (default), or Space.WORLD\r\n */\r\n public upAxisSpace: Space = Space.LOCAL;\r\n\r\n /**\r\n * Used to make an adjustment to the yaw of the bone\r\n */\r\n public adjustYaw = 0;\r\n\r\n /**\r\n * Used to make an adjustment to the pitch of the bone\r\n */\r\n public adjustPitch = 0;\r\n\r\n /**\r\n * Used to make an adjustment to the roll of the bone\r\n */\r\n public adjustRoll = 0;\r\n\r\n /**\r\n * The amount to slerp (spherical linear interpolation) to the target. Set this to a value between 0 and 1 (a value of 1 disables slerp)\r\n */\r\n public slerpAmount = 1;\r\n\r\n private _minYaw: number;\r\n private _maxYaw: number;\r\n private _minPitch: number;\r\n private _maxPitch: number;\r\n private _minYawSin: number;\r\n private _minYawCos: number;\r\n private _maxYawSin: number;\r\n private _maxYawCos: number;\r\n private _midYawConstraint: number;\r\n private _minPitchTan: number;\r\n private _maxPitchTan: number;\r\n\r\n private _boneQuat: Quaternion = Quaternion.Identity();\r\n private _slerping = false;\r\n private _transformYawPitch: Matrix;\r\n private _transformYawPitchInv: Matrix;\r\n private _firstFrameSkipped = false;\r\n private _yawRange: number;\r\n private _fowardAxis: Vector3 = Vector3.Forward();\r\n\r\n /**\r\n * Gets or sets the minimum yaw angle that the bone can look to\r\n */\r\n get minYaw(): number {\r\n return this._minYaw;\r\n }\r\n\r\n set minYaw(value: number) {\r\n this._minYaw = value;\r\n this._minYawSin = Math.sin(value);\r\n this._minYawCos = Math.cos(value);\r\n if (this._maxYaw != null) {\r\n this._midYawConstraint = this._getAngleDiff(this._minYaw, this._maxYaw) * 0.5 + this._minYaw;\r\n this._yawRange = this._maxYaw - this._minYaw;\r\n }\r\n }\r\n\r\n /**\r\n * Gets or sets the maximum yaw angle that the bone can look to\r\n */\r\n get maxYaw(): number {\r\n return this._maxYaw;\r\n }\r\n\r\n set maxYaw(value: number) {\r\n this._maxYaw = value;\r\n this._maxYawSin = Math.sin(value);\r\n this._maxYawCos = Math.cos(value);\r\n if (this._minYaw != null) {\r\n this._midYawConstraint = this._getAngleDiff(this._minYaw, this._maxYaw) * 0.5 + this._minYaw;\r\n this._yawRange = this._maxYaw - this._minYaw;\r\n }\r\n }\r\n\r\n /**\r\n * Use the absolute value for yaw when checking the min/max constraints\r\n */\r\n public useAbsoluteValueForYaw = false;\r\n\r\n /**\r\n * Gets or sets the minimum pitch angle that the bone can look to\r\n */\r\n get minPitch(): number {\r\n return this._minPitch;\r\n }\r\n\r\n set minPitch(value: number) {\r\n this._minPitch = value;\r\n this._minPitchTan = Math.tan(value);\r\n }\r\n\r\n /**\r\n * Gets or sets the maximum pitch angle that the bone can look to\r\n */\r\n get maxPitch(): number {\r\n return this._maxPitch;\r\n }\r\n\r\n set maxPitch(value: number) {\r\n this._maxPitch = value;\r\n this._maxPitchTan = Math.tan(value);\r\n }\r\n\r\n /**\r\n * Create a BoneLookController\r\n * @param mesh the TransformNode that the bone belongs to\r\n * @param bone the bone that will be looking to the target\r\n * @param target the target Vector3 to look at\r\n * @param options optional settings:\r\n * * maxYaw: the maximum angle the bone will yaw to\r\n * * minYaw: the minimum angle the bone will yaw to\r\n * * maxPitch: the maximum angle the bone will pitch to\r\n * * minPitch: the minimum angle the bone will yaw to\r\n * * slerpAmount: set the between 0 and 1 to make the bone slerp to the target.\r\n * * upAxis: the up axis of the coordinate system\r\n * * upAxisSpace: the space that the up axis is in - Space.BONE, Space.LOCAL (default), or Space.WORLD.\r\n * * yawAxis: set yawAxis if the bone does not yaw on the y axis\r\n * * pitchAxis: set pitchAxis if the bone does not pitch on the x axis\r\n * * adjustYaw: used to make an adjustment to the yaw of the bone\r\n * * adjustPitch: used to make an adjustment to the pitch of the bone\r\n * * adjustRoll: used to make an adjustment to the roll of the bone\r\n * @param options.maxYaw\r\n * @param options.minYaw\r\n * @param options.maxPitch\r\n * @param options.minPitch\r\n * @param options.slerpAmount\r\n * @param options.upAxis\r\n * @param options.upAxisSpace\r\n * @param options.yawAxis\r\n * @param options.pitchAxis\r\n * @param options.adjustYaw\r\n * @param options.adjustPitch\r\n * @param options.adjustRoll\r\n **/\r\n constructor(\r\n mesh: TransformNode,\r\n bone: Bone,\r\n target: Vector3,\r\n options?: {\r\n maxYaw?: number;\r\n minYaw?: number;\r\n maxPitch?: number;\r\n minPitch?: number;\r\n slerpAmount?: number;\r\n upAxis?: Vector3;\r\n upAxisSpace?: Space;\r\n yawAxis?: Vector3;\r\n pitchAxis?: Vector3;\r\n adjustYaw?: number;\r\n adjustPitch?: number;\r\n adjustRoll?: number;\r\n useAbsoluteValueForYaw?: boolean;\r\n }\r\n ) {\r\n this.mesh = mesh;\r\n this.bone = bone;\r\n this.target = target;\r\n\r\n if (options) {\r\n if (options.adjustYaw) {\r\n this.adjustYaw = options.adjustYaw;\r\n }\r\n\r\n if (options.adjustPitch) {\r\n this.adjustPitch = options.adjustPitch;\r\n }\r\n\r\n if (options.adjustRoll) {\r\n this.adjustRoll = options.adjustRoll;\r\n }\r\n\r\n if (options.maxYaw != null) {\r\n this.maxYaw = options.maxYaw;\r\n } else {\r\n this.maxYaw = Math.PI;\r\n }\r\n\r\n if (options.minYaw != null) {\r\n this.minYaw = options.minYaw;\r\n } else {\r\n this.minYaw = -Math.PI;\r\n }\r\n\r\n if (options.maxPitch != null) {\r\n this.maxPitch = options.maxPitch;\r\n } else {\r\n this.maxPitch = Math.PI;\r\n }\r\n\r\n if (options.minPitch != null) {\r\n this.minPitch = options.minPitch;\r\n } else {\r\n this.minPitch = -Math.PI;\r\n }\r\n\r\n if (options.slerpAmount != null) {\r\n this.slerpAmount = options.slerpAmount;\r\n }\r\n\r\n if (options.upAxis != null) {\r\n this.upAxis = options.upAxis;\r\n }\r\n\r\n if (options.upAxisSpace != null) {\r\n this.upAxisSpace = options.upAxisSpace;\r\n }\r\n\r\n if (options.yawAxis != null || options.pitchAxis != null) {\r\n let newYawAxis = Axis.Y;\r\n let newPitchAxis = Axis.X;\r\n\r\n if (options.yawAxis != null) {\r\n newYawAxis = options.yawAxis.clone();\r\n newYawAxis.normalize();\r\n }\r\n\r\n if (options.pitchAxis != null) {\r\n newPitchAxis = options.pitchAxis.clone();\r\n newPitchAxis.normalize();\r\n }\r\n\r\n const newRollAxis = Vector3.Cross(newPitchAxis, newYawAxis);\r\n\r\n this._transformYawPitch = Matrix.Identity();\r\n Matrix.FromXYZAxesToRef(newPitchAxis, newYawAxis, newRollAxis, this._transformYawPitch);\r\n\r\n this._transformYawPitchInv = this._transformYawPitch.clone();\r\n this._transformYawPitch.invert();\r\n }\r\n\r\n if (options.useAbsoluteValueForYaw !== undefined) {\r\n this.useAbsoluteValueForYaw = options.useAbsoluteValueForYaw;\r\n }\r\n }\r\n\r\n if (!bone.getParent() && this.upAxisSpace == Space.BONE) {\r\n this.upAxisSpace = Space.LOCAL;\r\n }\r\n }\r\n\r\n /**\r\n * Update the bone to look at the target. This should be called before the scene is rendered (use scene.registerBeforeRender())\r\n */\r\n public update(): void {\r\n //skip the first frame when slerping so that the TransformNode rotation is correct\r\n if (this.slerpAmount < 1 && !this._firstFrameSkipped) {\r\n this._firstFrameSkipped = true;\r\n return;\r\n }\r\n\r\n const bone = this.bone;\r\n const bonePos = BoneLookController._TmpVecs[0];\r\n bone.getAbsolutePositionToRef(this.mesh, bonePos);\r\n\r\n let target = this.target;\r\n const _tmpMat1 = BoneLookController._TmpMats[0];\r\n const _tmpMat2 = BoneLookController._TmpMats[1];\r\n\r\n const mesh = this.mesh;\r\n const parentBone = bone.getParent();\r\n\r\n const upAxis = BoneLookController._TmpVecs[1];\r\n upAxis.copyFrom(this.upAxis);\r\n\r\n if (this.upAxisSpace == Space.BONE && parentBone) {\r\n if (this._transformYawPitch) {\r\n Vector3.TransformCoordinatesToRef(upAxis, this._transformYawPitchInv, upAxis);\r\n }\r\n parentBone.getDirectionToRef(upAxis, this.mesh, upAxis);\r\n } else if (this.upAxisSpace == Space.LOCAL) {\r\n mesh.getDirectionToRef(upAxis, upAxis);\r\n if (mesh.scaling.x != 1 || mesh.scaling.y != 1 || mesh.scaling.z != 1) {\r\n upAxis.normalize();\r\n }\r\n }\r\n\r\n let checkYaw = false;\r\n let checkPitch = false;\r\n\r\n if (this._maxYaw != Math.PI || this._minYaw != -Math.PI) {\r\n checkYaw = true;\r\n }\r\n if (this._maxPitch != Math.PI || this._minPitch != -Math.PI) {\r\n checkPitch = true;\r\n }\r\n\r\n if (checkYaw || checkPitch) {\r\n const spaceMat = BoneLookController._TmpMats[2];\r\n const spaceMatInv = BoneLookController._TmpMats[3];\r\n\r\n if (this.upAxisSpace == Space.BONE && upAxis.y == 1 && parentBone) {\r\n parentBone.getRotationMatrixToRef(Space.WORLD, this.mesh, spaceMat);\r\n } else if (this.upAxisSpace == Space.LOCAL && upAxis.y == 1 && !parentBone) {\r\n spaceMat.copyFrom(mesh.getWorldMatrix());\r\n } else {\r\n let forwardAxis = BoneLookController._TmpVecs[2];\r\n forwardAxis.copyFrom(this._fowardAxis);\r\n\r\n if (this._transformYawPitch) {\r\n Vector3.TransformCoordinatesToRef(forwardAxis, this._transformYawPitchInv, forwardAxis);\r\n }\r\n\r\n if (parentBone) {\r\n parentBone.getDirectionToRef(forwardAxis, this.mesh, forwardAxis);\r\n } else {\r\n mesh.getDirectionToRef(forwardAxis, forwardAxis);\r\n }\r\n\r\n const rightAxis = Vector3.Cross(upAxis, forwardAxis);\r\n rightAxis.normalize();\r\n forwardAxis = Vector3.Cross(rightAxis, upAxis);\r\n\r\n Matrix.FromXYZAxesToRef(rightAxis, upAxis, forwardAxis, spaceMat);\r\n }\r\n\r\n spaceMat.invertToRef(spaceMatInv);\r\n\r\n let xzlen: Nullable<number> = null;\r\n\r\n if (checkPitch) {\r\n const localTarget = BoneLookController._TmpVecs[3];\r\n target.subtractToRef(bonePos, localTarget);\r\n Vector3.TransformCoordinatesToRef(localTarget, spaceMatInv, localTarget);\r\n\r\n xzlen = Math.sqrt(localTarget.x * localTarget.x + localTarget.z * localTarget.z);\r\n const pitch = Math.atan2(localTarget.y, xzlen);\r\n let newPitch = pitch;\r\n\r\n if (pitch > this._maxPitch) {\r\n localTarget.y = this._maxPitchTan * xzlen;\r\n newPitch = this._maxPitch;\r\n } else if (pitch < this._minPitch) {\r\n localTarget.y = this._minPitchTan * xzlen;\r\n newPitch = this._minPitch;\r\n }\r\n\r\n if (pitch != newPitch) {\r\n Vector3.TransformCoordinatesToRef(localTarget, spaceMat, localTarget);\r\n localTarget.addInPlace(bonePos);\r\n target = localTarget;\r\n }\r\n }\r\n\r\n if (checkYaw) {\r\n const localTarget = BoneLookController._TmpVecs[4];\r\n target.subtractToRef(bonePos, localTarget);\r\n Vector3.TransformCoordinatesToRef(localTarget, spaceMatInv, localTarget);\r\n\r\n const yaw = Math.atan2(localTarget.x, localTarget.z);\r\n const yawCheck = this.useAbsoluteValueForYaw ? Math.abs(yaw) : yaw;\r\n let newYaw = yaw;\r\n\r\n if (yawCheck > this._maxYaw || yawCheck < this._minYaw) {\r\n if (xzlen == null) {\r\n xzlen = Math.sqrt(localTarget.x * localTarget.x + localTarget.z * localTarget.z);\r\n }\r\n\r\n if (this._yawRange > Math.PI) {\r\n if (this._isAngleBetween(yaw, this._maxYaw, this._midYawConstraint)) {\r\n localTarget.z = this._maxYawCos * xzlen;\r\n localTarget.x = this._maxYawSin * xzlen;\r\n newYaw = this._maxYaw;\r\n } else if (this._isAngleBetween(yaw, this._midYawConstraint, this._minYaw)) {\r\n localTarget.z = this._minYawCos * xzlen;\r\n localTarget.x = this._minYawSin * xzlen;\r\n newYaw = this._minYaw;\r\n }\r\n } else {\r\n if (yawCheck > this._maxYaw) {\r\n localTarget.z = this._maxYawCos * xzlen;\r\n localTarget.x = this._maxYawSin * xzlen;\r\n if (yaw < 0 && this.useAbsoluteValueForYaw) {\r\n localTarget.x *= -1;\r\n }\r\n newYaw = this._maxYaw;\r\n } else if (yawCheck < this._minYaw) {\r\n localTarget.z = this._minYawCos * xzlen;\r\n localTarget.x = this._minYawSin * xzlen;\r\n if (yaw < 0 && this.useAbsoluteValueForYaw) {\r\n localTarget.x *= -1;\r\n }\r\n newYaw = this._minYaw;\r\n }\r\n }\r\n }\r\n\r\n if (this._slerping && this._yawRange > Math.PI) {\r\n //are we going to be crossing into the min/max region?\r\n const boneFwd = BoneLookController._TmpVecs[8];\r\n boneFwd.copyFrom(Axis.Z);\r\n if (this._transformYawPitch) {\r\n Vector3.TransformCoordinatesToRef(boneFwd, this._transformYawPitchInv, boneFwd);\r\n }\r\n\r\n const boneRotMat = BoneLookController._TmpMats[4];\r\n this._boneQuat.toRotationMatrix(boneRotMat);\r\n this.mesh.getWorldMatrix().multiplyToRef(boneRotMat, boneRotMat);\r\n Vector3.TransformCoordinatesToRef(boneFwd, boneRotMat, boneFwd);\r\n Vector3.TransformCoordinatesToRef(boneFwd, spaceMatInv, boneFwd);\r\n\r\n const boneYaw = Math.atan2(boneFwd.x, boneFwd.z);\r\n const angBtwTar = this._getAngleBetween(boneYaw, yaw);\r\n const angBtwMidYaw = this._getAngleBetween(boneYaw, this._midYawConstraint);\r\n\r\n if (angBtwTar > angBtwMidYaw) {\r\n if (xzlen == null) {\r\n xzlen = Math.sqrt(localTarget.x * localTarget.x + localTarget.z * localTarget.z);\r\n }\r\n\r\n const angBtwMax = this._getAngleBetween(boneYaw, this._maxYaw);\r\n const angBtwMin = this._getAngleBetween(boneYaw, this._minYaw);\r\n\r\n if (angBtwMin < angBtwMax) {\r\n newYaw = boneYaw + Math.PI * 0.75;\r\n localTarget.z = Math.cos(newYaw) * xzlen;\r\n localTarget.x = Math.sin(newYaw) * xzlen;\r\n } else {\r\n newYaw = boneYaw - Math.PI * 0.75;\r\n localTarget.z = Math.cos(newYaw) * xzlen;\r\n localTarget.x = Math.sin(newYaw) * xzlen;\r\n }\r\n }\r\n }\r\n\r\n if (yaw != newYaw) {\r\n Vector3.TransformCoordinatesToRef(localTarget, spaceMat, localTarget);\r\n localTarget.addInPlace(bonePos);\r\n target = localTarget;\r\n }\r\n }\r\n }\r\n\r\n const zaxis = BoneLookController._TmpVecs[5];\r\n const xaxis = BoneLookController._TmpVecs[6];\r\n const yaxis = BoneLookController._TmpVecs[7];\r\n const tmpQuat = BoneLookController._TmpQuat;\r\n const boneScaling = BoneLookController._TmpVecs[9];\r\n\r\n target.subtractToRef(bonePos, zaxis);\r\n zaxis.normalize();\r\n Vector3.CrossToRef(upAxis, zaxis, xaxis);\r\n xaxis.normalize();\r\n Vector3.CrossToRef(zaxis, xaxis, yaxis);\r\n yaxis.normalize();\r\n Matrix.FromXYZAxesToRef(xaxis, yaxis, zaxis, _tmpMat1);\r\n\r\n if (xaxis.x === 0 && xaxis.y === 0 && xaxis.z === 0) {\r\n return;\r\n }\r\n\r\n if (yaxis.x === 0 && yaxis.y === 0 && yaxis.z === 0) {\r\n return;\r\n }\r\n\r\n if (zaxis.x === 0 && zaxis.y === 0 && zaxis.z === 0) {\r\n return;\r\n }\r\n\r\n if (this.adjustYaw || this.adjustPitch || this.adjustRoll) {\r\n Matrix.RotationYawPitchRollToRef(this.adjustYaw, this.adjustPitch, this.adjustRoll, _tmpMat2);\r\n _tmpMat2.multiplyToRef(_tmpMat1, _tmpMat1);\r\n }\r\n\r\n boneScaling.copyFrom(this.bone.getScale());\r\n\r\n if (this.slerpAmount < 1) {\r\n if (!this._slerping) {\r\n this.bone.getRotationQuaternionToRef(Space.WORLD, this.mesh, this._boneQuat);\r\n }\r\n if (this._transformYawPitch) {\r\n this._transformYawPitch.multiplyToRef(_tmpMat1, _tmpMat1);\r\n }\r\n Quaternion.FromRotationMatrixToRef(_tmpMat1, tmpQuat);\r\n Quaternion.SlerpToRef(this._boneQuat, tmpQuat, this.slerpAmount, this._boneQuat);\r\n\r\n this.bone.setRotationQuaternion(this._boneQuat, Space.WORLD, this.mesh);\r\n this._slerping = true;\r\n } else {\r\n if (this._transformYawPitch) {\r\n this._transformYawPitch.multiplyToRef(_tmpMat1, _tmpMat1);\r\n }\r\n this.bone.setRotationMatrix(_tmpMat1, Space.WORLD, this.mesh);\r\n this._slerping = false;\r\n }\r\n\r\n this.bone.setScale(boneScaling);\r\n\r\n this._updateLinkedTransformRotation();\r\n }\r\n\r\n private _getAngleDiff(ang1: number, ang2: number): number {\r\n let angDiff = ang2 - ang1;\r\n angDiff %= Math.PI * 2;\r\n\r\n if (angDiff > Math.PI) {\r\n angDiff -= Math.PI * 2;\r\n } else if (angDiff < -Math.PI) {\r\n angDiff += Math.PI * 2;\r\n }\r\n\r\n return angDiff;\r\n }\r\n\r\n private _getAngleBetween(ang1: number, ang2: number): number {\r\n ang1 %= 2 * Math.PI;\r\n ang1 = ang1 < 0 ? ang1 + 2 * Math.PI : ang1;\r\n\r\n ang2 %= 2 * Math.PI;\r\n ang2 = ang2 < 0 ? ang2 + 2 * Math.PI : ang2;\r\n\r\n let ab = 0;\r\n\r\n if (ang1 < ang2) {\r\n ab = ang2 - ang1;\r\n } else {\r\n ab = ang1 - ang2;\r\n }\r\n\r\n if (ab > Math.PI) {\r\n ab = Math.PI * 2 - ab;\r\n }\r\n\r\n return ab;\r\n }\r\n\r\n private _isAngleBetween(ang: number, ang1: number, ang2: number): boolean {\r\n ang %= 2 * Math.PI;\r\n ang = ang < 0 ? ang + 2 * Math.PI : ang;\r\n ang1 %= 2 * Math.PI;\r\n ang1 = ang1 < 0 ? ang1 + 2 * Math.PI : ang1;\r\n ang2 %= 2 * Math.PI;\r\n ang2 = ang2 < 0 ? ang2 + 2 * Math.PI : ang2;\r\n\r\n if (ang1 < ang2) {\r\n if (ang > ang1 && ang < ang2) {\r\n return true;\r\n }\r\n } else {\r\n if (ang > ang2 && ang < ang1) {\r\n return true;\r\n }\r\n }\r\n return false;\r\n }\r\n\r\n private _updateLinkedTransformRotation(): void {\r\n const bone = this.bone;\r\n if (bone._linkedTransformNode) {\r\n if (!bone._linkedTransformNode.rotationQuaternion) {\r\n bone._linkedTransformNode.rotationQuaternion = new Quaternion();\r\n }\r\n bone.getRotationQuaternionToRef(Space.LOCAL, null, bone._linkedTransformNode.rotationQuaternion);\r\n }\r\n }\r\n}\r\n"]}
|
|
@@ -3,7 +3,6 @@ import { serialize } from "../../Misc/decorators.js";
|
|
|
3
3
|
import { CameraInputTypes } from "../../Cameras/cameraInputsManager.js";
|
|
4
4
|
import { BaseCameraMouseWheelInput } from "../../Cameras/Inputs/BaseCameraMouseWheelInput.js";
|
|
5
5
|
import { Matrix, Vector3 } from "../../Maths/math.vector.js";
|
|
6
|
-
import { Coordinate } from "../../Maths/math.axis.js";
|
|
7
6
|
// eslint-disable-next-line @typescript-eslint/naming-convention
|
|
8
7
|
var _CameraProperty;
|
|
9
8
|
(function (_CameraProperty) {
|
|
@@ -25,9 +24,9 @@ export class FreeCameraMouseWheelInput extends BaseCameraMouseWheelInput {
|
|
|
25
24
|
* These are set to the desired default behaviour.
|
|
26
25
|
*/
|
|
27
26
|
this._wheelXAction = _CameraProperty.MoveRelative;
|
|
28
|
-
this._wheelXActionCoordinate = Coordinate.X
|
|
27
|
+
this._wheelXActionCoordinate = 0 /* Coordinate.X */;
|
|
29
28
|
this._wheelYAction = _CameraProperty.MoveRelative;
|
|
30
|
-
this._wheelYActionCoordinate = Coordinate.Z
|
|
29
|
+
this._wheelYActionCoordinate = 2 /* Coordinate.Z */;
|
|
31
30
|
this._wheelZAction = null;
|
|
32
31
|
this._wheelZActionCoordinate = null;
|
|
33
32
|
}
|
|
@@ -328,13 +327,13 @@ export class FreeCameraMouseWheelInput extends BaseCameraMouseWheelInput {
|
|
|
328
327
|
break;
|
|
329
328
|
}
|
|
330
329
|
switch (coordinate) {
|
|
331
|
-
case Coordinate.X
|
|
330
|
+
case 0 /* Coordinate.X */:
|
|
332
331
|
action.set(value, 0, 0);
|
|
333
332
|
break;
|
|
334
|
-
case Coordinate.Y
|
|
333
|
+
case 1 /* Coordinate.Y */:
|
|
335
334
|
action.set(0, value, 0);
|
|
336
335
|
break;
|
|
337
|
-
case Coordinate.Z
|
|
336
|
+
case 2 /* Coordinate.Z */:
|
|
338
337
|
action.set(0, 0, value);
|
|
339
338
|
break;
|
|
340
339
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"freeCameraMouseWheelInput.js","sourceRoot":"","sources":["../../../../../dev/core/src/Cameras/Inputs/freeCameraMouseWheelInput.ts"],"names":[],"mappings":"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","sourcesContent":["import type { Nullable } from \"../../types\";\r\nimport { serialize } from \"../../Misc/decorators\";\r\nimport type { FreeCamera } from \"../../Cameras/freeCamera\";\r\nimport { CameraInputTypes } from \"../../Cameras/cameraInputsManager\";\r\nimport { BaseCameraMouseWheelInput } from \"../../Cameras/Inputs/BaseCameraMouseWheelInput\";\r\nimport { Matrix, Vector3 } from \"../../Maths/math.vector\";\r\nimport { Coordinate } from \"../../Maths/math.axis\";\r\n\r\n// eslint-disable-next-line @typescript-eslint/naming-convention\r\nenum _CameraProperty {\r\n MoveRelative,\r\n RotateRelative,\r\n MoveScene,\r\n}\r\n\r\n/**\r\n * Manage the mouse wheel inputs to control a free camera.\r\n * @see https://doc.babylonjs.com/features/featuresDeepDive/cameras/customizingCameraInputs\r\n */\r\nexport class FreeCameraMouseWheelInput extends BaseCameraMouseWheelInput {\r\n /**\r\n * Defines the camera the input is attached to.\r\n */\r\n public camera: FreeCamera;\r\n\r\n /**\r\n * Gets the class name of the current input.\r\n * @returns the class name\r\n */\r\n public override getClassName(): string {\r\n return \"FreeCameraMouseWheelInput\";\r\n }\r\n\r\n /**\r\n * Set which movement axis (relative to camera's orientation) the mouse\r\n * wheel's X axis controls.\r\n * @param axis The axis to be moved. Set null to clear.\r\n */\r\n @serialize()\r\n public set wheelXMoveRelative(axis: Nullable<Coordinate>) {\r\n if (axis === null && this._wheelXAction !== _CameraProperty.MoveRelative) {\r\n // Attempting to clear different _wheelXAction.\r\n return;\r\n }\r\n this._wheelXAction = _CameraProperty.MoveRelative;\r\n this._wheelXActionCoordinate = axis;\r\n }\r\n\r\n /**\r\n * Get the configured movement axis (relative to camera's orientation) the\r\n * mouse wheel's X axis controls.\r\n * @returns The configured axis or null if none.\r\n */\r\n public get wheelXMoveRelative(): Nullable<Coordinate> {\r\n if (this._wheelXAction !== _CameraProperty.MoveRelative) {\r\n return null;\r\n }\r\n return this._wheelXActionCoordinate;\r\n }\r\n\r\n /**\r\n * Set which movement axis (relative to camera's orientation) the mouse\r\n * wheel's Y axis controls.\r\n * @param axis The axis to be moved. Set null to clear.\r\n */\r\n @serialize()\r\n public set wheelYMoveRelative(axis: Nullable<Coordinate>) {\r\n if (axis === null && this._wheelYAction !== _CameraProperty.MoveRelative) {\r\n // Attempting to clear different _wheelYAction.\r\n return;\r\n }\r\n this._wheelYAction = _CameraProperty.MoveRelative;\r\n this._wheelYActionCoordinate = axis;\r\n }\r\n\r\n /**\r\n * Get the configured movement axis (relative to camera's orientation) the\r\n * mouse wheel's Y axis controls.\r\n * @returns The configured axis or null if none.\r\n */\r\n public get wheelYMoveRelative(): Nullable<Coordinate> {\r\n if (this._wheelYAction !== _CameraProperty.MoveRelative) {\r\n return null;\r\n }\r\n return this._wheelYActionCoordinate;\r\n }\r\n\r\n /**\r\n * Set which movement axis (relative to camera's orientation) the mouse\r\n * wheel's Z axis controls.\r\n * @param axis The axis to be moved. Set null to clear.\r\n */\r\n @serialize()\r\n public set wheelZMoveRelative(axis: Nullable<Coordinate>) {\r\n if (axis === null && this._wheelZAction !== _CameraProperty.MoveRelative) {\r\n // Attempting to clear different _wheelZAction.\r\n return;\r\n }\r\n this._wheelZAction = _CameraProperty.MoveRelative;\r\n this._wheelZActionCoordinate = axis;\r\n }\r\n\r\n /**\r\n * Get the configured movement axis (relative to camera's orientation) the\r\n * mouse wheel's Z axis controls.\r\n * @returns The configured axis or null if none.\r\n */\r\n public get wheelZMoveRelative(): Nullable<Coordinate> {\r\n if (this._wheelZAction !== _CameraProperty.MoveRelative) {\r\n return null;\r\n }\r\n return this._wheelZActionCoordinate;\r\n }\r\n\r\n /**\r\n * Set which rotation axis (relative to camera's orientation) the mouse\r\n * wheel's X axis controls.\r\n * @param axis The axis to be moved. Set null to clear.\r\n */\r\n @serialize()\r\n public set wheelXRotateRelative(axis: Nullable<Coordinate>) {\r\n if (axis === null && this._wheelXAction !== _CameraProperty.RotateRelative) {\r\n // Attempting to clear different _wheelXAction.\r\n return;\r\n }\r\n this._wheelXAction = _CameraProperty.RotateRelative;\r\n this._wheelXActionCoordinate = axis;\r\n }\r\n\r\n /**\r\n * Get the configured rotation axis (relative to camera's orientation) the\r\n * mouse wheel's X axis controls.\r\n * @returns The configured axis or null if none.\r\n */\r\n public get wheelXRotateRelative(): Nullable<Coordinate> {\r\n if (this._wheelXAction !== _CameraProperty.RotateRelative) {\r\n return null;\r\n }\r\n return this._wheelXActionCoordinate;\r\n }\r\n\r\n /**\r\n * Set which rotation axis (relative to camera's orientation) the mouse\r\n * wheel's Y axis controls.\r\n * @param axis The axis to be moved. Set null to clear.\r\n */\r\n @serialize()\r\n public set wheelYRotateRelative(axis: Nullable<Coordinate>) {\r\n if (axis === null && this._wheelYAction !== _CameraProperty.RotateRelative) {\r\n // Attempting to clear different _wheelYAction.\r\n return;\r\n }\r\n this._wheelYAction = _CameraProperty.RotateRelative;\r\n this._wheelYActionCoordinate = axis;\r\n }\r\n\r\n /**\r\n * Get the configured rotation axis (relative to camera's orientation) the\r\n * mouse wheel's Y axis controls.\r\n * @returns The configured axis or null if none.\r\n */\r\n public get wheelYRotateRelative(): Nullable<Coordinate> {\r\n if (this._wheelYAction !== _CameraProperty.RotateRelative) {\r\n return null;\r\n }\r\n return this._wheelYActionCoordinate;\r\n }\r\n\r\n /**\r\n * Set which rotation axis (relative to camera's orientation) the mouse\r\n * wheel's Z axis controls.\r\n * @param axis The axis to be moved. Set null to clear.\r\n */\r\n @serialize()\r\n public set wheelZRotateRelative(axis: Nullable<Coordinate>) {\r\n if (axis === null && this._wheelZAction !== _CameraProperty.RotateRelative) {\r\n // Attempting to clear different _wheelZAction.\r\n return;\r\n }\r\n this._wheelZAction = _CameraProperty.RotateRelative;\r\n this._wheelZActionCoordinate = axis;\r\n }\r\n\r\n /**\r\n * Get the configured rotation axis (relative to camera's orientation) the\r\n * mouse wheel's Z axis controls.\r\n * @returns The configured axis or null if none.\r\n */\r\n public get wheelZRotateRelative(): Nullable<Coordinate> {\r\n if (this._wheelZAction !== _CameraProperty.RotateRelative) {\r\n return null;\r\n }\r\n return this._wheelZActionCoordinate;\r\n }\r\n\r\n /**\r\n * Set which movement axis (relative to the scene) the mouse wheel's X axis\r\n * controls.\r\n * @param axis The axis to be moved. Set null to clear.\r\n */\r\n @serialize()\r\n public set wheelXMoveScene(axis: Nullable<Coordinate>) {\r\n if (axis === null && this._wheelXAction !== _CameraProperty.MoveScene) {\r\n // Attempting to clear different _wheelXAction.\r\n return;\r\n }\r\n this._wheelXAction = _CameraProperty.MoveScene;\r\n this._wheelXActionCoordinate = axis;\r\n }\r\n\r\n /**\r\n * Get the configured movement axis (relative to the scene) the mouse wheel's\r\n * X axis controls.\r\n * @returns The configured axis or null if none.\r\n */\r\n public get wheelXMoveScene(): Nullable<Coordinate> {\r\n if (this._wheelXAction !== _CameraProperty.MoveScene) {\r\n return null;\r\n }\r\n return this._wheelXActionCoordinate;\r\n }\r\n\r\n /**\r\n * Set which movement axis (relative to the scene) the mouse wheel's Y axis\r\n * controls.\r\n * @param axis The axis to be moved. Set null to clear.\r\n */\r\n @serialize()\r\n public set wheelYMoveScene(axis: Nullable<Coordinate>) {\r\n if (axis === null && this._wheelYAction !== _CameraProperty.MoveScene) {\r\n // Attempting to clear different _wheelYAction.\r\n return;\r\n }\r\n this._wheelYAction = _CameraProperty.MoveScene;\r\n this._wheelYActionCoordinate = axis;\r\n }\r\n\r\n /**\r\n * Get the configured movement axis (relative to the scene) the mouse wheel's\r\n * Y axis controls.\r\n * @returns The configured axis or null if none.\r\n */\r\n public get wheelYMoveScene(): Nullable<Coordinate> {\r\n if (this._wheelYAction !== _CameraProperty.MoveScene) {\r\n return null;\r\n }\r\n return this._wheelYActionCoordinate;\r\n }\r\n\r\n /**\r\n * Set which movement axis (relative to the scene) the mouse wheel's Z axis\r\n * controls.\r\n * @param axis The axis to be moved. Set null to clear.\r\n */\r\n @serialize()\r\n public set wheelZMoveScene(axis: Nullable<Coordinate>) {\r\n if (axis === null && this._wheelZAction !== _CameraProperty.MoveScene) {\r\n // Attempting to clear different _wheelZAction.\r\n return;\r\n }\r\n this._wheelZAction = _CameraProperty.MoveScene;\r\n this._wheelZActionCoordinate = axis;\r\n }\r\n\r\n /**\r\n * Get the configured movement axis (relative to the scene) the mouse wheel's\r\n * Z axis controls.\r\n * @returns The configured axis or null if none.\r\n */\r\n public get wheelZMoveScene(): Nullable<Coordinate> {\r\n if (this._wheelZAction !== _CameraProperty.MoveScene) {\r\n return null;\r\n }\r\n return this._wheelZActionCoordinate;\r\n }\r\n\r\n /**\r\n * Called for each rendered frame.\r\n */\r\n public override checkInputs(): void {\r\n if (this._wheelDeltaX === 0 && this._wheelDeltaY === 0 && this._wheelDeltaZ == 0) {\r\n return;\r\n }\r\n\r\n // Clear the camera properties that we might be updating.\r\n this._moveRelative.setAll(0);\r\n this._rotateRelative.setAll(0);\r\n this._moveScene.setAll(0);\r\n\r\n // Set the camera properties that are to be updated.\r\n this._updateCamera();\r\n\r\n if (this.camera.getScene().useRightHandedSystem) {\r\n // TODO: Does this need done for worldUpdate too?\r\n this._moveRelative.z *= -1;\r\n }\r\n\r\n // Convert updates relative to camera to world position update.\r\n const cameraTransformMatrix = Matrix.Zero();\r\n this.camera.getViewMatrix().invertToRef(cameraTransformMatrix);\r\n\r\n const transformedDirection = Vector3.Zero();\r\n Vector3.TransformNormalToRef(this._moveRelative, cameraTransformMatrix, transformedDirection);\r\n\r\n // Apply updates to camera position.\r\n this.camera.cameraRotation.x += this._rotateRelative.x / 200;\r\n this.camera.cameraRotation.y += this._rotateRelative.y / 200;\r\n this.camera.cameraDirection.addInPlace(transformedDirection);\r\n this.camera.cameraDirection.addInPlace(this._moveScene);\r\n\r\n // Call the base class implementation to handle observers and do cleanup.\r\n super.checkInputs();\r\n }\r\n\r\n private _moveRelative = Vector3.Zero();\r\n private _rotateRelative = Vector3.Zero();\r\n private _moveScene = Vector3.Zero();\r\n\r\n /**\r\n * These are set to the desired default behaviour.\r\n */\r\n private _wheelXAction: Nullable<_CameraProperty> = _CameraProperty.MoveRelative;\r\n private _wheelXActionCoordinate: Nullable<Coordinate> = Coordinate.X;\r\n private _wheelYAction: Nullable<_CameraProperty> = _CameraProperty.MoveRelative;\r\n private _wheelYActionCoordinate: Nullable<Coordinate> = Coordinate.Z;\r\n private _wheelZAction: Nullable<_CameraProperty> = null;\r\n private _wheelZActionCoordinate: Nullable<Coordinate> = null;\r\n\r\n /**\r\n * Update the camera according to any configured properties for the 3\r\n * mouse-wheel axis.\r\n */\r\n private _updateCamera(): void {\r\n // Do the camera updates for each of the 3 touch-wheel axis.\r\n this._updateCameraProperty(this._wheelDeltaX, this._wheelXAction, this._wheelXActionCoordinate);\r\n this._updateCameraProperty(this._wheelDeltaY, this._wheelYAction, this._wheelYActionCoordinate);\r\n this._updateCameraProperty(this._wheelDeltaZ, this._wheelZAction, this._wheelZActionCoordinate);\r\n }\r\n\r\n /**\r\n * Update one property of the camera.\r\n * @param value\r\n * @param cameraProperty\r\n * @param coordinate\r\n */\r\n private _updateCameraProperty(\r\n /* Mouse-wheel delta. */\r\n value: number,\r\n /* Camera property to be changed. */\r\n cameraProperty: Nullable<_CameraProperty>,\r\n /* Axis of Camera property to be changed. */\r\n coordinate: Nullable<Coordinate>\r\n ): void {\r\n if (value === 0) {\r\n // Mouse wheel has not moved.\r\n return;\r\n }\r\n if (cameraProperty === null || coordinate === null) {\r\n // Mouse wheel axis not configured.\r\n return;\r\n }\r\n\r\n let action = null;\r\n switch (cameraProperty) {\r\n case _CameraProperty.MoveRelative:\r\n action = this._moveRelative;\r\n break;\r\n case _CameraProperty.RotateRelative:\r\n action = this._rotateRelative;\r\n break;\r\n case _CameraProperty.MoveScene:\r\n action = this._moveScene;\r\n break;\r\n }\r\n\r\n switch (coordinate) {\r\n case Coordinate.X:\r\n action.set(value, 0, 0);\r\n break;\r\n case Coordinate.Y:\r\n action.set(0, value, 0);\r\n break;\r\n case Coordinate.Z:\r\n action.set(0, 0, value);\r\n break;\r\n }\r\n }\r\n}\r\n\r\n(<any>CameraInputTypes)[\"FreeCameraMouseWheelInput\"] = FreeCameraMouseWheelInput;\r\n"]}
|
|
1
|
+
{"version":3,"file":"freeCameraMouseWheelInput.js","sourceRoot":"","sources":["../../../../../dev/core/src/Cameras/Inputs/freeCameraMouseWheelInput.ts"],"names":[],"mappings":"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","sourcesContent":["import type { Nullable } from \"../../types\";\r\nimport { serialize } from \"../../Misc/decorators\";\r\nimport type { FreeCamera } from \"../../Cameras/freeCamera\";\r\nimport { CameraInputTypes } from \"../../Cameras/cameraInputsManager\";\r\nimport { BaseCameraMouseWheelInput } from \"../../Cameras/Inputs/BaseCameraMouseWheelInput\";\r\nimport { Matrix, Vector3 } from \"../../Maths/math.vector\";\r\nimport { Coordinate } from \"../../Maths/math.axis\";\r\n\r\n// eslint-disable-next-line @typescript-eslint/naming-convention\r\nenum _CameraProperty {\r\n MoveRelative,\r\n RotateRelative,\r\n MoveScene,\r\n}\r\n\r\n/**\r\n * Manage the mouse wheel inputs to control a free camera.\r\n * @see https://doc.babylonjs.com/features/featuresDeepDive/cameras/customizingCameraInputs\r\n */\r\nexport class FreeCameraMouseWheelInput extends BaseCameraMouseWheelInput {\r\n /**\r\n * Defines the camera the input is attached to.\r\n */\r\n public camera: FreeCamera;\r\n\r\n /**\r\n * Gets the class name of the current input.\r\n * @returns the class name\r\n */\r\n public override getClassName(): string {\r\n return \"FreeCameraMouseWheelInput\";\r\n }\r\n\r\n /**\r\n * Set which movement axis (relative to camera's orientation) the mouse\r\n * wheel's X axis controls.\r\n * @param axis The axis to be moved. Set null to clear.\r\n */\r\n @serialize()\r\n public set wheelXMoveRelative(axis: Nullable<Coordinate>) {\r\n if (axis === null && this._wheelXAction !== _CameraProperty.MoveRelative) {\r\n // Attempting to clear different _wheelXAction.\r\n return;\r\n }\r\n this._wheelXAction = _CameraProperty.MoveRelative;\r\n this._wheelXActionCoordinate = axis;\r\n }\r\n\r\n /**\r\n * Get the configured movement axis (relative to camera's orientation) the\r\n * mouse wheel's X axis controls.\r\n * @returns The configured axis or null if none.\r\n */\r\n public get wheelXMoveRelative(): Nullable<Coordinate> {\r\n if (this._wheelXAction !== _CameraProperty.MoveRelative) {\r\n return null;\r\n }\r\n return this._wheelXActionCoordinate;\r\n }\r\n\r\n /**\r\n * Set which movement axis (relative to camera's orientation) the mouse\r\n * wheel's Y axis controls.\r\n * @param axis The axis to be moved. Set null to clear.\r\n */\r\n @serialize()\r\n public set wheelYMoveRelative(axis: Nullable<Coordinate>) {\r\n if (axis === null && this._wheelYAction !== _CameraProperty.MoveRelative) {\r\n // Attempting to clear different _wheelYAction.\r\n return;\r\n }\r\n this._wheelYAction = _CameraProperty.MoveRelative;\r\n this._wheelYActionCoordinate = axis;\r\n }\r\n\r\n /**\r\n * Get the configured movement axis (relative to camera's orientation) the\r\n * mouse wheel's Y axis controls.\r\n * @returns The configured axis or null if none.\r\n */\r\n public get wheelYMoveRelative(): Nullable<Coordinate> {\r\n if (this._wheelYAction !== _CameraProperty.MoveRelative) {\r\n return null;\r\n }\r\n return this._wheelYActionCoordinate;\r\n }\r\n\r\n /**\r\n * Set which movement axis (relative to camera's orientation) the mouse\r\n * wheel's Z axis controls.\r\n * @param axis The axis to be moved. Set null to clear.\r\n */\r\n @serialize()\r\n public set wheelZMoveRelative(axis: Nullable<Coordinate>) {\r\n if (axis === null && this._wheelZAction !== _CameraProperty.MoveRelative) {\r\n // Attempting to clear different _wheelZAction.\r\n return;\r\n }\r\n this._wheelZAction = _CameraProperty.MoveRelative;\r\n this._wheelZActionCoordinate = axis;\r\n }\r\n\r\n /**\r\n * Get the configured movement axis (relative to camera's orientation) the\r\n * mouse wheel's Z axis controls.\r\n * @returns The configured axis or null if none.\r\n */\r\n public get wheelZMoveRelative(): Nullable<Coordinate> {\r\n if (this._wheelZAction !== _CameraProperty.MoveRelative) {\r\n return null;\r\n }\r\n return this._wheelZActionCoordinate;\r\n }\r\n\r\n /**\r\n * Set which rotation axis (relative to camera's orientation) the mouse\r\n * wheel's X axis controls.\r\n * @param axis The axis to be moved. Set null to clear.\r\n */\r\n @serialize()\r\n public set wheelXRotateRelative(axis: Nullable<Coordinate>) {\r\n if (axis === null && this._wheelXAction !== _CameraProperty.RotateRelative) {\r\n // Attempting to clear different _wheelXAction.\r\n return;\r\n }\r\n this._wheelXAction = _CameraProperty.RotateRelative;\r\n this._wheelXActionCoordinate = axis;\r\n }\r\n\r\n /**\r\n * Get the configured rotation axis (relative to camera's orientation) the\r\n * mouse wheel's X axis controls.\r\n * @returns The configured axis or null if none.\r\n */\r\n public get wheelXRotateRelative(): Nullable<Coordinate> {\r\n if (this._wheelXAction !== _CameraProperty.RotateRelative) {\r\n return null;\r\n }\r\n return this._wheelXActionCoordinate;\r\n }\r\n\r\n /**\r\n * Set which rotation axis (relative to camera's orientation) the mouse\r\n * wheel's Y axis controls.\r\n * @param axis The axis to be moved. Set null to clear.\r\n */\r\n @serialize()\r\n public set wheelYRotateRelative(axis: Nullable<Coordinate>) {\r\n if (axis === null && this._wheelYAction !== _CameraProperty.RotateRelative) {\r\n // Attempting to clear different _wheelYAction.\r\n return;\r\n }\r\n this._wheelYAction = _CameraProperty.RotateRelative;\r\n this._wheelYActionCoordinate = axis;\r\n }\r\n\r\n /**\r\n * Get the configured rotation axis (relative to camera's orientation) the\r\n * mouse wheel's Y axis controls.\r\n * @returns The configured axis or null if none.\r\n */\r\n public get wheelYRotateRelative(): Nullable<Coordinate> {\r\n if (this._wheelYAction !== _CameraProperty.RotateRelative) {\r\n return null;\r\n }\r\n return this._wheelYActionCoordinate;\r\n }\r\n\r\n /**\r\n * Set which rotation axis (relative to camera's orientation) the mouse\r\n * wheel's Z axis controls.\r\n * @param axis The axis to be moved. Set null to clear.\r\n */\r\n @serialize()\r\n public set wheelZRotateRelative(axis: Nullable<Coordinate>) {\r\n if (axis === null && this._wheelZAction !== _CameraProperty.RotateRelative) {\r\n // Attempting to clear different _wheelZAction.\r\n return;\r\n }\r\n this._wheelZAction = _CameraProperty.RotateRelative;\r\n this._wheelZActionCoordinate = axis;\r\n }\r\n\r\n /**\r\n * Get the configured rotation axis (relative to camera's orientation) the\r\n * mouse wheel's Z axis controls.\r\n * @returns The configured axis or null if none.\r\n */\r\n public get wheelZRotateRelative(): Nullable<Coordinate> {\r\n if (this._wheelZAction !== _CameraProperty.RotateRelative) {\r\n return null;\r\n }\r\n return this._wheelZActionCoordinate;\r\n }\r\n\r\n /**\r\n * Set which movement axis (relative to the scene) the mouse wheel's X axis\r\n * controls.\r\n * @param axis The axis to be moved. Set null to clear.\r\n */\r\n @serialize()\r\n public set wheelXMoveScene(axis: Nullable<Coordinate>) {\r\n if (axis === null && this._wheelXAction !== _CameraProperty.MoveScene) {\r\n // Attempting to clear different _wheelXAction.\r\n return;\r\n }\r\n this._wheelXAction = _CameraProperty.MoveScene;\r\n this._wheelXActionCoordinate = axis;\r\n }\r\n\r\n /**\r\n * Get the configured movement axis (relative to the scene) the mouse wheel's\r\n * X axis controls.\r\n * @returns The configured axis or null if none.\r\n */\r\n public get wheelXMoveScene(): Nullable<Coordinate> {\r\n if (this._wheelXAction !== _CameraProperty.MoveScene) {\r\n return null;\r\n }\r\n return this._wheelXActionCoordinate;\r\n }\r\n\r\n /**\r\n * Set which movement axis (relative to the scene) the mouse wheel's Y axis\r\n * controls.\r\n * @param axis The axis to be moved. Set null to clear.\r\n */\r\n @serialize()\r\n public set wheelYMoveScene(axis: Nullable<Coordinate>) {\r\n if (axis === null && this._wheelYAction !== _CameraProperty.MoveScene) {\r\n // Attempting to clear different _wheelYAction.\r\n return;\r\n }\r\n this._wheelYAction = _CameraProperty.MoveScene;\r\n this._wheelYActionCoordinate = axis;\r\n }\r\n\r\n /**\r\n * Get the configured movement axis (relative to the scene) the mouse wheel's\r\n * Y axis controls.\r\n * @returns The configured axis or null if none.\r\n */\r\n public get wheelYMoveScene(): Nullable<Coordinate> {\r\n if (this._wheelYAction !== _CameraProperty.MoveScene) {\r\n return null;\r\n }\r\n return this._wheelYActionCoordinate;\r\n }\r\n\r\n /**\r\n * Set which movement axis (relative to the scene) the mouse wheel's Z axis\r\n * controls.\r\n * @param axis The axis to be moved. Set null to clear.\r\n */\r\n @serialize()\r\n public set wheelZMoveScene(axis: Nullable<Coordinate>) {\r\n if (axis === null && this._wheelZAction !== _CameraProperty.MoveScene) {\r\n // Attempting to clear different _wheelZAction.\r\n return;\r\n }\r\n this._wheelZAction = _CameraProperty.MoveScene;\r\n this._wheelZActionCoordinate = axis;\r\n }\r\n\r\n /**\r\n * Get the configured movement axis (relative to the scene) the mouse wheel's\r\n * Z axis controls.\r\n * @returns The configured axis or null if none.\r\n */\r\n public get wheelZMoveScene(): Nullable<Coordinate> {\r\n if (this._wheelZAction !== _CameraProperty.MoveScene) {\r\n return null;\r\n }\r\n return this._wheelZActionCoordinate;\r\n }\r\n\r\n /**\r\n * Called for each rendered frame.\r\n */\r\n public override checkInputs(): void {\r\n if (this._wheelDeltaX === 0 && this._wheelDeltaY === 0 && this._wheelDeltaZ == 0) {\r\n return;\r\n }\r\n\r\n // Clear the camera properties that we might be updating.\r\n this._moveRelative.setAll(0);\r\n this._rotateRelative.setAll(0);\r\n this._moveScene.setAll(0);\r\n\r\n // Set the camera properties that are to be updated.\r\n this._updateCamera();\r\n\r\n if (this.camera.getScene().useRightHandedSystem) {\r\n // TODO: Does this need done for worldUpdate too?\r\n this._moveRelative.z *= -1;\r\n }\r\n\r\n // Convert updates relative to camera to world position update.\r\n const cameraTransformMatrix = Matrix.Zero();\r\n this.camera.getViewMatrix().invertToRef(cameraTransformMatrix);\r\n\r\n const transformedDirection = Vector3.Zero();\r\n Vector3.TransformNormalToRef(this._moveRelative, cameraTransformMatrix, transformedDirection);\r\n\r\n // Apply updates to camera position.\r\n this.camera.cameraRotation.x += this._rotateRelative.x / 200;\r\n this.camera.cameraRotation.y += this._rotateRelative.y / 200;\r\n this.camera.cameraDirection.addInPlace(transformedDirection);\r\n this.camera.cameraDirection.addInPlace(this._moveScene);\r\n\r\n // Call the base class implementation to handle observers and do cleanup.\r\n super.checkInputs();\r\n }\r\n\r\n private _moveRelative = Vector3.Zero();\r\n private _rotateRelative = Vector3.Zero();\r\n private _moveScene = Vector3.Zero();\r\n\r\n /**\r\n * These are set to the desired default behaviour.\r\n */\r\n private _wheelXAction: Nullable<_CameraProperty> = _CameraProperty.MoveRelative;\r\n private _wheelXActionCoordinate: Nullable<Coordinate> = Coordinate.X;\r\n private _wheelYAction: Nullable<_CameraProperty> = _CameraProperty.MoveRelative;\r\n private _wheelYActionCoordinate: Nullable<Coordinate> = Coordinate.Z;\r\n private _wheelZAction: Nullable<_CameraProperty> = null;\r\n private _wheelZActionCoordinate: Nullable<Coordinate> = null;\r\n\r\n /**\r\n * Update the camera according to any configured properties for the 3\r\n * mouse-wheel axis.\r\n */\r\n private _updateCamera(): void {\r\n // Do the camera updates for each of the 3 touch-wheel axis.\r\n this._updateCameraProperty(this._wheelDeltaX, this._wheelXAction, this._wheelXActionCoordinate);\r\n this._updateCameraProperty(this._wheelDeltaY, this._wheelYAction, this._wheelYActionCoordinate);\r\n this._updateCameraProperty(this._wheelDeltaZ, this._wheelZAction, this._wheelZActionCoordinate);\r\n }\r\n\r\n /**\r\n * Update one property of the camera.\r\n * @param value\r\n * @param cameraProperty\r\n * @param coordinate\r\n */\r\n private _updateCameraProperty(\r\n /* Mouse-wheel delta. */\r\n value: number,\r\n /* Camera property to be changed. */\r\n cameraProperty: Nullable<_CameraProperty>,\r\n /* Axis of Camera property to be changed. */\r\n coordinate: Nullable<Coordinate>\r\n ): void {\r\n if (value === 0) {\r\n // Mouse wheel has not moved.\r\n return;\r\n }\r\n if (cameraProperty === null || coordinate === null) {\r\n // Mouse wheel axis not configured.\r\n return;\r\n }\r\n\r\n let action = null;\r\n switch (cameraProperty) {\r\n case _CameraProperty.MoveRelative:\r\n action = this._moveRelative;\r\n break;\r\n case _CameraProperty.RotateRelative:\r\n action = this._rotateRelative;\r\n break;\r\n case _CameraProperty.MoveScene:\r\n action = this._moveScene;\r\n break;\r\n }\r\n\r\n switch (coordinate) {\r\n case Coordinate.X:\r\n action.set(value, 0, 0);\r\n break;\r\n case Coordinate.Y:\r\n action.set(0, value, 0);\r\n break;\r\n case Coordinate.Z:\r\n action.set(0, 0, value);\r\n break;\r\n }\r\n }\r\n}\r\n\r\n(<any>CameraInputTypes)[\"FreeCameraMouseWheelInput\"] = FreeCameraMouseWheelInput;\r\n"]}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { VirtualJoystick
|
|
1
|
+
import { VirtualJoystick } from "../../Misc/virtualJoystick.js";
|
|
2
2
|
import { CameraInputTypes } from "../../Cameras/cameraInputsManager.js";
|
|
3
3
|
import { Matrix, Vector3 } from "../../Maths/math.vector.js";
|
|
4
4
|
import { FreeCameraInputsManager } from "../../Cameras/freeCameraInputsManager.js";
|
|
@@ -54,12 +54,12 @@ export class FreeCameraVirtualJoystickInput {
|
|
|
54
54
|
*/
|
|
55
55
|
attachControl() {
|
|
56
56
|
this._leftjoystick = new VirtualJoystick(true);
|
|
57
|
-
this._leftjoystick.setAxisForUpDown(JoystickAxis.Z);
|
|
58
|
-
this._leftjoystick.setAxisForLeftRight(JoystickAxis.X);
|
|
57
|
+
this._leftjoystick.setAxisForUpDown(2 /* JoystickAxis.Z */);
|
|
58
|
+
this._leftjoystick.setAxisForLeftRight(0 /* JoystickAxis.X */);
|
|
59
59
|
this._leftjoystick.setJoystickSensibility(0.15);
|
|
60
60
|
this._rightjoystick = new VirtualJoystick(false);
|
|
61
|
-
this._rightjoystick.setAxisForUpDown(JoystickAxis.X);
|
|
62
|
-
this._rightjoystick.setAxisForLeftRight(JoystickAxis.Y);
|
|
61
|
+
this._rightjoystick.setAxisForUpDown(0 /* JoystickAxis.X */);
|
|
62
|
+
this._rightjoystick.setAxisForLeftRight(1 /* JoystickAxis.Y */);
|
|
63
63
|
this._rightjoystick.reverseUpDown = true;
|
|
64
64
|
this._rightjoystick.setJoystickSensibility(0.05);
|
|
65
65
|
this._rightjoystick.setJoystickColor("yellow");
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"freeCameraVirtualJoystickInput.js","sourceRoot":"","sources":["../../../../../dev/core/src/Cameras/Inputs/freeCameraVirtualJoystickInput.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,
|
|
1
|
+
{"version":3,"file":"freeCameraVirtualJoystickInput.js","sourceRoot":"","sources":["../../../../../dev/core/src/Cameras/Inputs/freeCameraVirtualJoystickInput.ts"],"names":[],"mappings":"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","sourcesContent":["import { VirtualJoystick, JoystickAxis } from \"../../Misc/virtualJoystick\";\r\nimport type { ICameraInput } from \"../../Cameras/cameraInputsManager\";\r\nimport { CameraInputTypes } from \"../../Cameras/cameraInputsManager\";\r\nimport type { FreeCamera } from \"../../Cameras/freeCamera\";\r\nimport { Matrix, Vector3 } from \"../../Maths/math.vector\";\r\nimport { FreeCameraInputsManager } from \"../../Cameras/freeCameraInputsManager\";\r\n\r\n// Module augmentation to abstract virtual joystick from camera.\r\ndeclare module \"../../Cameras/freeCameraInputsManager\" {\r\n export interface FreeCameraInputsManager {\r\n /**\r\n * Add virtual joystick input support to the input manager.\r\n * @returns the current input manager\r\n */\r\n addVirtualJoystick(): FreeCameraInputsManager;\r\n }\r\n}\r\n\r\n/**\r\n * Add virtual joystick input support to the input manager.\r\n * @returns the current input manager\r\n */\r\nFreeCameraInputsManager.prototype.addVirtualJoystick = function (): FreeCameraInputsManager {\r\n this.add(new FreeCameraVirtualJoystickInput());\r\n return this;\r\n};\r\n\r\n/**\r\n * Manage the Virtual Joystick inputs to control the movement of a free camera.\r\n * @see https://doc.babylonjs.com/features/featuresDeepDive/cameras/customizingCameraInputs\r\n */\r\nexport class FreeCameraVirtualJoystickInput implements ICameraInput<FreeCamera> {\r\n /**\r\n * Defines the camera the input is attached to.\r\n */\r\n public camera: FreeCamera;\r\n\r\n private _leftjoystick: VirtualJoystick;\r\n private _rightjoystick: VirtualJoystick;\r\n\r\n /**\r\n * Gets the left stick of the virtual joystick.\r\n * @returns The virtual Joystick\r\n */\r\n public getLeftJoystick(): VirtualJoystick {\r\n return this._leftjoystick;\r\n }\r\n\r\n /**\r\n * Gets the right stick of the virtual joystick.\r\n * @returns The virtual Joystick\r\n */\r\n public getRightJoystick(): VirtualJoystick {\r\n return this._rightjoystick;\r\n }\r\n\r\n /**\r\n * Update the current camera state depending on the inputs that have been used this frame.\r\n * This is a dynamically created lambda to avoid the performance penalty of looping for inputs in the render loop.\r\n */\r\n public checkInputs() {\r\n if (this._leftjoystick) {\r\n const camera = this.camera;\r\n const speed = camera._computeLocalCameraSpeed() * 50;\r\n const cameraTransform = Matrix.RotationYawPitchRoll(camera.rotation.y, camera.rotation.x, 0);\r\n const deltaTransform = Vector3.TransformCoordinates(\r\n new Vector3(this._leftjoystick.deltaPosition.x * speed, this._leftjoystick.deltaPosition.y * speed, this._leftjoystick.deltaPosition.z * speed),\r\n cameraTransform\r\n );\r\n camera.cameraDirection = camera.cameraDirection.add(deltaTransform);\r\n camera.cameraRotation = camera.cameraRotation.addVector3(this._rightjoystick.deltaPosition);\r\n\r\n if (!this._leftjoystick.pressed) {\r\n this._leftjoystick.deltaPosition = this._leftjoystick.deltaPosition.scale(0.9);\r\n }\r\n if (!this._rightjoystick.pressed) {\r\n this._rightjoystick.deltaPosition = this._rightjoystick.deltaPosition.scale(0.9);\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * Attach the input controls to a specific dom element to get the input from.\r\n */\r\n public attachControl(): void {\r\n this._leftjoystick = new VirtualJoystick(true);\r\n this._leftjoystick.setAxisForUpDown(JoystickAxis.Z);\r\n this._leftjoystick.setAxisForLeftRight(JoystickAxis.X);\r\n this._leftjoystick.setJoystickSensibility(0.15);\r\n this._rightjoystick = new VirtualJoystick(false);\r\n this._rightjoystick.setAxisForUpDown(JoystickAxis.X);\r\n this._rightjoystick.setAxisForLeftRight(JoystickAxis.Y);\r\n this._rightjoystick.reverseUpDown = true;\r\n this._rightjoystick.setJoystickSensibility(0.05);\r\n this._rightjoystick.setJoystickColor(\"yellow\");\r\n }\r\n\r\n /**\r\n * Detach the current controls from the specified dom element.\r\n */\r\n public detachControl(): void {\r\n this._leftjoystick.releaseCanvas();\r\n this._rightjoystick.releaseCanvas();\r\n }\r\n\r\n /**\r\n * Gets the class name of the current input.\r\n * @returns the class name\r\n */\r\n public getClassName(): string {\r\n return \"FreeCameraVirtualJoystickInput\";\r\n }\r\n\r\n /**\r\n * Get the friendly name associated with the input class.\r\n * @returns the input friendly name\r\n */\r\n public getSimpleName(): string {\r\n return \"virtualJoystick\";\r\n }\r\n}\r\n\r\n(<any>CameraInputTypes)[\"FreeCameraVirtualJoystickInput\"] = FreeCameraVirtualJoystickInput;\r\n"]}
|