@babylonjs/core 5.0.0-alpha.60 → 5.0.0-alpha.61
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.d.ts +20 -0
- package/Animations/animation.js +57 -8
- package/Animations/animation.js.map +1 -1
- package/Animations/animationKey.d.ts +4 -0
- package/Animations/animationKey.js +4 -0
- package/Animations/animationKey.js.map +1 -1
- package/BakedVertexAnimation/bakedVertexAnimationManager.d.ts +130 -0
- package/BakedVertexAnimation/bakedVertexAnimationManager.js +134 -0
- package/BakedVertexAnimation/bakedVertexAnimationManager.js.map +1 -0
- package/BakedVertexAnimation/index.d.ts +2 -0
- package/BakedVertexAnimation/index.js +3 -0
- package/BakedVertexAnimation/index.js.map +1 -0
- package/BakedVertexAnimation/vertexAnimationBaker.d.ts +65 -0
- package/BakedVertexAnimation/vertexAnimationBaker.js +155 -0
- package/BakedVertexAnimation/vertexAnimationBaker.js.map +1 -0
- package/Behaviors/Cameras/framingBehavior.d.ts +5 -0
- package/Behaviors/Cameras/framingBehavior.js +8 -1
- package/Behaviors/Cameras/framingBehavior.js.map +1 -1
- package/Bones/bone.d.ts +3 -1
- package/Bones/bone.js +4 -1
- package/Bones/bone.js.map +1 -1
- package/Cameras/Inputs/BaseCameraPointersInput.js +4 -6
- package/Cameras/Inputs/BaseCameraPointersInput.js.map +1 -1
- package/Cameras/Inputs/flyCameraMouseInput.js +4 -4
- package/Cameras/Inputs/flyCameraMouseInput.js.map +1 -1
- package/Cameras/Inputs/freeCameraMouseInput.js +4 -4
- package/Cameras/Inputs/freeCameraMouseInput.js.map +1 -1
- package/Cameras/camera.js +7 -1
- package/Cameras/camera.js.map +1 -1
- package/Cameras/targetCamera.js +1 -1
- package/Cameras/targetCamera.js.map +1 -1
- package/Culling/boundingBox.d.ts +4 -0
- package/Culling/boundingBox.js +8 -0
- package/Culling/boundingBox.js.map +1 -1
- package/Debug/physicsViewer.js +1 -1
- package/Debug/physicsViewer.js.map +1 -1
- package/Debug/skeletonViewer.js +2 -2
- package/Debug/skeletonViewer.js.map +1 -1
- package/DeviceInput/Implementations/nativeDeviceInputWrapper.d.ts +6 -1
- package/DeviceInput/Implementations/nativeDeviceInputWrapper.js +16 -1
- package/DeviceInput/Implementations/nativeDeviceInputWrapper.js.map +1 -1
- package/DeviceInput/Implementations/webDeviceInputSystem.js +1 -1
- package/DeviceInput/Implementations/webDeviceInputSystem.js.map +1 -1
- package/DeviceInput/deviceInputSystem.js +6 -1
- package/DeviceInput/deviceInputSystem.js.map +1 -1
- package/Engines/Extensions/engine.multiview.js +17 -6
- package/Engines/Extensions/engine.multiview.js.map +1 -1
- package/Engines/WebGPU/Extensions/engine.query.js +19 -3
- package/Engines/WebGPU/Extensions/engine.query.js.map +1 -1
- package/Engines/WebGPU/webgpuBundleList.d.ts +13 -0
- package/Engines/WebGPU/webgpuBundleList.js +27 -0
- package/Engines/WebGPU/webgpuBundleList.js.map +1 -1
- package/Engines/WebGPU/webgpuHardwareTexture.d.ts +4 -0
- package/Engines/WebGPU/webgpuHardwareTexture.js.map +1 -1
- package/Engines/WebGPU/webgpuShaderProcessorsWGSL.d.ts +6 -0
- package/Engines/WebGPU/webgpuShaderProcessorsWGSL.js +6 -0
- package/Engines/WebGPU/webgpuShaderProcessorsWGSL.js.map +1 -1
- package/Engines/WebGPU/webgpuSnapshotRendering.d.ts +27 -0
- package/Engines/WebGPU/webgpuSnapshotRendering.js +107 -0
- package/Engines/WebGPU/webgpuSnapshotRendering.js.map +1 -0
- package/Engines/WebGPU/webgpuTextureHelper.d.ts +2 -2
- package/Engines/WebGPU/webgpuTextureHelper.js +41 -18
- package/Engines/WebGPU/webgpuTextureHelper.js.map +1 -1
- package/Engines/constants.d.ts +2 -0
- package/Engines/constants.js +2 -0
- package/Engines/constants.js.map +1 -1
- package/Engines/engine.d.ts +12 -1
- package/Engines/engine.js +33 -0
- package/Engines/engine.js.map +1 -1
- package/Engines/engineFeatures.d.ts +2 -0
- package/Engines/engineFeatures.js.map +1 -1
- package/Engines/index.d.ts +1 -0
- package/Engines/index.js +1 -0
- package/Engines/index.js.map +1 -1
- package/Engines/nativeEngine.js +1 -0
- package/Engines/nativeEngine.js.map +1 -1
- package/Engines/nullEngine.js +1 -0
- package/Engines/nullEngine.js.map +1 -1
- package/Engines/thinEngine.d.ts +0 -11
- package/Engines/thinEngine.js +12 -40
- package/Engines/thinEngine.js.map +1 -1
- package/Engines/webgpuEngine.d.ts +6 -6
- package/Engines/webgpuEngine.js +26 -67
- package/Engines/webgpuEngine.js.map +1 -1
- package/Helpers/sceneHelpers.d.ts +3 -3
- package/Helpers/sceneHelpers.js +1 -2
- package/Helpers/sceneHelpers.js.map +1 -1
- package/Inputs/scene.inputManager.js +12 -14
- package/Inputs/scene.inputManager.js.map +1 -1
- package/Layers/effectLayer.d.ts +13 -1
- package/Layers/effectLayer.js +115 -65
- package/Layers/effectLayer.js.map +1 -1
- package/Layers/highlightLayer.d.ts +2 -1
- package/Layers/highlightLayer.js +6 -3
- package/Layers/highlightLayer.js.map +1 -1
- package/Lights/Shadows/cascadedShadowGenerator.d.ts +1 -0
- package/Lights/Shadows/cascadedShadowGenerator.js +14 -0
- package/Lights/Shadows/cascadedShadowGenerator.js.map +1 -1
- package/Lights/Shadows/shadowGenerator.d.ts +4 -0
- package/Lights/Shadows/shadowGenerator.js +31 -3
- package/Lights/Shadows/shadowGenerator.js.map +1 -1
- package/Lights/light.js +7 -1
- package/Lights/light.js.map +1 -1
- package/Loading/Plugins/babylonFileLoader.js +17 -4
- package/Loading/Plugins/babylonFileLoader.js.map +1 -1
- package/Materials/Background/backgroundMaterial.js +1 -0
- package/Materials/Background/backgroundMaterial.js.map +1 -1
- package/Materials/Node/Blocks/Fragment/fragmentOutputBlock.d.ts +10 -0
- package/Materials/Node/Blocks/Fragment/fragmentOutputBlock.js +31 -0
- package/Materials/Node/Blocks/Fragment/fragmentOutputBlock.js.map +1 -1
- package/Materials/Node/Blocks/Fragment/index.d.ts +1 -0
- package/Materials/Node/Blocks/Fragment/index.js +1 -0
- package/Materials/Node/Blocks/Fragment/index.js.map +1 -1
- package/Materials/Node/Blocks/Fragment/screenSpaceBlock.d.ts +41 -0
- package/Materials/Node/Blocks/Fragment/screenSpaceBlock.js +130 -0
- package/Materials/Node/Blocks/Fragment/screenSpaceBlock.js.map +1 -0
- package/Materials/Node/Blocks/Input/inputBlock.js +1 -1
- package/Materials/Node/Blocks/Input/inputBlock.js.map +1 -1
- package/Materials/Node/Blocks/Vertex/vertexOutputBlock.d.ts +1 -0
- package/Materials/Node/Blocks/Vertex/vertexOutputBlock.js +15 -0
- package/Materials/Node/Blocks/Vertex/vertexOutputBlock.js.map +1 -1
- package/Materials/Node/Blocks/index.d.ts +1 -0
- package/Materials/Node/Blocks/index.js +1 -0
- package/Materials/Node/Blocks/index.js.map +1 -1
- package/Materials/Node/Blocks/vectorMergerBlock.js +4 -4
- package/Materials/Node/Blocks/vectorMergerBlock.js.map +1 -1
- package/Materials/Node/Blocks/voronoiNoiseBlock.d.ts +39 -0
- package/Materials/Node/Blocks/voronoiNoiseBlock.js +107 -0
- package/Materials/Node/Blocks/voronoiNoiseBlock.js.map +1 -0
- package/Materials/Node/Blocks/worleyNoise3DBlock.d.ts +8 -0
- package/Materials/Node/Blocks/worleyNoise3DBlock.js +34 -2
- package/Materials/Node/Blocks/worleyNoise3DBlock.js.map +1 -1
- package/Materials/Node/nodeMaterial.d.ts +1 -0
- package/Materials/Node/nodeMaterial.js +2 -0
- package/Materials/Node/nodeMaterial.js.map +1 -1
- package/Materials/Node/nodeMaterialBuildStateSharedData.d.ts +5 -0
- package/Materials/Node/nodeMaterialBuildStateSharedData.js.map +1 -1
- package/Materials/PBR/pbrBaseMaterial.d.ts +2 -0
- package/Materials/PBR/pbrBaseMaterial.js +11 -4
- package/Materials/PBR/pbrBaseMaterial.js.map +1 -1
- package/Materials/PBR/pbrSubSurfaceConfiguration.d.ts +11 -0
- package/Materials/PBR/pbrSubSurfaceConfiguration.js +18 -3
- package/Materials/PBR/pbrSubSurfaceConfiguration.js.map +1 -1
- package/Materials/Textures/hdrCubeTexture.d.ts +9 -0
- package/Materials/Textures/hdrCubeTexture.js +21 -5
- package/Materials/Textures/hdrCubeTexture.js.map +1 -1
- package/Materials/Textures/mirrorTexture.d.ts +2 -0
- package/Materials/Textures/mirrorTexture.js +13 -0
- package/Materials/Textures/mirrorTexture.js.map +1 -1
- package/Materials/imageProcessingConfiguration.d.ts +16 -1
- package/Materials/imageProcessingConfiguration.js +31 -0
- package/Materials/imageProcessingConfiguration.js.map +1 -1
- package/Materials/materialHelper.d.ts +15 -1
- package/Materials/materialHelper.js +40 -3
- package/Materials/materialHelper.js.map +1 -1
- package/Materials/pushMaterial.d.ts +2 -2
- package/Materials/pushMaterial.js +7 -3
- package/Materials/pushMaterial.js.map +1 -1
- package/Materials/shaderMaterial.d.ts +6 -5
- package/Materials/shaderMaterial.js +58 -28
- package/Materials/shaderMaterial.js.map +1 -1
- package/Materials/shadowDepthWrapper.js +7 -7
- package/Materials/shadowDepthWrapper.js.map +1 -1
- package/Materials/standardMaterial.d.ts +2 -0
- package/Materials/standardMaterial.js +11 -1
- package/Materials/standardMaterial.js.map +1 -1
- package/Materials/uniformBuffer.js +1 -2
- package/Materials/uniformBuffer.js.map +1 -1
- package/Maths/math.color.d.ts +20 -0
- package/Maths/math.color.js +45 -2
- package/Maths/math.color.js.map +1 -1
- package/Maths/math.vector.d.ts +2 -1
- package/Maths/math.vector.js +14 -3
- package/Maths/math.vector.js.map +1 -1
- package/Meshes/Builders/boxBuilder.d.ts +1 -1
- package/Meshes/Builders/boxBuilder.js +1 -0
- package/Meshes/Builders/boxBuilder.js.map +1 -1
- package/Meshes/Builders/cylinderBuilder.d.ts +17 -17
- package/Meshes/Builders/cylinderBuilder.js +1 -0
- package/Meshes/Builders/cylinderBuilder.js.map +1 -1
- package/Meshes/Builders/discBuilder.d.ts +1 -1
- package/Meshes/Builders/discBuilder.js +1 -0
- package/Meshes/Builders/discBuilder.js.map +1 -1
- package/Meshes/Builders/groundBuilder.d.ts +8 -8
- package/Meshes/Builders/groundBuilder.js +2 -0
- package/Meshes/Builders/groundBuilder.js.map +1 -1
- package/Meshes/Builders/hemisphereBuilder.d.ts +4 -4
- package/Meshes/Builders/hemisphereBuilder.js +1 -0
- package/Meshes/Builders/hemisphereBuilder.js.map +1 -1
- package/Meshes/Builders/icoSphereBuilder.d.ts +1 -1
- package/Meshes/Builders/icoSphereBuilder.js +1 -0
- package/Meshes/Builders/icoSphereBuilder.js.map +1 -1
- package/Meshes/Builders/planeBuilder.d.ts +1 -1
- package/Meshes/Builders/planeBuilder.js +1 -0
- package/Meshes/Builders/planeBuilder.js.map +1 -1
- package/Meshes/Builders/polyhedronBuilder.d.ts +1 -1
- package/Meshes/Builders/polyhedronBuilder.js +1 -0
- package/Meshes/Builders/polyhedronBuilder.js.map +1 -1
- package/Meshes/Builders/sphereBuilder.d.ts +1 -1
- package/Meshes/Builders/sphereBuilder.js +1 -0
- package/Meshes/Builders/sphereBuilder.js.map +1 -1
- package/Meshes/Builders/torusBuilder.d.ts +8 -8
- package/Meshes/Builders/torusBuilder.js +1 -0
- package/Meshes/Builders/torusBuilder.js.map +1 -1
- package/Meshes/Builders/torusKnotBuilder.d.ts +11 -11
- package/Meshes/Builders/torusKnotBuilder.js +1 -0
- package/Meshes/Builders/torusKnotBuilder.js.map +1 -1
- package/Meshes/abstractMesh.d.ts +22 -2
- package/Meshes/abstractMesh.js +55 -6
- package/Meshes/abstractMesh.js.map +1 -1
- package/Meshes/geometry.d.ts +3 -0
- package/Meshes/geometry.js +13 -5
- package/Meshes/geometry.js.map +1 -1
- package/Meshes/linesMesh.d.ts +0 -2
- package/Meshes/linesMesh.js +3 -35
- package/Meshes/linesMesh.js.map +1 -1
- package/Meshes/mesh.js +4 -4
- package/Meshes/mesh.js.map +1 -1
- package/Meshes/thinInstanceMesh.js +6 -5
- package/Meshes/thinInstanceMesh.js.map +1 -1
- package/Meshes/transformNode.d.ts +8 -8
- package/Meshes/transformNode.js +25 -17
- package/Meshes/transformNode.js.map +1 -1
- package/Misc/basis.d.ts +2 -2
- package/Misc/basis.js +19 -4
- package/Misc/basis.js.map +1 -1
- package/Misc/sceneSerializer.js +0 -3
- package/Misc/sceneSerializer.js.map +1 -1
- package/Misc/tools.d.ts +2 -4
- package/Misc/tools.js +6 -10
- package/Misc/tools.js.map +1 -1
- package/Particles/particleSystem.js +19 -16
- package/Particles/particleSystem.js.map +1 -1
- package/Particles/solidParticleSystem.js +29 -5
- package/Particles/solidParticleSystem.js.map +1 -1
- package/Physics/Plugins/ammoJSPlugin.js +10 -8
- package/Physics/Plugins/ammoJSPlugin.js.map +1 -1
- package/PostProcesses/imageProcessingPostProcess.js +1 -0
- package/PostProcesses/imageProcessingPostProcess.js.map +1 -1
- package/Probes/reflectionProbe.d.ts +2 -0
- package/Probes/reflectionProbe.js +21 -0
- package/Probes/reflectionProbe.js.map +1 -1
- package/Rendering/boundingBoxRenderer.d.ts +3 -0
- package/Rendering/boundingBoxRenderer.js +49 -14
- package/Rendering/boundingBoxRenderer.js.map +1 -1
- package/Rendering/depthRenderer.d.ts +1 -1
- package/Rendering/depthRenderer.js +2 -2
- package/Rendering/depthRenderer.js.map +1 -1
- package/Rendering/edgesRenderer.js +3 -1
- package/Rendering/edgesRenderer.js.map +1 -1
- package/Rendering/geometryBufferRenderer.d.ts +0 -2
- package/Rendering/geometryBufferRenderer.js +13 -10
- package/Rendering/geometryBufferRenderer.js.map +1 -1
- package/Shaders/ShadersInclude/bakedVertexAnimation.d.ts +5 -0
- package/Shaders/ShadersInclude/bakedVertexAnimation.js +7 -0
- package/Shaders/ShadersInclude/bakedVertexAnimation.js.map +1 -0
- package/Shaders/ShadersInclude/bakedVertexAnimationDeclaration.d.ts +5 -0
- package/Shaders/ShadersInclude/bakedVertexAnimationDeclaration.js +7 -0
- package/Shaders/ShadersInclude/bakedVertexAnimationDeclaration.js.map +1 -0
- package/Shaders/ShadersInclude/bonesDeclaration.js +1 -1
- package/Shaders/ShadersInclude/bonesDeclaration.js.map +1 -1
- package/Shaders/ShadersInclude/bonesVertex.js +1 -1
- package/Shaders/ShadersInclude/bonesVertex.js.map +1 -1
- package/Shaders/ShadersInclude/pbrBlockImageProcessing.js +1 -1
- package/Shaders/ShadersInclude/pbrBlockImageProcessing.js.map +1 -1
- package/Shaders/background.fragment.js +1 -1
- package/Shaders/background.fragment.js.map +1 -1
- package/Shaders/background.vertex.d.ts +2 -0
- package/Shaders/background.vertex.js +3 -1
- package/Shaders/background.vertex.js.map +1 -1
- package/Shaders/color.vertex.d.ts +2 -0
- package/Shaders/color.vertex.js +3 -1
- package/Shaders/color.vertex.js.map +1 -1
- package/Shaders/default.vertex.d.ts +2 -0
- package/Shaders/default.vertex.js +3 -1
- package/Shaders/default.vertex.js.map +1 -1
- package/Shaders/depth.vertex.d.ts +2 -0
- package/Shaders/depth.vertex.js +3 -1
- package/Shaders/depth.vertex.js.map +1 -1
- package/Shaders/geometry.vertex.d.ts +2 -0
- package/Shaders/geometry.vertex.js +3 -1
- package/Shaders/geometry.vertex.js.map +1 -1
- package/Shaders/glowMapGeneration.vertex.d.ts +2 -0
- package/Shaders/glowMapGeneration.vertex.js +3 -1
- package/Shaders/glowMapGeneration.vertex.js.map +1 -1
- package/Shaders/outline.vertex.d.ts +2 -0
- package/Shaders/outline.vertex.js +3 -1
- package/Shaders/outline.vertex.js.map +1 -1
- package/Shaders/pbr.vertex.d.ts +2 -0
- package/Shaders/pbr.vertex.js +3 -1
- package/Shaders/pbr.vertex.js.map +1 -1
- package/Shaders/shadowMap.vertex.d.ts +2 -0
- package/Shaders/shadowMap.vertex.js +3 -1
- package/Shaders/shadowMap.vertex.js.map +1 -1
- package/Shaders/volumetricLightScatteringPass.vertex.d.ts +2 -0
- package/Shaders/volumetricLightScatteringPass.vertex.js +3 -1
- package/Shaders/volumetricLightScatteringPass.vertex.js.map +1 -1
- package/ShadersWGSL/ShadersInclude/bakedVertexAnimation.d.ts +5 -0
- package/ShadersWGSL/ShadersInclude/bakedVertexAnimation.js +7 -0
- package/ShadersWGSL/ShadersInclude/bakedVertexAnimation.js.map +1 -0
- package/ShadersWGSL/ShadersInclude/bakedVertexAnimationDeclaration.d.ts +5 -0
- package/ShadersWGSL/ShadersInclude/bakedVertexAnimationDeclaration.js +7 -0
- package/ShadersWGSL/ShadersInclude/bakedVertexAnimationDeclaration.js.map +1 -0
- package/ShadersWGSL/ShadersInclude/bonesDeclaration.js +1 -1
- package/ShadersWGSL/ShadersInclude/bonesDeclaration.js.map +1 -1
- package/ShadersWGSL/ShadersInclude/bonesVertex.js +1 -1
- package/ShadersWGSL/ShadersInclude/bonesVertex.js.map +1 -1
- package/ShadersWGSL/ShadersInclude/clipPlaneFragment.d.ts +5 -0
- package/ShadersWGSL/ShadersInclude/clipPlaneFragment.js +7 -0
- package/ShadersWGSL/ShadersInclude/clipPlaneFragment.js.map +1 -0
- package/ShadersWGSL/ShadersInclude/clipPlaneFragmentDeclaration.d.ts +5 -0
- package/ShadersWGSL/ShadersInclude/clipPlaneFragmentDeclaration.js +7 -0
- package/ShadersWGSL/ShadersInclude/clipPlaneFragmentDeclaration.js.map +1 -0
- package/ShadersWGSL/ShadersInclude/clipPlaneVertex.d.ts +5 -0
- package/ShadersWGSL/ShadersInclude/clipPlaneVertex.js +7 -0
- package/ShadersWGSL/ShadersInclude/clipPlaneVertex.js.map +1 -0
- package/ShadersWGSL/ShadersInclude/clipPlaneVertexDeclaration.d.ts +5 -0
- package/ShadersWGSL/ShadersInclude/clipPlaneVertexDeclaration.js +7 -0
- package/ShadersWGSL/ShadersInclude/clipPlaneVertexDeclaration.js.map +1 -0
- package/XR/features/WebXRNearInteraction.d.ts +1 -0
- package/XR/features/WebXRNearInteraction.js +2 -0
- package/XR/features/WebXRNearInteraction.js.map +1 -1
- package/index.d.ts +1 -0
- package/index.js +1 -0
- package/index.js.map +1 -1
- package/node.d.ts +30 -1
- package/node.js +12 -0
- package/node.js.map +1 -1
- package/package.json +43 -1
- package/scene.d.ts +10 -0
- package/scene.js +27 -0
- package/scene.js.map +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"framingBehavior.js","sourceRoot":"","sources":["../../../../sourceES6/core/Behaviors/Cameras/framingBehavior.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,eAAe,EAAE,cAAc,EAAE,MAAM,yBAAyB,CAAC;AAE1E,OAAO,EAAkB,iBAAiB,EAAE,MAAM,4BAA4B,CAAC;AAC/E,OAAO,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAC;AAGzD,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,yBAAyB,CAAC;AAE3D,OAAO,EAAE,SAAS,EAAE,MAAM,4BAA4B,CAAC;AAEvD;;;GAGG;AACH;IAAA;QAQY,UAAK,GAAG,eAAe,CAAC,mBAAmB,CAAC;QAC5C,iBAAY,GAAG,GAAG,CAAC;QACnB,mBAAc,GAAG,GAAG,CAAC;QACrB,sBAAiB,GAAG,GAAG,CAAC;QACxB,yBAAoB,GAAG,IAAI,CAAC;QAC5B,6BAAwB,GAAG,IAAI,CAAC;QAChC,wBAAmB,GAAG,KAAK,CAAC;QAC5B,iBAAY,GAAG,IAAI,CAAC;QAgI5B;;;WAGG;QACI,0CAAqC,GAAG,IAAI,CAAC;QAO5C,mBAAc,GAAG,KAAK,CAAC;QACvB,yBAAoB,GAAG,CAAC,QAAQ,CAAC;QAuEzC,kBAAkB;QACV,iBAAY,GAAG,IAAI,KAAK,EAAc,CAAC;QACvC,qBAAgB,GAAG,KAAK,CAAC;IA2SrC,CAAC;IA3gBG,sBAAW,iCAAI;QAHf;;WAEG;aACH;YACI,OAAO,SAAS,CAAC;QACrB,CAAC;;;OAAA;IAwBD,sBAAW,iCAAI;QAIf;;WAEG;aACH;YACI,OAAO,IAAI,CAAC,KAAK,CAAC;QACtB,CAAC;QAZD;;WAEG;aACH,UAAgB,IAAY;YACxB,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC;QACtB,CAAC;;;OAAA;IAYD,sBAAW,wCAAW;QAItB;;WAEG;aACH;YACI,OAAO,IAAI,CAAC,YAAY,CAAC;QAC7B,CAAC;QAZD;;WAEG;aACH,UAAuB,MAAc;YACjC,IAAI,CAAC,YAAY,GAAG,MAAM,CAAC;QAC/B,CAAC;;;OAAA;IAYD,sBAAW,0CAAa;QAIxB;;WAEG;aACH;YACI,OAAO,IAAI,CAAC,cAAc,CAAC;QAC/B,CAAC;QAZD;;WAEG;aACH,UAAyB,KAAa;YAClC,IAAI,CAAC,cAAc,GAAG,KAAK,CAAC;QAChC,CAAC;;;OAAA;IAaD,sBAAW,6CAAgB;QAI3B;;;UAGE;aACF;YACI,OAAO,IAAI,CAAC,iBAAiB,CAAC;QAClC,CAAC;QAdD;;;UAGE;aACF,UAA4B,SAAiB;YACzC,IAAI,CAAC,iBAAiB,GAAG,SAAS,CAAC;QACvC,CAAC;;;OAAA;IAcD,sBAAW,gDAAmB;QAI9B;;;WAGG;aACH;YACI,OAAO,IAAI,CAAC,oBAAoB,CAAC;QACrC,CAAC;QAdD;;;WAGG;aACH,UAA+B,KAAa;YACxC,IAAI,CAAC,oBAAoB,GAAG,KAAK,CAAC;QACtC,CAAC;;;OAAA;IAaD,sBAAW,oDAAuB;QAIlC;;WAEG;aACH;YACI,OAAO,IAAI,CAAC,wBAAwB,CAAC;QACzC,CAAC;QAZD;;WAEG;aACH,UAAmC,IAAY;YAC3C,IAAI,CAAC,wBAAwB,GAAG,IAAI,CAAC;QACzC,CAAC;;;OAAA;IAYD,sBAAW,+CAAkB;QAI7B;;UAEE;aACF;YACI,OAAO,IAAI,CAAC,mBAAmB,CAAC;QACpC,CAAC;QAZD;;UAEE;aACF,UAA8B,IAAa;YACvC,IAAI,CAAC,mBAAmB,GAAG,IAAI,CAAC;QACpC,CAAC;;;OAAA;IAYD,sBAAW,wCAAW;QAItB;;UAEE;aACF;YACI,OAAO,IAAI,CAAC,YAAY,CAAC;QAC7B,CAAC;QAZD;;UAEE;aACF,UAAuB,IAAY;YAC/B,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC;QAC7B,CAAC;;;OAAA;IAuBD;;OAEG;IACI,8BAAI,GAAX;QACI,aAAa;IACjB,CAAC;IAED;;;OAGG;IACI,gCAAM,GAAb,UAAc,MAAuB;QAArC,iBA+BC;QA9BG,IAAI,CAAC,eAAe,GAAG,MAAM,CAAC;QAC9B,IAAI,KAAK,GAAG,IAAI,CAAC,eAAe,CAAC,QAAQ,EAAE,CAAC;QAE5C,eAAe,CAAC,cAAc,CAAC,aAAa,CAAC,eAAe,CAAC,UAAU,CAAC,CAAC;QAEzE,IAAI,CAAC,+BAA+B,GAAG,KAAK,CAAC,sBAAsB,CAAC,GAAG,CAAC,UAAC,cAAc;YACnF,IAAI,cAAc,CAAC,IAAI,KAAK,iBAAiB,CAAC,WAAW,EAAE;gBACvD,KAAI,CAAC,cAAc,GAAG,IAAI,CAAC;gBAC3B,OAAO;aACV;YAED,IAAI,cAAc,CAAC,IAAI,KAAK,iBAAiB,CAAC,SAAS,EAAE;gBACrD,KAAI,CAAC,cAAc,GAAG,KAAK,CAAC;aAC/B;QACL,CAAC,CAAC,CAAC;QAEH,IAAI,CAAC,4BAA4B,GAAG,MAAM,CAAC,6BAA6B,CAAC,GAAG,CAAC,UAAC,IAAI;YAC9E,IAAI,IAAI,EAAE;gBACN,KAAI,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;aACzB;QACL,CAAC,CAAC,CAAC;QAEH,IAAI,CAAC,2BAA2B,GAAG,MAAM,CAAC,4BAA4B,CAAC,GAAG,CAAC;YACvE,qGAAqG;YACrG,KAAI,CAAC,qBAAqB,EAAE,CAAC;YAE7B,uGAAuG;YACvG,qDAAqD;YACrD,KAAI,CAAC,0BAA0B,EAAE,CAAC;QACtC,CAAC,CAAC,CAAC;IACP,CAAC;IAED;;OAEG;IACI,gCAAM,GAAb;QACI,IAAI,CAAC,IAAI,CAAC,eAAe,EAAE;YACvB,OAAO;SACV;QAED,IAAI,KAAK,GAAG,IAAI,CAAC,eAAe,CAAC,QAAQ,EAAE,CAAC;QAE5C,IAAI,IAAI,CAAC,+BAA+B,EAAE;YACtC,KAAK,CAAC,sBAAsB,CAAC,MAAM,CAAC,IAAI,CAAC,+BAA+B,CAAC,CAAC;SAC7E;QAED,IAAI,IAAI,CAAC,2BAA2B,EAAE;YAClC,IAAI,CAAC,eAAe,CAAC,4BAA4B,CAAC,MAAM,CAAC,IAAI,CAAC,2BAA2B,CAAC,CAAC;SAC9F;QAED,IAAI,IAAI,CAAC,4BAA4B,EAAE;YACnC,IAAI,CAAC,eAAe,CAAC,6BAA6B,CAAC,MAAM,CAAC,IAAI,CAAC,4BAA4B,CAAC,CAAC;SAChG;QAED,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC;IAChC,CAAC;IASD;;;;;OAKG;IACI,oCAAU,GAAjB,UAAkB,IAAkB,EAAE,eAAgC,EAAE,cAA2C;QAA7E,gCAAA,EAAA,uBAAgC;QAAE,+BAAA,EAAA,qBAA2C;QAC/G,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,CAAC;QAE9B,IAAI,WAAW,GAAG,IAAI,CAAC,eAAe,EAAE,CAAC,WAAW,CAAC;QACrD,IAAI,CAAC,kBAAkB,CAAC,WAAW,CAAC,YAAY,EAAE,WAAW,CAAC,YAAY,EAAE,eAAe,EAAE,cAAc,CAAC,CAAC;IACjH,CAAC;IAED;;;;;OAKG;IACI,6CAAmB,GAA1B,UAA2B,IAAkB,EAAE,eAAgC,EAAE,cAA2C;QAA7E,gCAAA,EAAA,uBAAgC;QAAE,+BAAA,EAAA,qBAA2C;QACxH,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,CAAC;QAE9B,IAAI,WAAW,GAAG,IAAI,CAAC,2BAA2B,CAAC,IAAI,CAAC,CAAC;QACzD,IAAI,CAAC,kBAAkB,CAAC,WAAW,CAAC,GAAG,EAAE,WAAW,CAAC,GAAG,EAAE,eAAe,EAAE,cAAc,CAAC,CAAC;IAC/F,CAAC;IAED;;;;;OAKG;IACI,+CAAqB,GAA5B,UAA6B,MAAsB,EAAE,eAAgC,EAAE,cAA2C;QAA7E,gCAAA,EAAA,uBAAgC;QAAE,+BAAA,EAAA,qBAA2C;QAC9H,IAAI,GAAG,GAAG,IAAI,OAAO,CAAC,MAAM,CAAC,SAAS,EAAE,MAAM,CAAC,SAAS,EAAE,MAAM,CAAC,SAAS,CAAC,CAAC;QAC5E,IAAI,GAAG,GAAG,IAAI,OAAO,CAAC,CAAC,MAAM,CAAC,SAAS,EAAE,CAAC,MAAM,CAAC,SAAS,EAAE,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;QAE/E,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;YACpC,IAAI,YAAY,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC,2BAA2B,CAAC,IAAI,CAAC,CAAC;YAC/D,OAAO,CAAC,YAAY,CAAC,YAAY,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC;YACjD,OAAO,CAAC,YAAY,CAAC,YAAY,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC;SACpD;QAED,IAAI,CAAC,kBAAkB,CAAC,GAAG,EAAE,GAAG,EAAE,eAAe,EAAE,cAAc,CAAC,CAAC;IACvE,CAAC;IAED;;;;;;OAMG;IACI,4CAAkB,GAAzB,UAA0B,YAAqB,EAAE,YAAqB,EAAE,eAAgC,EAAE,cAA2C;QAArJ,iBAyEC;QAzEuE,gCAAA,EAAA,uBAAgC;QAAE,+BAAA,EAAA,qBAA2C;QACjJ,IAAI,UAAmB,CAAC;QAExB,IAAI,CAAC,IAAI,CAAC,eAAe,EAAE;YACvB,OAAO;SACV;QAED,sGAAsG;QACtG,IAAI,MAAM,GAAG,YAAY,CAAC,CAAC,CAAC;QAC5B,IAAI,GAAG,GAAG,YAAY,CAAC,CAAC,CAAC;QACzB,IAAI,WAAW,GAAG,MAAM,GAAG,CAAC,GAAG,GAAG,MAAM,CAAC,GAAG,IAAI,CAAC,cAAc,CAAC;QAChE,IAAI,WAAW,GAAG,YAAY,CAAC,QAAQ,CAAC,YAAY,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QAEjE,IAAI,eAAe,EAAE;YACjB,UAAU,GAAG,IAAI,OAAO,CAAC,CAAC,EAAE,WAAW,EAAE,CAAC,CAAC,CAAC;SAC/C;aAAM;YACH,IAAI,WAAW,GAAG,YAAY,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC;YAChD,UAAU,GAAG,IAAI,OAAO,CAAC,WAAW,CAAC,CAAC,EAAE,WAAW,EAAE,WAAW,CAAC,CAAC,CAAC,CAAC;SACvE;QAED,IAAI,CAAC,IAAI,CAAC,iBAAiB,EAAE;YACzB,IAAI,CAAC,iBAAiB,GAAG,SAAS,CAAC,eAAe,CAAC,QAAQ,EAAE,SAAS,CAAC,qBAAqB,EAAE,EAAE,EAAE,eAAe,CAAC,cAAc,CAAC,CAAC;SACrI;QAED,IAAI,CAAC,gBAAgB,GAAG,IAAI,CAAC;QAC7B,IAAI,UAAU,GAAG,SAAS,CAAC,YAAY,CAAC,QAAQ,EAAE,UAAU,EAAE,IAAI,CAAC,eAAe,EAAE,IAAI,CAAC,eAAe,CAAC,QAAQ,EAAE,EAAE,EAAE,EAAE,IAAI,CAAC,iBAAiB,EAAE,IAAI,CAAC,YAAY,CAAC,CAAC;QACpK,IAAI,UAAU,EAAE;YACZ,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;SACtC;QAED,0CAA0C;QAC1C,gEAAgE;QAChE,IAAI,MAAM,GAAG,CAAC,CAAC;QACf,IAAI,IAAI,CAAC,KAAK,KAAK,eAAe,CAAC,mBAAmB,EAAE;YACpD,IAAI,QAAQ,GAAG,IAAI,CAAC,4CAA4C,CAAC,YAAY,EAAE,YAAY,CAAC,CAAC;YAC7F,IAAI,IAAI,CAAC,qCAAqC,EAAE;gBAC5C,IAAI,CAAC,eAAe,CAAC,gBAAgB,GAAG,WAAW,CAAC,MAAM,EAAE,GAAG,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC;aAC5F;YACD,MAAM,GAAG,QAAQ,CAAC;SACrB;aAAM,IAAI,IAAI,CAAC,KAAK,KAAK,eAAe,CAAC,oBAAoB,EAAE;YAC5D,MAAM,GAAG,IAAI,CAAC,4CAA4C,CAAC,YAAY,EAAE,YAAY,CAAC,CAAC;YACvF,IAAI,IAAI,CAAC,qCAAqC,IAAI,IAAI,CAAC,eAAe,CAAC,gBAAgB,KAAK,IAAI,EAAE;gBAC9F,IAAI,CAAC,eAAe,CAAC,gBAAgB,GAAG,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC;aACrE;SACJ;QAED,oBAAoB;QACpB,IAAI,IAAI,CAAC,qCAAqC,EAAE;YAC5C,IAAM,MAAM,GAAG,YAAY,CAAC,QAAQ,CAAC,YAAY,CAAC,CAAC,MAAM,EAAE,CAAC;YAC5D,IAAI,CAAC,eAAe,CAAC,kBAAkB,GAAG,IAAI,GAAG,MAAM,CAAC;YACxD,IAAI,CAAC,eAAe,CAAC,cAAc,GAAG,GAAG,GAAG,MAAM,CAAC;SACtD;QAED,2BAA2B;QAC3B,IAAI,CAAC,IAAI,CAAC,iBAAiB,EAAE;YACzB,IAAI,CAAC,iBAAiB,GAAG,SAAS,CAAC,eAAe,CAAC,QAAQ,EAAE,SAAS,CAAC,mBAAmB,EAAE,EAAE,EAAE,eAAe,CAAC,cAAc,CAAC,CAAC;SACnI;QAED,UAAU,GAAG,SAAS,CAAC,YAAY,CAAC,QAAQ,EAAE,MAAM,EAAE,IAAI,CAAC,eAAe,EAAE,IAAI,CAAC,eAAe,CAAC,QAAQ,EAAE,EACvG,EAAE,EAAE,IAAI,CAAC,iBAAiB,EAAE,IAAI,CAAC,YAAY,EAAE;YAC3C,KAAI,CAAC,iBAAiB,EAAE,CAAC;YACzB,IAAI,cAAc,EAAE;gBAChB,cAAc,EAAE,CAAC;aACpB;YAED,IAAI,KAAI,CAAC,eAAe,IAAI,KAAI,CAAC,eAAe,CAAC,sBAAsB,EAAE;gBACrE,KAAI,CAAC,eAAe,CAAC,UAAU,EAAE,CAAC;aACrC;QACL,CAAC,CAAC,CAAC;QAEP,IAAI,UAAU,EAAE;YACZ,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;SACtC;IACL,CAAC;IAED;;;;;;OAMG;IACO,sEAA4C,GAAtD,UAAuD,YAAqB,EAAE,YAAqB;QAC/F,IAAI,IAAI,GAAG,YAAY,CAAC,QAAQ,CAAC,YAAY,CAAC,CAAC;QAC/C,IAAI,uBAAuB,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC;QAC5C,IAAI,YAAY,GAAY,IAAI,CAAC,gBAAgB,EAAE,CAAC;QAEpD,+BAA+B;QAC/B,6FAA6F;QAC7F,IAAI,oBAAoB,GAAG,uBAAuB,GAAG,GAAG,CAAC;QAEzD,mBAAmB;QACnB,IAAI,MAAM,GAAG,oBAAoB,GAAG,IAAI,CAAC,YAAY,CAAC;QACtD,IAAI,4BAA4B,GAAG,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,GAAG,GAAG,GAAG,CAAC,YAAY,CAAC,CAAC,GAAG,YAAY,CAAC,CAAC,CAAC,CAAC,CAAC;QACrG,IAAI,0BAA0B,GAAG,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,GAAG,GAAG,GAAG,CAAC,YAAY,CAAC,CAAC,GAAG,YAAY,CAAC,CAAC,CAAC,CAAC,CAAC;QACnG,IAAI,QAAQ,GAAG,IAAI,CAAC,GAAG,CAAC,4BAA4B,EAAE,0BAA0B,CAAC,CAAC;QAClF,IAAI,MAAM,GAAG,IAAI,CAAC,eAAe,CAAC;QAElC,IAAI,CAAC,MAAM,EAAE;YACT,OAAO,CAAC,CAAC;SACZ;QAED,IAAI,MAAM,CAAC,gBAAgB,IAAI,IAAI,CAAC,KAAK,KAAK,eAAe,CAAC,oBAAoB,EAAE;YAChF,mCAAmC;YACnC,QAAQ,GAAG,QAAQ,GAAG,MAAM,CAAC,gBAAgB,CAAC,CAAC,CAAC,MAAM,CAAC,gBAAgB,CAAC,CAAC,CAAC,QAAQ,CAAC;SACtF;QAED,sCAAsC;QACtC,IAAI,MAAM,CAAC,gBAAgB,EAAE;YACzB,QAAQ,GAAG,QAAQ,GAAG,MAAM,CAAC,gBAAgB,CAAC,CAAC,CAAC,MAAM,CAAC,gBAAgB,CAAC,CAAC,CAAC,QAAQ,CAAC;SACtF;QAED,OAAO,QAAQ,CAAC;IACpB,CAAC;IAED;;;OAGG;IACK,oDAA0B,GAAlC;QAAA,iBA+BC;QA9BG,IAAI,IAAI,CAAC,oBAAoB,GAAG,CAAC,EAAE;YAC/B,OAAO;SACV;QAED,IAAI,oBAAoB,GAAG,aAAa,CAAC,GAAG,GAAG,IAAI,CAAC,oBAAoB,CAAC;QACzE,IAAI,WAAW,GAAG,IAAI,CAAC,EAAE,GAAG,GAAG,GAAG,IAAI,CAAC,iBAAiB,CAAC;QACzD,IAAI,SAAS,GAAG,IAAI,CAAC,EAAE,GAAG,GAAG,CAAC;QAE9B,qDAAqD;QACrD,IAAI,IAAI,CAAC,eAAe,IAAI,CAAC,IAAI,CAAC,gBAAgB,IAAI,IAAI,CAAC,eAAe,CAAC,IAAI,GAAG,SAAS,IAAI,oBAAoB,IAAI,IAAI,CAAC,wBAAwB,EAAE;YAClJ,IAAI,CAAC,gBAAgB,GAAG,IAAI,CAAC;YAE7B,4BAA4B;YAC5B,IAAI,CAAC,iBAAiB,EAAE,CAAC;YAEzB,IAAI,CAAC,IAAI,CAAC,eAAe,EAAE;gBACvB,IAAI,CAAC,eAAe,GAAG,SAAS,CAAC,eAAe,CAAC,MAAM,EAAE,SAAS,CAAC,mBAAmB,EAAE,EAAE,EAAE,eAAe,CAAC,cAAc,CAAC,CAAC;aAC/H;YAED,IAAI,SAAS,GAAG,SAAS,CAAC,YAAY,CAAC,MAAM,EAAE,WAAW,EAAE,IAAI,CAAC,eAAe,EAAE,IAAI,CAAC,eAAe,CAAC,QAAQ,EAAE,EAAE,EAAE,EACjH,IAAI,CAAC,eAAe,EAAE,IAAI,CAAC,oBAAoB,EAC/C;gBACI,KAAI,CAAC,oBAAoB,EAAE,CAAC;gBAC5B,KAAI,CAAC,iBAAiB,EAAE,CAAC;YAC7B,CAAC,CAAC,CAAC;YAEP,IAAI,SAAS,EAAE;gBACX,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;aACrC;SACJ;IACL,CAAC;IAED;;;OAGG;IACK,0CAAgB,GAAxB;QACI,+BAA+B;QAC/B,gCAAgC;QAChC,IAAI,MAAM,GAAG,IAAI,CAAC,eAAe,CAAC;QAElC,IAAI,CAAC,MAAM,EAAE;YACT,OAAO,OAAO,CAAC,IAAI,EAAE,CAAC;SACzB;QAED,IAAI,MAAM,GAAG,MAAM,CAAC,QAAQ,EAAE,CAAC,SAAS,EAAE,CAAC;QAC3C,IAAI,WAAW,GAAG,MAAM,CAAC,cAAc,CAAC,MAAM,CAAC,CAAC;QAEhD,oEAAoE;QACpE,wFAAwF;QACxF,IAAI,aAAa,GAAG,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC;QAE7C,wFAAwF;QACxF,yFAAyF;QACzF,4BAA4B;QAC5B,IAAI,aAAa,GAAG,aAAa,GAAG,WAAW,CAAC;QAEhD,OAAO,IAAI,OAAO,CAAC,aAAa,EAAE,aAAa,CAAC,CAAC;IACrD,CAAC;IAED;;OAEG;IACK,8CAAoB,GAA5B;QACI,IAAI,CAAC,gBAAgB,GAAG,KAAK,CAAC;IAClC,CAAC;IAED;;OAEG;IACK,+CAAqB,GAA7B;QACI,IAAI,IAAI,CAAC,cAAc,EAAE;YACrB,IAAI,CAAC,oBAAoB,GAAG,aAAa,CAAC,GAAG,CAAC;YAC9C,IAAI,CAAC,iBAAiB,EAAE,CAAC;YACzB,IAAI,CAAC,oBAAoB,EAAE,CAAC;SAC/B;IACL,CAAC;IAED;;OAEG;IACI,2CAAiB,GAAxB;QACI,IAAI,IAAI,CAAC,eAAe,EAAE;YACtB,IAAI,CAAC,eAAe,CAAC,UAAU,GAAG,EAAE,CAAC;SACxC;QAED,OAAO,IAAI,CAAC,YAAY,CAAC,MAAM,EAAE;YAC7B,IAAI,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC,EAAE;gBACtB,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,cAAc,GAAG,IAAI,CAAC;gBAC3C,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;aAC/B;YACD,IAAI,CAAC,YAAY,CAAC,KAAK,EAAE,CAAC;SAC7B;IACL,CAAC;IAKD,sBAAW,2CAAc;QAHzB;;WAEG;aACH;YACI,IAAI,CAAC,IAAI,CAAC,eAAe,EAAE;gBACvB,OAAO,KAAK,CAAC;aAChB;YAED,OAAO,IAAI,CAAC,eAAe,CAAC,mBAAmB,KAAK,CAAC;gBACjD,IAAI,CAAC,eAAe,CAAC,kBAAkB,KAAK,CAAC;gBAC7C,IAAI,CAAC,eAAe,CAAC,oBAAoB,KAAK,CAAC;gBAC/C,IAAI,CAAC,eAAe,CAAC,gBAAgB,KAAK,CAAC;gBAC3C,IAAI,CAAC,eAAe,CAAC,gBAAgB,KAAK,CAAC;gBAC3C,IAAI,CAAC,cAAc,CAAC;QAC5B,CAAC;;;OAAA;IAjfD;;OAEG;IACW,8BAAc,GAAG,IAAI,eAAe,EAAE,CAAC;IAErD;;OAEG;IACW,0BAAU,GAAG,cAAc,CAAC,oBAAoB,CAAC;IA2e/D,UAAU;IAEV;;OAEG;IACW,oCAAoB,GAAG,CAAC,CAAC;IAEvC;;OAEG;IACW,mCAAmB,GAAG,CAAC,CAAC;IAC1C,sBAAC;CAAA,AA/gBD,IA+gBC;SA/gBY,eAAe","sourcesContent":["import { Behavior } from \"../../Behaviors/behavior\";\r\nimport { Camera } from \"../../Cameras/camera\";\r\nimport { ArcRotateCamera } from \"../../Cameras/arcRotateCamera\";\r\nimport { ExponentialEase, EasingFunction } from \"../../Animations/easing\";\r\nimport { Nullable } from \"../../types\";\r\nimport { PointerInfoPre, PointerEventTypes } from \"../../Events/pointerEvents\";\r\nimport { PrecisionDate } from \"../../Misc/precisionDate\";\r\nimport { Observer } from \"../../Misc/observable\";\r\nimport { AbstractMesh } from \"../../Meshes/abstractMesh\";\r\nimport { Vector3, Vector2 } from \"../../Maths/math.vector\";\r\nimport { Animatable } from \"../../Animations/animatable\";\r\nimport { Animation } from \"../../Animations/animation\";\r\n\r\n/**\r\n * The framing behavior (FramingBehavior) is designed to automatically position an ArcRotateCamera when its target is set to a mesh. It is also useful if you want to prevent the camera to go under a virtual horizontal plane.\r\n * @see https://doc.babylonjs.com/how_to/camera_behaviors#framing-behavior\r\n */\r\nexport class FramingBehavior implements Behavior<ArcRotateCamera> {\r\n /**\r\n * Gets the name of the behavior.\r\n */\r\n public get name(): string {\r\n return \"Framing\";\r\n }\r\n\r\n private _mode = FramingBehavior.FitFrustumSidesMode;\r\n private _radiusScale = 1.0;\r\n private _positionScale = 0.5;\r\n private _defaultElevation = 0.3;\r\n private _elevationReturnTime = 1500;\r\n private _elevationReturnWaitTime = 1000;\r\n private _zoomStopsAnimation = false;\r\n private _framingTime = 1500;\r\n\r\n /**\r\n * The easing function used by animations\r\n */\r\n public static EasingFunction = new ExponentialEase();\r\n\r\n /**\r\n * The easing mode used by animations\r\n */\r\n public static EasingMode = EasingFunction.EASINGMODE_EASEINOUT;\r\n\r\n /**\r\n * Sets the current mode used by the behavior\r\n */\r\n public set mode(mode: number) {\r\n this._mode = mode;\r\n }\r\n\r\n /**\r\n * Gets current mode used by the behavior.\r\n */\r\n public get mode(): number {\r\n return this._mode;\r\n }\r\n\r\n /**\r\n * Sets the scale applied to the radius (1 by default)\r\n */\r\n public set radiusScale(radius: number) {\r\n this._radiusScale = radius;\r\n }\r\n\r\n /**\r\n * Gets the scale applied to the radius\r\n */\r\n public get radiusScale(): number {\r\n return this._radiusScale;\r\n }\r\n\r\n /**\r\n * Sets the scale to apply on Y axis to position camera focus. 0.5 by default which means the center of the bounding box.\r\n */\r\n public set positionScale(scale: number) {\r\n this._positionScale = scale;\r\n }\r\n\r\n /**\r\n * Gets the scale to apply on Y axis to position camera focus. 0.5 by default which means the center of the bounding box.\r\n */\r\n public get positionScale(): number {\r\n return this._positionScale;\r\n }\r\n\r\n /**\r\n * Sets the angle above/below the horizontal plane to return to when the return to default elevation idle\r\n * behaviour is triggered, in radians.\r\n */\r\n public set defaultElevation(elevation: number) {\r\n this._defaultElevation = elevation;\r\n }\r\n\r\n /**\r\n * Gets the angle above/below the horizontal plane to return to when the return to default elevation idle\r\n * behaviour is triggered, in radians.\r\n */\r\n public get defaultElevation() {\r\n return this._defaultElevation;\r\n }\r\n\r\n /**\r\n * Sets the time (in milliseconds) taken to return to the default beta position.\r\n * Negative value indicates camera should not return to default.\r\n */\r\n public set elevationReturnTime(speed: number) {\r\n this._elevationReturnTime = speed;\r\n }\r\n\r\n /**\r\n * Gets the time (in milliseconds) taken to return to the default beta position.\r\n * Negative value indicates camera should not return to default.\r\n */\r\n public get elevationReturnTime(): number {\r\n return this._elevationReturnTime;\r\n }\r\n\r\n /**\r\n * Sets the delay (in milliseconds) taken before the camera returns to the default beta position.\r\n */\r\n public set elevationReturnWaitTime(time: number) {\r\n this._elevationReturnWaitTime = time;\r\n }\r\n\r\n /**\r\n * Gets the delay (in milliseconds) taken before the camera returns to the default beta position.\r\n */\r\n public get elevationReturnWaitTime(): number {\r\n return this._elevationReturnWaitTime;\r\n }\r\n\r\n /**\r\n * Sets the flag that indicates if user zooming should stop animation.\r\n */\r\n public set zoomStopsAnimation(flag: boolean) {\r\n this._zoomStopsAnimation = flag;\r\n }\r\n\r\n /**\r\n * Gets the flag that indicates if user zooming should stop animation.\r\n */\r\n public get zoomStopsAnimation(): boolean {\r\n return this._zoomStopsAnimation;\r\n }\r\n\r\n /**\r\n * Sets the transition time when framing the mesh, in milliseconds\r\n */\r\n public set framingTime(time: number) {\r\n this._framingTime = time;\r\n }\r\n\r\n /**\r\n * Gets the transition time when framing the mesh, in milliseconds\r\n */\r\n public get framingTime() {\r\n return this._framingTime;\r\n }\r\n\r\n /**\r\n * Define if the behavior should automatically change the configured\r\n * camera limits and sensibilities.\r\n */\r\n public autoCorrectCameraLimitsAndSensibility = true;\r\n\r\n // Default behavior functions\r\n private _onPrePointerObservableObserver: Nullable<Observer<PointerInfoPre>>;\r\n private _onAfterCheckInputsObserver: Nullable<Observer<Camera>>;\r\n private _onMeshTargetChangedObserver: Nullable<Observer<Nullable<AbstractMesh>>>;\r\n private _attachedCamera: Nullable<ArcRotateCamera>;\r\n private _isPointerDown = false;\r\n private _lastInteractionTime = -Infinity;\r\n\r\n /**\r\n * Initializes the behavior.\r\n */\r\n public init(): void {\r\n // Do nothing\r\n }\r\n\r\n /**\r\n * Attaches the behavior to its arc rotate camera.\r\n * @param camera Defines the camera to attach the behavior to\r\n */\r\n public attach(camera: ArcRotateCamera): void {\r\n this._attachedCamera = camera;\r\n let scene = this._attachedCamera.getScene();\r\n\r\n FramingBehavior.EasingFunction.setEasingMode(FramingBehavior.EasingMode);\r\n\r\n this._onPrePointerObservableObserver = scene.onPrePointerObservable.add((pointerInfoPre) => {\r\n if (pointerInfoPre.type === PointerEventTypes.POINTERDOWN) {\r\n this._isPointerDown = true;\r\n return;\r\n }\r\n\r\n if (pointerInfoPre.type === PointerEventTypes.POINTERUP) {\r\n this._isPointerDown = false;\r\n }\r\n });\r\n\r\n this._onMeshTargetChangedObserver = camera.onMeshTargetChangedObservable.add((mesh) => {\r\n if (mesh) {\r\n this.zoomOnMesh(mesh);\r\n }\r\n });\r\n\r\n this._onAfterCheckInputsObserver = camera.onAfterCheckInputsObservable.add(() => {\r\n // Stop the animation if there is user interaction and the animation should stop for this interaction\r\n this._applyUserInteraction();\r\n\r\n // Maintain the camera above the ground. If the user pulls the camera beneath the ground plane, lift it\r\n // back to the default position after a given timeout\r\n this._maintainCameraAboveGround();\r\n });\r\n }\r\n\r\n /**\r\n * Detaches the behavior from its current arc rotate camera.\r\n */\r\n public detach(): void {\r\n if (!this._attachedCamera) {\r\n return;\r\n }\r\n\r\n let scene = this._attachedCamera.getScene();\r\n\r\n if (this._onPrePointerObservableObserver) {\r\n scene.onPrePointerObservable.remove(this._onPrePointerObservableObserver);\r\n }\r\n\r\n if (this._onAfterCheckInputsObserver) {\r\n this._attachedCamera.onAfterCheckInputsObservable.remove(this._onAfterCheckInputsObserver);\r\n }\r\n\r\n if (this._onMeshTargetChangedObserver) {\r\n this._attachedCamera.onMeshTargetChangedObservable.remove(this._onMeshTargetChangedObserver);\r\n }\r\n\r\n this._attachedCamera = null;\r\n }\r\n\r\n // Framing control\r\n private _animatables = new Array<Animatable>();\r\n private _betaIsAnimating = false;\r\n private _betaTransition: Animation;\r\n private _radiusTransition: Animation;\r\n private _vectorTransition: Animation;\r\n\r\n /**\r\n * Targets the given mesh and updates zoom level accordingly.\r\n * @param mesh The mesh to target.\r\n * @param focusOnOriginXZ Determines if the camera should focus on 0 in the X and Z axis instead of the mesh\r\n * @param onAnimationEnd Callback triggered at the end of the framing animation\r\n */\r\n public zoomOnMesh(mesh: AbstractMesh, focusOnOriginXZ: boolean = false, onAnimationEnd: Nullable<() => void> = null): void {\r\n mesh.computeWorldMatrix(true);\r\n\r\n let boundingBox = mesh.getBoundingInfo().boundingBox;\r\n this.zoomOnBoundingInfo(boundingBox.minimumWorld, boundingBox.maximumWorld, focusOnOriginXZ, onAnimationEnd);\r\n }\r\n\r\n /**\r\n * Targets the given mesh with its children and updates zoom level accordingly.\r\n * @param mesh The mesh to target.\r\n * @param focusOnOriginXZ Determines if the camera should focus on 0 in the X and Z axis instead of the mesh\r\n * @param onAnimationEnd Callback triggered at the end of the framing animation\r\n */\r\n public zoomOnMeshHierarchy(mesh: AbstractMesh, focusOnOriginXZ: boolean = false, onAnimationEnd: Nullable<() => void> = null): void {\r\n mesh.computeWorldMatrix(true);\r\n\r\n let boundingBox = mesh.getHierarchyBoundingVectors(true);\r\n this.zoomOnBoundingInfo(boundingBox.min, boundingBox.max, focusOnOriginXZ, onAnimationEnd);\r\n }\r\n\r\n /**\r\n * Targets the given meshes with their children and updates zoom level accordingly.\r\n * @param meshes The mesh to target.\r\n * @param focusOnOriginXZ Determines if the camera should focus on 0 in the X and Z axis instead of the mesh\r\n * @param onAnimationEnd Callback triggered at the end of the framing animation\r\n */\r\n public zoomOnMeshesHierarchy(meshes: AbstractMesh[], focusOnOriginXZ: boolean = false, onAnimationEnd: Nullable<() => void> = null): void {\r\n let min = new Vector3(Number.MAX_VALUE, Number.MAX_VALUE, Number.MAX_VALUE);\r\n let max = new Vector3(-Number.MAX_VALUE, -Number.MAX_VALUE, -Number.MAX_VALUE);\r\n\r\n for (let i = 0; i < meshes.length; i++) {\r\n let boundingInfo = meshes[i].getHierarchyBoundingVectors(true);\r\n Vector3.CheckExtends(boundingInfo.min, min, max);\r\n Vector3.CheckExtends(boundingInfo.max, min, max);\r\n }\r\n\r\n this.zoomOnBoundingInfo(min, max, focusOnOriginXZ, onAnimationEnd);\r\n }\r\n\r\n /**\r\n * Targets the bounding box info defined by its extends and updates zoom level accordingly.\r\n * @param minimumWorld Determines the smaller position of the bounding box extend\r\n * @param maximumWorld Determines the bigger position of the bounding box extend\r\n * @param focusOnOriginXZ Determines if the camera should focus on 0 in the X and Z axis instead of the mesh\r\n * @param onAnimationEnd Callback triggered at the end of the framing animation\r\n */\r\n public zoomOnBoundingInfo(minimumWorld: Vector3, maximumWorld: Vector3, focusOnOriginXZ: boolean = false, onAnimationEnd: Nullable<() => void> = null): void {\r\n let zoomTarget: Vector3;\r\n\r\n if (!this._attachedCamera) {\r\n return;\r\n }\r\n\r\n // Find target by interpolating from bottom of bounding box in world-space to top via framingPositionY\r\n let bottom = minimumWorld.y;\r\n let top = maximumWorld.y;\r\n let zoomTargetY = bottom + (top - bottom) * this._positionScale;\r\n let radiusWorld = maximumWorld.subtract(minimumWorld).scale(0.5);\r\n\r\n if (focusOnOriginXZ) {\r\n zoomTarget = new Vector3(0, zoomTargetY, 0);\r\n } else {\r\n let centerWorld = minimumWorld.add(radiusWorld);\r\n zoomTarget = new Vector3(centerWorld.x, zoomTargetY, centerWorld.z);\r\n }\r\n\r\n if (!this._vectorTransition) {\r\n this._vectorTransition = Animation.CreateAnimation(\"target\", Animation.ANIMATIONTYPE_VECTOR3, 60, FramingBehavior.EasingFunction);\r\n }\r\n\r\n this._betaIsAnimating = true;\r\n let animatable = Animation.TransitionTo(\"target\", zoomTarget, this._attachedCamera, this._attachedCamera.getScene(), 60, this._vectorTransition, this._framingTime);\r\n if (animatable) {\r\n this._animatables.push(animatable);\r\n }\r\n\r\n // sets the radius and lower radius bounds\r\n // Small delta ensures camera is not always at lower zoom limit.\r\n let radius = 0;\r\n if (this._mode === FramingBehavior.FitFrustumSidesMode) {\r\n let position = this._calculateLowerRadiusFromModelBoundingSphere(minimumWorld, maximumWorld);\r\n if (this.autoCorrectCameraLimitsAndSensibility) {\r\n this._attachedCamera.lowerRadiusLimit = radiusWorld.length() + this._attachedCamera.minZ;\r\n }\r\n radius = position;\r\n } else if (this._mode === FramingBehavior.IgnoreBoundsSizeMode) {\r\n radius = this._calculateLowerRadiusFromModelBoundingSphere(minimumWorld, maximumWorld);\r\n if (this.autoCorrectCameraLimitsAndSensibility && this._attachedCamera.lowerRadiusLimit === null) {\r\n this._attachedCamera.lowerRadiusLimit = this._attachedCamera.minZ;\r\n }\r\n }\r\n\r\n // Set sensibilities\r\n if (this.autoCorrectCameraLimitsAndSensibility) {\r\n const extend = maximumWorld.subtract(minimumWorld).length();\r\n this._attachedCamera.panningSensibility = 5000 / extend;\r\n this._attachedCamera.wheelPrecision = 100 / radius;\r\n }\r\n\r\n // transition to new radius\r\n if (!this._radiusTransition) {\r\n this._radiusTransition = Animation.CreateAnimation(\"radius\", Animation.ANIMATIONTYPE_FLOAT, 60, FramingBehavior.EasingFunction);\r\n }\r\n\r\n animatable = Animation.TransitionTo(\"radius\", radius, this._attachedCamera, this._attachedCamera.getScene(),\r\n 60, this._radiusTransition, this._framingTime, () => {\r\n this.stopAllAnimations();\r\n if (onAnimationEnd) {\r\n onAnimationEnd();\r\n }\r\n\r\n if (this._attachedCamera && this._attachedCamera.useInputToRestoreState) {\r\n this._attachedCamera.storeState();\r\n }\r\n });\r\n\r\n if (animatable) {\r\n this._animatables.push(animatable);\r\n }\r\n }\r\n\r\n /**\r\n * Calculates the lowest radius for the camera based on the bounding box of the mesh.\r\n * @param mesh The mesh on which to base the calculation. mesh boundingInfo used to estimate necessary\r\n *\t\t\t frustum width.\r\n * @return The minimum distance from the primary mesh's center point at which the camera must be kept in order\r\n *\t\t to fully enclose the mesh in the viewing frustum.\r\n */\r\n protected _calculateLowerRadiusFromModelBoundingSphere(minimumWorld: Vector3, maximumWorld: Vector3): number {\r\n let size = maximumWorld.subtract(minimumWorld);\r\n let boxVectorGlobalDiagonal = size.length();\r\n let frustumSlope: Vector2 = this._getFrustumSlope();\r\n\r\n // Formula for setting distance\r\n // (Good explanation: http://stackoverflow.com/questions/2866350/move-camera-to-fit-3d-scene)\r\n let radiusWithoutFraming = boxVectorGlobalDiagonal * 0.5;\r\n\r\n // Horizon distance\r\n let radius = radiusWithoutFraming * this._radiusScale;\r\n let distanceForHorizontalFrustum = radius * Math.sqrt(1.0 + 1.0 / (frustumSlope.x * frustumSlope.x));\r\n let distanceForVerticalFrustum = radius * Math.sqrt(1.0 + 1.0 / (frustumSlope.y * frustumSlope.y));\r\n let distance = Math.max(distanceForHorizontalFrustum, distanceForVerticalFrustum);\r\n let camera = this._attachedCamera;\r\n\r\n if (!camera) {\r\n return 0;\r\n }\r\n\r\n if (camera.lowerRadiusLimit && this._mode === FramingBehavior.IgnoreBoundsSizeMode) {\r\n // Don't exceed the requested limit\r\n distance = distance < camera.lowerRadiusLimit ? camera.lowerRadiusLimit : distance;\r\n }\r\n\r\n // Don't exceed the upper radius limit\r\n if (camera.upperRadiusLimit) {\r\n distance = distance > camera.upperRadiusLimit ? camera.upperRadiusLimit : distance;\r\n }\r\n\r\n return distance;\r\n }\r\n\r\n /**\r\n * Keeps the camera above the ground plane. If the user pulls the camera below the ground plane, the camera\r\n * is automatically returned to its default position (expected to be above ground plane).\r\n */\r\n private _maintainCameraAboveGround(): void {\r\n if (this._elevationReturnTime < 0) {\r\n return;\r\n }\r\n\r\n let timeSinceInteraction = PrecisionDate.Now - this._lastInteractionTime;\r\n let defaultBeta = Math.PI * 0.5 - this._defaultElevation;\r\n let limitBeta = Math.PI * 0.5;\r\n\r\n // Bring the camera back up if below the ground plane\r\n if (this._attachedCamera && !this._betaIsAnimating && this._attachedCamera.beta > limitBeta && timeSinceInteraction >= this._elevationReturnWaitTime) {\r\n this._betaIsAnimating = true;\r\n\r\n //Transition to new position\r\n this.stopAllAnimations();\r\n\r\n if (!this._betaTransition) {\r\n this._betaTransition = Animation.CreateAnimation(\"beta\", Animation.ANIMATIONTYPE_FLOAT, 60, FramingBehavior.EasingFunction);\r\n }\r\n\r\n let animatabe = Animation.TransitionTo(\"beta\", defaultBeta, this._attachedCamera, this._attachedCamera.getScene(), 60,\r\n this._betaTransition, this._elevationReturnTime,\r\n () => {\r\n this._clearAnimationLocks();\r\n this.stopAllAnimations();\r\n });\r\n\r\n if (animatabe) {\r\n this._animatables.push(animatabe);\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * Returns the frustum slope based on the canvas ratio and camera FOV\r\n * @returns The frustum slope represented as a Vector2 with X and Y slopes\r\n */\r\n private _getFrustumSlope(): Vector2 {\r\n // Calculate the viewport ratio\r\n // Aspect Ratio is Height/Width.\r\n let camera = this._attachedCamera;\r\n\r\n if (!camera) {\r\n return Vector2.Zero();\r\n }\r\n\r\n let engine = camera.getScene().getEngine();\r\n var aspectRatio = engine.getAspectRatio(camera);\r\n\r\n // Camera FOV is the vertical field of view (top-bottom) in radians.\r\n // Slope of the frustum top/bottom planes in view space, relative to the forward vector.\r\n var frustumSlopeY = Math.tan(camera.fov / 2);\r\n\r\n // Slope of the frustum left/right planes in view space, relative to the forward vector.\r\n // Provides the amount that one side (e.g. left) of the frustum gets wider for every unit\r\n // along the forward vector.\r\n var frustumSlopeX = frustumSlopeY * aspectRatio;\r\n\r\n return new Vector2(frustumSlopeX, frustumSlopeY);\r\n }\r\n\r\n /**\r\n * Removes all animation locks. Allows new animations to be added to any of the arcCamera properties.\r\n */\r\n private _clearAnimationLocks(): void {\r\n this._betaIsAnimating = false;\r\n }\r\n\r\n /**\r\n * Applies any current user interaction to the camera. Takes into account maximum alpha rotation.\r\n */\r\n private _applyUserInteraction(): void {\r\n if (this.isUserIsMoving) {\r\n this._lastInteractionTime = PrecisionDate.Now;\r\n this.stopAllAnimations();\r\n this._clearAnimationLocks();\r\n }\r\n }\r\n\r\n /**\r\n * Stops and removes all animations that have been applied to the camera\r\n */\r\n public stopAllAnimations(): void {\r\n if (this._attachedCamera) {\r\n this._attachedCamera.animations = [];\r\n }\r\n\r\n while (this._animatables.length) {\r\n if (this._animatables[0]) {\r\n this._animatables[0].onAnimationEnd = null;\r\n this._animatables[0].stop();\r\n }\r\n this._animatables.shift();\r\n }\r\n }\r\n\r\n /**\r\n * Gets a value indicating if the user is moving the camera\r\n */\r\n public get isUserIsMoving(): boolean {\r\n if (!this._attachedCamera) {\r\n return false;\r\n }\r\n\r\n return this._attachedCamera.inertialAlphaOffset !== 0 ||\r\n this._attachedCamera.inertialBetaOffset !== 0 ||\r\n this._attachedCamera.inertialRadiusOffset !== 0 ||\r\n this._attachedCamera.inertialPanningX !== 0 ||\r\n this._attachedCamera.inertialPanningY !== 0 ||\r\n this._isPointerDown;\r\n }\r\n\r\n // Statics\r\n\r\n /**\r\n * The camera can move all the way towards the mesh.\r\n */\r\n public static IgnoreBoundsSizeMode = 0;\r\n\r\n /**\r\n * The camera is not allowed to zoom closer to the mesh than the point at which the adjusted bounding sphere touches the frustum sides\r\n */\r\n public static FitFrustumSidesMode = 1;\r\n}\r\n"]}
|
|
1
|
+
{"version":3,"file":"framingBehavior.js","sourceRoot":"","sources":["../../../../sourceES6/core/Behaviors/Cameras/framingBehavior.ts"],"names":[],"mappings":"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","sourcesContent":["import { Behavior } from \"../../Behaviors/behavior\";\r\nimport { Camera } from \"../../Cameras/camera\";\r\nimport { ArcRotateCamera } from \"../../Cameras/arcRotateCamera\";\r\nimport { ExponentialEase, EasingFunction } from \"../../Animations/easing\";\r\nimport { Observable } from \"../../Misc/observable\";\r\nimport { Nullable } from \"../../types\";\r\nimport { PointerInfoPre, PointerEventTypes } from \"../../Events/pointerEvents\";\r\nimport { PrecisionDate } from \"../../Misc/precisionDate\";\r\nimport { Observer } from \"../../Misc/observable\";\r\nimport { AbstractMesh } from \"../../Meshes/abstractMesh\";\r\nimport { Vector3, Vector2 } from \"../../Maths/math.vector\";\r\nimport { Animatable } from \"../../Animations/animatable\";\r\nimport { Animation } from \"../../Animations/animation\";\r\n\r\n/**\r\n * The framing behavior (FramingBehavior) is designed to automatically position an ArcRotateCamera when its target is set to a mesh. It is also useful if you want to prevent the camera to go under a virtual horizontal plane.\r\n * @see https://doc.babylonjs.com/how_to/camera_behaviors#framing-behavior\r\n */\r\nexport class FramingBehavior implements Behavior<ArcRotateCamera> {\r\n /**\r\n * Gets the name of the behavior.\r\n */\r\n public get name(): string {\r\n return \"Framing\";\r\n }\r\n\r\n /**\r\n * An event triggered when the animation to zoom on target mesh has ended\r\n */\r\n public onTargetFramingAnimationEndObservable = new Observable<void>();\r\n\r\n private _mode = FramingBehavior.FitFrustumSidesMode;\r\n private _radiusScale = 1.0;\r\n private _positionScale = 0.5;\r\n private _defaultElevation = 0.3;\r\n private _elevationReturnTime = 1500;\r\n private _elevationReturnWaitTime = 1000;\r\n private _zoomStopsAnimation = false;\r\n private _framingTime = 1500;\r\n\r\n /**\r\n * The easing function used by animations\r\n */\r\n public static EasingFunction = new ExponentialEase();\r\n\r\n /**\r\n * The easing mode used by animations\r\n */\r\n public static EasingMode = EasingFunction.EASINGMODE_EASEINOUT;\r\n\r\n /**\r\n * Sets the current mode used by the behavior\r\n */\r\n public set mode(mode: number) {\r\n this._mode = mode;\r\n }\r\n\r\n /**\r\n * Gets current mode used by the behavior.\r\n */\r\n public get mode(): number {\r\n return this._mode;\r\n }\r\n\r\n /**\r\n * Sets the scale applied to the radius (1 by default)\r\n */\r\n public set radiusScale(radius: number) {\r\n this._radiusScale = radius;\r\n }\r\n\r\n /**\r\n * Gets the scale applied to the radius\r\n */\r\n public get radiusScale(): number {\r\n return this._radiusScale;\r\n }\r\n\r\n /**\r\n * Sets the scale to apply on Y axis to position camera focus. 0.5 by default which means the center of the bounding box.\r\n */\r\n public set positionScale(scale: number) {\r\n this._positionScale = scale;\r\n }\r\n\r\n /**\r\n * Gets the scale to apply on Y axis to position camera focus. 0.5 by default which means the center of the bounding box.\r\n */\r\n public get positionScale(): number {\r\n return this._positionScale;\r\n }\r\n\r\n /**\r\n * Sets the angle above/below the horizontal plane to return to when the return to default elevation idle\r\n * behaviour is triggered, in radians.\r\n */\r\n public set defaultElevation(elevation: number) {\r\n this._defaultElevation = elevation;\r\n }\r\n\r\n /**\r\n * Gets the angle above/below the horizontal plane to return to when the return to default elevation idle\r\n * behaviour is triggered, in radians.\r\n */\r\n public get defaultElevation() {\r\n return this._defaultElevation;\r\n }\r\n\r\n /**\r\n * Sets the time (in milliseconds) taken to return to the default beta position.\r\n * Negative value indicates camera should not return to default.\r\n */\r\n public set elevationReturnTime(speed: number) {\r\n this._elevationReturnTime = speed;\r\n }\r\n\r\n /**\r\n * Gets the time (in milliseconds) taken to return to the default beta position.\r\n * Negative value indicates camera should not return to default.\r\n */\r\n public get elevationReturnTime(): number {\r\n return this._elevationReturnTime;\r\n }\r\n\r\n /**\r\n * Sets the delay (in milliseconds) taken before the camera returns to the default beta position.\r\n */\r\n public set elevationReturnWaitTime(time: number) {\r\n this._elevationReturnWaitTime = time;\r\n }\r\n\r\n /**\r\n * Gets the delay (in milliseconds) taken before the camera returns to the default beta position.\r\n */\r\n public get elevationReturnWaitTime(): number {\r\n return this._elevationReturnWaitTime;\r\n }\r\n\r\n /**\r\n * Sets the flag that indicates if user zooming should stop animation.\r\n */\r\n public set zoomStopsAnimation(flag: boolean) {\r\n this._zoomStopsAnimation = flag;\r\n }\r\n\r\n /**\r\n * Gets the flag that indicates if user zooming should stop animation.\r\n */\r\n public get zoomStopsAnimation(): boolean {\r\n return this._zoomStopsAnimation;\r\n }\r\n\r\n /**\r\n * Sets the transition time when framing the mesh, in milliseconds\r\n */\r\n public set framingTime(time: number) {\r\n this._framingTime = time;\r\n }\r\n\r\n /**\r\n * Gets the transition time when framing the mesh, in milliseconds\r\n */\r\n public get framingTime() {\r\n return this._framingTime;\r\n }\r\n\r\n /**\r\n * Define if the behavior should automatically change the configured\r\n * camera limits and sensibilities.\r\n */\r\n public autoCorrectCameraLimitsAndSensibility = true;\r\n\r\n // Default behavior functions\r\n private _onPrePointerObservableObserver: Nullable<Observer<PointerInfoPre>>;\r\n private _onAfterCheckInputsObserver: Nullable<Observer<Camera>>;\r\n private _onMeshTargetChangedObserver: Nullable<Observer<Nullable<AbstractMesh>>>;\r\n private _attachedCamera: Nullable<ArcRotateCamera>;\r\n private _isPointerDown = false;\r\n private _lastInteractionTime = -Infinity;\r\n\r\n /**\r\n * Initializes the behavior.\r\n */\r\n public init(): void {\r\n // Do nothing\r\n }\r\n\r\n /**\r\n * Attaches the behavior to its arc rotate camera.\r\n * @param camera Defines the camera to attach the behavior to\r\n */\r\n public attach(camera: ArcRotateCamera): void {\r\n this._attachedCamera = camera;\r\n let scene = this._attachedCamera.getScene();\r\n\r\n FramingBehavior.EasingFunction.setEasingMode(FramingBehavior.EasingMode);\r\n\r\n this._onPrePointerObservableObserver = scene.onPrePointerObservable.add((pointerInfoPre) => {\r\n if (pointerInfoPre.type === PointerEventTypes.POINTERDOWN) {\r\n this._isPointerDown = true;\r\n return;\r\n }\r\n\r\n if (pointerInfoPre.type === PointerEventTypes.POINTERUP) {\r\n this._isPointerDown = false;\r\n }\r\n });\r\n\r\n this._onMeshTargetChangedObserver = camera.onMeshTargetChangedObservable.add((mesh) => {\r\n if (mesh) {\r\n this.zoomOnMesh(mesh, undefined, () => {\r\n this.onTargetFramingAnimationEndObservable.notifyObservers();\r\n });\r\n }\r\n });\r\n\r\n this._onAfterCheckInputsObserver = camera.onAfterCheckInputsObservable.add(() => {\r\n // Stop the animation if there is user interaction and the animation should stop for this interaction\r\n this._applyUserInteraction();\r\n\r\n // Maintain the camera above the ground. If the user pulls the camera beneath the ground plane, lift it\r\n // back to the default position after a given timeout\r\n this._maintainCameraAboveGround();\r\n });\r\n }\r\n\r\n /**\r\n * Detaches the behavior from its current arc rotate camera.\r\n */\r\n public detach(): void {\r\n if (!this._attachedCamera) {\r\n return;\r\n }\r\n\r\n let scene = this._attachedCamera.getScene();\r\n\r\n if (this._onPrePointerObservableObserver) {\r\n scene.onPrePointerObservable.remove(this._onPrePointerObservableObserver);\r\n }\r\n\r\n if (this._onAfterCheckInputsObserver) {\r\n this._attachedCamera.onAfterCheckInputsObservable.remove(this._onAfterCheckInputsObserver);\r\n }\r\n\r\n if (this._onMeshTargetChangedObserver) {\r\n this._attachedCamera.onMeshTargetChangedObservable.remove(this._onMeshTargetChangedObserver);\r\n }\r\n\r\n this._attachedCamera = null;\r\n }\r\n\r\n // Framing control\r\n private _animatables = new Array<Animatable>();\r\n private _betaIsAnimating = false;\r\n private _betaTransition: Animation;\r\n private _radiusTransition: Animation;\r\n private _vectorTransition: Animation;\r\n\r\n /**\r\n * Targets the given mesh and updates zoom level accordingly.\r\n * @param mesh The mesh to target.\r\n * @param focusOnOriginXZ Determines if the camera should focus on 0 in the X and Z axis instead of the mesh\r\n * @param onAnimationEnd Callback triggered at the end of the framing animation\r\n */\r\n public zoomOnMesh(mesh: AbstractMesh, focusOnOriginXZ: boolean = false, onAnimationEnd: Nullable<() => void> = null): void {\r\n mesh.computeWorldMatrix(true);\r\n\r\n let boundingBox = mesh.getBoundingInfo().boundingBox;\r\n this.zoomOnBoundingInfo(boundingBox.minimumWorld, boundingBox.maximumWorld, focusOnOriginXZ, onAnimationEnd);\r\n }\r\n\r\n /**\r\n * Targets the given mesh with its children and updates zoom level accordingly.\r\n * @param mesh The mesh to target.\r\n * @param focusOnOriginXZ Determines if the camera should focus on 0 in the X and Z axis instead of the mesh\r\n * @param onAnimationEnd Callback triggered at the end of the framing animation\r\n */\r\n public zoomOnMeshHierarchy(mesh: AbstractMesh, focusOnOriginXZ: boolean = false, onAnimationEnd: Nullable<() => void> = null): void {\r\n mesh.computeWorldMatrix(true);\r\n\r\n let boundingBox = mesh.getHierarchyBoundingVectors(true);\r\n this.zoomOnBoundingInfo(boundingBox.min, boundingBox.max, focusOnOriginXZ, onAnimationEnd);\r\n }\r\n\r\n /**\r\n * Targets the given meshes with their children and updates zoom level accordingly.\r\n * @param meshes The mesh to target.\r\n * @param focusOnOriginXZ Determines if the camera should focus on 0 in the X and Z axis instead of the mesh\r\n * @param onAnimationEnd Callback triggered at the end of the framing animation\r\n */\r\n public zoomOnMeshesHierarchy(meshes: AbstractMesh[], focusOnOriginXZ: boolean = false, onAnimationEnd: Nullable<() => void> = null): void {\r\n let min = new Vector3(Number.MAX_VALUE, Number.MAX_VALUE, Number.MAX_VALUE);\r\n let max = new Vector3(-Number.MAX_VALUE, -Number.MAX_VALUE, -Number.MAX_VALUE);\r\n\r\n for (let i = 0; i < meshes.length; i++) {\r\n let boundingInfo = meshes[i].getHierarchyBoundingVectors(true);\r\n Vector3.CheckExtends(boundingInfo.min, min, max);\r\n Vector3.CheckExtends(boundingInfo.max, min, max);\r\n }\r\n\r\n this.zoomOnBoundingInfo(min, max, focusOnOriginXZ, onAnimationEnd);\r\n }\r\n\r\n /**\r\n * Targets the bounding box info defined by its extends and updates zoom level accordingly.\r\n * @param minimumWorld Determines the smaller position of the bounding box extend\r\n * @param maximumWorld Determines the bigger position of the bounding box extend\r\n * @param focusOnOriginXZ Determines if the camera should focus on 0 in the X and Z axis instead of the mesh\r\n * @param onAnimationEnd Callback triggered at the end of the framing animation\r\n */\r\n public zoomOnBoundingInfo(minimumWorld: Vector3, maximumWorld: Vector3, focusOnOriginXZ: boolean = false, onAnimationEnd: Nullable<() => void> = null): void {\r\n let zoomTarget: Vector3;\r\n\r\n if (!this._attachedCamera) {\r\n return;\r\n }\r\n\r\n // Find target by interpolating from bottom of bounding box in world-space to top via framingPositionY\r\n let bottom = minimumWorld.y;\r\n let top = maximumWorld.y;\r\n let zoomTargetY = bottom + (top - bottom) * this._positionScale;\r\n let radiusWorld = maximumWorld.subtract(minimumWorld).scale(0.5);\r\n\r\n if (focusOnOriginXZ) {\r\n zoomTarget = new Vector3(0, zoomTargetY, 0);\r\n } else {\r\n let centerWorld = minimumWorld.add(radiusWorld);\r\n zoomTarget = new Vector3(centerWorld.x, zoomTargetY, centerWorld.z);\r\n }\r\n\r\n if (!this._vectorTransition) {\r\n this._vectorTransition = Animation.CreateAnimation(\"target\", Animation.ANIMATIONTYPE_VECTOR3, 60, FramingBehavior.EasingFunction);\r\n }\r\n\r\n this._betaIsAnimating = true;\r\n let animatable = Animation.TransitionTo(\"target\", zoomTarget, this._attachedCamera, this._attachedCamera.getScene(), 60, this._vectorTransition, this._framingTime);\r\n if (animatable) {\r\n this._animatables.push(animatable);\r\n }\r\n\r\n // sets the radius and lower radius bounds\r\n // Small delta ensures camera is not always at lower zoom limit.\r\n let radius = 0;\r\n if (this._mode === FramingBehavior.FitFrustumSidesMode) {\r\n let position = this._calculateLowerRadiusFromModelBoundingSphere(minimumWorld, maximumWorld);\r\n if (this.autoCorrectCameraLimitsAndSensibility) {\r\n this._attachedCamera.lowerRadiusLimit = radiusWorld.length() + this._attachedCamera.minZ;\r\n }\r\n radius = position;\r\n } else if (this._mode === FramingBehavior.IgnoreBoundsSizeMode) {\r\n radius = this._calculateLowerRadiusFromModelBoundingSphere(minimumWorld, maximumWorld);\r\n if (this.autoCorrectCameraLimitsAndSensibility && this._attachedCamera.lowerRadiusLimit === null) {\r\n this._attachedCamera.lowerRadiusLimit = this._attachedCamera.minZ;\r\n }\r\n }\r\n\r\n // Set sensibilities\r\n if (this.autoCorrectCameraLimitsAndSensibility) {\r\n const extend = maximumWorld.subtract(minimumWorld).length();\r\n this._attachedCamera.panningSensibility = 5000 / extend;\r\n this._attachedCamera.wheelPrecision = 100 / radius;\r\n }\r\n\r\n // transition to new radius\r\n if (!this._radiusTransition) {\r\n this._radiusTransition = Animation.CreateAnimation(\"radius\", Animation.ANIMATIONTYPE_FLOAT, 60, FramingBehavior.EasingFunction);\r\n }\r\n\r\n animatable = Animation.TransitionTo(\"radius\", radius, this._attachedCamera, this._attachedCamera.getScene(),\r\n 60, this._radiusTransition, this._framingTime, () => {\r\n this.stopAllAnimations();\r\n if (onAnimationEnd) {\r\n onAnimationEnd();\r\n }\r\n\r\n if (this._attachedCamera && this._attachedCamera.useInputToRestoreState) {\r\n this._attachedCamera.storeState();\r\n }\r\n });\r\n\r\n if (animatable) {\r\n this._animatables.push(animatable);\r\n }\r\n }\r\n\r\n /**\r\n * Calculates the lowest radius for the camera based on the bounding box of the mesh.\r\n * @param mesh The mesh on which to base the calculation. mesh boundingInfo used to estimate necessary\r\n *\t\t\t frustum width.\r\n * @return The minimum distance from the primary mesh's center point at which the camera must be kept in order\r\n *\t\t to fully enclose the mesh in the viewing frustum.\r\n */\r\n protected _calculateLowerRadiusFromModelBoundingSphere(minimumWorld: Vector3, maximumWorld: Vector3): number {\r\n let size = maximumWorld.subtract(minimumWorld);\r\n let boxVectorGlobalDiagonal = size.length();\r\n let frustumSlope: Vector2 = this._getFrustumSlope();\r\n\r\n // Formula for setting distance\r\n // (Good explanation: http://stackoverflow.com/questions/2866350/move-camera-to-fit-3d-scene)\r\n let radiusWithoutFraming = boxVectorGlobalDiagonal * 0.5;\r\n\r\n // Horizon distance\r\n let radius = radiusWithoutFraming * this._radiusScale;\r\n let distanceForHorizontalFrustum = radius * Math.sqrt(1.0 + 1.0 / (frustumSlope.x * frustumSlope.x));\r\n let distanceForVerticalFrustum = radius * Math.sqrt(1.0 + 1.0 / (frustumSlope.y * frustumSlope.y));\r\n let distance = Math.max(distanceForHorizontalFrustum, distanceForVerticalFrustum);\r\n let camera = this._attachedCamera;\r\n\r\n if (!camera) {\r\n return 0;\r\n }\r\n\r\n if (camera.lowerRadiusLimit && this._mode === FramingBehavior.IgnoreBoundsSizeMode) {\r\n // Don't exceed the requested limit\r\n distance = distance < camera.lowerRadiusLimit ? camera.lowerRadiusLimit : distance;\r\n }\r\n\r\n // Don't exceed the upper radius limit\r\n if (camera.upperRadiusLimit) {\r\n distance = distance > camera.upperRadiusLimit ? camera.upperRadiusLimit : distance;\r\n }\r\n\r\n return distance;\r\n }\r\n\r\n /**\r\n * Keeps the camera above the ground plane. If the user pulls the camera below the ground plane, the camera\r\n * is automatically returned to its default position (expected to be above ground plane).\r\n */\r\n private _maintainCameraAboveGround(): void {\r\n if (this._elevationReturnTime < 0) {\r\n return;\r\n }\r\n\r\n let timeSinceInteraction = PrecisionDate.Now - this._lastInteractionTime;\r\n let defaultBeta = Math.PI * 0.5 - this._defaultElevation;\r\n let limitBeta = Math.PI * 0.5;\r\n\r\n // Bring the camera back up if below the ground plane\r\n if (this._attachedCamera && !this._betaIsAnimating && this._attachedCamera.beta > limitBeta && timeSinceInteraction >= this._elevationReturnWaitTime) {\r\n this._betaIsAnimating = true;\r\n\r\n //Transition to new position\r\n this.stopAllAnimations();\r\n\r\n if (!this._betaTransition) {\r\n this._betaTransition = Animation.CreateAnimation(\"beta\", Animation.ANIMATIONTYPE_FLOAT, 60, FramingBehavior.EasingFunction);\r\n }\r\n\r\n let animatabe = Animation.TransitionTo(\"beta\", defaultBeta, this._attachedCamera, this._attachedCamera.getScene(), 60,\r\n this._betaTransition, this._elevationReturnTime,\r\n () => {\r\n this._clearAnimationLocks();\r\n this.stopAllAnimations();\r\n });\r\n\r\n if (animatabe) {\r\n this._animatables.push(animatabe);\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * Returns the frustum slope based on the canvas ratio and camera FOV\r\n * @returns The frustum slope represented as a Vector2 with X and Y slopes\r\n */\r\n private _getFrustumSlope(): Vector2 {\r\n // Calculate the viewport ratio\r\n // Aspect Ratio is Height/Width.\r\n let camera = this._attachedCamera;\r\n\r\n if (!camera) {\r\n return Vector2.Zero();\r\n }\r\n\r\n let engine = camera.getScene().getEngine();\r\n var aspectRatio = engine.getAspectRatio(camera);\r\n\r\n // Camera FOV is the vertical field of view (top-bottom) in radians.\r\n // Slope of the frustum top/bottom planes in view space, relative to the forward vector.\r\n var frustumSlopeY = Math.tan(camera.fov / 2);\r\n\r\n // Slope of the frustum left/right planes in view space, relative to the forward vector.\r\n // Provides the amount that one side (e.g. left) of the frustum gets wider for every unit\r\n // along the forward vector.\r\n var frustumSlopeX = frustumSlopeY * aspectRatio;\r\n\r\n return new Vector2(frustumSlopeX, frustumSlopeY);\r\n }\r\n\r\n /**\r\n * Removes all animation locks. Allows new animations to be added to any of the arcCamera properties.\r\n */\r\n private _clearAnimationLocks(): void {\r\n this._betaIsAnimating = false;\r\n }\r\n\r\n /**\r\n * Applies any current user interaction to the camera. Takes into account maximum alpha rotation.\r\n */\r\n private _applyUserInteraction(): void {\r\n if (this.isUserIsMoving) {\r\n this._lastInteractionTime = PrecisionDate.Now;\r\n this.stopAllAnimations();\r\n this._clearAnimationLocks();\r\n }\r\n }\r\n\r\n /**\r\n * Stops and removes all animations that have been applied to the camera\r\n */\r\n public stopAllAnimations(): void {\r\n if (this._attachedCamera) {\r\n this._attachedCamera.animations = [];\r\n }\r\n\r\n while (this._animatables.length) {\r\n if (this._animatables[0]) {\r\n this._animatables[0].onAnimationEnd = null;\r\n this._animatables[0].stop();\r\n }\r\n this._animatables.shift();\r\n }\r\n }\r\n\r\n /**\r\n * Gets a value indicating if the user is moving the camera\r\n */\r\n public get isUserIsMoving(): boolean {\r\n if (!this._attachedCamera) {\r\n return false;\r\n }\r\n\r\n return this._attachedCamera.inertialAlphaOffset !== 0 ||\r\n this._attachedCamera.inertialBetaOffset !== 0 ||\r\n this._attachedCamera.inertialRadiusOffset !== 0 ||\r\n this._attachedCamera.inertialPanningX !== 0 ||\r\n this._attachedCamera.inertialPanningY !== 0 ||\r\n this._isPointerDown;\r\n }\r\n\r\n // Statics\r\n\r\n /**\r\n * The camera can move all the way towards the mesh.\r\n */\r\n public static IgnoreBoundsSizeMode = 0;\r\n\r\n /**\r\n * The camera is not allowed to zoom closer to the mesh than the point at which the adjusted bounding sphere touches the frustum sides\r\n */\r\n public static FitFrustumSidesMode = 1;\r\n}\r\n"]}
|
package/Bones/bone.d.ts
CHANGED
|
@@ -192,8 +192,10 @@ export declare class Bone extends Node {
|
|
|
192
192
|
_updateDifferenceMatrix(rootMatrix?: Matrix, updateChildren?: boolean): void;
|
|
193
193
|
/**
|
|
194
194
|
* Flag the bone as dirty (Forcing it to update everything)
|
|
195
|
+
* @param property helps children apply precise "dirtyfication"
|
|
196
|
+
* @returns this bone
|
|
195
197
|
*/
|
|
196
|
-
markAsDirty():
|
|
198
|
+
markAsDirty(property?: string): Bone;
|
|
197
199
|
/** @hidden */
|
|
198
200
|
_markAsDirtyAndCompose(): void;
|
|
199
201
|
private _markAsDirtyAndDecompose;
|
package/Bones/bone.js
CHANGED
|
@@ -376,11 +376,14 @@ var Bone = /** @class */ (function (_super) {
|
|
|
376
376
|
};
|
|
377
377
|
/**
|
|
378
378
|
* Flag the bone as dirty (Forcing it to update everything)
|
|
379
|
+
* @param property helps children apply precise "dirtyfication"
|
|
380
|
+
* @returns this bone
|
|
379
381
|
*/
|
|
380
|
-
Bone.prototype.markAsDirty = function () {
|
|
382
|
+
Bone.prototype.markAsDirty = function (property) {
|
|
381
383
|
this._currentRenderId++;
|
|
382
384
|
this._childUpdateId++;
|
|
383
385
|
this._skeleton._markAsDirty();
|
|
386
|
+
return this;
|
|
384
387
|
};
|
|
385
388
|
/** @hidden */
|
|
386
389
|
Bone.prototype._markAsDirtyAndCompose = function () {
|
package/Bones/bone.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"bone.js","sourceRoot":"","sources":["../../../sourceES6/core/Bones/bone.ts"],"names":[],"mappings":";AAEA,OAAO,EAAE,OAAO,EAAE,UAAU,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;AAC/E,OAAO,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAGhD,OAAO,EAAE,IAAI,EAAE,MAAM,SAAS,CAAC;AAC/B,OAAO,EAAE,KAAK,EAAE,MAAM,oBAAoB,CAAC;AAK3C;;;GAGG;AACH;IAA0B,wBAAI;IAmE1B;;;;;;;;;OASG;IACH;IACI;;OAEG;IACI,IAAY,EAAE,QAAkB,EAAE,UAAiC,EAAE,WAAoC,EAChH,QAAiC,EAAE,UAAmC,EAAE,KAA8B;QAD7D,2BAAA,EAAA,iBAAiC;QAAE,4BAAA,EAAA,kBAAoC;QAChH,yBAAA,EAAA,eAAiC;QAAE,2BAAA,EAAA,iBAAmC;QAAE,sBAAA,EAAA,YAA8B;QAL1G,YAMI,kBAAM,IAAI,EAAE,QAAQ,CAAC,QAAQ,EAAE,CAAC,SAcnC;QAhBU,UAAI,GAAJ,IAAI,CAAQ;QA3EvB;;WAEG;QACI,cAAQ,GAAG,IAAI,KAAK,EAAQ,CAAC;QAEpC,oDAAoD;QAC7C,gBAAU,GAAG,IAAI,KAAK,EAAa,CAAC;QAO3C;;;;WAIG;QACI,YAAM,GAAqB,IAAI,CAAC;QAM/B,wBAAkB,GAAG,IAAI,MAAM,EAAE,CAAC;QAClC,gCAA0B,GAAG,IAAI,MAAM,EAAE,CAAC;QAE1C,yBAAmB,GAAG,CAAC,CAAC;QACxB,qBAAe,GAAG,IAAI,MAAM,EAAE,CAAC;QAK/B,sBAAgB,GAAG,IAAI,CAAC;QACxB,oBAAc,GAAG,KAAK,CAAC;QAE/B,cAAc;QACP,0BAAoB,GAA4B,IAAI,CAAC;QAE5D,cAAc;QACP,6BAAuB,GAAqB,IAAI,CAAC;QAsCpD,KAAI,CAAC,SAAS,GAAG,QAAQ,CAAC;QAC1B,KAAI,CAAC,YAAY,GAAG,WAAW,CAAC,CAAC,CAAC,WAAW,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,QAAQ,EAAE,CAAC;QAC1E,KAAI,CAAC,SAAS,GAAG,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,KAAI,CAAC,YAAY,CAAC,KAAK,EAAE,CAAC;QACjE,KAAI,CAAC,WAAW,GAAG,UAAU,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,KAAI,CAAC,YAAY,CAAC,KAAK,EAAE,CAAC;QACvE,KAAI,CAAC,MAAM,GAAG,KAAK,CAAC;QAEpB,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,KAAI,CAAC,CAAC;QAE1B,KAAI,CAAC,SAAS,CAAC,UAAU,EAAE,KAAK,CAAC,CAAC;QAElC,IAAI,UAAU,IAAI,WAAW,EAAE;YAC3B,KAAI,CAAC,uBAAuB,EAAE,CAAC;SAClC;;IACL,CAAC;IAhDD,sBAAI,yBAAO;QADX,cAAc;aACd;YACI,IAAI,CAAC,QAAQ,EAAE,CAAC;YAChB,OAAO,IAAI,CAAC,YAAY,CAAC;QAC7B,CAAC;QAED,cAAc;aACd,UAAY,KAAa;YACrB,IAAI,CAAC,cAAc,GAAG,KAAK,CAAC,CAAC,sCAAsC;YAEnE,oCAAoC;YACpC,IAAI,KAAK,CAAC,UAAU,KAAK,IAAI,CAAC,YAAY,CAAC,UAAU,EAAE;gBACnD,OAAO;aACV;YAED,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;YAClC,IAAI,CAAC,wBAAwB,EAAE,CAAC;QACpC,CAAC;;;OAbA;IA+CD;;;OAGG;IACI,2BAAY,GAAnB;QACI,OAAO,MAAM,CAAC;IAClB,CAAC;IAED,UAAU;IAEV;;;OAGG;IACI,0BAAW,GAAlB;QACI,OAAO,IAAI,CAAC,SAAS,CAAC;IAC1B,CAAC;IAED;;;OAGG;IACI,wBAAS,GAAhB;QACI,OAAO,IAAI,CAAC,OAAO,CAAC;IACxB,CAAC;IAED;;;OAGG;IACI,0BAAW,GAAlB;QACI,OAAO,IAAI,CAAC,QAAQ,CAAC;IACzB,CAAC;IAED;;;OAGG;IACI,uBAAQ,GAAf;QACI,OAAO,IAAI,CAAC,MAAM,KAAK,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC;IACvF,CAAC;IAED;;;;OAIG;IACI,wBAAS,GAAhB,UAAiB,MAAsB,EAAE,sBAAsC;QAAtC,uCAAA,EAAA,6BAAsC;QAC3E,IAAI,IAAI,CAAC,OAAO,KAAK,MAAM,EAAE;YACzB,OAAO;SACV;QAED,IAAI,IAAI,CAAC,OAAO,EAAE;YACd,IAAI,KAAK,GAAG,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;YAChD,IAAI,KAAK,KAAK,CAAC,CAAC,EAAE;gBACd,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;aAC1C;SACJ;QAED,IAAI,CAAC,OAAO,GAAG,MAAM,CAAC;QAEtB,IAAI,IAAI,CAAC,OAAO,EAAE;YACd,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;SACpC;QAED,IAAI,sBAAsB,EAAE;YACxB,IAAI,CAAC,uBAAuB,EAAE,CAAC;SAClC;QAED,IAAI,CAAC,WAAW,EAAE,CAAC;IACvB,CAAC;IAED;;;OAGG;IACI,6BAAc,GAArB;QACI,IAAI,CAAC,QAAQ,EAAE,CAAC;QAChB,OAAO,IAAI,CAAC,YAAY,CAAC;IAC7B,CAAC;IAED;;;OAGG;IACI,4BAAa,GAApB;QACI,OAAO,IAAI,CAAC,WAAW,CAAC;IAC5B,CAAC;IAED;;;OAGG;IACI,0BAAW,GAAlB;QACI,OAAO,IAAI,CAAC,SAAS,CAAC;IAC1B,CAAC;IAED;;;OAGG;IACI,0BAAW,GAAlB,UAAmB,MAAc;QAC7B,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;IACpC,CAAC;IAED;;;;OAIG;IACK,0BAAW,GAAlB;QACG,OAAO,IAAI,CAAC,WAAW,CAAC;IAC5B,CAAC;IAED;;;;OAIG;IACI,0BAAW,GAAlB,UAAmB,MAAc;QAC7B,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC;IAC9B,CAAC;IAED;;OAEG;IACI,6BAAc,GAArB;QACI,OAAO,IAAI,CAAC,eAAe,CAAC;IAChC,CAAC;IAED;;OAEG;IACI,2BAAY,GAAnB;;QACI,IAAI,IAAI,CAAC,oBAAoB,EAAE;YAC3B,IAAM,YAAY,GAAG,UAAU,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;YAC3C,IAAM,aAAa,GAAG,UAAU,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;YAC/C,IAAM,aAAa,GAAG,UAAU,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;YAE5C,IAAI,CAAC,WAAW,EAAE,CAAC,SAAS,CAAC,YAAY,EAAE,aAAa,EAAE,aAAa,CAAC,CAAC;YAEzE,IAAI,CAAC,oBAAoB,CAAC,QAAQ,CAAC,QAAQ,CAAC,aAAa,CAAC,CAAC;YAC3D,IAAI,CAAC,oBAAoB,CAAC,kBAAkB,GAAG,MAAA,IAAI,CAAC,oBAAoB,CAAC,kBAAkB,mCAAI,UAAU,CAAC,QAAQ,EAAE,CAAC;YACrH,IAAI,CAAC,oBAAoB,CAAC,kBAAkB,CAAC,QAAQ,CAAC,aAAa,CAAC,CAAC;YACrE,IAAI,CAAC,oBAAoB,CAAC,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAC,CAAC;SAC5D;aAAM;YACH,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,SAAS,CAAC;SACjC;IACL,CAAC;IAED;;;;OAIG;IACI,2CAA4B,GAAnC;QACI,OAAO,IAAI,CAAC,0BAA0B,CAAC;IAC3C,CAAC;IAED;;;OAGG;IACI,mCAAoB,GAA3B;QACI,OAAO,IAAI,CAAC,kBAAkB,CAAC;IACnC,CAAC;IAED;;;;OAIG;IACI,gCAAiB,GAAxB,UAAyB,aAAsC;QAC3D,IAAI,IAAI,CAAC,oBAAoB,EAAE;YAC3B,IAAI,CAAC,SAAS,CAAC,gCAAgC,EAAE,CAAC;SACrD;QAED,IAAI,CAAC,oBAAoB,GAAG,aAAa,CAAC;QAE1C,IAAI,IAAI,CAAC,oBAAoB,EAAE;YAC3B,IAAI,CAAC,SAAS,CAAC,gCAAgC,EAAE,CAAC;SACrD;IACL,CAAC;IAED,gDAAgD;IAEhD;;;OAGG;IACI,+BAAgB,GAAvB;QACI,OAAO,IAAI,CAAC,oBAAoB,CAAC;IACrC,CAAC;IAGD,sBAAW,0BAAQ;QADnB,qDAAqD;aACrD;YACI,IAAI,CAAC,UAAU,EAAE,CAAC;YAClB,OAAO,IAAI,CAAC,cAAc,CAAC;QAC/B,CAAC;aAED,UAAoB,WAAoB;YACpC,IAAI,CAAC,UAAU,EAAE,CAAC;YAClB,IAAI,CAAC,cAAc,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC;YAE1C,IAAI,CAAC,sBAAsB,EAAE,CAAC;QAClC,CAAC;;;OAPA;IAUD,sBAAW,0BAAQ;QADnB,qDAAqD;aACrD;YACI,OAAO,IAAI,CAAC,WAAW,EAAE,CAAC;QAC9B,CAAC;aAED,UAAoB,WAAoB;YACpC,IAAI,CAAC,WAAW,CAAC,WAAW,CAAC,CAAC;QAClC,CAAC;;;OAJA;IAOD,sBAAW,oCAAkB;QAD7B,gEAAgE;aAChE;YACI,IAAI,CAAC,UAAU,EAAE,CAAC;YAClB,OAAO,IAAI,CAAC,cAAc,CAAC;QAC/B,CAAC;aAED,UAA8B,WAAuB;YACjD,IAAI,CAAC,qBAAqB,CAAC,WAAW,CAAC,CAAC;QAC5C,CAAC;;;OAJA;IAOD,sBAAW,yBAAO;QADlB,oDAAoD;aACpD;YACI,OAAO,IAAI,CAAC,QAAQ,EAAE,CAAC;QAC3B,CAAC;aAED,UAAmB,UAAmB;YAClC,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC;QAC9B,CAAC;;;OAJA;IASD,sBAAW,6CAA2B;QAHtC;;WAEG;aACH;YACI,OAAO,IAAI,CAAC,SAAS,CAAC,2BAA2B,CAAC;QACtD,CAAC;;;OAAA;IAED,UAAU;IACF,yBAAU,GAAlB;QACI,IAAI,CAAC,IAAI,CAAC,gBAAgB,EAAE;YACxB,OAAO;SACV;QAED,IAAI,CAAC,gBAAgB,GAAG,KAAK,CAAC;QAE9B,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE;YACrB,IAAI,CAAC,aAAa,GAAG,OAAO,CAAC,IAAI,EAAE,CAAC;YACpC,IAAI,CAAC,cAAc,GAAG,UAAU,CAAC,IAAI,EAAE,CAAC;YACxC,IAAI,CAAC,cAAc,GAAG,OAAO,CAAC,IAAI,EAAE,CAAC;SACxC;QACD,IAAI,CAAC,YAAY,CAAC,SAAS,CAAC,IAAI,CAAC,aAAa,EAAE,IAAI,CAAC,cAAc,EAAE,IAAI,CAAC,cAAc,CAAC,CAAC;IAC9F,CAAC;IAEO,uBAAQ,GAAhB;QACI,IAAI,CAAC,IAAI,CAAC,cAAc,EAAE;YACtB,OAAO;SACV;QAED,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE;YACrB,IAAI,CAAC,cAAc,GAAG,KAAK,CAAC;YAC5B,OAAO;SACV;QAED,IAAI,CAAC,cAAc,GAAG,KAAK,CAAC;QAC5B,MAAM,CAAC,YAAY,CAAC,IAAI,CAAC,aAAa,EAAE,IAAI,CAAC,cAAc,EAAE,IAAI,CAAC,cAAc,EAAE,IAAI,CAAC,YAAY,CAAC,CAAC;IACzG,CAAC;IAED;;;;;OAKG;IACI,2BAAY,GAAnB,UAAoB,MAAc,EAAE,sBAA6B,EAAE,iBAAwB;QAAvD,uCAAA,EAAA,6BAA6B;QAAE,kCAAA,EAAA,wBAAwB;QACvF,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;QAElC,IAAI,sBAAsB,EAAE;YACxB,IAAI,CAAC,uBAAuB,EAAE,CAAC;SAClC;QAED,IAAI,iBAAiB,EAAE;YACnB,IAAI,CAAC,OAAO,GAAG,MAAM,CAAC;SACzB;aACI;YACD,IAAI,CAAC,WAAW,EAAE,CAAC;SACtB;IACL,CAAC;IAED,cAAc;IACP,sCAAuB,GAA9B,UAA+B,UAAmB,EAAE,cAAqB;QAArB,+BAAA,EAAA,qBAAqB;QACrE,IAAI,CAAC,UAAU,EAAE;YACb,UAAU,GAAG,IAAI,CAAC,WAAW,CAAC;SACjC;QAED,IAAI,IAAI,CAAC,OAAO,EAAE;YACd,UAAU,CAAC,aAAa,CAAC,IAAI,CAAC,OAAO,CAAC,kBAAkB,EAAE,IAAI,CAAC,kBAAkB,CAAC,CAAC;SACtF;aAAM;YACH,IAAI,CAAC,kBAAkB,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC;SAChD;QAED,IAAI,CAAC,kBAAkB,CAAC,WAAW,CAAC,IAAI,CAAC,0BAA0B,CAAC,CAAC;QAErE,IAAI,cAAc,EAAE;YAChB,KAAK,IAAI,KAAK,GAAG,CAAC,EAAE,KAAK,GAAG,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE,KAAK,EAAE,EAAE;gBACvD,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,uBAAuB,EAAE,CAAC;aAClD;SACJ;QAED,IAAI,CAAC,mBAAmB,GAAG,CAAC,IAAI,CAAC,kBAAkB,CAAC,WAAW,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IACpF,CAAC;IAED;;OAEG;IACI,0BAAW,GAAlB;QACI,IAAI,CAAC,gBAAgB,EAAE,CAAC;QACxB,IAAI,CAAC,cAAc,EAAE,CAAC;QACtB,IAAI,CAAC,SAAS,CAAC,YAAY,EAAE,CAAC;IAClC,CAAC;IAED,cAAc;IACP,qCAAsB,GAA7B;QACI,IAAI,CAAC,WAAW,EAAE,CAAC;QACnB,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC;IAC/B,CAAC;IAEO,uCAAwB,GAAhC;QACI,IAAI,CAAC,WAAW,EAAE,CAAC;QACnB,IAAI,CAAC,gBAAgB,GAAG,IAAI,CAAC;IACjC,CAAC;IAED;;;;;OAKG;IACI,wBAAS,GAAhB,UAAiB,GAAY,EAAE,KAAmB,EAAE,KAAqB;QAA1C,sBAAA,EAAA,QAAQ,KAAK,CAAC,KAAK;QAC9C,IAAI,EAAE,GAAG,IAAI,CAAC,cAAc,EAAE,CAAC;QAE/B,IAAI,KAAK,IAAI,KAAK,CAAC,KAAK,EAAE;YACtB,EAAE,CAAC,UAAU,CAAC,EAAE,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC;YACzB,EAAE,CAAC,UAAU,CAAC,EAAE,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC;YACzB,EAAE,CAAC,UAAU,CAAC,EAAE,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC;SAC5B;aAAM;YACH,IAAI,EAAE,GAAqB,IAAI,CAAC;YAEhC,uFAAuF;YACvF,IAAI,KAAK,EAAE;gBACP,EAAE,GAAG,KAAK,CAAC,cAAc,EAAE,CAAC;aAC/B;YAED,IAAI,CAAC,SAAS,CAAC,yBAAyB,EAAE,CAAC;YAC3C,IAAI,IAAI,GAAG,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;YAC5B,IAAI,IAAI,GAAG,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;YAE5B,IAAI,IAAI,CAAC,OAAO,EAAE;gBACd,IAAI,KAAK,IAAI,EAAE,EAAE;oBACb,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,oBAAoB,EAAE,CAAC,CAAC;oBACnD,IAAI,CAAC,aAAa,CAAC,EAAE,EAAE,IAAI,CAAC,CAAC;iBAChC;qBAAM;oBACH,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,oBAAoB,EAAE,CAAC,CAAC;iBACtD;aACJ;iBAAM;gBACH,MAAM,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC;aAC9B;YAED,IAAI,CAAC,wBAAwB,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;YACvC,IAAI,CAAC,MAAM,EAAE,CAAC;YACd,OAAO,CAAC,yBAAyB,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;YAEnD,EAAE,CAAC,UAAU,CAAC,EAAE,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC;YAC1B,EAAE,CAAC,UAAU,CAAC,EAAE,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC;YAC1B,EAAE,CAAC,UAAU,CAAC,EAAE,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC;SAC7B;QAED,IAAI,CAAC,wBAAwB,EAAE,CAAC;IACpC,CAAC;IAED;;;;;OAKG;IACI,0BAAW,GAAlB,UAAmB,QAAiB,EAAE,KAAmB,EAAE,KAAqB;QAA1C,sBAAA,EAAA,QAAQ,KAAK,CAAC,KAAK;QACrD,IAAI,EAAE,GAAG,IAAI,CAAC,cAAc,EAAE,CAAC;QAE/B,IAAI,KAAK,IAAI,KAAK,CAAC,KAAK,EAAE;YACtB,EAAE,CAAC,wBAAwB,CAAC,QAAQ,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC,CAAC,CAAC;SACnE;aAAM;YACH,IAAI,EAAE,GAAqB,IAAI,CAAC;YAEhC,uFAAuF;YACvF,IAAI,KAAK,EAAE;gBACP,EAAE,GAAG,KAAK,CAAC,cAAc,EAAE,CAAC;aAC/B;YAED,IAAI,CAAC,SAAS,CAAC,yBAAyB,EAAE,CAAC;YAE3C,IAAI,IAAI,GAAG,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;YAC5B,IAAI,GAAG,GAAG,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;YAE3B,IAAI,IAAI,CAAC,OAAO,EAAE;gBACd,IAAI,KAAK,IAAI,EAAE,EAAE;oBACb,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,oBAAoB,EAAE,CAAC,CAAC;oBACnD,IAAI,CAAC,aAAa,CAAC,EAAE,EAAE,IAAI,CAAC,CAAC;iBAChC;qBAAM;oBACH,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,oBAAoB,EAAE,CAAC,CAAC;iBACtD;gBACD,IAAI,CAAC,MAAM,EAAE,CAAC;aACjB;iBAAM;gBACH,MAAM,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC;aAC9B;YAED,OAAO,CAAC,yBAAyB,CAAC,QAAQ,EAAE,IAAI,EAAE,GAAG,CAAC,CAAC;YACvD,EAAE,CAAC,wBAAwB,CAAC,GAAG,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC;SACpD;QAED,IAAI,CAAC,wBAAwB,EAAE,CAAC;IACpC,CAAC;IAED;;;;OAIG;IACI,kCAAmB,GAA1B,UAA2B,QAAiB,EAAE,KAAqB;QAC/D,IAAI,CAAC,WAAW,CAAC,QAAQ,EAAE,KAAK,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;IACnD,CAAC;IAED;;;;;;OAMG;IACI,oBAAK,GAAZ,UAAa,CAAS,EAAE,CAAS,EAAE,CAAS,EAAE,aAAqB;QAArB,8BAAA,EAAA,qBAAqB;QAC/D,IAAI,MAAM,GAAG,IAAI,CAAC,cAAc,EAAE,CAAC;QAEnC,mDAAmD;QACnD,IAAI,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;QAChC,MAAM,CAAC,YAAY,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,QAAQ,CAAC,CAAC;QACvC,QAAQ,CAAC,aAAa,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;QAEvC,8DAA8D;QAC9D,QAAQ,CAAC,MAAM,EAAE,CAAC;QAElB,KAAkB,UAAa,EAAb,KAAA,IAAI,CAAC,QAAQ,EAAb,cAAa,EAAb,IAAa,EAAE;YAA5B,IAAI,KAAK,SAAA;YACV,IAAI,EAAE,GAAG,KAAK,CAAC,cAAc,EAAE,CAAC;YAChC,EAAE,CAAC,aAAa,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC;YAC/B,EAAE,CAAC,eAAe,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC;YAC1B,EAAE,CAAC,eAAe,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC;YAC1B,EAAE,CAAC,eAAe,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC;YAE1B,KAAK,CAAC,wBAAwB,EAAE,CAAC;SACpC;QAED,IAAI,CAAC,wBAAwB,EAAE,CAAC;QAEhC,IAAI,aAAa,EAAE;YACf,KAAkB,UAAa,EAAb,KAAA,IAAI,CAAC,QAAQ,EAAb,cAAa,EAAb,IAAa,EAAE;gBAA5B,IAAI,KAAK,SAAA;gBACV,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,aAAa,CAAC,CAAC;aACvC;SACJ;IACL,CAAC;IAED;;;OAGG;IACI,uBAAQ,GAAf,UAAgB,KAAc;QAC1B,IAAI,CAAC,UAAU,EAAE,CAAC;QAClB,IAAI,CAAC,aAAa,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;QACnC,IAAI,CAAC,sBAAsB,EAAE,CAAC;IAClC,CAAC;IAED;;;OAGG;IACI,uBAAQ,GAAf;QACI,IAAI,CAAC,UAAU,EAAE,CAAC;QAClB,OAAO,IAAI,CAAC,aAAa,CAAC;IAC9B,CAAC;IAED;;;OAGG;IACI,4BAAa,GAApB,UAAqB,MAAe;QAChC,IAAI,CAAC,UAAU,EAAE,CAAC;QAClB,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;IACxC,CAAC;IAED;;;;;;;OAOG;IACI,8BAAe,GAAtB,UAAuB,GAAW,EAAE,KAAa,EAAE,IAAY,EAAE,KAAmB,EAAE,KAAqB;QAA1C,sBAAA,EAAA,QAAQ,KAAK,CAAC,KAAK;QAChF,IAAI,KAAK,KAAK,KAAK,CAAC,KAAK,EAAE;YACvB,IAAI,IAAI,GAAG,IAAI,CAAC,QAAQ,CAAC;YACzB,UAAU,CAAC,yBAAyB,CAAC,GAAG,EAAE,KAAK,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;YAC7D,IAAI,CAAC,qBAAqB,CAAC,IAAI,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC;YAC/C,OAAO;SACV;QAED,IAAI,SAAS,GAAG,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;QACjC,IAAI,CAAC,IAAI,CAAC,yBAAyB,CAAC,SAAS,EAAE,KAAK,CAAC,EAAE;YACnD,OAAO;SACV;QAED,IAAI,MAAM,GAAG,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;QAC9B,MAAM,CAAC,yBAAyB,CAAC,GAAG,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,CAAC,CAAC;QAE3D,SAAS,CAAC,aAAa,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;QACxC,IAAI,CAAC,iBAAiB,CAAC,MAAM,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC;IAEjD,CAAC;IAED;;;;;;OAMG;IACI,qBAAM,GAAb,UAAc,IAAa,EAAE,MAAc,EAAE,KAAmB,EAAE,KAAqB;QAA1C,sBAAA,EAAA,QAAQ,KAAK,CAAC,KAAK;QAC5D,IAAI,IAAI,GAAG,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;QAC5B,IAAI,CAAC,wBAAwB,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;QACvC,MAAM,CAAC,iBAAiB,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,CAAC,CAAC;QAC7C,IAAI,CAAC,iBAAiB,CAAC,IAAI,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC;IAC/C,CAAC;IAED;;;;;;OAMG;IACI,2BAAY,GAAnB,UAAoB,IAAa,EAAE,KAAa,EAAE,KAAmB,EAAE,KAAqB;QAA1C,sBAAA,EAAA,QAAQ,KAAK,CAAC,KAAK;QACjE,IAAI,KAAK,KAAK,KAAK,CAAC,KAAK,EAAE;YACvB,IAAI,IAAI,GAAG,IAAI,CAAC,QAAQ,CAAC;YACzB,UAAU,CAAC,iBAAiB,CAAC,IAAI,EAAE,KAAK,EAAE,IAAI,CAAC,CAAC;YAEhD,IAAI,CAAC,qBAAqB,CAAC,IAAI,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC;YAC/C,OAAO;SACV;QAED,IAAI,SAAS,GAAG,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;QACjC,IAAI,CAAC,IAAI,CAAC,yBAAyB,CAAC,SAAS,EAAE,KAAK,CAAC,EAAE;YACnD,OAAO;SACV;QAED,IAAI,MAAM,GAAG,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;QAC9B,MAAM,CAAC,iBAAiB,CAAC,IAAI,EAAE,KAAK,EAAE,MAAM,CAAC,CAAC;QAE9C,SAAS,CAAC,aAAa,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;QACxC,IAAI,CAAC,iBAAiB,CAAC,MAAM,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC;IACjD,CAAC;IAED;;;;;OAKG;IACI,0BAAW,GAAlB,UAAmB,QAAiB,EAAE,KAAmB,EAAE,KAAqB;QAA1C,sBAAA,EAAA,QAAQ,KAAK,CAAC,KAAK;QACrD,IAAI,CAAC,eAAe,CAAC,QAAQ,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC;IAC3E,CAAC;IAED;;;;;OAKG;IACI,oCAAqB,GAA5B,UAA6B,IAAgB,EAAE,KAAmB,EAAE,KAAqB;QAA1C,sBAAA,EAAA,QAAQ,KAAK,CAAC,KAAK;QAC9D,IAAI,KAAK,KAAK,KAAK,CAAC,KAAK,EAAE;YACvB,IAAI,CAAC,UAAU,EAAE,CAAC;YAClB,IAAI,CAAC,cAAc,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;YAEnC,IAAI,CAAC,sBAAsB,EAAE,CAAC;YAE9B,OAAO;SACV;QAED,IAAI,SAAS,GAAG,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;QACjC,IAAI,CAAC,IAAI,CAAC,yBAAyB,CAAC,SAAS,EAAE,KAAK,CAAC,EAAE;YACnD,OAAO;SACV;QAED,IAAI,MAAM,GAAG,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;QAC9B,MAAM,CAAC,mBAAmB,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;QAEzC,SAAS,CAAC,aAAa,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;QAExC,IAAI,CAAC,iBAAiB,CAAC,MAAM,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC;IAEjD,CAAC;IAED;;;;;OAKG;IACI,gCAAiB,GAAxB,UAAyB,MAAc,EAAE,KAAmB,EAAE,KAAqB;QAA1C,sBAAA,EAAA,QAAQ,KAAK,CAAC,KAAK;QACxD,IAAI,KAAK,KAAK,KAAK,CAAC,KAAK,EAAE;YACvB,IAAI,IAAI,GAAG,IAAI,CAAC,QAAQ,CAAC;YACzB,UAAU,CAAC,uBAAuB,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;YACjD,IAAI,CAAC,qBAAqB,CAAC,IAAI,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC;YAC/C,OAAO;SACV;QAED,IAAI,SAAS,GAAG,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;QACjC,IAAI,CAAC,IAAI,CAAC,yBAAyB,CAAC,SAAS,EAAE,KAAK,CAAC,EAAE;YACnD,OAAO;SACV;QAED,IAAI,OAAO,GAAG,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;QAC/B,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;QAEzB,SAAS,CAAC,aAAa,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;QAEzC,IAAI,CAAC,iBAAiB,CAAC,OAAO,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC;IAElD,CAAC;IAEO,gCAAiB,GAAzB,UAA0B,IAAY,EAAE,KAAmB,EAAE,KAAqB;QAA1C,sBAAA,EAAA,QAAQ,KAAK,CAAC,KAAK;QACvD,IAAI,IAAI,GAAG,IAAI,CAAC,cAAc,EAAE,CAAC;QACjC,IAAI,EAAE,GAAG,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;QACpB,IAAI,EAAE,GAAG,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;QACpB,IAAI,EAAE,GAAG,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;QACpB,IAAI,MAAM,GAAG,IAAI,CAAC,SAAS,EAAE,CAAC;QAC9B,IAAI,WAAW,GAAG,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;QACnC,IAAI,cAAc,GAAG,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;QAEtC,IAAI,MAAM,IAAI,KAAK,IAAI,KAAK,CAAC,KAAK,EAAE;YAChC,IAAI,KAAK,EAAE;gBACP,WAAW,CAAC,QAAQ,CAAC,KAAK,CAAC,cAAc,EAAE,CAAC,CAAC;gBAC7C,MAAM,CAAC,oBAAoB,EAAE,CAAC,aAAa,CAAC,WAAW,EAAE,WAAW,CAAC,CAAC;aACzE;iBAAM;gBACH,WAAW,CAAC,QAAQ,CAAC,MAAM,CAAC,oBAAoB,EAAE,CAAC,CAAC;aACvD;YACD,cAAc,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC;YACrC,cAAc,CAAC,MAAM,EAAE,CAAC;YACxB,IAAI,CAAC,aAAa,CAAC,WAAW,EAAE,IAAI,CAAC,CAAC;YACtC,IAAI,CAAC,aAAa,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;YAC/B,IAAI,CAAC,aAAa,CAAC,cAAc,EAAE,IAAI,CAAC,CAAC;SAC5C;aAAM;YACH,IAAI,KAAK,IAAI,KAAK,CAAC,KAAK,IAAI,KAAK,EAAE;gBAC/B,WAAW,CAAC,QAAQ,CAAC,KAAK,CAAC,cAAc,EAAE,CAAC,CAAC;gBAC7C,cAAc,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC;gBACrC,cAAc,CAAC,MAAM,EAAE,CAAC;gBACxB,IAAI,CAAC,aAAa,CAAC,WAAW,EAAE,IAAI,CAAC,CAAC;gBACtC,IAAI,CAAC,aAAa,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;gBAC/B,IAAI,CAAC,aAAa,CAAC,cAAc,EAAE,IAAI,CAAC,CAAC;aAC5C;iBAAM;gBACH,IAAI,CAAC,aAAa,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;aAClC;SACJ;QAED,IAAI,CAAC,wBAAwB,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC;QAE1C,IAAI,CAAC,yBAAyB,EAAE,CAAC;QACjC,IAAI,CAAC,wBAAwB,EAAE,CAAC;IACpC,CAAC;IAEO,wCAAyB,GAAjC,UAAkC,SAAiB,EAAE,KAAqB;QACtE,IAAI,WAAW,GAAG,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;QACnC,SAAS,CAAC,QAAQ,CAAC,IAAI,CAAC,oBAAoB,EAAE,CAAC,CAAC;QAEhD,IAAI,KAAK,EAAE;YACP,SAAS,CAAC,aAAa,CAAC,KAAK,CAAC,cAAc,EAAE,EAAE,SAAS,CAAC,CAAC;YAC3D,MAAM,CAAC,YAAY,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,EAAE,KAAK,CAAC,OAAO,CAAC,CAAC,EAAE,KAAK,CAAC,OAAO,CAAC,CAAC,EAAE,WAAW,CAAC,CAAC;SACvF;QAED,SAAS,CAAC,MAAM,EAAE,CAAC;QACnB,IAAI,KAAK,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE;YACvB,2BAA2B;YAC3B,gDAAgD;YAChD,OAAO,KAAK,CAAC;SAChB;QAED,WAAW,CAAC,eAAe,CAAC,CAAC,EAAE,IAAI,CAAC,mBAAmB,CAAC,CAAC;QACzD,SAAS,CAAC,aAAa,CAAC,WAAW,EAAE,SAAS,CAAC,CAAC;QAEhD,OAAO,IAAI,CAAC;IAChB,CAAC;IAED;;;;;OAKG;IACI,0BAAW,GAAlB,UAAmB,KAAmB,EAAE,KAAqC;QAA1D,sBAAA,EAAA,QAAQ,KAAK,CAAC,KAAK;QAAE,sBAAA,EAAA,YAAqC;QACzE,IAAI,GAAG,GAAG,OAAO,CAAC,IAAI,EAAE,CAAC;QAEzB,IAAI,CAAC,gBAAgB,CAAC,KAAK,EAAE,KAAK,EAAE,GAAG,CAAC,CAAC;QAEzC,OAAO,GAAG,CAAC;IACf,CAAC;IAED;;;;;OAKG;IACI,+BAAgB,GAAvB,UAAwB,KAAmB,EAAE,KAA8B,EAAE,MAAe;QAApE,sBAAA,EAAA,QAAQ,KAAK,CAAC,KAAK;QACvC,IAAI,KAAK,IAAI,KAAK,CAAC,KAAK,EAAE;YACtB,IAAI,EAAE,GAAG,IAAI,CAAC,cAAc,EAAE,CAAC;YAE/B,MAAM,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;YACpB,MAAM,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;YACpB,MAAM,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;SACvB;aAAM;YACH,IAAI,EAAE,GAAqB,IAAI,CAAC;YAEhC,uFAAuF;YACvF,IAAI,KAAK,EAAE;gBACP,EAAE,GAAG,KAAK,CAAC,cAAc,EAAE,CAAC;aAC/B;YAED,IAAI,CAAC,SAAS,CAAC,yBAAyB,EAAE,CAAC;YAE3C,IAAI,IAAI,GAAG,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;YAE5B,IAAI,KAAK,IAAI,EAAE,EAAE;gBACb,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,oBAAoB,EAAE,CAAC,CAAC;gBAC3C,IAAI,CAAC,aAAa,CAAC,EAAE,EAAE,IAAI,CAAC,CAAC;aAChC;iBAAM;gBACH,IAAI,GAAG,IAAI,CAAC,oBAAoB,EAAE,CAAC;aACtC;YAED,MAAM,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;YACtB,MAAM,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;YACtB,MAAM,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;SACzB;IACL,CAAC;IAED;;;;OAIG;IACI,kCAAmB,GAA1B,UAA2B,KAAqC;QAArC,sBAAA,EAAA,YAAqC;QAC5D,IAAI,GAAG,GAAG,OAAO,CAAC,IAAI,EAAE,CAAC;QAEzB,IAAI,CAAC,gBAAgB,CAAC,KAAK,CAAC,KAAK,EAAE,KAAK,EAAE,GAAG,CAAC,CAAC;QAE/C,OAAO,GAAG,CAAC;IACf,CAAC;IAED;;;;OAIG;IACI,uCAAwB,GAA/B,UAAgC,KAAoB,EAAE,MAAe;QACjE,IAAI,CAAC,gBAAgB,CAAC,KAAK,CAAC,KAAK,EAAE,KAAK,EAAE,MAAM,CAAC,CAAC;IACtD,CAAC;IAED;;OAEG;IACI,wCAAyB,GAAhC;QACI,IAAI,CAAC,QAAQ,EAAE,CAAC;QAEhB,IAAI,IAAI,CAAC,OAAO,EAAE;YACd,IAAI,CAAC,YAAY,CAAC,aAAa,CAAC,IAAI,CAAC,OAAO,CAAC,kBAAkB,EAAE,IAAI,CAAC,kBAAkB,CAAC,CAAC;SAC7F;aAAM;YACH,IAAI,CAAC,kBAAkB,CAAC,QAAQ,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;YAEpD,IAAI,UAAU,GAAG,IAAI,CAAC,SAAS,CAAC,aAAa,EAAE,CAAC;YAEhD,IAAI,UAAU,EAAE;gBACZ,IAAI,CAAC,kBAAkB,CAAC,aAAa,CAAC,UAAU,EAAE,IAAI,CAAC,kBAAkB,CAAC,CAAC;aAC9E;SACJ;QAED,IAAI,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC;QAC7B,IAAI,GAAG,GAAG,QAAQ,CAAC,MAAM,CAAC;QAE1B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,EAAE,EAAE;YAC1B,QAAQ,CAAC,CAAC,CAAC,CAAC,yBAAyB,EAAE,CAAC;SAC3C;IACL,CAAC;IAED;;;;;OAKG;IACI,2BAAY,GAAnB,UAAoB,SAAkB,EAAE,KAAqC;QAArC,sBAAA,EAAA,YAAqC;QACzE,IAAI,MAAM,GAAG,OAAO,CAAC,IAAI,EAAE,CAAC;QAE5B,IAAI,CAAC,iBAAiB,CAAC,SAAS,EAAE,KAAK,EAAE,MAAM,CAAC,CAAC;QAEjD,OAAO,MAAM,CAAC;IAClB,CAAC;IAED;;;;;OAKG;IACI,gCAAiB,GAAxB,UAAyB,SAAkB,EAAE,KAAqC,EAAE,MAAe;QAAtD,sBAAA,EAAA,YAAqC;QAC9E,IAAI,EAAE,GAAqB,IAAI,CAAC;QAEhC,uFAAuF;QACvF,IAAI,KAAK,EAAE;YACP,EAAE,GAAG,KAAK,CAAC,cAAc,EAAE,CAAC;SAC/B;QAED,IAAI,CAAC,SAAS,CAAC,yBAAyB,EAAE,CAAC;QAE3C,IAAI,GAAG,GAAG,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;QAE3B,GAAG,CAAC,QAAQ,CAAC,IAAI,CAAC,oBAAoB,EAAE,CAAC,CAAC;QAE1C,IAAI,KAAK,IAAI,EAAE,EAAE;YACb,GAAG,CAAC,aAAa,CAAC,EAAE,EAAE,GAAG,CAAC,CAAC;SAC9B;QAED,OAAO,CAAC,oBAAoB,CAAC,SAAS,EAAE,GAAG,EAAE,MAAM,CAAC,CAAC;QAErD,MAAM,CAAC,SAAS,EAAE,CAAC;IACvB,CAAC;IAED;;;;;OAKG;IACI,0BAAW,GAAlB,UAAmB,KAAmB,EAAE,KAAqC;QAA1D,sBAAA,EAAA,QAAQ,KAAK,CAAC,KAAK;QAAE,sBAAA,EAAA,YAAqC;QACzE,IAAI,MAAM,GAAG,OAAO,CAAC,IAAI,EAAE,CAAC;QAE5B,IAAI,CAAC,gBAAgB,CAAC,KAAK,EAAE,KAAK,EAAE,MAAM,CAAC,CAAC;QAE5C,OAAO,MAAM,CAAC;IAClB,CAAC;IAED;;;;;OAKG;IACI,+BAAgB,GAAvB,UAAwB,KAAmB,EAAE,KAAqC,EAAE,MAAe;QAA3E,sBAAA,EAAA,QAAQ,KAAK,CAAC,KAAK;QAAE,sBAAA,EAAA,YAAqC;QAC9E,IAAI,IAAI,GAAG,IAAI,CAAC,QAAQ,CAAC;QAEzB,IAAI,CAAC,0BAA0B,CAAC,KAAK,EAAE,KAAK,EAAE,IAAI,CAAC,CAAC;QAEpD,IAAI,CAAC,kBAAkB,CAAC,MAAM,CAAC,CAAC;IACpC,CAAC;IAED;;;;;OAKG;IACI,oCAAqB,GAA5B,UAA6B,KAAmB,EAAE,KAAqC;QAA1D,sBAAA,EAAA,QAAQ,KAAK,CAAC,KAAK;QAAE,sBAAA,EAAA,YAAqC;QACnF,IAAI,MAAM,GAAG,UAAU,CAAC,QAAQ,EAAE,CAAC;QAEnC,IAAI,CAAC,0BAA0B,CAAC,KAAK,EAAE,KAAK,EAAE,MAAM,CAAC,CAAC;QAEtD,OAAO,MAAM,CAAC;IAClB,CAAC;IAED;;;;;OAKG;IACI,yCAA0B,GAAjC,UAAkC,KAAmB,EAAE,KAAqC,EAAE,MAAkB;QAA9E,sBAAA,EAAA,QAAQ,KAAK,CAAC,KAAK;QAAE,sBAAA,EAAA,YAAqC;QACxF,IAAI,KAAK,IAAI,KAAK,CAAC,KAAK,EAAE;YACtB,IAAI,CAAC,UAAU,EAAE,CAAC;YAClB,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;SACxC;aAAM;YACH,IAAI,GAAG,GAAG,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;YAC3B,IAAI,IAAI,GAAG,IAAI,CAAC,oBAAoB,EAAE,CAAC;YAEvC,IAAI,KAAK,EAAE;gBACP,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,cAAc,EAAE,EAAE,GAAG,CAAC,CAAC;aACnD;iBAAM;gBACH,GAAG,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;aACtB;YAED,GAAG,CAAC,eAAe,CAAC,CAAC,EAAE,IAAI,CAAC,mBAAmB,CAAC,CAAC;YACjD,GAAG,CAAC,eAAe,CAAC,CAAC,EAAE,IAAI,CAAC,mBAAmB,CAAC,CAAC;YACjD,GAAG,CAAC,eAAe,CAAC,CAAC,EAAE,IAAI,CAAC,mBAAmB,CAAC,CAAC;YAEjD,GAAG,CAAC,SAAS,CAAC,SAAS,EAAE,MAAM,EAAE,SAAS,CAAC,CAAC;SAC/C;IACL,CAAC;IAED;;;;;OAKG;IACI,gCAAiB,GAAxB,UAAyB,KAAmB,EAAE,KAAoB;QAAzC,sBAAA,EAAA,QAAQ,KAAK,CAAC,KAAK;QACxC,IAAI,MAAM,GAAG,MAAM,CAAC,QAAQ,EAAE,CAAC;QAE/B,IAAI,CAAC,sBAAsB,CAAC,KAAK,EAAE,KAAK,EAAE,MAAM,CAAC,CAAC;QAElD,OAAO,MAAM,CAAC;IAClB,CAAC;IAED;;;;;OAKG;IACI,qCAAsB,GAA7B,UAA8B,KAAmB,EAAE,KAAoB,EAAE,MAAc;QAAzD,sBAAA,EAAA,QAAQ,KAAK,CAAC,KAAK;QAC7C,IAAI,KAAK,IAAI,KAAK,CAAC,KAAK,EAAE;YACtB,IAAI,CAAC,cAAc,EAAE,CAAC,sBAAsB,CAAC,MAAM,CAAC,CAAC;SACxD;aAAM;YAEH,IAAI,GAAG,GAAG,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;YAC3B,IAAI,IAAI,GAAG,IAAI,CAAC,oBAAoB,EAAE,CAAC;YAEvC,IAAI,KAAK,EAAE;gBACP,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,cAAc,EAAE,EAAE,GAAG,CAAC,CAAC;aACnD;iBAAM;gBACH,GAAG,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;aACtB;YAED,GAAG,CAAC,eAAe,CAAC,CAAC,EAAE,IAAI,CAAC,mBAAmB,CAAC,CAAC;YACjD,GAAG,CAAC,eAAe,CAAC,CAAC,EAAE,IAAI,CAAC,mBAAmB,CAAC,CAAC;YACjD,GAAG,CAAC,eAAe,CAAC,CAAC,EAAE,IAAI,CAAC,mBAAmB,CAAC,CAAC;YAEjD,GAAG,CAAC,sBAAsB,CAAC,MAAM,CAAC,CAAC;SACtC;IACL,CAAC;IAED;;;;;OAKG;IACI,2CAA4B,GAAnC,UAAoC,QAAiB,EAAE,KAAqC;QAArC,sBAAA,EAAA,YAAqC;QACxF,IAAI,MAAM,GAAG,OAAO,CAAC,IAAI,EAAE,CAAC;QAE5B,IAAI,CAAC,iCAAiC,CAAC,QAAQ,EAAE,KAAK,EAAE,MAAM,CAAC,CAAC;QAEhE,OAAO,MAAM,CAAC;IAClB,CAAC;IAED;;;;;OAKG;IACI,gDAAiC,GAAxC,UAAyC,QAAiB,EAAE,KAAqC,EAAE,MAAe;QAAtD,sBAAA,EAAA,YAAqC;QAC7F,IAAI,EAAE,GAAqB,IAAI,CAAC;QAEhC,uFAAuF;QACvF,IAAI,KAAK,EAAE;YACP,EAAE,GAAG,KAAK,CAAC,cAAc,EAAE,CAAC;SAC/B;QAED,IAAI,CAAC,SAAS,CAAC,yBAAyB,EAAE,CAAC;QAE3C,IAAI,IAAI,GAAG,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;QAE5B,IAAI,KAAK,IAAI,EAAE,EAAE;YACb,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,oBAAoB,EAAE,CAAC,CAAC;YAC3C,IAAI,CAAC,aAAa,CAAC,EAAE,EAAE,IAAI,CAAC,CAAC;SAChC;aAAM;YACH,IAAI,GAAG,IAAI,CAAC,oBAAoB,EAAE,CAAC;SACtC;QAED,OAAO,CAAC,yBAAyB,CAAC,QAAQ,EAAE,IAAI,EAAE,MAAM,CAAC,CAAC;IAC9D,CAAC;IAED;;;;;OAKG;IACI,2CAA4B,GAAnC,UAAoC,QAAiB,EAAE,KAAqC;QAArC,sBAAA,EAAA,YAAqC;QACxF,IAAI,MAAM,GAAG,OAAO,CAAC,IAAI,EAAE,CAAC;QAE5B,IAAI,CAAC,iCAAiC,CAAC,QAAQ,EAAE,KAAK,EAAE,MAAM,CAAC,CAAC;QAEhE,OAAO,MAAM,CAAC;IAClB,CAAC;IAED;;;;;OAKG;IACI,gDAAiC,GAAxC,UAAyC,QAAiB,EAAE,KAAqC,EAAE,MAAe;QAAtD,sBAAA,EAAA,YAAqC;QAC7F,IAAI,EAAE,GAAqB,IAAI,CAAC;QAEhC,uFAAuF;QACvF,IAAI,KAAK,EAAE;YACP,EAAE,GAAG,KAAK,CAAC,cAAc,EAAE,CAAC;SAC/B;QAED,IAAI,CAAC,SAAS,CAAC,yBAAyB,EAAE,CAAC;QAE3C,IAAI,IAAI,GAAG,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;QAE5B,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,oBAAoB,EAAE,CAAC,CAAC;QAE3C,IAAI,KAAK,IAAI,EAAE,EAAE;YACb,IAAI,CAAC,aAAa,CAAC,EAAE,EAAE,IAAI,CAAC,CAAC;SAChC;QAED,IAAI,CAAC,MAAM,EAAE,CAAC;QAEd,OAAO,CAAC,yBAAyB,CAAC,QAAQ,EAAE,IAAI,EAAE,MAAM,CAAC,CAAC;IAC9D,CAAC;IAED;;OAEG;IACI,mCAAoB,GAA3B;QACI,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,cAAc,EAAE,CAAC,CAAC;IAC5C,CAAC;IAxnCc,aAAQ,GAAc,UAAU,CAAC,UAAU,CAAC,CAAC,EAAE,OAAO,CAAC,IAAI,CAAC,CAAC;IAC7D,aAAQ,GAAG,UAAU,CAAC,QAAQ,EAAE,CAAC;IACjC,aAAQ,GAAa,UAAU,CAAC,UAAU,CAAC,CAAC,EAAE,MAAM,CAAC,QAAQ,CAAC,CAAC;IAunClF,WAAC;CAAA,AA3nCD,CAA0B,IAAI,GA2nC7B;SA3nCY,IAAI","sourcesContent":["import { Skeleton } from \"./skeleton\";\r\n\r\nimport { Vector3, Quaternion, Matrix, TmpVectors } from \"../Maths/math.vector\";\r\nimport { ArrayTools } from \"../Misc/arrayTools\";\r\nimport { Nullable } from \"../types\";\r\nimport { TransformNode } from \"../Meshes/transformNode\";\r\nimport { Node } from \"../node\";\r\nimport { Space } from '../Maths/math.axis';\r\n\r\ndeclare type Animation = import(\"../Animations/animation\").Animation;\r\ndeclare type AnimationPropertiesOverride = import(\"../Animations/animationPropertiesOverride\").AnimationPropertiesOverride;\r\n\r\n/**\r\n * Class used to store bone information\r\n * @see https://doc.babylonjs.com/how_to/how_to_use_bones_and_skeletons\r\n */\r\nexport class Bone extends Node {\r\n\r\n private static _tmpVecs: Vector3[] = ArrayTools.BuildArray(2, 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 * Gets the list of child bones\r\n */\r\n public children = new Array<Bone>();\r\n\r\n /** Gets the animations associated with this bone */\r\n public animations = new Array<Animation>();\r\n\r\n /**\r\n * Gets or sets bone length\r\n */\r\n public length: number;\r\n\r\n /**\r\n * @hidden Internal only\r\n * Set this value to map this bone to a different index in the transform matrices\r\n * Set this value to -1 to exclude the bone from the transform matrices\r\n */\r\n public _index: Nullable<number> = null;\r\n\r\n private _skeleton: Skeleton;\r\n private _localMatrix: Matrix;\r\n private _restPose: Matrix;\r\n private _baseMatrix: Matrix;\r\n private _absoluteTransform = new Matrix();\r\n private _invertedAbsoluteTransform = new Matrix();\r\n private _parent: Nullable<Bone>;\r\n private _scalingDeterminant = 1;\r\n private _worldTransform = new Matrix();\r\n\r\n private _localScaling: Vector3;\r\n private _localRotation: Quaternion;\r\n private _localPosition: Vector3;\r\n private _needToDecompose = true;\r\n private _needToCompose = false;\r\n\r\n /** @hidden */\r\n public _linkedTransformNode: Nullable<TransformNode> = null;\r\n\r\n /** @hidden */\r\n public _waitingTransformNodeId: Nullable<string> = null;\r\n\r\n /** @hidden */\r\n get _matrix(): Matrix {\r\n this._compose();\r\n return this._localMatrix;\r\n }\r\n\r\n /** @hidden */\r\n set _matrix(value: Matrix) {\r\n this._needToCompose = false; // in case there was a pending compose\r\n\r\n // skip if the matrices are the same\r\n if (value.updateFlag === this._localMatrix.updateFlag) {\r\n return;\r\n }\r\n\r\n this._localMatrix.copyFrom(value);\r\n this._markAsDirtyAndDecompose();\r\n }\r\n\r\n /**\r\n * Create a new bone\r\n * @param name defines the bone name\r\n * @param skeleton defines the parent skeleton\r\n * @param parentBone defines the parent (can be null if the bone is the root)\r\n * @param localMatrix defines the local matrix\r\n * @param restPose defines the rest pose matrix\r\n * @param baseMatrix defines the base matrix\r\n * @param index defines index of the bone in the hierarchy\r\n */\r\n constructor(\r\n /**\r\n * defines the bone name\r\n */\r\n public name: string, skeleton: Skeleton, parentBone: Nullable<Bone> = null, localMatrix: Nullable<Matrix> = null,\r\n restPose: Nullable<Matrix> = null, baseMatrix: Nullable<Matrix> = null, index: Nullable<number> = null) {\r\n super(name, skeleton.getScene());\r\n this._skeleton = skeleton;\r\n this._localMatrix = localMatrix ? localMatrix.clone() : Matrix.Identity();\r\n this._restPose = restPose ? restPose : this._localMatrix.clone();\r\n this._baseMatrix = baseMatrix ? baseMatrix : this._localMatrix.clone();\r\n this._index = index;\r\n\r\n skeleton.bones.push(this);\r\n\r\n this.setParent(parentBone, false);\r\n\r\n if (baseMatrix || localMatrix) {\r\n this._updateDifferenceMatrix();\r\n }\r\n }\r\n\r\n /**\r\n * Gets the current object class name.\r\n * @return the class name\r\n */\r\n public getClassName(): string {\r\n return \"Bone\";\r\n }\r\n\r\n // Members\r\n\r\n /**\r\n * Gets the parent skeleton\r\n * @returns a skeleton\r\n */\r\n public getSkeleton(): Skeleton {\r\n return this._skeleton;\r\n }\r\n\r\n /**\r\n * Gets parent bone\r\n * @returns a bone or null if the bone is the root of the bone hierarchy\r\n */\r\n public getParent(): Nullable<Bone> {\r\n return this._parent;\r\n }\r\n\r\n /**\r\n * Returns an array containing the root bones\r\n * @returns an array containing the root bones\r\n */\r\n public getChildren(): Array<Bone> {\r\n return this.children;\r\n }\r\n\r\n /**\r\n * Gets the node index in matrix array generated for rendering\r\n * @returns the node index\r\n */\r\n public getIndex(): number {\r\n return this._index === null ? this.getSkeleton().bones.indexOf(this) : this._index;\r\n }\r\n\r\n /**\r\n * Sets the parent bone\r\n * @param parent defines the parent (can be null if the bone is the root)\r\n * @param updateDifferenceMatrix defines if the difference matrix must be updated\r\n */\r\n public setParent(parent: Nullable<Bone>, updateDifferenceMatrix: boolean = true): void {\r\n if (this._parent === parent) {\r\n return;\r\n }\r\n\r\n if (this._parent) {\r\n var index = this._parent.children.indexOf(this);\r\n if (index !== -1) {\r\n this._parent.children.splice(index, 1);\r\n }\r\n }\r\n\r\n this._parent = parent;\r\n\r\n if (this._parent) {\r\n this._parent.children.push(this);\r\n }\r\n\r\n if (updateDifferenceMatrix) {\r\n this._updateDifferenceMatrix();\r\n }\r\n\r\n this.markAsDirty();\r\n }\r\n\r\n /**\r\n * Gets the local matrix\r\n * @returns a matrix\r\n */\r\n public getLocalMatrix(): Matrix {\r\n this._compose();\r\n return this._localMatrix;\r\n }\r\n\r\n /**\r\n * Gets the base matrix (initial matrix which remains unchanged)\r\n * @returns the base matrix (as known as bind pose matrix)\r\n */\r\n public getBaseMatrix(): Matrix {\r\n return this._baseMatrix;\r\n }\r\n\r\n /**\r\n * Gets the rest pose matrix\r\n * @returns a matrix\r\n */\r\n public getRestPose(): Matrix {\r\n return this._restPose;\r\n }\r\n\r\n /**\r\n * Sets the rest pose matrix\r\n * @param matrix the local-space rest pose to set for this bone\r\n */\r\n public setRestPose(matrix: Matrix): void {\r\n this._restPose.copyFrom(matrix);\r\n }\r\n\r\n /**\r\n * Gets the bind pose matrix\r\n * @returns the bind pose matrix\r\n * @deprecated Please use getBaseMatrix instead\r\n */\r\n public getBindPose(): Matrix {\r\n return this._baseMatrix;\r\n }\r\n\r\n /**\r\n * Sets the bind pose matrix\r\n * @param matrix the local-space bind pose to set for this bone\r\n * @deprecated Please use updateMatrix instead\r\n */\r\n public setBindPose(matrix: Matrix): void {\r\n this.updateMatrix(matrix);\r\n }\r\n\r\n /**\r\n * Gets a matrix used to store world matrix (ie. the matrix sent to shaders)\r\n */\r\n public getWorldMatrix(): Matrix {\r\n return this._worldTransform;\r\n }\r\n\r\n /**\r\n * Sets the local matrix to rest pose matrix\r\n */\r\n public returnToRest(): void {\r\n if (this._linkedTransformNode) {\r\n const localScaling = TmpVectors.Vector3[0];\r\n const localRotation = TmpVectors.Quaternion[0];\r\n const localPosition = TmpVectors.Vector3[1];\r\n\r\n this.getRestPose().decompose(localScaling, localRotation, localPosition);\r\n\r\n this._linkedTransformNode.position.copyFrom(localPosition);\r\n this._linkedTransformNode.rotationQuaternion = this._linkedTransformNode.rotationQuaternion ?? Quaternion.Identity();\r\n this._linkedTransformNode.rotationQuaternion.copyFrom(localRotation);\r\n this._linkedTransformNode.scaling.copyFrom(localScaling);\r\n } else {\r\n this._matrix = this._restPose;\r\n }\r\n }\r\n\r\n /**\r\n * Gets the inverse of the absolute transform matrix.\r\n * This matrix will be multiplied by local matrix to get the difference matrix (ie. the difference between original state and current state)\r\n * @returns a matrix\r\n */\r\n public getInvertedAbsoluteTransform(): Matrix {\r\n return this._invertedAbsoluteTransform;\r\n }\r\n\r\n /**\r\n * Gets the absolute transform matrix (ie base matrix * parent world matrix)\r\n * @returns a matrix\r\n */\r\n public getAbsoluteTransform(): Matrix {\r\n return this._absoluteTransform;\r\n }\r\n\r\n /**\r\n * Links with the given transform node.\r\n * The local matrix of this bone is copied from the transform node every frame.\r\n * @param transformNode defines the transform node to link to\r\n */\r\n public linkTransformNode(transformNode: Nullable<TransformNode>): void {\r\n if (this._linkedTransformNode) {\r\n this._skeleton._numBonesWithLinkedTransformNode--;\r\n }\r\n\r\n this._linkedTransformNode = transformNode;\r\n\r\n if (this._linkedTransformNode) {\r\n this._skeleton._numBonesWithLinkedTransformNode++;\r\n }\r\n }\r\n\r\n // Properties (matches TransformNode properties)\r\n\r\n /**\r\n * Gets the node used to drive the bone's transformation\r\n * @returns a transform node or null\r\n */\r\n public getTransformNode() {\r\n return this._linkedTransformNode;\r\n }\r\n\r\n /** Gets or sets current position (in local space) */\r\n public get position(): Vector3 {\r\n this._decompose();\r\n return this._localPosition;\r\n }\r\n\r\n public set position(newPosition: Vector3) {\r\n this._decompose();\r\n this._localPosition.copyFrom(newPosition);\r\n\r\n this._markAsDirtyAndCompose();\r\n }\r\n\r\n /** Gets or sets current rotation (in local space) */\r\n public get rotation(): Vector3 {\r\n return this.getRotation();\r\n }\r\n\r\n public set rotation(newRotation: Vector3) {\r\n this.setRotation(newRotation);\r\n }\r\n\r\n /** Gets or sets current rotation quaternion (in local space) */\r\n public get rotationQuaternion() {\r\n this._decompose();\r\n return this._localRotation;\r\n }\r\n\r\n public set rotationQuaternion(newRotation: Quaternion) {\r\n this.setRotationQuaternion(newRotation);\r\n }\r\n\r\n /** Gets or sets current scaling (in local space) */\r\n public get scaling(): Vector3 {\r\n return this.getScale();\r\n }\r\n\r\n public set scaling(newScaling: Vector3) {\r\n this.setScale(newScaling);\r\n }\r\n\r\n /**\r\n * Gets the animation properties override\r\n */\r\n public get animationPropertiesOverride(): Nullable<AnimationPropertiesOverride> {\r\n return this._skeleton.animationPropertiesOverride;\r\n }\r\n\r\n // Methods\r\n private _decompose() {\r\n if (!this._needToDecompose) {\r\n return;\r\n }\r\n\r\n this._needToDecompose = false;\r\n\r\n if (!this._localScaling) {\r\n this._localScaling = Vector3.Zero();\r\n this._localRotation = Quaternion.Zero();\r\n this._localPosition = Vector3.Zero();\r\n }\r\n this._localMatrix.decompose(this._localScaling, this._localRotation, this._localPosition);\r\n }\r\n\r\n private _compose() {\r\n if (!this._needToCompose) {\r\n return;\r\n }\r\n\r\n if (!this._localScaling) {\r\n this._needToCompose = false;\r\n return;\r\n }\r\n\r\n this._needToCompose = false;\r\n Matrix.ComposeToRef(this._localScaling, this._localRotation, this._localPosition, this._localMatrix);\r\n }\r\n\r\n /**\r\n * Update the base and local matrices\r\n * @param matrix defines the new base or local matrix\r\n * @param updateDifferenceMatrix defines if the difference matrix must be updated\r\n * @param updateLocalMatrix defines if the local matrix should be updated\r\n */\r\n public updateMatrix(matrix: Matrix, updateDifferenceMatrix = true, updateLocalMatrix = true): void {\r\n this._baseMatrix.copyFrom(matrix);\r\n\r\n if (updateDifferenceMatrix) {\r\n this._updateDifferenceMatrix();\r\n }\r\n\r\n if (updateLocalMatrix) {\r\n this._matrix = matrix;\r\n }\r\n else {\r\n this.markAsDirty();\r\n }\r\n }\r\n\r\n /** @hidden */\r\n public _updateDifferenceMatrix(rootMatrix?: Matrix, updateChildren = true): void {\r\n if (!rootMatrix) {\r\n rootMatrix = this._baseMatrix;\r\n }\r\n\r\n if (this._parent) {\r\n rootMatrix.multiplyToRef(this._parent._absoluteTransform, this._absoluteTransform);\r\n } else {\r\n this._absoluteTransform.copyFrom(rootMatrix);\r\n }\r\n\r\n this._absoluteTransform.invertToRef(this._invertedAbsoluteTransform);\r\n\r\n if (updateChildren) {\r\n for (var index = 0; index < this.children.length; index++) {\r\n this.children[index]._updateDifferenceMatrix();\r\n }\r\n }\r\n\r\n this._scalingDeterminant = (this._absoluteTransform.determinant() < 0 ? -1 : 1);\r\n }\r\n\r\n /**\r\n * Flag the bone as dirty (Forcing it to update everything)\r\n */\r\n public markAsDirty(): void {\r\n this._currentRenderId++;\r\n this._childUpdateId++;\r\n this._skeleton._markAsDirty();\r\n }\r\n\r\n /** @hidden */\r\n public _markAsDirtyAndCompose() {\r\n this.markAsDirty();\r\n this._needToCompose = true;\r\n }\r\n\r\n private _markAsDirtyAndDecompose() {\r\n this.markAsDirty();\r\n this._needToDecompose = true;\r\n }\r\n\r\n /**\r\n * Translate the bone in local or world space\r\n * @param vec The amount to translate the bone\r\n * @param space The space that the translation is in\r\n * @param tNode The TransformNode that this bone is attached to. This is only used in world space\r\n */\r\n public translate(vec: Vector3, space = Space.LOCAL, tNode?: TransformNode): void {\r\n var lm = this.getLocalMatrix();\r\n\r\n if (space == Space.LOCAL) {\r\n lm.addAtIndex(12, vec.x);\r\n lm.addAtIndex(13, vec.y);\r\n lm.addAtIndex(14, vec.z);\r\n } else {\r\n var wm: Nullable<Matrix> = null;\r\n\r\n //tNode.getWorldMatrix() needs to be called before skeleton.computeAbsoluteTransforms()\r\n if (tNode) {\r\n wm = tNode.getWorldMatrix();\r\n }\r\n\r\n this._skeleton.computeAbsoluteTransforms();\r\n var tmat = Bone._tmpMats[0];\r\n var tvec = Bone._tmpVecs[0];\r\n\r\n if (this._parent) {\r\n if (tNode && wm) {\r\n tmat.copyFrom(this._parent.getAbsoluteTransform());\r\n tmat.multiplyToRef(wm, tmat);\r\n } else {\r\n tmat.copyFrom(this._parent.getAbsoluteTransform());\r\n }\r\n } else {\r\n Matrix.IdentityToRef(tmat);\r\n }\r\n\r\n tmat.setTranslationFromFloats(0, 0, 0);\r\n tmat.invert();\r\n Vector3.TransformCoordinatesToRef(vec, tmat, tvec);\r\n\r\n lm.addAtIndex(12, tvec.x);\r\n lm.addAtIndex(13, tvec.y);\r\n lm.addAtIndex(14, tvec.z);\r\n }\r\n\r\n this._markAsDirtyAndDecompose();\r\n }\r\n\r\n /**\r\n * Set the position of the bone in local or world space\r\n * @param position The position to set the bone\r\n * @param space The space that the position is in\r\n * @param tNode The TransformNode that this bone is attached to. This is only used in world space\r\n */\r\n public setPosition(position: Vector3, space = Space.LOCAL, tNode?: TransformNode): void {\r\n var lm = this.getLocalMatrix();\r\n\r\n if (space == Space.LOCAL) {\r\n lm.setTranslationFromFloats(position.x, position.y, position.z);\r\n } else {\r\n var wm: Nullable<Matrix> = null;\r\n\r\n //tNode.getWorldMatrix() needs to be called before skeleton.computeAbsoluteTransforms()\r\n if (tNode) {\r\n wm = tNode.getWorldMatrix();\r\n }\r\n\r\n this._skeleton.computeAbsoluteTransforms();\r\n\r\n var tmat = Bone._tmpMats[0];\r\n var vec = Bone._tmpVecs[0];\r\n\r\n if (this._parent) {\r\n if (tNode && wm) {\r\n tmat.copyFrom(this._parent.getAbsoluteTransform());\r\n tmat.multiplyToRef(wm, tmat);\r\n } else {\r\n tmat.copyFrom(this._parent.getAbsoluteTransform());\r\n }\r\n tmat.invert();\r\n } else {\r\n Matrix.IdentityToRef(tmat);\r\n }\r\n\r\n Vector3.TransformCoordinatesToRef(position, tmat, vec);\r\n lm.setTranslationFromFloats(vec.x, vec.y, vec.z);\r\n }\r\n\r\n this._markAsDirtyAndDecompose();\r\n }\r\n\r\n /**\r\n * Set the absolute position of the bone (world space)\r\n * @param position The position to set the bone\r\n * @param tNode The TransformNode that this bone is attached to\r\n */\r\n public setAbsolutePosition(position: Vector3, tNode?: TransformNode) {\r\n this.setPosition(position, Space.WORLD, tNode);\r\n }\r\n\r\n /**\r\n * Scale the bone on the x, y and z axes (in local space)\r\n * @param x The amount to scale the bone on the x axis\r\n * @param y The amount to scale the bone on the y axis\r\n * @param z The amount to scale the bone on the z axis\r\n * @param scaleChildren sets this to true if children of the bone should be scaled as well (false by default)\r\n */\r\n public scale(x: number, y: number, z: number, scaleChildren = false): void {\r\n var locMat = this.getLocalMatrix();\r\n\r\n // Apply new scaling on top of current local matrix\r\n var scaleMat = Bone._tmpMats[0];\r\n Matrix.ScalingToRef(x, y, z, scaleMat);\r\n scaleMat.multiplyToRef(locMat, locMat);\r\n\r\n // Invert scaling matrix and apply the inverse to all children\r\n scaleMat.invert();\r\n\r\n for (var child of this.children) {\r\n var cm = child.getLocalMatrix();\r\n cm.multiplyToRef(scaleMat, cm);\r\n cm.multiplyAtIndex(12, x);\r\n cm.multiplyAtIndex(13, y);\r\n cm.multiplyAtIndex(14, z);\r\n\r\n child._markAsDirtyAndDecompose();\r\n }\r\n\r\n this._markAsDirtyAndDecompose();\r\n\r\n if (scaleChildren) {\r\n for (var child of this.children) {\r\n child.scale(x, y, z, scaleChildren);\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * Set the bone scaling in local space\r\n * @param scale defines the scaling vector\r\n */\r\n public setScale(scale: Vector3): void {\r\n this._decompose();\r\n this._localScaling.copyFrom(scale);\r\n this._markAsDirtyAndCompose();\r\n }\r\n\r\n /**\r\n * Gets the current scaling in local space\r\n * @returns the current scaling vector\r\n */\r\n public getScale(): Vector3 {\r\n this._decompose();\r\n return this._localScaling;\r\n }\r\n\r\n /**\r\n * Gets the current scaling in local space and stores it in a target vector\r\n * @param result defines the target vector\r\n */\r\n public getScaleToRef(result: Vector3) {\r\n this._decompose();\r\n result.copyFrom(this._localScaling);\r\n }\r\n\r\n /**\r\n * Set the yaw, pitch, and roll of the bone in local or world space\r\n * @param yaw The rotation of the bone on the y axis\r\n * @param pitch The rotation of the bone on the x axis\r\n * @param roll The rotation of the bone on the z axis\r\n * @param space The space that the axes of rotation are in\r\n * @param tNode The TransformNode that this bone is attached to. This is only used in world space\r\n */\r\n public setYawPitchRoll(yaw: number, pitch: number, roll: number, space = Space.LOCAL, tNode?: TransformNode): void {\r\n if (space === Space.LOCAL) {\r\n var quat = Bone._tmpQuat;\r\n Quaternion.RotationYawPitchRollToRef(yaw, pitch, roll, quat);\r\n this.setRotationQuaternion(quat, space, tNode);\r\n return;\r\n }\r\n\r\n var rotMatInv = Bone._tmpMats[0];\r\n if (!this._getNegativeRotationToRef(rotMatInv, tNode)) {\r\n return;\r\n }\r\n\r\n var rotMat = Bone._tmpMats[1];\r\n Matrix.RotationYawPitchRollToRef(yaw, pitch, roll, rotMat);\r\n\r\n rotMatInv.multiplyToRef(rotMat, rotMat);\r\n this._rotateWithMatrix(rotMat, space, tNode);\r\n\r\n }\r\n\r\n /**\r\n * Add a rotation to the bone on an axis in local or world space\r\n * @param axis The axis to rotate the bone on\r\n * @param amount The amount to rotate the bone\r\n * @param space The space that the axis is in\r\n * @param tNode The TransformNode that this bone is attached to. This is only used in world space\r\n */\r\n public rotate(axis: Vector3, amount: number, space = Space.LOCAL, tNode?: TransformNode): void {\r\n var rmat = Bone._tmpMats[0];\r\n rmat.setTranslationFromFloats(0, 0, 0);\r\n Matrix.RotationAxisToRef(axis, amount, rmat);\r\n this._rotateWithMatrix(rmat, space, tNode);\r\n }\r\n\r\n /**\r\n * Set the rotation of the bone to a particular axis angle in local or world space\r\n * @param axis The axis to rotate the bone on\r\n * @param angle The angle that the bone should be rotated to\r\n * @param space The space that the axis is in\r\n * @param tNode The TransformNode that this bone is attached to. This is only used in world space\r\n */\r\n public setAxisAngle(axis: Vector3, angle: number, space = Space.LOCAL, tNode?: TransformNode): void {\r\n if (space === Space.LOCAL) {\r\n var quat = Bone._tmpQuat;\r\n Quaternion.RotationAxisToRef(axis, angle, quat);\r\n\r\n this.setRotationQuaternion(quat, space, tNode);\r\n return;\r\n }\r\n\r\n var rotMatInv = Bone._tmpMats[0];\r\n if (!this._getNegativeRotationToRef(rotMatInv, tNode)) {\r\n return;\r\n }\r\n\r\n var rotMat = Bone._tmpMats[1];\r\n Matrix.RotationAxisToRef(axis, angle, rotMat);\r\n\r\n rotMatInv.multiplyToRef(rotMat, rotMat);\r\n this._rotateWithMatrix(rotMat, space, tNode);\r\n }\r\n\r\n /**\r\n * Set the euler rotation of the bone in local or world space\r\n * @param rotation The euler rotation that the bone should be set to\r\n * @param space The space that the rotation is in\r\n * @param tNode The TransformNode that this bone is attached to. This is only used in world space\r\n */\r\n public setRotation(rotation: Vector3, space = Space.LOCAL, tNode?: TransformNode): void {\r\n this.setYawPitchRoll(rotation.y, rotation.x, rotation.z, space, tNode);\r\n }\r\n\r\n /**\r\n * Set the quaternion rotation of the bone in local or world space\r\n * @param quat The quaternion rotation that the bone should be set to\r\n * @param space The space that the rotation is in\r\n * @param tNode The TransformNode that this bone is attached to. This is only used in world space\r\n */\r\n public setRotationQuaternion(quat: Quaternion, space = Space.LOCAL, tNode?: TransformNode): void {\r\n if (space === Space.LOCAL) {\r\n this._decompose();\r\n this._localRotation.copyFrom(quat);\r\n\r\n this._markAsDirtyAndCompose();\r\n\r\n return;\r\n }\r\n\r\n var rotMatInv = Bone._tmpMats[0];\r\n if (!this._getNegativeRotationToRef(rotMatInv, tNode)) {\r\n return;\r\n }\r\n\r\n var rotMat = Bone._tmpMats[1];\r\n Matrix.FromQuaternionToRef(quat, rotMat);\r\n\r\n rotMatInv.multiplyToRef(rotMat, rotMat);\r\n\r\n this._rotateWithMatrix(rotMat, space, tNode);\r\n\r\n }\r\n\r\n /**\r\n * Set the rotation matrix of the bone in local or world space\r\n * @param rotMat The rotation matrix that the bone should be set to\r\n * @param space The space that the rotation is in\r\n * @param tNode The TransformNode that this bone is attached to. This is only used in world space\r\n */\r\n public setRotationMatrix(rotMat: Matrix, space = Space.LOCAL, tNode?: TransformNode): void {\r\n if (space === Space.LOCAL) {\r\n var quat = Bone._tmpQuat;\r\n Quaternion.FromRotationMatrixToRef(rotMat, quat);\r\n this.setRotationQuaternion(quat, space, tNode);\r\n return;\r\n }\r\n\r\n var rotMatInv = Bone._tmpMats[0];\r\n if (!this._getNegativeRotationToRef(rotMatInv, tNode)) {\r\n return;\r\n }\r\n\r\n var rotMat2 = Bone._tmpMats[1];\r\n rotMat2.copyFrom(rotMat);\r\n\r\n rotMatInv.multiplyToRef(rotMat, rotMat2);\r\n\r\n this._rotateWithMatrix(rotMat2, space, tNode);\r\n\r\n }\r\n\r\n private _rotateWithMatrix(rmat: Matrix, space = Space.LOCAL, tNode?: TransformNode): void {\r\n var lmat = this.getLocalMatrix();\r\n var lx = lmat.m[12];\r\n var ly = lmat.m[13];\r\n var lz = lmat.m[14];\r\n var parent = this.getParent();\r\n var parentScale = Bone._tmpMats[3];\r\n var parentScaleInv = Bone._tmpMats[4];\r\n\r\n if (parent && space == Space.WORLD) {\r\n if (tNode) {\r\n parentScale.copyFrom(tNode.getWorldMatrix());\r\n parent.getAbsoluteTransform().multiplyToRef(parentScale, parentScale);\r\n } else {\r\n parentScale.copyFrom(parent.getAbsoluteTransform());\r\n }\r\n parentScaleInv.copyFrom(parentScale);\r\n parentScaleInv.invert();\r\n lmat.multiplyToRef(parentScale, lmat);\r\n lmat.multiplyToRef(rmat, lmat);\r\n lmat.multiplyToRef(parentScaleInv, lmat);\r\n } else {\r\n if (space == Space.WORLD && tNode) {\r\n parentScale.copyFrom(tNode.getWorldMatrix());\r\n parentScaleInv.copyFrom(parentScale);\r\n parentScaleInv.invert();\r\n lmat.multiplyToRef(parentScale, lmat);\r\n lmat.multiplyToRef(rmat, lmat);\r\n lmat.multiplyToRef(parentScaleInv, lmat);\r\n } else {\r\n lmat.multiplyToRef(rmat, lmat);\r\n }\r\n }\r\n\r\n lmat.setTranslationFromFloats(lx, ly, lz);\r\n\r\n this.computeAbsoluteTransforms();\r\n this._markAsDirtyAndDecompose();\r\n }\r\n\r\n private _getNegativeRotationToRef(rotMatInv: Matrix, tNode?: TransformNode): boolean {\r\n var scaleMatrix = Bone._tmpMats[2];\r\n rotMatInv.copyFrom(this.getAbsoluteTransform());\r\n\r\n if (tNode) {\r\n rotMatInv.multiplyToRef(tNode.getWorldMatrix(), rotMatInv);\r\n Matrix.ScalingToRef(tNode.scaling.x, tNode.scaling.y, tNode.scaling.z, scaleMatrix);\r\n }\r\n\r\n rotMatInv.invert();\r\n if (isNaN(rotMatInv.m[0])) {\r\n // Matrix failed to invert.\r\n // This can happen if scale is zero for example.\r\n return false;\r\n }\r\n\r\n scaleMatrix.multiplyAtIndex(0, this._scalingDeterminant);\r\n rotMatInv.multiplyToRef(scaleMatrix, rotMatInv);\r\n\r\n return true;\r\n }\r\n\r\n /**\r\n * Get the position of the bone in local or world space\r\n * @param space The space that the returned position is in\r\n * @param tNode The TransformNode that this bone is attached to. This is only used in world space\r\n * @returns The position of the bone\r\n */\r\n public getPosition(space = Space.LOCAL, tNode: Nullable<TransformNode> = null): Vector3 {\r\n var pos = Vector3.Zero();\r\n\r\n this.getPositionToRef(space, tNode, pos);\r\n\r\n return pos;\r\n }\r\n\r\n /**\r\n * Copy the position of the bone to a vector3 in local or world space\r\n * @param space The space that the returned position is in\r\n * @param tNode The TransformNode that this bone is attached to. This is only used in world space\r\n * @param result The vector3 to copy the position to\r\n */\r\n public getPositionToRef(space = Space.LOCAL, tNode: Nullable<TransformNode>, result: Vector3): void {\r\n if (space == Space.LOCAL) {\r\n var lm = this.getLocalMatrix();\r\n\r\n result.x = lm.m[12];\r\n result.y = lm.m[13];\r\n result.z = lm.m[14];\r\n } else {\r\n var wm: Nullable<Matrix> = null;\r\n\r\n //tNode.getWorldMatrix() needs to be called before skeleton.computeAbsoluteTransforms()\r\n if (tNode) {\r\n wm = tNode.getWorldMatrix();\r\n }\r\n\r\n this._skeleton.computeAbsoluteTransforms();\r\n\r\n var tmat = Bone._tmpMats[0];\r\n\r\n if (tNode && wm) {\r\n tmat.copyFrom(this.getAbsoluteTransform());\r\n tmat.multiplyToRef(wm, tmat);\r\n } else {\r\n tmat = this.getAbsoluteTransform();\r\n }\r\n\r\n result.x = tmat.m[12];\r\n result.y = tmat.m[13];\r\n result.z = tmat.m[14];\r\n }\r\n }\r\n\r\n /**\r\n * Get the absolute position of the bone (world space)\r\n * @param tNode The TransformNode that this bone is attached to\r\n * @returns The absolute position of the bone\r\n */\r\n public getAbsolutePosition(tNode: Nullable<TransformNode> = null): Vector3 {\r\n var pos = Vector3.Zero();\r\n\r\n this.getPositionToRef(Space.WORLD, tNode, pos);\r\n\r\n return pos;\r\n }\r\n\r\n /**\r\n * Copy the absolute position of the bone (world space) to the result param\r\n * @param tNode The TransformNode that this bone is attached to\r\n * @param result The vector3 to copy the absolute position to\r\n */\r\n public getAbsolutePositionToRef(tNode: TransformNode, result: Vector3) {\r\n this.getPositionToRef(Space.WORLD, tNode, result);\r\n }\r\n\r\n /**\r\n * Compute the absolute transforms of this bone and its children\r\n */\r\n public computeAbsoluteTransforms(): void {\r\n this._compose();\r\n\r\n if (this._parent) {\r\n this._localMatrix.multiplyToRef(this._parent._absoluteTransform, this._absoluteTransform);\r\n } else {\r\n this._absoluteTransform.copyFrom(this._localMatrix);\r\n\r\n var poseMatrix = this._skeleton.getPoseMatrix();\r\n\r\n if (poseMatrix) {\r\n this._absoluteTransform.multiplyToRef(poseMatrix, this._absoluteTransform);\r\n }\r\n }\r\n\r\n var children = this.children;\r\n var len = children.length;\r\n\r\n for (var i = 0; i < len; i++) {\r\n children[i].computeAbsoluteTransforms();\r\n }\r\n }\r\n\r\n /**\r\n * Get the world direction from an axis that is in the local space of the bone\r\n * @param localAxis The local direction that is used to compute the world direction\r\n * @param tNode The TransformNode that this bone is attached to\r\n * @returns The world direction\r\n */\r\n public getDirection(localAxis: Vector3, tNode: Nullable<TransformNode> = null): Vector3 {\r\n var result = Vector3.Zero();\r\n\r\n this.getDirectionToRef(localAxis, tNode, result);\r\n\r\n return result;\r\n }\r\n\r\n /**\r\n * Copy the world direction to a vector3 from an axis that is in the local space of the bone\r\n * @param localAxis The local direction that is used to compute the world direction\r\n * @param tNode The TransformNode that this bone is attached to\r\n * @param result The vector3 that the world direction will be copied to\r\n */\r\n public getDirectionToRef(localAxis: Vector3, tNode: Nullable<TransformNode> = null, result: Vector3): void {\r\n var wm: Nullable<Matrix> = null;\r\n\r\n //tNode.getWorldMatrix() needs to be called before skeleton.computeAbsoluteTransforms()\r\n if (tNode) {\r\n wm = tNode.getWorldMatrix();\r\n }\r\n\r\n this._skeleton.computeAbsoluteTransforms();\r\n\r\n var mat = Bone._tmpMats[0];\r\n\r\n mat.copyFrom(this.getAbsoluteTransform());\r\n\r\n if (tNode && wm) {\r\n mat.multiplyToRef(wm, mat);\r\n }\r\n\r\n Vector3.TransformNormalToRef(localAxis, mat, result);\r\n\r\n result.normalize();\r\n }\r\n\r\n /**\r\n * Get the euler rotation of the bone in local or world space\r\n * @param space The space that the rotation should be in\r\n * @param tNode The TransformNode that this bone is attached to. This is only used in world space\r\n * @returns The euler rotation\r\n */\r\n public getRotation(space = Space.LOCAL, tNode: Nullable<TransformNode> = null): Vector3 {\r\n var result = Vector3.Zero();\r\n\r\n this.getRotationToRef(space, tNode, result);\r\n\r\n return result;\r\n }\r\n\r\n /**\r\n * Copy the euler rotation of the bone to a vector3. The rotation can be in either local or world space\r\n * @param space The space that the rotation should be in\r\n * @param tNode The TransformNode that this bone is attached to. This is only used in world space\r\n * @param result The vector3 that the rotation should be copied to\r\n */\r\n public getRotationToRef(space = Space.LOCAL, tNode: Nullable<TransformNode> = null, result: Vector3): void {\r\n var quat = Bone._tmpQuat;\r\n\r\n this.getRotationQuaternionToRef(space, tNode, quat);\r\n\r\n quat.toEulerAnglesToRef(result);\r\n }\r\n\r\n /**\r\n * Get the quaternion rotation of the bone in either local or world space\r\n * @param space The space that the rotation should be in\r\n * @param tNode The TransformNode that this bone is attached to. This is only used in world space\r\n * @returns The quaternion rotation\r\n */\r\n public getRotationQuaternion(space = Space.LOCAL, tNode: Nullable<TransformNode> = null): Quaternion {\r\n var result = Quaternion.Identity();\r\n\r\n this.getRotationQuaternionToRef(space, tNode, result);\r\n\r\n return result;\r\n }\r\n\r\n /**\r\n * Copy the quaternion rotation of the bone to a quaternion. The rotation can be in either local or world space\r\n * @param space The space that the rotation should be in\r\n * @param tNode The TransformNode that this bone is attached to. This is only used in world space\r\n * @param result The quaternion that the rotation should be copied to\r\n */\r\n public getRotationQuaternionToRef(space = Space.LOCAL, tNode: Nullable<TransformNode> = null, result: Quaternion): void {\r\n if (space == Space.LOCAL) {\r\n this._decompose();\r\n result.copyFrom(this._localRotation);\r\n } else {\r\n var mat = Bone._tmpMats[0];\r\n var amat = this.getAbsoluteTransform();\r\n\r\n if (tNode) {\r\n amat.multiplyToRef(tNode.getWorldMatrix(), mat);\r\n } else {\r\n mat.copyFrom(amat);\r\n }\r\n\r\n mat.multiplyAtIndex(0, this._scalingDeterminant);\r\n mat.multiplyAtIndex(1, this._scalingDeterminant);\r\n mat.multiplyAtIndex(2, this._scalingDeterminant);\r\n\r\n mat.decompose(undefined, result, undefined);\r\n }\r\n }\r\n\r\n /**\r\n * Get the rotation matrix of the bone in local or world space\r\n * @param space The space that the rotation should be in\r\n * @param tNode The TransformNode that this bone is attached to. This is only used in world space\r\n * @returns The rotation matrix\r\n */\r\n public getRotationMatrix(space = Space.LOCAL, tNode: TransformNode): Matrix {\r\n var result = Matrix.Identity();\r\n\r\n this.getRotationMatrixToRef(space, tNode, result);\r\n\r\n return result;\r\n }\r\n\r\n /**\r\n * Copy the rotation matrix of the bone to a matrix. The rotation can be in either local or world space\r\n * @param space The space that the rotation should be in\r\n * @param tNode The TransformNode that this bone is attached to. This is only used in world space\r\n * @param result The quaternion that the rotation should be copied to\r\n */\r\n public getRotationMatrixToRef(space = Space.LOCAL, tNode: TransformNode, result: Matrix): void {\r\n if (space == Space.LOCAL) {\r\n this.getLocalMatrix().getRotationMatrixToRef(result);\r\n } else {\r\n\r\n var mat = Bone._tmpMats[0];\r\n var amat = this.getAbsoluteTransform();\r\n\r\n if (tNode) {\r\n amat.multiplyToRef(tNode.getWorldMatrix(), mat);\r\n } else {\r\n mat.copyFrom(amat);\r\n }\r\n\r\n mat.multiplyAtIndex(0, this._scalingDeterminant);\r\n mat.multiplyAtIndex(1, this._scalingDeterminant);\r\n mat.multiplyAtIndex(2, this._scalingDeterminant);\r\n\r\n mat.getRotationMatrixToRef(result);\r\n }\r\n }\r\n\r\n /**\r\n * Get the world position of a point that is in the local space of the bone\r\n * @param position The local position\r\n * @param tNode The TransformNode that this bone is attached to\r\n * @returns The world position\r\n */\r\n public getAbsolutePositionFromLocal(position: Vector3, tNode: Nullable<TransformNode> = null): Vector3 {\r\n var result = Vector3.Zero();\r\n\r\n this.getAbsolutePositionFromLocalToRef(position, tNode, result);\r\n\r\n return result;\r\n }\r\n\r\n /**\r\n * Get the world position of a point that is in the local space of the bone and copy it to the result param\r\n * @param position The local position\r\n * @param tNode The TransformNode that this bone is attached to\r\n * @param result The vector3 that the world position should be copied to\r\n */\r\n public getAbsolutePositionFromLocalToRef(position: Vector3, tNode: Nullable<TransformNode> = null, result: Vector3): void {\r\n var wm: Nullable<Matrix> = null;\r\n\r\n //tNode.getWorldMatrix() needs to be called before skeleton.computeAbsoluteTransforms()\r\n if (tNode) {\r\n wm = tNode.getWorldMatrix();\r\n }\r\n\r\n this._skeleton.computeAbsoluteTransforms();\r\n\r\n var tmat = Bone._tmpMats[0];\r\n\r\n if (tNode && wm) {\r\n tmat.copyFrom(this.getAbsoluteTransform());\r\n tmat.multiplyToRef(wm, tmat);\r\n } else {\r\n tmat = this.getAbsoluteTransform();\r\n }\r\n\r\n Vector3.TransformCoordinatesToRef(position, tmat, result);\r\n }\r\n\r\n /**\r\n * Get the local position of a point that is in world space\r\n * @param position The world position\r\n * @param tNode The TransformNode that this bone is attached to\r\n * @returns The local position\r\n */\r\n public getLocalPositionFromAbsolute(position: Vector3, tNode: Nullable<TransformNode> = null): Vector3 {\r\n var result = Vector3.Zero();\r\n\r\n this.getLocalPositionFromAbsoluteToRef(position, tNode, result);\r\n\r\n return result;\r\n }\r\n\r\n /**\r\n * Get the local position of a point that is in world space and copy it to the result param\r\n * @param position The world position\r\n * @param tNode The TransformNode that this bone is attached to\r\n * @param result The vector3 that the local position should be copied to\r\n */\r\n public getLocalPositionFromAbsoluteToRef(position: Vector3, tNode: Nullable<TransformNode> = null, result: Vector3): void {\r\n var wm: Nullable<Matrix> = null;\r\n\r\n //tNode.getWorldMatrix() needs to be called before skeleton.computeAbsoluteTransforms()\r\n if (tNode) {\r\n wm = tNode.getWorldMatrix();\r\n }\r\n\r\n this._skeleton.computeAbsoluteTransforms();\r\n\r\n var tmat = Bone._tmpMats[0];\r\n\r\n tmat.copyFrom(this.getAbsoluteTransform());\r\n\r\n if (tNode && wm) {\r\n tmat.multiplyToRef(wm, tmat);\r\n }\r\n\r\n tmat.invert();\r\n\r\n Vector3.TransformCoordinatesToRef(position, tmat, result);\r\n }\r\n\r\n /**\r\n * Set the current local matrix as the restPose for this bone.\r\n */\r\n public setCurrentPoseAsRest(): void {\r\n this.setRestPose(this.getLocalMatrix());\r\n }\r\n}\r\n"]}
|
|
1
|
+
{"version":3,"file":"bone.js","sourceRoot":"","sources":["../../../sourceES6/core/Bones/bone.ts"],"names":[],"mappings":"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","sourcesContent":["import { Skeleton } from \"./skeleton\";\r\n\r\nimport { Vector3, Quaternion, Matrix, TmpVectors } from \"../Maths/math.vector\";\r\nimport { ArrayTools } from \"../Misc/arrayTools\";\r\nimport { Nullable } from \"../types\";\r\nimport { TransformNode } from \"../Meshes/transformNode\";\r\nimport { Node } from \"../node\";\r\nimport { Space } from '../Maths/math.axis';\r\n\r\ndeclare type Animation = import(\"../Animations/animation\").Animation;\r\ndeclare type AnimationPropertiesOverride = import(\"../Animations/animationPropertiesOverride\").AnimationPropertiesOverride;\r\n\r\n/**\r\n * Class used to store bone information\r\n * @see https://doc.babylonjs.com/how_to/how_to_use_bones_and_skeletons\r\n */\r\nexport class Bone extends Node {\r\n\r\n private static _tmpVecs: Vector3[] = ArrayTools.BuildArray(2, 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 * Gets the list of child bones\r\n */\r\n public children = new Array<Bone>();\r\n\r\n /** Gets the animations associated with this bone */\r\n public animations = new Array<Animation>();\r\n\r\n /**\r\n * Gets or sets bone length\r\n */\r\n public length: number;\r\n\r\n /**\r\n * @hidden Internal only\r\n * Set this value to map this bone to a different index in the transform matrices\r\n * Set this value to -1 to exclude the bone from the transform matrices\r\n */\r\n public _index: Nullable<number> = null;\r\n\r\n private _skeleton: Skeleton;\r\n private _localMatrix: Matrix;\r\n private _restPose: Matrix;\r\n private _baseMatrix: Matrix;\r\n private _absoluteTransform = new Matrix();\r\n private _invertedAbsoluteTransform = new Matrix();\r\n private _parent: Nullable<Bone>;\r\n private _scalingDeterminant = 1;\r\n private _worldTransform = new Matrix();\r\n\r\n private _localScaling: Vector3;\r\n private _localRotation: Quaternion;\r\n private _localPosition: Vector3;\r\n private _needToDecompose = true;\r\n private _needToCompose = false;\r\n\r\n /** @hidden */\r\n public _linkedTransformNode: Nullable<TransformNode> = null;\r\n\r\n /** @hidden */\r\n public _waitingTransformNodeId: Nullable<string> = null;\r\n\r\n /** @hidden */\r\n get _matrix(): Matrix {\r\n this._compose();\r\n return this._localMatrix;\r\n }\r\n\r\n /** @hidden */\r\n set _matrix(value: Matrix) {\r\n this._needToCompose = false; // in case there was a pending compose\r\n\r\n // skip if the matrices are the same\r\n if (value.updateFlag === this._localMatrix.updateFlag) {\r\n return;\r\n }\r\n\r\n this._localMatrix.copyFrom(value);\r\n this._markAsDirtyAndDecompose();\r\n }\r\n\r\n /**\r\n * Create a new bone\r\n * @param name defines the bone name\r\n * @param skeleton defines the parent skeleton\r\n * @param parentBone defines the parent (can be null if the bone is the root)\r\n * @param localMatrix defines the local matrix\r\n * @param restPose defines the rest pose matrix\r\n * @param baseMatrix defines the base matrix\r\n * @param index defines index of the bone in the hierarchy\r\n */\r\n constructor(\r\n /**\r\n * defines the bone name\r\n */\r\n public name: string, skeleton: Skeleton, parentBone: Nullable<Bone> = null, localMatrix: Nullable<Matrix> = null,\r\n restPose: Nullable<Matrix> = null, baseMatrix: Nullable<Matrix> = null, index: Nullable<number> = null) {\r\n super(name, skeleton.getScene());\r\n this._skeleton = skeleton;\r\n this._localMatrix = localMatrix ? localMatrix.clone() : Matrix.Identity();\r\n this._restPose = restPose ? restPose : this._localMatrix.clone();\r\n this._baseMatrix = baseMatrix ? baseMatrix : this._localMatrix.clone();\r\n this._index = index;\r\n\r\n skeleton.bones.push(this);\r\n\r\n this.setParent(parentBone, false);\r\n\r\n if (baseMatrix || localMatrix) {\r\n this._updateDifferenceMatrix();\r\n }\r\n }\r\n\r\n /**\r\n * Gets the current object class name.\r\n * @return the class name\r\n */\r\n public getClassName(): string {\r\n return \"Bone\";\r\n }\r\n\r\n // Members\r\n\r\n /**\r\n * Gets the parent skeleton\r\n * @returns a skeleton\r\n */\r\n public getSkeleton(): Skeleton {\r\n return this._skeleton;\r\n }\r\n\r\n /**\r\n * Gets parent bone\r\n * @returns a bone or null if the bone is the root of the bone hierarchy\r\n */\r\n public getParent(): Nullable<Bone> {\r\n return this._parent;\r\n }\r\n\r\n /**\r\n * Returns an array containing the root bones\r\n * @returns an array containing the root bones\r\n */\r\n public getChildren(): Array<Bone> {\r\n return this.children;\r\n }\r\n\r\n /**\r\n * Gets the node index in matrix array generated for rendering\r\n * @returns the node index\r\n */\r\n public getIndex(): number {\r\n return this._index === null ? this.getSkeleton().bones.indexOf(this) : this._index;\r\n }\r\n\r\n /**\r\n * Sets the parent bone\r\n * @param parent defines the parent (can be null if the bone is the root)\r\n * @param updateDifferenceMatrix defines if the difference matrix must be updated\r\n */\r\n public setParent(parent: Nullable<Bone>, updateDifferenceMatrix: boolean = true): void {\r\n if (this._parent === parent) {\r\n return;\r\n }\r\n\r\n if (this._parent) {\r\n var index = this._parent.children.indexOf(this);\r\n if (index !== -1) {\r\n this._parent.children.splice(index, 1);\r\n }\r\n }\r\n\r\n this._parent = parent;\r\n\r\n if (this._parent) {\r\n this._parent.children.push(this);\r\n }\r\n\r\n if (updateDifferenceMatrix) {\r\n this._updateDifferenceMatrix();\r\n }\r\n\r\n this.markAsDirty();\r\n }\r\n\r\n /**\r\n * Gets the local matrix\r\n * @returns a matrix\r\n */\r\n public getLocalMatrix(): Matrix {\r\n this._compose();\r\n return this._localMatrix;\r\n }\r\n\r\n /**\r\n * Gets the base matrix (initial matrix which remains unchanged)\r\n * @returns the base matrix (as known as bind pose matrix)\r\n */\r\n public getBaseMatrix(): Matrix {\r\n return this._baseMatrix;\r\n }\r\n\r\n /**\r\n * Gets the rest pose matrix\r\n * @returns a matrix\r\n */\r\n public getRestPose(): Matrix {\r\n return this._restPose;\r\n }\r\n\r\n /**\r\n * Sets the rest pose matrix\r\n * @param matrix the local-space rest pose to set for this bone\r\n */\r\n public setRestPose(matrix: Matrix): void {\r\n this._restPose.copyFrom(matrix);\r\n }\r\n\r\n /**\r\n * Gets the bind pose matrix\r\n * @returns the bind pose matrix\r\n * @deprecated Please use getBaseMatrix instead\r\n */\r\n public getBindPose(): Matrix {\r\n return this._baseMatrix;\r\n }\r\n\r\n /**\r\n * Sets the bind pose matrix\r\n * @param matrix the local-space bind pose to set for this bone\r\n * @deprecated Please use updateMatrix instead\r\n */\r\n public setBindPose(matrix: Matrix): void {\r\n this.updateMatrix(matrix);\r\n }\r\n\r\n /**\r\n * Gets a matrix used to store world matrix (ie. the matrix sent to shaders)\r\n */\r\n public getWorldMatrix(): Matrix {\r\n return this._worldTransform;\r\n }\r\n\r\n /**\r\n * Sets the local matrix to rest pose matrix\r\n */\r\n public returnToRest(): void {\r\n if (this._linkedTransformNode) {\r\n const localScaling = TmpVectors.Vector3[0];\r\n const localRotation = TmpVectors.Quaternion[0];\r\n const localPosition = TmpVectors.Vector3[1];\r\n\r\n this.getRestPose().decompose(localScaling, localRotation, localPosition);\r\n\r\n this._linkedTransformNode.position.copyFrom(localPosition);\r\n this._linkedTransformNode.rotationQuaternion = this._linkedTransformNode.rotationQuaternion ?? Quaternion.Identity();\r\n this._linkedTransformNode.rotationQuaternion.copyFrom(localRotation);\r\n this._linkedTransformNode.scaling.copyFrom(localScaling);\r\n } else {\r\n this._matrix = this._restPose;\r\n }\r\n }\r\n\r\n /**\r\n * Gets the inverse of the absolute transform matrix.\r\n * This matrix will be multiplied by local matrix to get the difference matrix (ie. the difference between original state and current state)\r\n * @returns a matrix\r\n */\r\n public getInvertedAbsoluteTransform(): Matrix {\r\n return this._invertedAbsoluteTransform;\r\n }\r\n\r\n /**\r\n * Gets the absolute transform matrix (ie base matrix * parent world matrix)\r\n * @returns a matrix\r\n */\r\n public getAbsoluteTransform(): Matrix {\r\n return this._absoluteTransform;\r\n }\r\n\r\n /**\r\n * Links with the given transform node.\r\n * The local matrix of this bone is copied from the transform node every frame.\r\n * @param transformNode defines the transform node to link to\r\n */\r\n public linkTransformNode(transformNode: Nullable<TransformNode>): void {\r\n if (this._linkedTransformNode) {\r\n this._skeleton._numBonesWithLinkedTransformNode--;\r\n }\r\n\r\n this._linkedTransformNode = transformNode;\r\n\r\n if (this._linkedTransformNode) {\r\n this._skeleton._numBonesWithLinkedTransformNode++;\r\n }\r\n }\r\n\r\n // Properties (matches TransformNode properties)\r\n\r\n /**\r\n * Gets the node used to drive the bone's transformation\r\n * @returns a transform node or null\r\n */\r\n public getTransformNode() {\r\n return this._linkedTransformNode;\r\n }\r\n\r\n /** Gets or sets current position (in local space) */\r\n public get position(): Vector3 {\r\n this._decompose();\r\n return this._localPosition;\r\n }\r\n\r\n public set position(newPosition: Vector3) {\r\n this._decompose();\r\n this._localPosition.copyFrom(newPosition);\r\n\r\n this._markAsDirtyAndCompose();\r\n }\r\n\r\n /** Gets or sets current rotation (in local space) */\r\n public get rotation(): Vector3 {\r\n return this.getRotation();\r\n }\r\n\r\n public set rotation(newRotation: Vector3) {\r\n this.setRotation(newRotation);\r\n }\r\n\r\n /** Gets or sets current rotation quaternion (in local space) */\r\n public get rotationQuaternion() {\r\n this._decompose();\r\n return this._localRotation;\r\n }\r\n\r\n public set rotationQuaternion(newRotation: Quaternion) {\r\n this.setRotationQuaternion(newRotation);\r\n }\r\n\r\n /** Gets or sets current scaling (in local space) */\r\n public get scaling(): Vector3 {\r\n return this.getScale();\r\n }\r\n\r\n public set scaling(newScaling: Vector3) {\r\n this.setScale(newScaling);\r\n }\r\n\r\n /**\r\n * Gets the animation properties override\r\n */\r\n public get animationPropertiesOverride(): Nullable<AnimationPropertiesOverride> {\r\n return this._skeleton.animationPropertiesOverride;\r\n }\r\n\r\n // Methods\r\n private _decompose() {\r\n if (!this._needToDecompose) {\r\n return;\r\n }\r\n\r\n this._needToDecompose = false;\r\n\r\n if (!this._localScaling) {\r\n this._localScaling = Vector3.Zero();\r\n this._localRotation = Quaternion.Zero();\r\n this._localPosition = Vector3.Zero();\r\n }\r\n this._localMatrix.decompose(this._localScaling, this._localRotation, this._localPosition);\r\n }\r\n\r\n private _compose() {\r\n if (!this._needToCompose) {\r\n return;\r\n }\r\n\r\n if (!this._localScaling) {\r\n this._needToCompose = false;\r\n return;\r\n }\r\n\r\n this._needToCompose = false;\r\n Matrix.ComposeToRef(this._localScaling, this._localRotation, this._localPosition, this._localMatrix);\r\n }\r\n\r\n /**\r\n * Update the base and local matrices\r\n * @param matrix defines the new base or local matrix\r\n * @param updateDifferenceMatrix defines if the difference matrix must be updated\r\n * @param updateLocalMatrix defines if the local matrix should be updated\r\n */\r\n public updateMatrix(matrix: Matrix, updateDifferenceMatrix = true, updateLocalMatrix = true): void {\r\n this._baseMatrix.copyFrom(matrix);\r\n\r\n if (updateDifferenceMatrix) {\r\n this._updateDifferenceMatrix();\r\n }\r\n\r\n if (updateLocalMatrix) {\r\n this._matrix = matrix;\r\n }\r\n else {\r\n this.markAsDirty();\r\n }\r\n }\r\n\r\n /** @hidden */\r\n public _updateDifferenceMatrix(rootMatrix?: Matrix, updateChildren = true): void {\r\n if (!rootMatrix) {\r\n rootMatrix = this._baseMatrix;\r\n }\r\n\r\n if (this._parent) {\r\n rootMatrix.multiplyToRef(this._parent._absoluteTransform, this._absoluteTransform);\r\n } else {\r\n this._absoluteTransform.copyFrom(rootMatrix);\r\n }\r\n\r\n this._absoluteTransform.invertToRef(this._invertedAbsoluteTransform);\r\n\r\n if (updateChildren) {\r\n for (var index = 0; index < this.children.length; index++) {\r\n this.children[index]._updateDifferenceMatrix();\r\n }\r\n }\r\n\r\n this._scalingDeterminant = (this._absoluteTransform.determinant() < 0 ? -1 : 1);\r\n }\r\n\r\n /**\r\n * Flag the bone as dirty (Forcing it to update everything)\r\n * @param property helps children apply precise \"dirtyfication\"\r\n * @returns this bone\r\n */\r\n public markAsDirty(property?: string): Bone {\r\n this._currentRenderId++;\r\n this._childUpdateId++;\r\n this._skeleton._markAsDirty();\r\n return this;\r\n }\r\n\r\n /** @hidden */\r\n public _markAsDirtyAndCompose() {\r\n this.markAsDirty();\r\n this._needToCompose = true;\r\n }\r\n\r\n private _markAsDirtyAndDecompose() {\r\n this.markAsDirty();\r\n this._needToDecompose = true;\r\n }\r\n\r\n /**\r\n * Translate the bone in local or world space\r\n * @param vec The amount to translate the bone\r\n * @param space The space that the translation is in\r\n * @param tNode The TransformNode that this bone is attached to. This is only used in world space\r\n */\r\n public translate(vec: Vector3, space = Space.LOCAL, tNode?: TransformNode): void {\r\n var lm = this.getLocalMatrix();\r\n\r\n if (space == Space.LOCAL) {\r\n lm.addAtIndex(12, vec.x);\r\n lm.addAtIndex(13, vec.y);\r\n lm.addAtIndex(14, vec.z);\r\n } else {\r\n var wm: Nullable<Matrix> = null;\r\n\r\n //tNode.getWorldMatrix() needs to be called before skeleton.computeAbsoluteTransforms()\r\n if (tNode) {\r\n wm = tNode.getWorldMatrix();\r\n }\r\n\r\n this._skeleton.computeAbsoluteTransforms();\r\n var tmat = Bone._tmpMats[0];\r\n var tvec = Bone._tmpVecs[0];\r\n\r\n if (this._parent) {\r\n if (tNode && wm) {\r\n tmat.copyFrom(this._parent.getAbsoluteTransform());\r\n tmat.multiplyToRef(wm, tmat);\r\n } else {\r\n tmat.copyFrom(this._parent.getAbsoluteTransform());\r\n }\r\n } else {\r\n Matrix.IdentityToRef(tmat);\r\n }\r\n\r\n tmat.setTranslationFromFloats(0, 0, 0);\r\n tmat.invert();\r\n Vector3.TransformCoordinatesToRef(vec, tmat, tvec);\r\n\r\n lm.addAtIndex(12, tvec.x);\r\n lm.addAtIndex(13, tvec.y);\r\n lm.addAtIndex(14, tvec.z);\r\n }\r\n\r\n this._markAsDirtyAndDecompose();\r\n }\r\n\r\n /**\r\n * Set the position of the bone in local or world space\r\n * @param position The position to set the bone\r\n * @param space The space that the position is in\r\n * @param tNode The TransformNode that this bone is attached to. This is only used in world space\r\n */\r\n public setPosition(position: Vector3, space = Space.LOCAL, tNode?: TransformNode): void {\r\n var lm = this.getLocalMatrix();\r\n\r\n if (space == Space.LOCAL) {\r\n lm.setTranslationFromFloats(position.x, position.y, position.z);\r\n } else {\r\n var wm: Nullable<Matrix> = null;\r\n\r\n //tNode.getWorldMatrix() needs to be called before skeleton.computeAbsoluteTransforms()\r\n if (tNode) {\r\n wm = tNode.getWorldMatrix();\r\n }\r\n\r\n this._skeleton.computeAbsoluteTransforms();\r\n\r\n var tmat = Bone._tmpMats[0];\r\n var vec = Bone._tmpVecs[0];\r\n\r\n if (this._parent) {\r\n if (tNode && wm) {\r\n tmat.copyFrom(this._parent.getAbsoluteTransform());\r\n tmat.multiplyToRef(wm, tmat);\r\n } else {\r\n tmat.copyFrom(this._parent.getAbsoluteTransform());\r\n }\r\n tmat.invert();\r\n } else {\r\n Matrix.IdentityToRef(tmat);\r\n }\r\n\r\n Vector3.TransformCoordinatesToRef(position, tmat, vec);\r\n lm.setTranslationFromFloats(vec.x, vec.y, vec.z);\r\n }\r\n\r\n this._markAsDirtyAndDecompose();\r\n }\r\n\r\n /**\r\n * Set the absolute position of the bone (world space)\r\n * @param position The position to set the bone\r\n * @param tNode The TransformNode that this bone is attached to\r\n */\r\n public setAbsolutePosition(position: Vector3, tNode?: TransformNode) {\r\n this.setPosition(position, Space.WORLD, tNode);\r\n }\r\n\r\n /**\r\n * Scale the bone on the x, y and z axes (in local space)\r\n * @param x The amount to scale the bone on the x axis\r\n * @param y The amount to scale the bone on the y axis\r\n * @param z The amount to scale the bone on the z axis\r\n * @param scaleChildren sets this to true if children of the bone should be scaled as well (false by default)\r\n */\r\n public scale(x: number, y: number, z: number, scaleChildren = false): void {\r\n var locMat = this.getLocalMatrix();\r\n\r\n // Apply new scaling on top of current local matrix\r\n var scaleMat = Bone._tmpMats[0];\r\n Matrix.ScalingToRef(x, y, z, scaleMat);\r\n scaleMat.multiplyToRef(locMat, locMat);\r\n\r\n // Invert scaling matrix and apply the inverse to all children\r\n scaleMat.invert();\r\n\r\n for (var child of this.children) {\r\n var cm = child.getLocalMatrix();\r\n cm.multiplyToRef(scaleMat, cm);\r\n cm.multiplyAtIndex(12, x);\r\n cm.multiplyAtIndex(13, y);\r\n cm.multiplyAtIndex(14, z);\r\n\r\n child._markAsDirtyAndDecompose();\r\n }\r\n\r\n this._markAsDirtyAndDecompose();\r\n\r\n if (scaleChildren) {\r\n for (var child of this.children) {\r\n child.scale(x, y, z, scaleChildren);\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * Set the bone scaling in local space\r\n * @param scale defines the scaling vector\r\n */\r\n public setScale(scale: Vector3): void {\r\n this._decompose();\r\n this._localScaling.copyFrom(scale);\r\n this._markAsDirtyAndCompose();\r\n }\r\n\r\n /**\r\n * Gets the current scaling in local space\r\n * @returns the current scaling vector\r\n */\r\n public getScale(): Vector3 {\r\n this._decompose();\r\n return this._localScaling;\r\n }\r\n\r\n /**\r\n * Gets the current scaling in local space and stores it in a target vector\r\n * @param result defines the target vector\r\n */\r\n public getScaleToRef(result: Vector3) {\r\n this._decompose();\r\n result.copyFrom(this._localScaling);\r\n }\r\n\r\n /**\r\n * Set the yaw, pitch, and roll of the bone in local or world space\r\n * @param yaw The rotation of the bone on the y axis\r\n * @param pitch The rotation of the bone on the x axis\r\n * @param roll The rotation of the bone on the z axis\r\n * @param space The space that the axes of rotation are in\r\n * @param tNode The TransformNode that this bone is attached to. This is only used in world space\r\n */\r\n public setYawPitchRoll(yaw: number, pitch: number, roll: number, space = Space.LOCAL, tNode?: TransformNode): void {\r\n if (space === Space.LOCAL) {\r\n var quat = Bone._tmpQuat;\r\n Quaternion.RotationYawPitchRollToRef(yaw, pitch, roll, quat);\r\n this.setRotationQuaternion(quat, space, tNode);\r\n return;\r\n }\r\n\r\n var rotMatInv = Bone._tmpMats[0];\r\n if (!this._getNegativeRotationToRef(rotMatInv, tNode)) {\r\n return;\r\n }\r\n\r\n var rotMat = Bone._tmpMats[1];\r\n Matrix.RotationYawPitchRollToRef(yaw, pitch, roll, rotMat);\r\n\r\n rotMatInv.multiplyToRef(rotMat, rotMat);\r\n this._rotateWithMatrix(rotMat, space, tNode);\r\n\r\n }\r\n\r\n /**\r\n * Add a rotation to the bone on an axis in local or world space\r\n * @param axis The axis to rotate the bone on\r\n * @param amount The amount to rotate the bone\r\n * @param space The space that the axis is in\r\n * @param tNode The TransformNode that this bone is attached to. This is only used in world space\r\n */\r\n public rotate(axis: Vector3, amount: number, space = Space.LOCAL, tNode?: TransformNode): void {\r\n var rmat = Bone._tmpMats[0];\r\n rmat.setTranslationFromFloats(0, 0, 0);\r\n Matrix.RotationAxisToRef(axis, amount, rmat);\r\n this._rotateWithMatrix(rmat, space, tNode);\r\n }\r\n\r\n /**\r\n * Set the rotation of the bone to a particular axis angle in local or world space\r\n * @param axis The axis to rotate the bone on\r\n * @param angle The angle that the bone should be rotated to\r\n * @param space The space that the axis is in\r\n * @param tNode The TransformNode that this bone is attached to. This is only used in world space\r\n */\r\n public setAxisAngle(axis: Vector3, angle: number, space = Space.LOCAL, tNode?: TransformNode): void {\r\n if (space === Space.LOCAL) {\r\n var quat = Bone._tmpQuat;\r\n Quaternion.RotationAxisToRef(axis, angle, quat);\r\n\r\n this.setRotationQuaternion(quat, space, tNode);\r\n return;\r\n }\r\n\r\n var rotMatInv = Bone._tmpMats[0];\r\n if (!this._getNegativeRotationToRef(rotMatInv, tNode)) {\r\n return;\r\n }\r\n\r\n var rotMat = Bone._tmpMats[1];\r\n Matrix.RotationAxisToRef(axis, angle, rotMat);\r\n\r\n rotMatInv.multiplyToRef(rotMat, rotMat);\r\n this._rotateWithMatrix(rotMat, space, tNode);\r\n }\r\n\r\n /**\r\n * Set the euler rotation of the bone in local or world space\r\n * @param rotation The euler rotation that the bone should be set to\r\n * @param space The space that the rotation is in\r\n * @param tNode The TransformNode that this bone is attached to. This is only used in world space\r\n */\r\n public setRotation(rotation: Vector3, space = Space.LOCAL, tNode?: TransformNode): void {\r\n this.setYawPitchRoll(rotation.y, rotation.x, rotation.z, space, tNode);\r\n }\r\n\r\n /**\r\n * Set the quaternion rotation of the bone in local or world space\r\n * @param quat The quaternion rotation that the bone should be set to\r\n * @param space The space that the rotation is in\r\n * @param tNode The TransformNode that this bone is attached to. This is only used in world space\r\n */\r\n public setRotationQuaternion(quat: Quaternion, space = Space.LOCAL, tNode?: TransformNode): void {\r\n if (space === Space.LOCAL) {\r\n this._decompose();\r\n this._localRotation.copyFrom(quat);\r\n\r\n this._markAsDirtyAndCompose();\r\n\r\n return;\r\n }\r\n\r\n var rotMatInv = Bone._tmpMats[0];\r\n if (!this._getNegativeRotationToRef(rotMatInv, tNode)) {\r\n return;\r\n }\r\n\r\n var rotMat = Bone._tmpMats[1];\r\n Matrix.FromQuaternionToRef(quat, rotMat);\r\n\r\n rotMatInv.multiplyToRef(rotMat, rotMat);\r\n\r\n this._rotateWithMatrix(rotMat, space, tNode);\r\n\r\n }\r\n\r\n /**\r\n * Set the rotation matrix of the bone in local or world space\r\n * @param rotMat The rotation matrix that the bone should be set to\r\n * @param space The space that the rotation is in\r\n * @param tNode The TransformNode that this bone is attached to. This is only used in world space\r\n */\r\n public setRotationMatrix(rotMat: Matrix, space = Space.LOCAL, tNode?: TransformNode): void {\r\n if (space === Space.LOCAL) {\r\n var quat = Bone._tmpQuat;\r\n Quaternion.FromRotationMatrixToRef(rotMat, quat);\r\n this.setRotationQuaternion(quat, space, tNode);\r\n return;\r\n }\r\n\r\n var rotMatInv = Bone._tmpMats[0];\r\n if (!this._getNegativeRotationToRef(rotMatInv, tNode)) {\r\n return;\r\n }\r\n\r\n var rotMat2 = Bone._tmpMats[1];\r\n rotMat2.copyFrom(rotMat);\r\n\r\n rotMatInv.multiplyToRef(rotMat, rotMat2);\r\n\r\n this._rotateWithMatrix(rotMat2, space, tNode);\r\n\r\n }\r\n\r\n private _rotateWithMatrix(rmat: Matrix, space = Space.LOCAL, tNode?: TransformNode): void {\r\n var lmat = this.getLocalMatrix();\r\n var lx = lmat.m[12];\r\n var ly = lmat.m[13];\r\n var lz = lmat.m[14];\r\n var parent = this.getParent();\r\n var parentScale = Bone._tmpMats[3];\r\n var parentScaleInv = Bone._tmpMats[4];\r\n\r\n if (parent && space == Space.WORLD) {\r\n if (tNode) {\r\n parentScale.copyFrom(tNode.getWorldMatrix());\r\n parent.getAbsoluteTransform().multiplyToRef(parentScale, parentScale);\r\n } else {\r\n parentScale.copyFrom(parent.getAbsoluteTransform());\r\n }\r\n parentScaleInv.copyFrom(parentScale);\r\n parentScaleInv.invert();\r\n lmat.multiplyToRef(parentScale, lmat);\r\n lmat.multiplyToRef(rmat, lmat);\r\n lmat.multiplyToRef(parentScaleInv, lmat);\r\n } else {\r\n if (space == Space.WORLD && tNode) {\r\n parentScale.copyFrom(tNode.getWorldMatrix());\r\n parentScaleInv.copyFrom(parentScale);\r\n parentScaleInv.invert();\r\n lmat.multiplyToRef(parentScale, lmat);\r\n lmat.multiplyToRef(rmat, lmat);\r\n lmat.multiplyToRef(parentScaleInv, lmat);\r\n } else {\r\n lmat.multiplyToRef(rmat, lmat);\r\n }\r\n }\r\n\r\n lmat.setTranslationFromFloats(lx, ly, lz);\r\n\r\n this.computeAbsoluteTransforms();\r\n this._markAsDirtyAndDecompose();\r\n }\r\n\r\n private _getNegativeRotationToRef(rotMatInv: Matrix, tNode?: TransformNode): boolean {\r\n var scaleMatrix = Bone._tmpMats[2];\r\n rotMatInv.copyFrom(this.getAbsoluteTransform());\r\n\r\n if (tNode) {\r\n rotMatInv.multiplyToRef(tNode.getWorldMatrix(), rotMatInv);\r\n Matrix.ScalingToRef(tNode.scaling.x, tNode.scaling.y, tNode.scaling.z, scaleMatrix);\r\n }\r\n\r\n rotMatInv.invert();\r\n if (isNaN(rotMatInv.m[0])) {\r\n // Matrix failed to invert.\r\n // This can happen if scale is zero for example.\r\n return false;\r\n }\r\n\r\n scaleMatrix.multiplyAtIndex(0, this._scalingDeterminant);\r\n rotMatInv.multiplyToRef(scaleMatrix, rotMatInv);\r\n\r\n return true;\r\n }\r\n\r\n /**\r\n * Get the position of the bone in local or world space\r\n * @param space The space that the returned position is in\r\n * @param tNode The TransformNode that this bone is attached to. This is only used in world space\r\n * @returns The position of the bone\r\n */\r\n public getPosition(space = Space.LOCAL, tNode: Nullable<TransformNode> = null): Vector3 {\r\n var pos = Vector3.Zero();\r\n\r\n this.getPositionToRef(space, tNode, pos);\r\n\r\n return pos;\r\n }\r\n\r\n /**\r\n * Copy the position of the bone to a vector3 in local or world space\r\n * @param space The space that the returned position is in\r\n * @param tNode The TransformNode that this bone is attached to. This is only used in world space\r\n * @param result The vector3 to copy the position to\r\n */\r\n public getPositionToRef(space = Space.LOCAL, tNode: Nullable<TransformNode>, result: Vector3): void {\r\n if (space == Space.LOCAL) {\r\n var lm = this.getLocalMatrix();\r\n\r\n result.x = lm.m[12];\r\n result.y = lm.m[13];\r\n result.z = lm.m[14];\r\n } else {\r\n var wm: Nullable<Matrix> = null;\r\n\r\n //tNode.getWorldMatrix() needs to be called before skeleton.computeAbsoluteTransforms()\r\n if (tNode) {\r\n wm = tNode.getWorldMatrix();\r\n }\r\n\r\n this._skeleton.computeAbsoluteTransforms();\r\n\r\n var tmat = Bone._tmpMats[0];\r\n\r\n if (tNode && wm) {\r\n tmat.copyFrom(this.getAbsoluteTransform());\r\n tmat.multiplyToRef(wm, tmat);\r\n } else {\r\n tmat = this.getAbsoluteTransform();\r\n }\r\n\r\n result.x = tmat.m[12];\r\n result.y = tmat.m[13];\r\n result.z = tmat.m[14];\r\n }\r\n }\r\n\r\n /**\r\n * Get the absolute position of the bone (world space)\r\n * @param tNode The TransformNode that this bone is attached to\r\n * @returns The absolute position of the bone\r\n */\r\n public getAbsolutePosition(tNode: Nullable<TransformNode> = null): Vector3 {\r\n var pos = Vector3.Zero();\r\n\r\n this.getPositionToRef(Space.WORLD, tNode, pos);\r\n\r\n return pos;\r\n }\r\n\r\n /**\r\n * Copy the absolute position of the bone (world space) to the result param\r\n * @param tNode The TransformNode that this bone is attached to\r\n * @param result The vector3 to copy the absolute position to\r\n */\r\n public getAbsolutePositionToRef(tNode: TransformNode, result: Vector3) {\r\n this.getPositionToRef(Space.WORLD, tNode, result);\r\n }\r\n\r\n /**\r\n * Compute the absolute transforms of this bone and its children\r\n */\r\n public computeAbsoluteTransforms(): void {\r\n this._compose();\r\n\r\n if (this._parent) {\r\n this._localMatrix.multiplyToRef(this._parent._absoluteTransform, this._absoluteTransform);\r\n } else {\r\n this._absoluteTransform.copyFrom(this._localMatrix);\r\n\r\n var poseMatrix = this._skeleton.getPoseMatrix();\r\n\r\n if (poseMatrix) {\r\n this._absoluteTransform.multiplyToRef(poseMatrix, this._absoluteTransform);\r\n }\r\n }\r\n\r\n var children = this.children;\r\n var len = children.length;\r\n\r\n for (var i = 0; i < len; i++) {\r\n children[i].computeAbsoluteTransforms();\r\n }\r\n }\r\n\r\n /**\r\n * Get the world direction from an axis that is in the local space of the bone\r\n * @param localAxis The local direction that is used to compute the world direction\r\n * @param tNode The TransformNode that this bone is attached to\r\n * @returns The world direction\r\n */\r\n public getDirection(localAxis: Vector3, tNode: Nullable<TransformNode> = null): Vector3 {\r\n var result = Vector3.Zero();\r\n\r\n this.getDirectionToRef(localAxis, tNode, result);\r\n\r\n return result;\r\n }\r\n\r\n /**\r\n * Copy the world direction to a vector3 from an axis that is in the local space of the bone\r\n * @param localAxis The local direction that is used to compute the world direction\r\n * @param tNode The TransformNode that this bone is attached to\r\n * @param result The vector3 that the world direction will be copied to\r\n */\r\n public getDirectionToRef(localAxis: Vector3, tNode: Nullable<TransformNode> = null, result: Vector3): void {\r\n var wm: Nullable<Matrix> = null;\r\n\r\n //tNode.getWorldMatrix() needs to be called before skeleton.computeAbsoluteTransforms()\r\n if (tNode) {\r\n wm = tNode.getWorldMatrix();\r\n }\r\n\r\n this._skeleton.computeAbsoluteTransforms();\r\n\r\n var mat = Bone._tmpMats[0];\r\n\r\n mat.copyFrom(this.getAbsoluteTransform());\r\n\r\n if (tNode && wm) {\r\n mat.multiplyToRef(wm, mat);\r\n }\r\n\r\n Vector3.TransformNormalToRef(localAxis, mat, result);\r\n\r\n result.normalize();\r\n }\r\n\r\n /**\r\n * Get the euler rotation of the bone in local or world space\r\n * @param space The space that the rotation should be in\r\n * @param tNode The TransformNode that this bone is attached to. This is only used in world space\r\n * @returns The euler rotation\r\n */\r\n public getRotation(space = Space.LOCAL, tNode: Nullable<TransformNode> = null): Vector3 {\r\n var result = Vector3.Zero();\r\n\r\n this.getRotationToRef(space, tNode, result);\r\n\r\n return result;\r\n }\r\n\r\n /**\r\n * Copy the euler rotation of the bone to a vector3. The rotation can be in either local or world space\r\n * @param space The space that the rotation should be in\r\n * @param tNode The TransformNode that this bone is attached to. This is only used in world space\r\n * @param result The vector3 that the rotation should be copied to\r\n */\r\n public getRotationToRef(space = Space.LOCAL, tNode: Nullable<TransformNode> = null, result: Vector3): void {\r\n var quat = Bone._tmpQuat;\r\n\r\n this.getRotationQuaternionToRef(space, tNode, quat);\r\n\r\n quat.toEulerAnglesToRef(result);\r\n }\r\n\r\n /**\r\n * Get the quaternion rotation of the bone in either local or world space\r\n * @param space The space that the rotation should be in\r\n * @param tNode The TransformNode that this bone is attached to. This is only used in world space\r\n * @returns The quaternion rotation\r\n */\r\n public getRotationQuaternion(space = Space.LOCAL, tNode: Nullable<TransformNode> = null): Quaternion {\r\n var result = Quaternion.Identity();\r\n\r\n this.getRotationQuaternionToRef(space, tNode, result);\r\n\r\n return result;\r\n }\r\n\r\n /**\r\n * Copy the quaternion rotation of the bone to a quaternion. The rotation can be in either local or world space\r\n * @param space The space that the rotation should be in\r\n * @param tNode The TransformNode that this bone is attached to. This is only used in world space\r\n * @param result The quaternion that the rotation should be copied to\r\n */\r\n public getRotationQuaternionToRef(space = Space.LOCAL, tNode: Nullable<TransformNode> = null, result: Quaternion): void {\r\n if (space == Space.LOCAL) {\r\n this._decompose();\r\n result.copyFrom(this._localRotation);\r\n } else {\r\n var mat = Bone._tmpMats[0];\r\n var amat = this.getAbsoluteTransform();\r\n\r\n if (tNode) {\r\n amat.multiplyToRef(tNode.getWorldMatrix(), mat);\r\n } else {\r\n mat.copyFrom(amat);\r\n }\r\n\r\n mat.multiplyAtIndex(0, this._scalingDeterminant);\r\n mat.multiplyAtIndex(1, this._scalingDeterminant);\r\n mat.multiplyAtIndex(2, this._scalingDeterminant);\r\n\r\n mat.decompose(undefined, result, undefined);\r\n }\r\n }\r\n\r\n /**\r\n * Get the rotation matrix of the bone in local or world space\r\n * @param space The space that the rotation should be in\r\n * @param tNode The TransformNode that this bone is attached to. This is only used in world space\r\n * @returns The rotation matrix\r\n */\r\n public getRotationMatrix(space = Space.LOCAL, tNode: TransformNode): Matrix {\r\n var result = Matrix.Identity();\r\n\r\n this.getRotationMatrixToRef(space, tNode, result);\r\n\r\n return result;\r\n }\r\n\r\n /**\r\n * Copy the rotation matrix of the bone to a matrix. The rotation can be in either local or world space\r\n * @param space The space that the rotation should be in\r\n * @param tNode The TransformNode that this bone is attached to. This is only used in world space\r\n * @param result The quaternion that the rotation should be copied to\r\n */\r\n public getRotationMatrixToRef(space = Space.LOCAL, tNode: TransformNode, result: Matrix): void {\r\n if (space == Space.LOCAL) {\r\n this.getLocalMatrix().getRotationMatrixToRef(result);\r\n } else {\r\n\r\n var mat = Bone._tmpMats[0];\r\n var amat = this.getAbsoluteTransform();\r\n\r\n if (tNode) {\r\n amat.multiplyToRef(tNode.getWorldMatrix(), mat);\r\n } else {\r\n mat.copyFrom(amat);\r\n }\r\n\r\n mat.multiplyAtIndex(0, this._scalingDeterminant);\r\n mat.multiplyAtIndex(1, this._scalingDeterminant);\r\n mat.multiplyAtIndex(2, this._scalingDeterminant);\r\n\r\n mat.getRotationMatrixToRef(result);\r\n }\r\n }\r\n\r\n /**\r\n * Get the world position of a point that is in the local space of the bone\r\n * @param position The local position\r\n * @param tNode The TransformNode that this bone is attached to\r\n * @returns The world position\r\n */\r\n public getAbsolutePositionFromLocal(position: Vector3, tNode: Nullable<TransformNode> = null): Vector3 {\r\n var result = Vector3.Zero();\r\n\r\n this.getAbsolutePositionFromLocalToRef(position, tNode, result);\r\n\r\n return result;\r\n }\r\n\r\n /**\r\n * Get the world position of a point that is in the local space of the bone and copy it to the result param\r\n * @param position The local position\r\n * @param tNode The TransformNode that this bone is attached to\r\n * @param result The vector3 that the world position should be copied to\r\n */\r\n public getAbsolutePositionFromLocalToRef(position: Vector3, tNode: Nullable<TransformNode> = null, result: Vector3): void {\r\n var wm: Nullable<Matrix> = null;\r\n\r\n //tNode.getWorldMatrix() needs to be called before skeleton.computeAbsoluteTransforms()\r\n if (tNode) {\r\n wm = tNode.getWorldMatrix();\r\n }\r\n\r\n this._skeleton.computeAbsoluteTransforms();\r\n\r\n var tmat = Bone._tmpMats[0];\r\n\r\n if (tNode && wm) {\r\n tmat.copyFrom(this.getAbsoluteTransform());\r\n tmat.multiplyToRef(wm, tmat);\r\n } else {\r\n tmat = this.getAbsoluteTransform();\r\n }\r\n\r\n Vector3.TransformCoordinatesToRef(position, tmat, result);\r\n }\r\n\r\n /**\r\n * Get the local position of a point that is in world space\r\n * @param position The world position\r\n * @param tNode The TransformNode that this bone is attached to\r\n * @returns The local position\r\n */\r\n public getLocalPositionFromAbsolute(position: Vector3, tNode: Nullable<TransformNode> = null): Vector3 {\r\n var result = Vector3.Zero();\r\n\r\n this.getLocalPositionFromAbsoluteToRef(position, tNode, result);\r\n\r\n return result;\r\n }\r\n\r\n /**\r\n * Get the local position of a point that is in world space and copy it to the result param\r\n * @param position The world position\r\n * @param tNode The TransformNode that this bone is attached to\r\n * @param result The vector3 that the local position should be copied to\r\n */\r\n public getLocalPositionFromAbsoluteToRef(position: Vector3, tNode: Nullable<TransformNode> = null, result: Vector3): void {\r\n var wm: Nullable<Matrix> = null;\r\n\r\n //tNode.getWorldMatrix() needs to be called before skeleton.computeAbsoluteTransforms()\r\n if (tNode) {\r\n wm = tNode.getWorldMatrix();\r\n }\r\n\r\n this._skeleton.computeAbsoluteTransforms();\r\n\r\n var tmat = Bone._tmpMats[0];\r\n\r\n tmat.copyFrom(this.getAbsoluteTransform());\r\n\r\n if (tNode && wm) {\r\n tmat.multiplyToRef(wm, tmat);\r\n }\r\n\r\n tmat.invert();\r\n\r\n Vector3.TransformCoordinatesToRef(position, tmat, result);\r\n }\r\n\r\n /**\r\n * Set the current local matrix as the restPose for this bone.\r\n */\r\n public setCurrentPoseAsRest(): void {\r\n this.setRestPose(this.getLocalMatrix());\r\n }\r\n}\r\n"]}
|
|
@@ -65,9 +65,9 @@ var BaseCameraPointersInput = /** @class */ (function () {
|
|
|
65
65
|
_this.pointA = null;
|
|
66
66
|
_this.pointB = null;
|
|
67
67
|
}
|
|
68
|
-
else if (p.type === PointerEventTypes.POINTERDOWN &&
|
|
68
|
+
else if (p.type === PointerEventTypes.POINTERDOWN && (_this._currentActiveButton === -1 || isTouch)) {
|
|
69
69
|
try {
|
|
70
|
-
srcElement.setPointerCapture(evt.pointerId);
|
|
70
|
+
srcElement === null || srcElement === void 0 ? void 0 : srcElement.setPointerCapture(evt.pointerId);
|
|
71
71
|
}
|
|
72
72
|
catch (e) {
|
|
73
73
|
//Nothing to do with the error. Execution will continue.
|
|
@@ -100,11 +100,9 @@ var BaseCameraPointersInput = /** @class */ (function () {
|
|
|
100
100
|
else if (p.type === PointerEventTypes.POINTERDOUBLETAP) {
|
|
101
101
|
_this.onDoubleTap(evt.pointerType);
|
|
102
102
|
}
|
|
103
|
-
else if (
|
|
103
|
+
else if (p.type === PointerEventTypes.POINTERUP && (_this._currentActiveButton === evt.button || isTouch)) {
|
|
104
104
|
try {
|
|
105
|
-
|
|
106
|
-
srcElement.releasePointerCapture(evt.pointerId);
|
|
107
|
-
}
|
|
105
|
+
srcElement === null || srcElement === void 0 ? void 0 : srcElement.releasePointerCapture(evt.pointerId);
|
|
108
106
|
}
|
|
109
107
|
catch (e) {
|
|
110
108
|
//Nothing to do with the error.
|