@babylonjs/core 8.1.1 → 8.2.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/Actions/abstractActionManager.d.ts +4 -4
- package/Actions/action.d.ts +9 -9
- package/Actions/actionEvent.d.ts +5 -5
- package/Actions/actionManager.d.ts +6 -6
- package/Actions/condition.d.ts +1 -1
- package/Actions/directActions.d.ts +3 -3
- package/Actions/directAudioActions.d.ts +3 -3
- package/Actions/index.d.ts +8 -8
- package/Actions/interpolateValueAction.d.ts +3 -3
- package/Animations/animatable.core.d.ts +2 -2
- package/Animations/animatable.d.ts +8 -8
- package/Animations/animatable.interface.d.ts +2 -2
- package/Animations/animation.d.ts +13 -13
- package/Animations/animationGroup.d.ts +8 -8
- package/Animations/animationKey.d.ts +1 -1
- package/Animations/index.d.ts +12 -12
- package/Animations/pathCursor.d.ts +2 -2
- package/Animations/runtimeAnimation.d.ts +4 -4
- package/Audio/Interfaces/IAudioEngine.d.ts +4 -4
- package/Audio/analyser.d.ts +2 -2
- package/Audio/audioEngine.d.ts +4 -4
- package/Audio/audioSceneComponent.d.ts +8 -8
- package/Audio/index.d.ts +8 -8
- package/Audio/sound.d.ts +6 -6
- package/Audio/soundTrack.d.ts +4 -4
- package/Audio/weightedsound.d.ts +1 -1
- package/AudioV2/abstractAudio/abstractAudioBus.d.ts +5 -5
- package/AudioV2/abstractAudio/abstractAudioNode.d.ts +2 -2
- package/AudioV2/abstractAudio/abstractSound.d.ts +12 -12
- package/AudioV2/abstractAudio/abstractSound.js +1 -1
- package/AudioV2/abstractAudio/abstractSound.js.map +1 -1
- package/AudioV2/abstractAudio/abstractSoundInstance.d.ts +4 -4
- package/AudioV2/abstractAudio/audioBus.d.ts +7 -7
- package/AudioV2/abstractAudio/audioEngineV2.d.ts +8 -8
- package/AudioV2/abstractAudio/components/spatialAudioAttacherComponent.d.ts +5 -5
- package/AudioV2/abstractAudio/index.d.ts +10 -10
- package/AudioV2/abstractAudio/mainAudioBus.d.ts +3 -3
- package/AudioV2/abstractAudio/mainAudioOut.d.ts +2 -2
- package/AudioV2/abstractAudio/staticSound.d.ts +5 -5
- package/AudioV2/abstractAudio/staticSoundBuffer.d.ts +1 -1
- package/AudioV2/abstractAudio/staticSoundInstance.d.ts +3 -3
- package/AudioV2/abstractAudio/streamingSound.d.ts +4 -4
- package/AudioV2/abstractAudio/streamingSoundInstance.d.ts +4 -4
- package/AudioV2/abstractAudio/subNodes/abstractAudioSubGraph.d.ts +3 -3
- package/AudioV2/abstractAudio/subNodes/abstractAudioSubNode.d.ts +2 -2
- package/AudioV2/abstractAudio/subNodes/audioAnalyzerSubNode.d.ts +6 -6
- package/AudioV2/abstractAudio/subNodes/spatialAudioSubNode.d.ts +9 -9
- package/AudioV2/abstractAudio/subNodes/stereoAudioSubNode.d.ts +6 -6
- package/AudioV2/abstractAudio/subNodes/volumeAudioSubNode.d.ts +4 -4
- package/AudioV2/abstractAudio/subProperties/abstractSpatialAudio.d.ts +4 -4
- package/AudioV2/abstractAudio/subProperties/abstractSpatialAudioListener.d.ts +4 -4
- package/AudioV2/abstractAudio/subProperties/audioAnalyzer.d.ts +3 -3
- package/AudioV2/abstractAudio/subProperties/index.d.ts +4 -4
- package/AudioV2/abstractAudio/subProperties/spatialAudio.d.ts +6 -6
- package/AudioV2/abstractAudio/subProperties/spatialAudioListener.d.ts +6 -6
- package/AudioV2/abstractAudio/subProperties/stereoAudio.d.ts +2 -2
- package/AudioV2/index.d.ts +4 -4
- package/AudioV2/webAudio/index.d.ts +5 -5
- package/AudioV2/webAudio/subNodes/spatialWebAudioSubNode.d.ts +4 -4
- package/AudioV2/webAudio/subNodes/stereoWebAudioSubNode.d.ts +3 -3
- package/AudioV2/webAudio/subNodes/volumeWebAudioSubNode.d.ts +3 -3
- package/AudioV2/webAudio/subNodes/webAudioAnalyzerSubNode.d.ts +4 -4
- package/AudioV2/webAudio/subNodes/webAudioBaseSubGraph.d.ts +7 -7
- package/AudioV2/webAudio/subNodes/webAudioBusAndSoundSubGraph.d.ts +7 -7
- package/AudioV2/webAudio/subProperties/spatialWebAudio.d.ts +2 -2
- package/AudioV2/webAudio/subProperties/spatialWebAudioListener.d.ts +2 -2
- package/AudioV2/webAudio/webAudioBus.d.ts +7 -7
- package/AudioV2/webAudio/webAudioEngine.d.ts +11 -11
- package/AudioV2/webAudio/webAudioMainBus.d.ts +6 -6
- package/AudioV2/webAudio/webAudioMainOut.d.ts +3 -3
- package/AudioV2/webAudio/webAudioNode.d.ts +4 -4
- package/AudioV2/webAudio/webAudioStaticSound.d.ts +13 -13
- package/AudioV2/webAudio/webAudioStreamingSound.d.ts +10 -10
- package/AudioV2/webAudio/webAudioUnmuteUI.d.ts +1 -1
- package/BakedVertexAnimation/bakedVertexAnimationManager.d.ts +5 -5
- package/BakedVertexAnimation/index.d.ts +2 -2
- package/BakedVertexAnimation/vertexAnimationBaker.d.ts +4 -4
- package/Behaviors/Cameras/autoRotationBehavior.d.ts +3 -3
- package/Behaviors/Cameras/bouncingBehavior.d.ts +3 -3
- package/Behaviors/Cameras/framingBehavior.d.ts +7 -7
- package/Behaviors/Cameras/index.d.ts +3 -3
- package/Behaviors/Meshes/attachToBoxBehavior.d.ts +3 -3
- package/Behaviors/Meshes/baseSixDofDragBehavior.d.ts +9 -9
- package/Behaviors/Meshes/fadeInOutBehavior.d.ts +2 -2
- package/Behaviors/Meshes/followBehavior.d.ts +4 -4
- package/Behaviors/Meshes/handConstraintBehavior.d.ts +4 -4
- package/Behaviors/Meshes/index.d.ts +9 -9
- package/Behaviors/Meshes/multiPointerScaleBehavior.d.ts +2 -2
- package/Behaviors/Meshes/pointerDragBehavior.d.ts +8 -8
- package/Behaviors/Meshes/sixDofDragBehavior.d.ts +4 -4
- package/Behaviors/Meshes/surfaceMagnetismBehavior.d.ts +5 -5
- package/Behaviors/behavior.d.ts +1 -1
- package/Behaviors/index.d.ts +3 -3
- package/Bones/bone.d.ts +8 -8
- package/Bones/boneIKController.d.ts +4 -4
- package/Bones/boneLookController.d.ts +4 -4
- package/Bones/index.d.ts +4 -4
- package/Bones/skeleton.d.ts +13 -13
- package/Buffers/buffer.align.d.ts +2 -2
- package/Buffers/buffer.d.ts +3 -3
- package/Buffers/buffer.nonFloatVertexBuffers.d.ts +3 -3
- package/Buffers/bufferUtils.d.ts +1 -1
- package/Buffers/index.d.ts +5 -5
- package/Buffers/storageBuffer.d.ts +2 -2
- package/Cameras/Inputs/BaseCameraMouseWheelInput.d.ts +3 -3
- package/Cameras/Inputs/BaseCameraPointersInput.d.ts +5 -5
- package/Cameras/Inputs/arcRotateCameraGamepadInput.d.ts +4 -4
- package/Cameras/Inputs/arcRotateCameraKeyboardMoveInput.d.ts +2 -2
- package/Cameras/Inputs/arcRotateCameraMouseWheelInput.d.ts +4 -4
- package/Cameras/Inputs/arcRotateCameraPointersInput.d.ts +5 -5
- package/Cameras/Inputs/arcRotateCameraVRDeviceOrientationInput.d.ts +3 -3
- package/Cameras/Inputs/flyCameraKeyboardInput.d.ts +2 -2
- package/Cameras/Inputs/flyCameraMouseInput.d.ts +2 -2
- package/Cameras/Inputs/followCameraKeyboardMoveInput.d.ts +2 -2
- package/Cameras/Inputs/followCameraMouseWheelInput.d.ts +2 -2
- package/Cameras/Inputs/followCameraPointersInput.d.ts +4 -4
- package/Cameras/Inputs/freeCameraDeviceOrientationInput.d.ts +5 -5
- package/Cameras/Inputs/freeCameraGamepadInput.d.ts +4 -4
- package/Cameras/Inputs/freeCameraKeyboardMoveInput.d.ts +2 -2
- package/Cameras/Inputs/freeCameraMouseInput.d.ts +3 -3
- package/Cameras/Inputs/freeCameraMouseWheelInput.d.ts +4 -4
- package/Cameras/Inputs/freeCameraTouchInput.d.ts +2 -2
- package/Cameras/Inputs/freeCameraVirtualJoystickInput.d.ts +4 -4
- package/Cameras/Inputs/index.d.ts +19 -19
- package/Cameras/RigModes/index.d.ts +3 -3
- package/Cameras/RigModes/stereoscopicAnaglyphRigMode.d.ts +1 -1
- package/Cameras/RigModes/stereoscopicRigMode.d.ts +1 -1
- package/Cameras/RigModes/vrRigMode.d.ts +1 -1
- package/Cameras/Stereoscopic/anaglyphArcRotateCamera.d.ts +3 -3
- package/Cameras/Stereoscopic/anaglyphFreeCamera.d.ts +3 -3
- package/Cameras/Stereoscopic/anaglyphGamepadCamera.d.ts +3 -3
- package/Cameras/Stereoscopic/anaglyphUniversalCamera.d.ts +3 -3
- package/Cameras/Stereoscopic/index.d.ts +9 -9
- package/Cameras/Stereoscopic/stereoscopicArcRotateCamera.d.ts +3 -3
- package/Cameras/Stereoscopic/stereoscopicFreeCamera.d.ts +3 -3
- package/Cameras/Stereoscopic/stereoscopicGamepadCamera.d.ts +3 -3
- package/Cameras/Stereoscopic/stereoscopicScreenUniversalCamera.d.ts +5 -5
- package/Cameras/Stereoscopic/stereoscopicUniversalCamera.d.ts +3 -3
- package/Cameras/VR/index.d.ts +5 -5
- package/Cameras/VR/vrCameraMetrics.d.ts +1 -1
- package/Cameras/VR/vrDeviceOrientationArcRotateCamera.d.ts +5 -5
- package/Cameras/VR/vrDeviceOrientationFreeCamera.d.ts +4 -4
- package/Cameras/VR/vrDeviceOrientationGamepadCamera.d.ts +5 -5
- package/Cameras/VR/vrExperienceHelper.d.ts +15 -15
- package/Cameras/arcRotateCamera.d.ts +12 -12
- package/Cameras/arcRotateCameraInputsManager.d.ts +2 -2
- package/Cameras/camera.d.ts +16 -16
- package/Cameras/cameraInputsManager.d.ts +2 -2
- package/Cameras/deviceOrientationCamera.d.ts +5 -5
- package/Cameras/flyCamera.d.ts +6 -6
- package/Cameras/flyCameraInputsManager.d.ts +2 -2
- package/Cameras/followCamera.d.ts +6 -6
- package/Cameras/followCameraInputsManager.d.ts +2 -2
- package/Cameras/freeCamera.d.ts +5 -5
- package/Cameras/freeCameraInputsManager.d.ts +5 -5
- package/Cameras/gamepadCamera.d.ts +3 -3
- package/Cameras/index.d.ts +20 -20
- package/Cameras/targetCamera.d.ts +4 -4
- package/Cameras/touchCamera.d.ts +3 -3
- package/Cameras/universalCamera.d.ts +4 -4
- package/Cameras/virtualJoysticksCamera.d.ts +4 -4
- package/Collisions/collider.d.ts +4 -4
- package/Collisions/collisionCoordinator.d.ts +5 -5
- package/Collisions/index.d.ts +10 -10
- package/Collisions/intersectionInfo.d.ts +1 -1
- package/Collisions/meshCollisionData.d.ts +5 -5
- package/Collisions/pickingInfo.d.ts +6 -6
- package/Compat/index.d.ts +1 -1
- package/Compute/computeEffect.d.ts +4 -4
- package/Compute/computeShader.d.ts +8 -8
- package/Compute/index.d.ts +2 -2
- package/Culling/Helper/computeShaderBoundingHelper.d.ts +2 -2
- package/Culling/Helper/transformFeedbackBoundingHelper.d.ts +3 -3
- package/Culling/Octrees/index.d.ts +3 -3
- package/Culling/Octrees/octree.d.ts +7 -7
- package/Culling/Octrees/octreeBlock.d.ts +4 -4
- package/Culling/Octrees/octreeSceneComponent.d.ts +9 -9
- package/Culling/boundingBox.d.ts +6 -6
- package/Culling/boundingInfo.d.ts +7 -7
- package/Culling/boundingSphere.d.ts +3 -3
- package/Culling/index.d.ts +8 -8
- package/Culling/ray.core.d.ts +4 -4
- package/Culling/ray.core.js +1 -1
- package/Culling/ray.core.js.map +1 -1
- package/Culling/ray.d.ts +1 -1
- package/Debug/ISkeletonViewer.d.ts +2 -2
- package/Debug/axesViewer.d.ts +4 -4
- package/Debug/boneAxesViewer.d.ts +6 -6
- package/Debug/debugLayer.d.ts +4 -4
- package/Debug/debugLayer.js +8 -1
- package/Debug/debugLayer.js.map +1 -1
- package/Debug/directionalLightFrustumViewer.d.ts +3 -3
- package/Debug/index.d.ts +8 -8
- package/Debug/physicsViewer.d.ts +11 -11
- package/Debug/rayHelper.d.ts +6 -6
- package/Debug/skeletonViewer.d.ts +9 -9
- package/Decorators/nodeDecorator.d.ts +2 -2
- package/DeviceInput/InputDevices/deviceSource.d.ts +5 -5
- package/DeviceInput/InputDevices/deviceSourceManager.d.ts +8 -8
- package/DeviceInput/InputDevices/deviceTypes.d.ts +1 -1
- package/DeviceInput/eventFactory.d.ts +4 -4
- package/DeviceInput/index.d.ts +4 -4
- package/DeviceInput/inputInterfaces.d.ts +2 -2
- package/DeviceInput/internalDeviceSourceManager.d.ts +8 -8
- package/DeviceInput/nativeDeviceInputSystem.d.ts +3 -3
- package/DeviceInput/webDeviceInputSystem.d.ts +4 -4
- package/Engines/AbstractEngine/abstractEngine.alpha.d.ts +1 -1
- package/Engines/AbstractEngine/abstractEngine.cubeTexture.d.ts +4 -4
- package/Engines/AbstractEngine/abstractEngine.dom.d.ts +3 -3
- package/Engines/AbstractEngine/abstractEngine.loadingScreen.d.ts +2 -2
- package/Engines/AbstractEngine/abstractEngine.query.d.ts +3 -3
- package/Engines/AbstractEngine/abstractEngine.renderPass.d.ts +1 -1
- package/Engines/AbstractEngine/abstractEngine.states.d.ts +3 -3
- package/Engines/AbstractEngine/abstractEngine.texture.d.ts +4 -4
- package/Engines/AbstractEngine/abstractEngine.timeQuery.d.ts +3 -3
- package/Engines/AbstractEngine/abstractEngine.views.d.ts +4 -4
- package/Engines/AbstractEngine/index.d.ts +10 -10
- package/Engines/Extensions/engine.alpha.d.ts +1 -1
- package/Engines/Extensions/engine.computeShader.d.ts +7 -7
- package/Engines/Extensions/engine.cubeTexture.d.ts +5 -5
- package/Engines/Extensions/engine.debugging.d.ts +1 -1
- package/Engines/Extensions/engine.dynamicBuffer.d.ts +3 -3
- package/Engines/Extensions/engine.dynamicTexture.d.ts +4 -4
- package/Engines/Extensions/engine.multiRender.d.ts +5 -5
- package/Engines/Extensions/engine.multiview.d.ts +9 -9
- package/Engines/Extensions/engine.prefilteredCubeTexture.d.ts +4 -4
- package/Engines/Extensions/engine.query.d.ts +7 -7
- package/Engines/Extensions/engine.rawTexture.d.ts +4 -4
- package/Engines/Extensions/engine.readTexture.d.ts +4 -4
- package/Engines/Extensions/engine.renderTarget.d.ts +6 -6
- package/Engines/Extensions/engine.renderTargetCube.d.ts +3 -3
- package/Engines/Extensions/engine.renderTargetTexture.d.ts +3 -3
- package/Engines/Extensions/engine.textureSelector.d.ts +2 -2
- package/Engines/Extensions/engine.transformFeedback.d.ts +3 -3
- package/Engines/Extensions/engine.uniformBuffer.d.ts +4 -4
- package/Engines/Extensions/engine.videoTexture.d.ts +4 -4
- package/Engines/Extensions/engine.views.d.ts +1 -1
- package/Engines/Extensions/index.d.ts +20 -20
- package/Engines/IPipelineContext.d.ts +4 -4
- package/Engines/Native/index.d.ts +2 -2
- package/Engines/Native/nativeDataStream.d.ts +1 -1
- package/Engines/Native/nativeHardwareTexture.d.ts +3 -3
- package/Engines/Native/nativeInterfaces.d.ts +6 -6
- package/Engines/Native/nativePipelineContext.d.ts +8 -8
- package/Engines/Native/nativeRenderTargetWrapper.d.ts +5 -5
- package/Engines/Native/nativeShaderProcessingContext.d.ts +1 -1
- package/Engines/Native/nativeShaderProcessors.d.ts +4 -4
- package/Engines/Native/validatedNativeDataStream.d.ts +2 -2
- package/Engines/Processors/Expressions/Operators/index.d.ts +4 -4
- package/Engines/Processors/Expressions/Operators/shaderDefineAndOperator.d.ts +1 -1
- package/Engines/Processors/Expressions/Operators/shaderDefineArithmeticOperator.d.ts +1 -1
- package/Engines/Processors/Expressions/Operators/shaderDefineArithmeticOperator.js +2 -6
- package/Engines/Processors/Expressions/Operators/shaderDefineArithmeticOperator.js.map +1 -1
- package/Engines/Processors/Expressions/Operators/shaderDefineIsDefinedOperator.d.ts +1 -1
- package/Engines/Processors/Expressions/Operators/shaderDefineOrOperator.d.ts +1 -1
- package/Engines/Processors/Expressions/index.d.ts +2 -2
- package/Engines/Processors/iShaderProcessor.d.ts +8 -4
- package/Engines/Processors/iShaderProcessor.js.map +1 -1
- package/Engines/Processors/index.d.ts +9 -9
- package/Engines/Processors/shaderCodeConditionNode.d.ts +5 -3
- package/Engines/Processors/shaderCodeConditionNode.js +2 -2
- package/Engines/Processors/shaderCodeConditionNode.js.map +1 -1
- package/Engines/Processors/shaderCodeNode.d.ts +4 -2
- package/Engines/Processors/shaderCodeNode.js +3 -2
- package/Engines/Processors/shaderCodeNode.js.map +1 -1
- package/Engines/Processors/shaderCodeTestNode.d.ts +2 -2
- package/Engines/Processors/shaderProcessingOptions.d.ts +2 -2
- package/Engines/Processors/shaderProcessor.d.ts +6 -6
- package/Engines/Processors/shaderProcessor.js +16 -14
- package/Engines/Processors/shaderProcessor.js.map +1 -1
- package/Engines/WebGL/webGL2ShaderProcessors.d.ts +2 -2
- package/Engines/WebGL/webGLHardwareTexture.d.ts +2 -2
- package/Engines/WebGL/webGLPipelineContext.d.ts +6 -6
- package/Engines/WebGL/webGLRenderTargetWrapper.d.ts +5 -5
- package/Engines/WebGL/webGLShaderProcessors.d.ts +4 -4
- package/Engines/WebGPU/Extensions/engine.alpha.d.ts +2 -2
- package/Engines/WebGPU/Extensions/engine.computeShader.d.ts +7 -7
- package/Engines/WebGPU/Extensions/engine.cubeTexture.d.ts +5 -5
- package/Engines/WebGPU/Extensions/engine.dynamicTexture.d.ts +4 -4
- package/Engines/WebGPU/Extensions/engine.multiRender.d.ts +5 -5
- package/Engines/WebGPU/Extensions/engine.query.d.ts +1 -1
- package/Engines/WebGPU/Extensions/engine.rawTexture.d.ts +4 -4
- package/Engines/WebGPU/Extensions/engine.readTexture.d.ts +3 -3
- package/Engines/WebGPU/Extensions/engine.renderTarget.d.ts +6 -6
- package/Engines/WebGPU/Extensions/engine.renderTargetCube.d.ts +3 -3
- package/Engines/WebGPU/Extensions/engine.renderTargetTexture.d.ts +3 -3
- package/Engines/WebGPU/Extensions/engine.videoTexture.d.ts +4 -4
- package/Engines/WebGPU/Extensions/index.d.ts +13 -13
- package/Engines/WebGPU/webgpuBufferManager.d.ts +4 -4
- package/Engines/WebGPU/webgpuBundleList.d.ts +1 -1
- package/Engines/WebGPU/webgpuCacheBindGroups.d.ts +5 -5
- package/Engines/WebGPU/webgpuCacheRenderPipeline.d.ts +5 -5
- package/Engines/WebGPU/webgpuCacheRenderPipelineString.d.ts +2 -2
- package/Engines/WebGPU/webgpuCacheRenderPipelineTree.d.ts +2 -2
- package/Engines/WebGPU/webgpuCacheSampler.d.ts +2 -2
- package/Engines/WebGPU/webgpuClearQuad.d.ts +7 -7
- package/Engines/WebGPU/webgpuComputeContext.d.ts +3 -3
- package/Engines/WebGPU/webgpuComputePipelineContext.d.ts +3 -3
- package/Engines/WebGPU/webgpuDepthCullingState.d.ts +3 -3
- package/Engines/WebGPU/webgpuDrawContext.d.ts +4 -4
- package/Engines/WebGPU/webgpuExternalTexture.d.ts +1 -1
- package/Engines/WebGPU/webgpuHardwareTexture.d.ts +3 -3
- package/Engines/WebGPU/webgpuMaterialContext.d.ts +5 -5
- package/Engines/WebGPU/webgpuOcclusionQuery.d.ts +2 -2
- package/Engines/WebGPU/webgpuPerfCounter.d.ts +1 -1
- package/Engines/WebGPU/webgpuPipelineContext.d.ts +8 -8
- package/Engines/WebGPU/webgpuQuerySet.d.ts +3 -3
- package/Engines/WebGPU/webgpuRenderTargetWrapper.d.ts +4 -4
- package/Engines/WebGPU/webgpuShaderProcessingContext.d.ts +2 -2
- package/Engines/WebGPU/webgpuShaderProcessor.d.ts +4 -4
- package/Engines/WebGPU/webgpuShaderProcessorsGLSL.d.ts +5 -5
- package/Engines/WebGPU/webgpuShaderProcessorsWGSL.d.ts +22 -18
- package/Engines/WebGPU/webgpuShaderProcessorsWGSL.js +64 -21
- package/Engines/WebGPU/webgpuShaderProcessorsWGSL.js.map +1 -1
- package/Engines/WebGPU/webgpuSnapshotRendering.d.ts +2 -2
- package/Engines/WebGPU/webgpuStencilStateComposer.d.ts +2 -2
- package/Engines/WebGPU/webgpuTextureHelper.d.ts +2 -2
- package/Engines/WebGPU/webgpuTextureManager.d.ts +6 -6
- package/Engines/WebGPU/webgpuTimestampQuery.d.ts +4 -4
- package/Engines/abstractEngine.d.ts +41 -41
- package/Engines/abstractEngine.js +2 -2
- package/Engines/abstractEngine.js.map +1 -1
- package/Engines/engine.common.d.ts +3 -3
- package/Engines/engine.d.ts +30 -30
- package/Engines/engineFactory.d.ts +1 -1
- package/Engines/engineStore.d.ts +4 -4
- package/Engines/index.d.ts +39 -39
- package/Engines/nativeEngine.d.ts +27 -27
- package/Engines/nullEngine.d.ts +13 -13
- package/Engines/renderTargetWrapper.d.ts +4 -4
- package/Engines/shaderStore.d.ts +1 -1
- package/Engines/thinEngine.d.ts +27 -27
- package/Engines/thinEngine.functions.d.ts +5 -5
- package/Engines/thinWebGPUEngine.d.ts +8 -8
- package/Engines/webgpuEngine.d.ts +48 -48
- package/Events/deviceInputEvents.d.ts +1 -1
- package/Events/index.d.ts +4 -4
- package/Events/keyboardEvents.d.ts +1 -1
- package/Events/pointerEvents.d.ts +6 -6
- package/FlowGraph/Blocks/Data/Math/flowGraphMathBlocks.d.ts +12 -7
- package/FlowGraph/Blocks/Data/Math/flowGraphMathBlocks.js +26 -7
- package/FlowGraph/Blocks/Data/Math/flowGraphMathBlocks.js.map +1 -1
- package/FlowGraph/Blocks/Data/Math/flowGraphMathCombineExtractBlocks.d.ts +1 -1
- package/FlowGraph/Blocks/Data/Math/flowGraphMatrixMathBlocks.d.ts +2 -2
- package/FlowGraph/Blocks/Data/Math/flowGraphVectorMathBlocks.d.ts +3 -3
- package/FlowGraph/Blocks/Data/Math/index.d.ts +4 -4
- package/FlowGraph/Blocks/Data/Transformers/flowGraphJsonPointerParserBlock.d.ts +1 -1
- package/FlowGraph/Blocks/Data/Transformers/flowGraphTypeToTypeBlocks.d.ts +1 -1
- package/FlowGraph/Blocks/Data/Transformers/index.d.ts +2 -2
- package/FlowGraph/Blocks/Data/Utils/index.d.ts +5 -5
- package/FlowGraph/Blocks/Data/flowGraphBinaryOperationBlock.d.ts +5 -5
- package/FlowGraph/Blocks/Data/flowGraphCachedOperationBlock.d.ts +5 -5
- package/FlowGraph/Blocks/Data/flowGraphConditionalDataBlock.d.ts +4 -4
- package/FlowGraph/Blocks/Data/flowGraphConstantBlock.d.ts +1 -1
- package/FlowGraph/Blocks/Data/flowGraphConstantOperationBlock.d.ts +4 -4
- package/FlowGraph/Blocks/Data/flowGraphGetPropertyBlock.d.ts +1 -1
- package/FlowGraph/Blocks/Data/flowGraphGetVariableBlock.d.ts +4 -4
- package/FlowGraph/Blocks/Data/flowGraphTernaryOperationBlock.d.ts +5 -5
- package/FlowGraph/Blocks/Data/flowGraphTransformCoordinatesSystemBlock.d.ts +6 -6
- package/FlowGraph/Blocks/Data/flowGraphUnaryOperationBlock.d.ts +5 -5
- package/FlowGraph/Blocks/Data/index.d.ts +12 -12
- package/FlowGraph/Blocks/Event/flowGraphMeshPickEventBlock.d.ts +6 -6
- package/FlowGraph/Blocks/Event/flowGraphPointerOutEventBlock.d.ts +1 -1
- package/FlowGraph/Blocks/Event/flowGraphPointerOverEventBlock.d.ts +1 -1
- package/FlowGraph/Blocks/Event/flowGraphReceiveCustomEventBlock.d.ts +4 -4
- package/FlowGraph/Blocks/Event/flowGraphSceneReadyEventBlock.d.ts +2 -2
- package/FlowGraph/Blocks/Event/flowGraphSceneTickEventBlock.d.ts +1 -1
- package/FlowGraph/Blocks/Event/flowGraphSendCustomEventBlock.d.ts +3 -3
- package/FlowGraph/Blocks/Event/index.d.ts +7 -7
- package/FlowGraph/Blocks/Execution/Animation/flowGraphInterpolationBlock.d.ts +1 -1
- package/FlowGraph/Blocks/Execution/Animation/flowGraphInterpolationBlock.js +1 -1
- package/FlowGraph/Blocks/Execution/Animation/flowGraphInterpolationBlock.js.map +1 -1
- package/FlowGraph/Blocks/Execution/Animation/flowGraphPauseAnimationBlock.d.ts +4 -4
- package/FlowGraph/Blocks/Execution/Animation/flowGraphPlayAnimationBlock.d.ts +4 -4
- package/FlowGraph/Blocks/Execution/Animation/flowGraphStopAnimationBlock.d.ts +3 -3
- package/FlowGraph/Blocks/Execution/Animation/index.d.ts +6 -6
- package/FlowGraph/Blocks/Execution/ControlFlow/flowGraphBranchBlock.d.ts +5 -5
- package/FlowGraph/Blocks/Execution/ControlFlow/flowGraphCancelDelayBlock.d.ts +5 -5
- package/FlowGraph/Blocks/Execution/ControlFlow/flowGraphCounterBlock.d.ts +5 -5
- package/FlowGraph/Blocks/Execution/ControlFlow/flowGraphDebounceBlock.d.ts +1 -1
- package/FlowGraph/Blocks/Execution/ControlFlow/flowGraphDoNBlock.d.ts +6 -6
- package/FlowGraph/Blocks/Execution/ControlFlow/flowGraphFlipFlopBlock.d.ts +1 -1
- package/FlowGraph/Blocks/Execution/ControlFlow/flowGraphForLoopBlock.d.ts +4 -4
- package/FlowGraph/Blocks/Execution/ControlFlow/flowGraphMultiGateBlock.d.ts +5 -5
- package/FlowGraph/Blocks/Execution/ControlFlow/flowGraphSequenceBlock.d.ts +4 -4
- package/FlowGraph/Blocks/Execution/ControlFlow/flowGraphSetDelayBlock.d.ts +5 -5
- package/FlowGraph/Blocks/Execution/ControlFlow/flowGraphSwitchBlock.d.ts +5 -5
- package/FlowGraph/Blocks/Execution/ControlFlow/flowGraphThrottleBlock.d.ts +5 -5
- package/FlowGraph/Blocks/Execution/ControlFlow/flowGraphWaitAllBlock.d.ts +4 -4
- package/FlowGraph/Blocks/Execution/ControlFlow/flowGraphWhileLoopBlock.d.ts +5 -5
- package/FlowGraph/Blocks/Execution/ControlFlow/index.d.ts +14 -14
- package/FlowGraph/Blocks/Execution/flowGraphConsoleLogBlock.d.ts +4 -4
- package/FlowGraph/Blocks/Execution/flowGraphSetVariableBlock.d.ts +4 -4
- package/FlowGraph/Blocks/Execution/index.d.ts +3 -3
- package/FlowGraph/Blocks/flowGraphBlockFactory.d.ts +2 -2
- package/FlowGraph/Blocks/index.d.ts +5 -5
- package/FlowGraph/CustomTypes/index.d.ts +2 -2
- package/FlowGraph/flowGraph.d.ts +9 -9
- package/FlowGraph/flowGraphAsyncExecutionBlock.d.ts +4 -4
- package/FlowGraph/flowGraphBlock.d.ts +7 -7
- package/FlowGraph/flowGraphContext.d.ts +10 -10
- package/FlowGraph/flowGraphCoordinator.d.ts +4 -4
- package/FlowGraph/flowGraphDataConnection.d.ts +4 -4
- package/FlowGraph/flowGraphEventBlock.d.ts +3 -3
- package/FlowGraph/flowGraphExecutionBlock.d.ts +4 -4
- package/FlowGraph/flowGraphExecutionBlockWithOutSignal.d.ts +3 -3
- package/FlowGraph/flowGraphParser.d.ts +10 -10
- package/FlowGraph/flowGraphPathConverter.d.ts +3 -3
- package/FlowGraph/flowGraphPathConverterComponent.d.ts +6 -6
- package/FlowGraph/flowGraphPathConverterComponent.js +1 -1
- package/FlowGraph/flowGraphPathConverterComponent.js.map +1 -1
- package/FlowGraph/flowGraphRichTypes.d.ts +4 -4
- package/FlowGraph/flowGraphSceneEventCoordinator.d.ts +1 -1
- package/FlowGraph/flowGraphSignalConnection.d.ts +3 -3
- package/FlowGraph/index.d.ts +18 -18
- package/FlowGraph/serialization.d.ts +2 -2
- package/FlowGraph/typeDefinitions.d.ts +1 -1
- package/FlowGraph/utils.d.ts +3 -3
- package/FrameGraph/Node/Blocks/Layers/glowLayerBlock.d.ts +1 -1
- package/FrameGraph/Node/Blocks/Layers/highlightLayerBlock.d.ts +1 -1
- package/FrameGraph/Node/Blocks/PostProcesses/anaglyphPostProcessBlock.d.ts +1 -1
- package/FrameGraph/Node/Blocks/PostProcesses/basePostProcessBlock.d.ts +1 -1
- package/FrameGraph/Node/Blocks/PostProcesses/blackAndWhitePostProcessBlock.d.ts +1 -1
- package/FrameGraph/Node/Blocks/PostProcesses/bloomPostProcessBlock.d.ts +2 -2
- package/FrameGraph/Node/Blocks/PostProcesses/blurPostProcessBlock.d.ts +1 -1
- package/FrameGraph/Node/Blocks/PostProcesses/chromaticAberrationPostProcessBlock.d.ts +1 -1
- package/FrameGraph/Node/Blocks/PostProcesses/circleOfConfusionPostProcessBlock.d.ts +1 -1
- package/FrameGraph/Node/Blocks/PostProcesses/depthOfFieldPostProcessBlock.d.ts +2 -2
- package/FrameGraph/Node/Blocks/PostProcesses/extractHighlightsPostProcessBlock.d.ts +1 -1
- package/FrameGraph/Node/Blocks/PostProcesses/imageProcessingPostProcessBlock.d.ts +71 -0
- package/FrameGraph/Node/Blocks/PostProcesses/imageProcessingPostProcessBlock.js +246 -0
- package/FrameGraph/Node/Blocks/PostProcesses/imageProcessingPostProcessBlock.js.map +1 -0
- package/FrameGraph/Node/Blocks/PostProcesses/passPostProcessBlock.d.ts +1 -1
- package/FrameGraph/Node/Blocks/PostProcesses/ssrPostProcessBlock.d.ts +2 -2
- package/FrameGraph/Node/Blocks/Rendering/baseObjectRendererBlock.d.ts +3 -3
- package/FrameGraph/Node/Blocks/Rendering/baseObjectRendererBlock.js +4 -4
- package/FrameGraph/Node/Blocks/Rendering/baseObjectRendererBlock.js.map +1 -1
- package/FrameGraph/Node/Blocks/Rendering/baseShadowGeneratorBlock.d.ts +1 -1
- package/FrameGraph/Node/Blocks/Rendering/csmShadowGeneratorBlock.d.ts +2 -2
- package/FrameGraph/Node/Blocks/Rendering/geometryRendererBlock.d.ts +2 -2
- package/FrameGraph/Node/Blocks/Rendering/objectRendererBlock.d.ts +1 -1
- package/FrameGraph/Node/Blocks/Rendering/shadowGeneratorBlock.d.ts +1 -1
- package/FrameGraph/Node/Blocks/Rendering/taaObjectRendererBlock.d.ts +1 -1
- package/FrameGraph/Node/Blocks/Rendering/utilityLayerRendererBlock.d.ts +2 -2
- package/FrameGraph/Node/Blocks/Teleport/teleportInBlock.d.ts +1 -1
- package/FrameGraph/Node/Blocks/Teleport/teleportOutBlock.d.ts +1 -1
- package/FrameGraph/Node/Blocks/Textures/clearBlock.d.ts +3 -3
- package/FrameGraph/Node/Blocks/Textures/copyTextureBlock.d.ts +2 -2
- package/FrameGraph/Node/Blocks/Textures/generateMipmapsBlock.d.ts +2 -2
- package/FrameGraph/Node/Blocks/cullObjectsBlock.d.ts +2 -2
- package/FrameGraph/Node/Blocks/elbowBlock.d.ts +1 -1
- package/FrameGraph/Node/Blocks/executeBlock.d.ts +2 -2
- package/FrameGraph/Node/Blocks/index.d.ts +30 -29
- package/FrameGraph/Node/Blocks/index.js +1 -0
- package/FrameGraph/Node/Blocks/index.js.map +1 -1
- package/FrameGraph/Node/Blocks/inputBlock.d.ts +3 -3
- package/FrameGraph/Node/Blocks/outputBlock.d.ts +2 -2
- package/FrameGraph/Node/Blocks/resourceContainerBlock.d.ts +1 -1
- package/FrameGraph/Node/nodeRenderGraph.d.ts +4 -4
- package/FrameGraph/Node/nodeRenderGraphBlock.d.ts +3 -3
- package/FrameGraph/Node/nodeRenderGraphBlockConnectionPoint.d.ts +2 -2
- package/FrameGraph/Node/nodeRenderGraphConnectionPointCustomObject.d.ts +2 -2
- package/FrameGraph/Passes/cullPass.d.ts +1 -1
- package/FrameGraph/Passes/renderPass.d.ts +1 -1
- package/FrameGraph/Tasks/Layers/baseLayerTask.d.ts +6 -6
- package/FrameGraph/Tasks/Layers/glowLayerTask.d.ts +1 -1
- package/FrameGraph/Tasks/Layers/highlightLayerTask.d.ts +1 -1
- package/FrameGraph/Tasks/Misc/cullObjectsTask.d.ts +1 -1
- package/FrameGraph/Tasks/Misc/executeTask.d.ts +1 -1
- package/FrameGraph/Tasks/PostProcesses/anaglyphTask.d.ts +1 -1
- package/FrameGraph/Tasks/PostProcesses/blackAndWhiteTask.d.ts +1 -1
- package/FrameGraph/Tasks/PostProcesses/bloomMergeTask.d.ts +1 -1
- package/FrameGraph/Tasks/PostProcesses/bloomTask.d.ts +1 -1
- package/FrameGraph/Tasks/PostProcesses/blurTask.d.ts +1 -1
- package/FrameGraph/Tasks/PostProcesses/chromaticAberrationTask.d.ts +1 -1
- package/FrameGraph/Tasks/PostProcesses/circleOfConfusionTask.d.ts +1 -1
- package/FrameGraph/Tasks/PostProcesses/depthOfFieldBlurTask.d.ts +1 -1
- package/FrameGraph/Tasks/PostProcesses/depthOfFieldMergeTask.d.ts +1 -1
- package/FrameGraph/Tasks/PostProcesses/depthOfFieldTask.d.ts +1 -1
- package/FrameGraph/Tasks/PostProcesses/extractHighlightsTask.d.ts +1 -1
- package/FrameGraph/Tasks/PostProcesses/imageProcessingTask.d.ts +17 -0
- package/FrameGraph/Tasks/PostProcesses/imageProcessingTask.js +23 -0
- package/FrameGraph/Tasks/PostProcesses/imageProcessingTask.js.map +1 -0
- package/FrameGraph/Tasks/PostProcesses/passTask.d.ts +1 -1
- package/FrameGraph/Tasks/PostProcesses/postProcessTask.d.ts +1 -1
- package/FrameGraph/Tasks/PostProcesses/ssrBlurTask.d.ts +1 -1
- package/FrameGraph/Tasks/PostProcesses/ssrRenderingPipelineTask.d.ts +1 -1
- package/FrameGraph/Tasks/PostProcesses/ssrTask.d.ts +1 -1
- package/FrameGraph/Tasks/Rendering/csmShadowGeneratorTask.d.ts +2 -2
- package/FrameGraph/Tasks/Rendering/geometryRendererTask.d.ts +2 -2
- package/FrameGraph/Tasks/Rendering/objectRendererTask.d.ts +5 -4
- package/FrameGraph/Tasks/Rendering/objectRendererTask.js +5 -4
- package/FrameGraph/Tasks/Rendering/objectRendererTask.js.map +1 -1
- package/FrameGraph/Tasks/Rendering/shadowGeneratorTask.d.ts +2 -2
- package/FrameGraph/Tasks/Rendering/taaObjectRendererTask.d.ts +1 -1
- package/FrameGraph/Tasks/Rendering/taaObjectRendererTask.js +1 -1
- package/FrameGraph/Tasks/Rendering/taaObjectRendererTask.js.map +1 -1
- package/FrameGraph/Tasks/Rendering/utilityLayerRendererTask.d.ts +1 -1
- package/FrameGraph/Tasks/Texture/clearTextureTask.d.ts +2 -2
- package/FrameGraph/Tasks/Texture/copyToBackbufferColorTask.d.ts +1 -1
- package/FrameGraph/Tasks/Texture/copyToTextureTask.d.ts +1 -1
- package/FrameGraph/Tasks/Texture/generateMipMapsTask.d.ts +1 -1
- package/FrameGraph/frameGraph.d.ts +5 -5
- package/FrameGraph/frameGraphRenderContext.d.ts +1 -1
- package/FrameGraph/frameGraphTextureManager.d.ts +2 -2
- package/FrameGraph/index.d.ts +43 -42
- package/FrameGraph/index.js +1 -0
- package/FrameGraph/index.js.map +1 -1
- package/Gamepads/dualShockGamepad.d.ts +2 -2
- package/Gamepads/gamepad.d.ts +1 -1
- package/Gamepads/gamepadManager.d.ts +4 -4
- package/Gamepads/gamepadSceneComponent.d.ts +7 -7
- package/Gamepads/index.d.ts +5 -5
- package/Gamepads/xboxGamepad.d.ts +2 -2
- package/Gizmos/axisDragGizmo.d.ts +16 -16
- package/Gizmos/axisScaleGizmo.d.ts +15 -15
- package/Gizmos/boundingBoxGizmo.d.ts +15 -15
- package/Gizmos/cameraGizmo.d.ts +11 -11
- package/Gizmos/gizmo.d.ts +12 -12
- package/Gizmos/gizmoManager.d.ts +18 -18
- package/Gizmos/index.d.ts +12 -12
- package/Gizmos/lightGizmo.d.ts +13 -13
- package/Gizmos/planeDragGizmo.d.ts +15 -15
- package/Gizmos/planeRotationGizmo.d.ts +17 -17
- package/Gizmos/positionGizmo.d.ts +15 -15
- package/Gizmos/rotationGizmo.d.ts +15 -15
- package/Gizmos/scaleGizmo.d.ts +16 -16
- package/Helpers/environmentHelper.d.ts +10 -10
- package/Helpers/index.d.ts +5 -5
- package/Helpers/photoDome.d.ts +3 -3
- package/Helpers/sceneHelpers.d.ts +13 -13
- package/Helpers/textureDome.d.ts +7 -7
- package/Helpers/videoDome.d.ts +3 -3
- package/IAssetContainer.d.ts +23 -23
- package/Inputs/pointerPickingConfiguration.d.ts +1 -1
- package/Inputs/scene.inputManager.d.ts +8 -8
- package/Instrumentation/engineInstrumentation.d.ts +4 -4
- package/Instrumentation/index.d.ts +3 -3
- package/Instrumentation/sceneInstrumentation.d.ts +2 -2
- package/Instrumentation/timeToken.d.ts +1 -1
- package/Layers/effectLayer.d.ts +16 -16
- package/Layers/effectLayerSceneComponent.d.ts +4 -4
- package/Layers/glowLayer.d.ts +13 -13
- package/Layers/highlightLayer.d.ts +14 -14
- package/Layers/index.d.ts +23 -23
- package/Layers/layer.d.ts +7 -7
- package/Layers/layerSceneComponent.d.ts +2 -2
- package/Layers/thinEffectLayer.d.ts +13 -13
- package/Layers/thinGlowLayer.d.ts +10 -10
- package/Layers/thinHighlightLayer.d.ts +3 -3
- package/LensFlares/index.d.ts +7 -7
- package/LensFlares/lensFlare.d.ts +5 -5
- package/LensFlares/lensFlareSystem.d.ts +5 -5
- package/LensFlares/lensFlareSystemSceneComponent.d.ts +5 -5
- package/Lights/Shadows/cascadedShadowGenerator.d.ts +10 -10
- package/Lights/Shadows/index.d.ts +11 -11
- package/Lights/Shadows/shadowGenerator.d.ts +16 -16
- package/Lights/Shadows/shadowGeneratorSceneComponent.d.ts +2 -2
- package/Lights/areaLight.d.ts +1 -1
- package/Lights/directionalLight.d.ts +8 -8
- package/Lights/hemisphericLight.d.ts +7 -7
- package/Lights/index.d.ts +10 -10
- package/Lights/light.d.ts +12 -12
- package/Lights/pointLight.d.ts +5 -5
- package/Lights/rectAreaLight.d.ts +2 -2
- package/Lights/shadowLight.d.ts +5 -5
- package/Lights/spotLight.d.ts +9 -9
- package/Loading/Plugins/index.d.ts +2 -2
- package/Loading/index.d.ts +4 -4
- package/Loading/sceneLoader.d.ts +16 -16
- package/Materials/Background/backgroundMaterial.d.ts +13 -13
- package/Materials/Background/index.d.ts +5 -5
- package/Materials/GaussianSplatting/gaussianSplattingMaterial.d.ts +19 -11
- package/Materials/GaussianSplatting/gaussianSplattingMaterial.js +28 -1
- package/Materials/GaussianSplatting/gaussianSplattingMaterial.js.map +1 -1
- package/Materials/GreasedLine/greasedLineMaterialDefaults.d.ts +3 -3
- package/Materials/GreasedLine/greasedLineMaterialInterfaces.d.ts +4 -4
- package/Materials/GreasedLine/greasedLinePluginMaterial.d.ts +14 -14
- package/Materials/GreasedLine/greasedLinePluginMaterialShadersGLSL.d.ts +1 -1
- package/Materials/GreasedLine/greasedLinePluginMaterialShadersWGSL.d.ts +1 -1
- package/Materials/GreasedLine/greasedLineSimpleMaterial.d.ts +8 -8
- package/Materials/Node/Blocks/Dual/clipPlanesBlock.d.ts +8 -8
- package/Materials/Node/Blocks/Dual/currentScreenBlock.d.ts +9 -9
- package/Materials/Node/Blocks/Dual/fogBlock.d.ts +7 -7
- package/Materials/Node/Blocks/Dual/imageSourceBlock.d.ts +7 -7
- package/Materials/Node/Blocks/Dual/index.d.ts +37 -37
- package/Materials/Node/Blocks/Dual/lightBlock.d.ts +10 -10
- package/Materials/Node/Blocks/Dual/lightBlock.js +6 -3
- package/Materials/Node/Blocks/Dual/lightBlock.js.map +1 -1
- package/Materials/Node/Blocks/Dual/reflectionTextureBaseBlock.d.ts +12 -12
- package/Materials/Node/Blocks/Dual/reflectionTextureBlock.d.ts +5 -5
- package/Materials/Node/Blocks/Dual/sceneDepthBlock.d.ts +7 -7
- package/Materials/Node/Blocks/Dual/textureBlock.d.ts +12 -12
- package/Materials/Node/Blocks/Fragment/TBNBlock.d.ts +6 -6
- package/Materials/Node/Blocks/Fragment/derivativeBlock.d.ts +3 -3
- package/Materials/Node/Blocks/Fragment/discardBlock.d.ts +3 -3
- package/Materials/Node/Blocks/Fragment/fragCoordBlock.d.ts +3 -3
- package/Materials/Node/Blocks/Fragment/fragDepthBlock.d.ts +3 -3
- package/Materials/Node/Blocks/Fragment/fragmentOutputBlock.d.ts +8 -8
- package/Materials/Node/Blocks/Fragment/frontFacingBlock.d.ts +3 -3
- package/Materials/Node/Blocks/Fragment/heightToNormalBlock.d.ts +4 -4
- package/Materials/Node/Blocks/Fragment/imageProcessingBlock.d.ts +8 -8
- package/Materials/Node/Blocks/Fragment/index.d.ts +33 -33
- package/Materials/Node/Blocks/Fragment/perturbNormalBlock.d.ts +8 -8
- package/Materials/Node/Blocks/Fragment/prePassOutputBlock.d.ts +3 -3
- package/Materials/Node/Blocks/Fragment/screenSizeBlock.d.ts +4 -4
- package/Materials/Node/Blocks/Fragment/screenSpaceBlock.d.ts +4 -4
- package/Materials/Node/Blocks/Fragment/shadowMapBlock.d.ts +3 -3
- package/Materials/Node/Blocks/Fragment/twirlBlock.d.ts +3 -3
- package/Materials/Node/Blocks/GaussianSplatting/gaussianBlock.d.ts +3 -3
- package/Materials/Node/Blocks/GaussianSplatting/gaussianSplattingBlock.d.ts +3 -3
- package/Materials/Node/Blocks/GaussianSplatting/gaussianSplattingBlock.js +3 -1
- package/Materials/Node/Blocks/GaussianSplatting/gaussianSplattingBlock.js.map +1 -1
- package/Materials/Node/Blocks/GaussianSplatting/index.d.ts +5 -5
- package/Materials/Node/Blocks/GaussianSplatting/splatReaderBlock.d.ts +4 -4
- package/Materials/Node/Blocks/Input/index.d.ts +3 -3
- package/Materials/Node/Blocks/Input/inputBlock.d.ts +13 -13
- package/Materials/Node/Blocks/Input/prePassTextureBlock.d.ts +6 -6
- package/Materials/Node/Blocks/PBR/anisotropyBlock.d.ts +7 -7
- package/Materials/Node/Blocks/PBR/clearCoatBlock.d.ts +10 -10
- package/Materials/Node/Blocks/PBR/index.d.ts +8 -8
- package/Materials/Node/Blocks/PBR/iridescenceBlock.d.ts +7 -7
- package/Materials/Node/Blocks/PBR/pbrMetallicRoughnessBlock.d.ts +10 -10
- package/Materials/Node/Blocks/PBR/pbrMetallicRoughnessBlock.js +7 -3
- package/Materials/Node/Blocks/PBR/pbrMetallicRoughnessBlock.js.map +1 -1
- package/Materials/Node/Blocks/PBR/reflectionBlock.d.ts +11 -11
- package/Materials/Node/Blocks/PBR/refractionBlock.d.ts +10 -10
- package/Materials/Node/Blocks/PBR/sheenBlock.d.ts +8 -8
- package/Materials/Node/Blocks/PBR/subSurfaceBlock.d.ts +7 -7
- package/Materials/Node/Blocks/Particle/index.d.ts +3 -3
- package/Materials/Node/Blocks/Particle/particleBlendMultiplyBlock.d.ts +3 -3
- package/Materials/Node/Blocks/Particle/particleRampGradientBlock.d.ts +3 -3
- package/Materials/Node/Blocks/Particle/particleTextureBlock.d.ts +8 -8
- package/Materials/Node/Blocks/Teleport/index.d.ts +2 -2
- package/Materials/Node/Blocks/Teleport/teleportInBlock.d.ts +4 -4
- package/Materials/Node/Blocks/Teleport/teleportOutBlock.d.ts +7 -7
- package/Materials/Node/Blocks/Vertex/bonesBlock.d.ts +8 -8
- package/Materials/Node/Blocks/Vertex/index.d.ts +17 -17
- package/Materials/Node/Blocks/Vertex/instancesBlock.d.ts +6 -6
- package/Materials/Node/Blocks/Vertex/lightInformationBlock.d.ts +10 -10
- package/Materials/Node/Blocks/Vertex/morphTargetsBlock.d.ts +7 -7
- package/Materials/Node/Blocks/Vertex/vertexOutputBlock.d.ts +3 -3
- package/Materials/Node/Blocks/addBlock.d.ts +2 -2
- package/Materials/Node/Blocks/arcTan2Block.d.ts +3 -3
- package/Materials/Node/Blocks/baseMathBlock.d.ts +2 -2
- package/Materials/Node/Blocks/biPlanarBlock.d.ts +2 -2
- package/Materials/Node/Blocks/clampBlock.d.ts +4 -4
- package/Materials/Node/Blocks/cloudBlock.d.ts +4 -4
- package/Materials/Node/Blocks/colorConverterBlock.d.ts +3 -3
- package/Materials/Node/Blocks/colorMergerBlock.d.ts +4 -4
- package/Materials/Node/Blocks/colorSplitterBlock.d.ts +3 -3
- package/Materials/Node/Blocks/conditionalBlock.d.ts +5 -5
- package/Materials/Node/Blocks/crossBlock.d.ts +3 -3
- package/Materials/Node/Blocks/curveBlock.d.ts +4 -4
- package/Materials/Node/Blocks/customBlock.d.ts +3 -3
- package/Materials/Node/Blocks/debugBlock.d.ts +3 -3
- package/Materials/Node/Blocks/desaturateBlock.d.ts +3 -3
- package/Materials/Node/Blocks/distanceBlock.d.ts +3 -3
- package/Materials/Node/Blocks/divideBlock.d.ts +2 -2
- package/Materials/Node/Blocks/dotBlock.d.ts +3 -3
- package/Materials/Node/Blocks/elbowBlock.d.ts +4 -4
- package/Materials/Node/Blocks/fresnelBlock.d.ts +5 -5
- package/Materials/Node/Blocks/gradientBlock.d.ts +6 -6
- package/Materials/Node/Blocks/index.d.ts +70 -70
- package/Materials/Node/Blocks/lengthBlock.d.ts +3 -3
- package/Materials/Node/Blocks/lerpBlock.d.ts +3 -3
- package/Materials/Node/Blocks/loopBlock.d.ts +3 -3
- package/Materials/Node/Blocks/matrixBuilderBlock.d.ts +3 -3
- package/Materials/Node/Blocks/matrixDeterminantBlock.d.ts +3 -3
- package/Materials/Node/Blocks/matrixSplitterBlock.d.ts +3 -3
- package/Materials/Node/Blocks/matrixTransposeBlock.d.ts +3 -3
- package/Materials/Node/Blocks/maxBlock.d.ts +3 -3
- package/Materials/Node/Blocks/meshAttributeExistsBlock.d.ts +3 -3
- package/Materials/Node/Blocks/minBlock.d.ts +3 -3
- package/Materials/Node/Blocks/modBlock.d.ts +3 -3
- package/Materials/Node/Blocks/multiplyBlock.d.ts +2 -2
- package/Materials/Node/Blocks/nLerpBlock.d.ts +3 -3
- package/Materials/Node/Blocks/negateBlock.d.ts +3 -3
- package/Materials/Node/Blocks/normalBlendBlock.d.ts +3 -3
- package/Materials/Node/Blocks/normalizeBlock.d.ts +3 -3
- package/Materials/Node/Blocks/oneMinusBlock.d.ts +3 -3
- package/Materials/Node/Blocks/posterizeBlock.d.ts +3 -3
- package/Materials/Node/Blocks/powBlock.d.ts +3 -3
- package/Materials/Node/Blocks/randomNumberBlock.d.ts +4 -4
- package/Materials/Node/Blocks/reciprocalBlock.d.ts +3 -3
- package/Materials/Node/Blocks/reflectBlock.d.ts +3 -3
- package/Materials/Node/Blocks/refractBlock.d.ts +3 -3
- package/Materials/Node/Blocks/remapBlock.d.ts +5 -5
- package/Materials/Node/Blocks/replaceColorBlock.d.ts +3 -3
- package/Materials/Node/Blocks/rotate2dBlock.d.ts +3 -3
- package/Materials/Node/Blocks/scaleBlock.d.ts +3 -3
- package/Materials/Node/Blocks/simplexPerlin3DBlock.d.ts +3 -3
- package/Materials/Node/Blocks/smoothStepBlock.d.ts +3 -3
- package/Materials/Node/Blocks/stepBlock.d.ts +3 -3
- package/Materials/Node/Blocks/storageReadBlock.d.ts +3 -3
- package/Materials/Node/Blocks/storageWriteBlock.d.ts +3 -3
- package/Materials/Node/Blocks/subtractBlock.d.ts +2 -2
- package/Materials/Node/Blocks/transformBlock.d.ts +6 -6
- package/Materials/Node/Blocks/triPlanarBlock.d.ts +12 -12
- package/Materials/Node/Blocks/trigonometryBlock.d.ts +4 -4
- package/Materials/Node/Blocks/vectorMergerBlock.d.ts +4 -4
- package/Materials/Node/Blocks/vectorSplitterBlock.d.ts +3 -3
- package/Materials/Node/Blocks/viewDirectionBlock.d.ts +4 -4
- package/Materials/Node/Blocks/voronoiNoiseBlock.d.ts +3 -3
- package/Materials/Node/Blocks/waveBlock.d.ts +4 -4
- package/Materials/Node/Blocks/worleyNoise3DBlock.d.ts +4 -4
- package/Materials/Node/Enums/index.d.ts +5 -5
- package/Materials/Node/Optimizers/index.d.ts +1 -1
- package/Materials/Node/Optimizers/nodeMaterialOptimizer.d.ts +1 -1
- package/Materials/Node/index.d.ts +9 -9
- package/Materials/Node/nodeMaterial.d.ts +36 -36
- package/Materials/Node/nodeMaterialBlock.d.ts +12 -12
- package/Materials/Node/nodeMaterialBlockConnectionPoint.d.ts +6 -6
- package/Materials/Node/nodeMaterialBuildState.d.ts +6 -6
- package/Materials/Node/nodeMaterialBuildStateSharedData.d.ts +6 -6
- package/Materials/Node/nodeMaterialConnectionPointCustomObject.d.ts +4 -4
- package/Materials/Node/nodeMaterialDefault.d.ts +1 -1
- package/Materials/Occlusion/index.d.ts +1 -1
- package/Materials/Occlusion/occlusionMaterial.d.ts +4 -4
- package/Materials/PBR/index.d.ts +15 -15
- package/Materials/PBR/pbrAnisotropicConfiguration.d.ts +11 -11
- package/Materials/PBR/pbrBRDFConfiguration.d.ts +3 -3
- package/Materials/PBR/pbrBaseMaterial.d.ts +24 -24
- package/Materials/PBR/pbrBaseMaterial.js +2 -1
- package/Materials/PBR/pbrBaseMaterial.js.map +1 -1
- package/Materials/PBR/pbrBaseSimpleMaterial.d.ts +5 -5
- package/Materials/PBR/pbrClearCoatConfiguration.d.ts +12 -12
- package/Materials/PBR/pbrIridescenceConfiguration.d.ts +9 -9
- package/Materials/PBR/pbrMaterial.d.ts +7 -7
- package/Materials/PBR/pbrMaterial.decalMap.d.ts +2 -2
- package/Materials/PBR/pbrMetallicRoughnessMaterial.d.ts +5 -5
- package/Materials/PBR/pbrSheenConfiguration.d.ts +12 -12
- package/Materials/PBR/pbrSpecularGlossinessMaterial.d.ts +5 -5
- package/Materials/PBR/pbrSubSurfaceConfiguration.d.ts +27 -14
- package/Materials/PBR/pbrSubSurfaceConfiguration.js +17 -0
- package/Materials/PBR/pbrSubSurfaceConfiguration.js.map +1 -1
- package/Materials/Textures/Filtering/hdrFiltering.d.ts +2 -2
- package/Materials/Textures/Filtering/hdrIrradianceFiltering.d.ts +2 -2
- package/Materials/Textures/Loaders/EXR/exrLoader.compression.d.ts +1 -1
- package/Materials/Textures/Loaders/EXR/exrLoader.compression.huf.d.ts +1 -1
- package/Materials/Textures/Loaders/EXR/exrLoader.decoder.d.ts +3 -3
- package/Materials/Textures/Loaders/EXR/exrLoader.header.d.ts +2 -2
- package/Materials/Textures/Loaders/EXR/exrLoader.interfaces.d.ts +1 -1
- package/Materials/Textures/Loaders/EXR/index.d.ts +7 -7
- package/Materials/Textures/Loaders/basisTextureLoader.d.ts +3 -3
- package/Materials/Textures/Loaders/ddsTextureLoader.d.ts +3 -3
- package/Materials/Textures/Loaders/envTextureLoader.d.ts +3 -3
- package/Materials/Textures/Loaders/exrTextureLoader.d.ts +2 -2
- package/Materials/Textures/Loaders/hdrTextureLoader.d.ts +2 -2
- package/Materials/Textures/Loaders/iesTextureLoader.d.ts +2 -2
- package/Materials/Textures/Loaders/index.d.ts +11 -11
- package/Materials/Textures/Loaders/internalTextureLoader.d.ts +2 -2
- package/Materials/Textures/Loaders/ktxTextureLoader.d.ts +3 -3
- package/Materials/Textures/Loaders/textureLoaderManager.d.ts +2 -2
- package/Materials/Textures/Loaders/tgaTextureLoader.d.ts +2 -2
- package/Materials/Textures/MultiviewRenderTarget.d.ts +2 -2
- package/Materials/Textures/Packer/frame.d.ts +1 -1
- package/Materials/Textures/Packer/index.d.ts +2 -2
- package/Materials/Textures/Packer/packer.d.ts +5 -5
- package/Materials/Textures/Procedurals/customProceduralTexture.d.ts +5 -5
- package/Materials/Textures/Procedurals/index.d.ts +4 -4
- package/Materials/Textures/Procedurals/noiseProceduralTexture.d.ts +5 -5
- package/Materials/Textures/Procedurals/proceduralTexture.d.ts +10 -10
- package/Materials/Textures/Procedurals/proceduralTextureSceneComponent.d.ts +2 -2
- package/Materials/Textures/baseTexture.d.ts +10 -10
- package/Materials/Textures/baseTexture.polynomial.d.ts +3 -3
- package/Materials/Textures/colorGradingTexture.d.ts +5 -5
- package/Materials/Textures/cubeTexture.d.ts +7 -7
- package/Materials/Textures/dynamicTexture.d.ts +6 -6
- package/Materials/Textures/equiRectangularCubeTexture.d.ts +3 -3
- package/Materials/Textures/externalTexture.d.ts +1 -1
- package/Materials/Textures/hdrCubeTexture.d.ts +7 -7
- package/Materials/Textures/htmlElementTexture.d.ts +8 -8
- package/Materials/Textures/index.d.ts +39 -39
- package/Materials/Textures/internalTexture.d.ts +8 -8
- package/Materials/Textures/mirrorTexture.d.ts +3 -3
- package/Materials/Textures/multiRenderTarget.d.ts +6 -6
- package/Materials/Textures/prePassRenderTarget.d.ts +8 -8
- package/Materials/Textures/rawCubeTexture.d.ts +4 -4
- package/Materials/Textures/rawTexture.d.ts +4 -4
- package/Materials/Textures/rawTexture2DArray.d.ts +3 -3
- package/Materials/Textures/rawTexture3D.d.ts +3 -3
- package/Materials/Textures/refractionTexture.d.ts +3 -3
- package/Materials/Textures/renderTargetTexture.d.ts +21 -20
- package/Materials/Textures/renderTargetTexture.js +6 -5
- package/Materials/Textures/renderTargetTexture.js.map +1 -1
- package/Materials/Textures/texture.d.ts +12 -12
- package/Materials/Textures/texture.js +3 -2
- package/Materials/Textures/texture.js.map +1 -1
- package/Materials/Textures/textureCreationOptions.d.ts +1 -1
- package/Materials/Textures/textureSampler.d.ts +1 -1
- package/Materials/Textures/thinRenderTargetTexture.d.ts +6 -6
- package/Materials/Textures/thinTexture.d.ts +4 -4
- package/Materials/Textures/videoTexture.d.ts +7 -7
- package/Materials/clipPlaneMaterialHelper.d.ts +2 -2
- package/Materials/colorCurves.d.ts +1 -1
- package/Materials/drawWrapper.d.ts +6 -6
- package/Materials/drawWrapper.functions.d.ts +2 -2
- package/Materials/effect.d.ts +14 -14
- package/Materials/effect.functions.d.ts +2 -2
- package/Materials/effect.webgl.functions.d.ts +1 -1
- package/Materials/effectFallbacks.d.ts +3 -3
- package/Materials/effectRenderer.d.ts +10 -10
- package/Materials/fresnelParameters.d.ts +2 -2
- package/Materials/iEffectFallbacks.d.ts +1 -1
- package/Materials/imageProcessingConfiguration.d.ts +15 -7
- package/Materials/imageProcessingConfiguration.defines.d.ts +1 -1
- package/Materials/imageProcessingConfiguration.functions.d.ts +1 -1
- package/Materials/imageProcessingConfiguration.js +16 -2
- package/Materials/imageProcessingConfiguration.js.map +1 -1
- package/Materials/index.d.ts +49 -49
- package/Materials/material.d.ts +26 -26
- package/Materials/material.decalMap.d.ts +3 -3
- package/Materials/material.decalMapConfiguration.d.ts +5 -5
- package/Materials/material.detailMapConfiguration.d.ts +9 -9
- package/Materials/materialHelper.d.ts +12 -12
- package/Materials/materialHelper.functions.d.ts +12 -12
- package/Materials/materialPluginBase.d.ts +15 -15
- package/Materials/materialPluginEvent.d.ts +10 -10
- package/Materials/materialPluginFactoryExport.d.ts +3 -3
- package/Materials/materialPluginManager.d.ts +8 -8
- package/Materials/materialStencilState.d.ts +2 -2
- package/Materials/meshDebugPluginMaterial.d.ts +8 -8
- package/Materials/multiMaterial.d.ts +6 -6
- package/Materials/prePassConfiguration.d.ts +4 -4
- package/Materials/pushMaterial.d.ts +8 -8
- package/Materials/shaderMaterial.d.ts +15 -15
- package/Materials/shadowDepthWrapper.d.ts +6 -6
- package/Materials/standardMaterial.d.ts +19 -19
- package/Materials/standardMaterial.decalMap.d.ts +2 -2
- package/Materials/uniformBuffer.d.ts +6 -6
- package/Materials/uniformBufferEffectCommonAccessor.d.ts +3 -3
- package/Maths/index.d.ts +8 -8
- package/Maths/math.axis.d.ts +1 -1
- package/Maths/math.color.d.ts +3 -3
- package/Maths/math.d.ts +10 -10
- package/Maths/math.frustum.d.ts +3 -3
- package/Maths/math.functions.d.ts +3 -3
- package/Maths/math.isovector.d.ts +1 -1
- package/Maths/math.like.d.ts +1 -1
- package/Maths/math.path.d.ts +3 -3
- package/Maths/math.plane.d.ts +3 -3
- package/Maths/math.polar.d.ts +2 -2
- package/Maths/math.vector.d.ts +6 -6
- package/Maths/math.vector.functions.d.ts +1 -1
- package/Maths/math.vertexFormat.d.ts +1 -1
- package/Maths/math.viewport.d.ts +1 -1
- package/Maths/sphericalPolynomial.d.ts +2 -2
- package/Maths/tensor.d.ts +1 -1
- package/Meshes/Builders/boxBuilder.d.ts +6 -6
- package/Meshes/Builders/capsuleBuilder.d.ts +5 -5
- package/Meshes/Builders/cylinderBuilder.d.ts +6 -6
- package/Meshes/Builders/decalBuilder.d.ts +3 -3
- package/Meshes/Builders/discBuilder.d.ts +5 -5
- package/Meshes/Builders/geodesicBuilder.d.ts +5 -5
- package/Meshes/Builders/goldbergBuilder.d.ts +5 -5
- package/Meshes/Builders/greasedLineBuilder.d.ts +11 -11
- package/Meshes/Builders/groundBuilder.d.ts +6 -6
- package/Meshes/Builders/hemisphereBuilder.d.ts +2 -2
- package/Meshes/Builders/icoSphereBuilder.d.ts +5 -5
- package/Meshes/Builders/index.d.ts +25 -25
- package/Meshes/Builders/latheBuilder.d.ts +5 -5
- package/Meshes/Builders/linesBuilder.d.ts +7 -7
- package/Meshes/Builders/planeBuilder.d.ts +6 -6
- package/Meshes/Builders/polygonBuilder.d.ts +7 -7
- package/Meshes/Builders/polyhedronBuilder.d.ts +6 -6
- package/Meshes/Builders/ribbonBuilder.d.ts +6 -6
- package/Meshes/Builders/shapeBuilder.d.ts +5 -5
- package/Meshes/Builders/sphereBuilder.d.ts +5 -5
- package/Meshes/Builders/textBuilder.d.ts +6 -6
- package/Meshes/Builders/tiledBoxBuilder.d.ts +6 -6
- package/Meshes/Builders/tiledPlaneBuilder.d.ts +5 -5
- package/Meshes/Builders/torusBuilder.d.ts +4 -4
- package/Meshes/Builders/torusKnotBuilder.d.ts +4 -4
- package/Meshes/Builders/tubeBuilder.d.ts +5 -5
- package/Meshes/Compression/dracoCodec.d.ts +2 -2
- package/Meshes/Compression/dracoCompression.d.ts +6 -6
- package/Meshes/Compression/dracoCompressionWorker.d.ts +1 -1
- package/Meshes/Compression/dracoDecoder.d.ts +6 -6
- package/Meshes/Compression/dracoEncoder.d.ts +5 -5
- package/Meshes/Compression/index.d.ts +4 -4
- package/Meshes/Compression/meshoptCompression.d.ts +1 -1
- package/Meshes/GaussianSplatting/gaussianSplattingMesh.d.ts +3 -3
- package/Meshes/GaussianSplatting/gaussianSplattingMesh.js +15 -6
- package/Meshes/GaussianSplatting/gaussianSplattingMesh.js.map +1 -1
- package/Meshes/GreasedLine/greasedLineBaseMesh.d.ts +8 -8
- package/Meshes/GreasedLine/greasedLineMesh.d.ts +11 -11
- package/Meshes/GreasedLine/greasedLineRibbonMesh.d.ts +11 -11
- package/Meshes/Node/Blocks/Instances/instantiateBaseBlock.d.ts +5 -5
- package/Meshes/Node/Blocks/Instances/instantiateBlock.d.ts +4 -4
- package/Meshes/Node/Blocks/Instances/instantiateLinearBlock.d.ts +3 -3
- package/Meshes/Node/Blocks/Instances/instantiateOnFacesBlock.d.ts +6 -6
- package/Meshes/Node/Blocks/Instances/instantiateOnVerticesBlock.d.ts +5 -5
- package/Meshes/Node/Blocks/Instances/instantiateOnVolumeBlock.d.ts +6 -6
- package/Meshes/Node/Blocks/Instances/instantiateRadialBlock.d.ts +3 -3
- package/Meshes/Node/Blocks/Matrices/alignBlock.d.ts +3 -3
- package/Meshes/Node/Blocks/Matrices/rotationXBlock.d.ts +3 -3
- package/Meshes/Node/Blocks/Matrices/rotationYBlock.d.ts +3 -3
- package/Meshes/Node/Blocks/Matrices/rotationZBlock.d.ts +3 -3
- package/Meshes/Node/Blocks/Matrices/scalingBlock.d.ts +3 -3
- package/Meshes/Node/Blocks/Matrices/translationBlock.d.ts +3 -3
- package/Meshes/Node/Blocks/Set/aggregatorBlock.d.ts +4 -4
- package/Meshes/Node/Blocks/Set/latticeBlock.d.ts +5 -5
- package/Meshes/Node/Blocks/Set/setColorsBlock.d.ts +4 -4
- package/Meshes/Node/Blocks/Set/setMaterialIDBlock.d.ts +3 -3
- package/Meshes/Node/Blocks/Set/setNormalsBlock.d.ts +4 -4
- package/Meshes/Node/Blocks/Set/setPositionsBlock.d.ts +4 -4
- package/Meshes/Node/Blocks/Set/setTangentsBlock.d.ts +4 -4
- package/Meshes/Node/Blocks/Set/setUVsBlock.d.ts +4 -4
- package/Meshes/Node/Blocks/Sources/boxBlock.d.ts +3 -3
- package/Meshes/Node/Blocks/Sources/capsuleBlock.d.ts +3 -3
- package/Meshes/Node/Blocks/Sources/cylinderBlock.d.ts +3 -3
- package/Meshes/Node/Blocks/Sources/discBlock.d.ts +3 -3
- package/Meshes/Node/Blocks/Sources/gridBlock.d.ts +3 -3
- package/Meshes/Node/Blocks/Sources/icoSphereBlock.d.ts +3 -3
- package/Meshes/Node/Blocks/Sources/meshBlock.d.ts +4 -4
- package/Meshes/Node/Blocks/Sources/nullBlock.d.ts +2 -2
- package/Meshes/Node/Blocks/Sources/planeBlock.d.ts +3 -3
- package/Meshes/Node/Blocks/Sources/pointListBlock.d.ts +3 -3
- package/Meshes/Node/Blocks/Sources/sphereBlock.d.ts +3 -3
- package/Meshes/Node/Blocks/Sources/torusBlock.d.ts +3 -3
- package/Meshes/Node/Blocks/Teleport/teleportInBlock.d.ts +3 -3
- package/Meshes/Node/Blocks/Teleport/teleportOutBlock.d.ts +5 -5
- package/Meshes/Node/Blocks/Textures/geometryTextureBlock.d.ts +2 -2
- package/Meshes/Node/Blocks/Textures/geometryTextureFetchBlock.d.ts +2 -2
- package/Meshes/Node/Blocks/booleanGeometryBlock.d.ts +3 -3
- package/Meshes/Node/Blocks/boundingBlock.d.ts +2 -2
- package/Meshes/Node/Blocks/cleanGeometryBlock.d.ts +3 -3
- package/Meshes/Node/Blocks/computeNormalsBlock.d.ts +2 -2
- package/Meshes/Node/Blocks/conditionBlock.d.ts +3 -3
- package/Meshes/Node/Blocks/debugBlock.d.ts +3 -3
- package/Meshes/Node/Blocks/geometryArcTan2Block.d.ts +2 -2
- package/Meshes/Node/Blocks/geometryClampBlock.d.ts +2 -2
- package/Meshes/Node/Blocks/geometryCollectionBlock.d.ts +3 -3
- package/Meshes/Node/Blocks/geometryCrossBlock.d.ts +2 -2
- package/Meshes/Node/Blocks/geometryCurveBlock.d.ts +2 -2
- package/Meshes/Node/Blocks/geometryDesaturateBlock.d.ts +2 -2
- package/Meshes/Node/Blocks/geometryDistanceBlock.d.ts +2 -2
- package/Meshes/Node/Blocks/geometryDotBlock.d.ts +2 -2
- package/Meshes/Node/Blocks/geometryEaseBlock.d.ts +3 -3
- package/Meshes/Node/Blocks/geometryElbowBlock.d.ts +3 -3
- package/Meshes/Node/Blocks/geometryInfoBlock.d.ts +2 -2
- package/Meshes/Node/Blocks/geometryInputBlock.d.ts +6 -6
- package/Meshes/Node/Blocks/geometryInterceptorBlock.d.ts +3 -3
- package/Meshes/Node/Blocks/geometryLengthBlock.d.ts +2 -2
- package/Meshes/Node/Blocks/geometryLerpBlock.d.ts +2 -2
- package/Meshes/Node/Blocks/geometryModBlock.d.ts +2 -2
- package/Meshes/Node/Blocks/geometryNLerpBlock.d.ts +2 -2
- package/Meshes/Node/Blocks/geometryOptimizeBlock.d.ts +4 -4
- package/Meshes/Node/Blocks/geometryOutputBlock.d.ts +4 -4
- package/Meshes/Node/Blocks/geometryPosterizeBlock.d.ts +2 -2
- package/Meshes/Node/Blocks/geometryPowBlock.d.ts +2 -2
- package/Meshes/Node/Blocks/geometryReplaceColorBlock.d.ts +2 -2
- package/Meshes/Node/Blocks/geometryRotate2dBlock.d.ts +2 -2
- package/Meshes/Node/Blocks/geometrySmoothStepBlock.d.ts +2 -2
- package/Meshes/Node/Blocks/geometryStepBlock.d.ts +2 -2
- package/Meshes/Node/Blocks/geometryTransformBlock.d.ts +3 -3
- package/Meshes/Node/Blocks/geometryTrigonometryBlock.d.ts +3 -3
- package/Meshes/Node/Blocks/intFloatConverterBlock.d.ts +2 -2
- package/Meshes/Node/Blocks/mapRangeBlock.d.ts +2 -2
- package/Meshes/Node/Blocks/mappingBlock.d.ts +2 -2
- package/Meshes/Node/Blocks/mathBlock.d.ts +2 -2
- package/Meshes/Node/Blocks/matrixComposeBlock.d.ts +2 -2
- package/Meshes/Node/Blocks/mergeGeometryBlock.d.ts +3 -3
- package/Meshes/Node/Blocks/noiseBlock.d.ts +3 -3
- package/Meshes/Node/Blocks/normalizeVectorBlock.d.ts +3 -3
- package/Meshes/Node/Blocks/randomBlock.d.ts +2 -2
- package/Meshes/Node/Blocks/subdivideBlock.d.ts +2 -2
- package/Meshes/Node/Blocks/vectorConverterBlock.d.ts +3 -3
- package/Meshes/Node/index.d.ts +87 -87
- package/Meshes/Node/nodeGeometry.d.ts +9 -9
- package/Meshes/Node/nodeGeometryBlock.d.ts +6 -6
- package/Meshes/Node/nodeGeometryBlockConnectionPoint.d.ts +5 -5
- package/Meshes/Node/nodeGeometryBuildState.d.ts +8 -8
- package/Meshes/WebGL/webGLDataBuffer.d.ts +1 -1
- package/Meshes/WebGPU/webgpuDataBuffer.d.ts +2 -2
- package/Meshes/abstractMesh.d.ts +37 -32
- package/Meshes/abstractMesh.decalMap.d.ts +3 -3
- package/Meshes/abstractMesh.hotSpot.d.ts +1 -1
- package/Meshes/abstractMesh.js +1 -1
- package/Meshes/abstractMesh.js.map +1 -1
- package/Meshes/buffer.d.ts +1 -1
- package/Meshes/csg.d.ts +7 -7
- package/Meshes/csg2.d.ts +2 -2
- package/Meshes/geodesicMesh.d.ts +2 -2
- package/Meshes/geometry.d.ts +12 -12
- package/Meshes/goldbergMesh.d.ts +5 -5
- package/Meshes/groundMesh.d.ts +3 -3
- package/Meshes/index.d.ts +55 -55
- package/Meshes/instancedMesh.d.ts +16 -16
- package/Meshes/instancedMesh.js.map +1 -1
- package/Meshes/lattice.d.ts +1 -1
- package/Meshes/lattice.material.d.ts +1 -1
- package/Meshes/linesMesh.d.ts +9 -9
- package/Meshes/mesh.d.ts +30 -30
- package/Meshes/mesh.js +1 -1
- package/Meshes/mesh.js.map +1 -1
- package/Meshes/mesh.vertexData.d.ts +9 -9
- package/Meshes/mesh.vertexData.subdivide.d.ts +1 -1
- package/Meshes/meshBuilder.d.ts +23 -23
- package/Meshes/meshLODLevel.d.ts +2 -2
- package/Meshes/meshSimplification.d.ts +1 -1
- package/Meshes/meshSimplificationSceneComponent.d.ts +6 -6
- package/Meshes/meshUVSpaceRenderer.d.ts +2 -2
- package/Meshes/meshUtils.d.ts +4 -4
- package/Meshes/polygonMesh.d.ts +5 -5
- package/Meshes/subMesh.d.ts +17 -17
- package/Meshes/subMesh.project.d.ts +3 -3
- package/Meshes/thinInstanceMesh.d.ts +4 -4
- package/Meshes/trailMesh.d.ts +3 -3
- package/Meshes/transformNode.d.ts +9 -9
- package/Misc/HighDynamicRange/cubemapToSphericalPolynomial.d.ts +4 -4
- package/Misc/HighDynamicRange/hdr.d.ts +1 -1
- package/Misc/HighDynamicRange/index.d.ts +3 -3
- package/Misc/HighDynamicRange/panoramaToCubemap.d.ts +1 -1
- package/Misc/PerformanceViewer/index.d.ts +4 -4
- package/Misc/PerformanceViewer/performanceViewerCollectionStrategies.d.ts +1 -1
- package/Misc/PerformanceViewer/performanceViewerCollector.d.ts +4 -4
- package/Misc/arrayTools.d.ts +1 -1
- package/Misc/assetsManager.d.ts +15 -15
- package/Misc/basis.d.ts +1 -1
- package/Misc/brdfTextureTools.d.ts +2 -2
- package/Misc/copyTextureToTexture.d.ts +3 -3
- package/Misc/copyTools.d.ts +3 -3
- package/Misc/dds.d.ts +4 -4
- package/Misc/decorators.d.ts +1 -1
- package/Misc/decorators.serialization.d.ts +7 -7
- package/Misc/depthReducer.d.ts +5 -5
- package/Misc/dumpTools.d.ts +1 -1
- package/Misc/environmentTextureTools.d.ts +5 -5
- package/Misc/equirectangularCapture.d.ts +5 -5
- package/Misc/fileRequest.d.ts +1 -1
- package/Misc/fileTools.d.ts +12 -6
- package/Misc/fileTools.js +30 -0
- package/Misc/fileTools.js.map +1 -1
- package/Misc/filesInput.d.ts +4 -4
- package/Misc/gradients.d.ts +2 -2
- package/Misc/greasedLineTools.d.ts +8 -8
- package/Misc/index.d.ts +82 -82
- package/Misc/interfaces/iClipPlanesHolder.d.ts +2 -2
- package/Misc/interfaces/iPerfViewer.d.ts +1 -1
- package/Misc/khronosTextureContainer.d.ts +1 -1
- package/Misc/khronosTextureContainer2.d.ts +5 -5
- package/Misc/meshExploder.d.ts +1 -1
- package/Misc/minMaxReducer.d.ts +9 -9
- package/Misc/observable.d.ts +1 -1
- package/Misc/observable.extensions.d.ts +3 -3
- package/Misc/observableCoroutine.d.ts +2 -2
- package/Misc/pivotTools.d.ts +1 -1
- package/Misc/pressureObserverWrapper.d.ts +1 -1
- package/Misc/reflector.d.ts +1 -1
- package/Misc/retryStrategy.d.ts +1 -1
- package/Misc/rgbdTextureTools.d.ts +3 -3
- package/Misc/sceneOptimizer.d.ts +2 -2
- package/Misc/sceneRecorder.d.ts +1 -1
- package/Misc/sceneSerializer.d.ts +1 -1
- package/Misc/screenshotTools.d.ts +4 -4
- package/Misc/stringDictionary.d.ts +1 -1
- package/Misc/textureTools.d.ts +3 -3
- package/Misc/tga.d.ts +1 -1
- package/Misc/timer.d.ts +4 -4
- package/Misc/tools.d.ts +10 -10
- package/Misc/trajectoryClassifier.d.ts +2 -2
- package/Misc/videoRecorder.d.ts +2 -2
- package/Misc/virtualJoystick.d.ts +2 -2
- package/Misc/webRequest.d.ts +2 -2
- package/Misc/workerPool.d.ts +1 -1
- package/Morph/index.d.ts +2 -2
- package/Morph/morphTarget.d.ts +7 -7
- package/Morph/morphTargetManager.d.ts +5 -5
- package/Navigation/INavigationEngine.d.ts +4 -4
- package/Navigation/Plugins/index.d.ts +1 -1
- package/Navigation/Plugins/recastJSPlugin.d.ts +6 -6
- package/Navigation/index.d.ts +2 -2
- package/ObjectModel/index.d.ts +1 -1
- package/Offline/database.d.ts +1 -1
- package/Offline/index.d.ts +2 -2
- package/Particles/EmitterTypes/IParticleEmitterType.d.ts +6 -6
- package/Particles/EmitterTypes/boxParticleEmitter.d.ts +6 -6
- package/Particles/EmitterTypes/coneParticleEmitter.d.ts +6 -6
- package/Particles/EmitterTypes/customParticleEmitter.d.ts +7 -7
- package/Particles/EmitterTypes/cylinderParticleEmitter.d.ts +6 -6
- package/Particles/EmitterTypes/hemisphericParticleEmitter.d.ts +6 -6
- package/Particles/EmitterTypes/index.d.ts +9 -9
- package/Particles/EmitterTypes/meshParticleEmitter.d.ts +9 -9
- package/Particles/EmitterTypes/pointParticleEmitter.d.ts +6 -6
- package/Particles/EmitterTypes/sphereParticleEmitter.d.ts +6 -6
- package/Particles/IGPUParticleSystemPlatform.d.ts +5 -5
- package/Particles/IParticleSystem.d.ts +13 -13
- package/Particles/baseParticleSystem.d.ts +23 -23
- package/Particles/cloudPoint.d.ts +6 -6
- package/Particles/computeShaderParticleSystem.d.ts +9 -9
- package/Particles/gpuParticleSystem.d.ts +25 -25
- package/Particles/index.d.ts +21 -21
- package/Particles/particle.d.ts +6 -6
- package/Particles/particleHelper.d.ts +6 -6
- package/Particles/particleSystem.d.ts +13 -13
- package/Particles/particleSystem.functions.d.ts +5 -5
- package/Particles/particleSystemComponent.d.ts +5 -5
- package/Particles/particleSystemSet.d.ts +6 -6
- package/Particles/pointsCloudSystem.d.ts +5 -5
- package/Particles/solidParticle.d.ts +9 -9
- package/Particles/solidParticleSystem.d.ts +11 -11
- package/Particles/subEmitter.d.ts +3 -3
- package/Particles/thinParticleSystem.d.ts +16 -16
- package/Particles/webgl2ParticleSystem.d.ts +10 -10
- package/Physics/IPhysicsEngine.d.ts +4 -4
- package/Physics/Plugins/ammoJSPlugin.d.ts +1 -1
- package/Physics/Plugins/cannonJSPlugin.d.ts +1 -1
- package/Physics/Plugins/oimoJSPlugin.d.ts +1 -1
- package/Physics/castingResult.d.ts +3 -3
- package/Physics/index.d.ts +10 -10
- package/Physics/joinedPhysicsEngineComponent.d.ts +9 -9
- package/Physics/physicsEngine.d.ts +1 -1
- package/Physics/physicsEngineComponent.d.ts +3 -3
- package/Physics/physicsHelper.d.ts +6 -6
- package/Physics/physicsImpostor.d.ts +1 -1
- package/Physics/physicsJoint.d.ts +1 -1
- package/Physics/physicsPointProximityQuery.d.ts +3 -3
- package/Physics/physicsRaycastResult.d.ts +2 -2
- package/Physics/physicsShapeCastQuery.d.ts +3 -3
- package/Physics/physicsShapeProximityCastQuery.d.ts +3 -3
- package/Physics/proximityCastResult.d.ts +1 -1
- package/Physics/shapeCastResult.d.ts +1 -1
- package/Physics/v1/IPhysicsEnginePlugin.d.ts +6 -6
- package/Physics/v1/Plugins/ammoJSPlugin.d.ts +7 -7
- package/Physics/v1/Plugins/cannonJSPlugin.d.ts +8 -8
- package/Physics/v1/Plugins/index.d.ts +3 -3
- package/Physics/v1/Plugins/oimoJSPlugin.d.ts +8 -8
- package/Physics/v1/index.d.ts +6 -6
- package/Physics/v1/physicsEngine.d.ts +7 -7
- package/Physics/v1/physicsEngineComponent.d.ts +7 -7
- package/Physics/v1/physicsImpostor.d.ts +11 -11
- package/Physics/v1/physicsJoint.d.ts +2 -2
- package/Physics/v2/IPhysicsEnginePlugin.d.ts +12 -12
- package/Physics/v2/Plugins/havokPlugin.d.ts +18 -18
- package/Physics/v2/Plugins/index.d.ts +1 -1
- package/Physics/v2/characterController.d.ts +10 -5
- package/Physics/v2/characterController.js +7 -0
- package/Physics/v2/characterController.js.map +1 -1
- package/Physics/v2/index.d.ts +10 -10
- package/Physics/v2/physicsAggregate.d.ts +8 -8
- package/Physics/v2/physicsBody.d.ts +9 -9
- package/Physics/v2/physicsConstraint.d.ts +5 -5
- package/Physics/v2/physicsEngine.d.ts +7 -7
- package/Physics/v2/physicsEngineComponent.d.ts +7 -7
- package/Physics/v2/physicsShape.d.ts +10 -10
- package/Physics/v2/ragdoll.d.ts +7 -7
- package/PostProcesses/RenderPipeline/Pipelines/defaultRenderingPipeline.d.ts +15 -15
- package/PostProcesses/RenderPipeline/Pipelines/index.d.ts +19 -19
- package/PostProcesses/RenderPipeline/Pipelines/lensRenderingPipeline.d.ts +7 -7
- package/PostProcesses/RenderPipeline/Pipelines/ssao2RenderingPipeline.d.ts +4 -4
- package/PostProcesses/RenderPipeline/Pipelines/ssaoRenderingPipeline.d.ts +6 -6
- package/PostProcesses/RenderPipeline/Pipelines/ssrRenderingPipeline.d.ts +8 -8
- package/PostProcesses/RenderPipeline/Pipelines/standardRenderingPipeline.d.ts +15 -15
- package/PostProcesses/RenderPipeline/Pipelines/taaRenderingPipeline.d.ts +4 -4
- package/PostProcesses/RenderPipeline/index.d.ts +5 -5
- package/PostProcesses/RenderPipeline/postProcessRenderEffect.d.ts +4 -4
- package/PostProcesses/RenderPipeline/postProcessRenderPipeline.d.ts +6 -6
- package/PostProcesses/RenderPipeline/postProcessRenderPipelineManager.d.ts +2 -2
- package/PostProcesses/RenderPipeline/postProcessRenderPipelineManagerSceneComponent.d.ts +4 -4
- package/PostProcesses/anaglyphPostProcess.d.ts +3 -3
- package/PostProcesses/blackAndWhitePostProcess.d.ts +7 -7
- package/PostProcesses/bloomEffect.d.ts +6 -6
- package/PostProcesses/bloomMergePostProcess.d.ts +6 -6
- package/PostProcesses/blurPostProcess.d.ts +8 -8
- package/PostProcesses/chromaticAberrationPostProcess.d.ts +8 -8
- package/PostProcesses/circleOfConfusionPostProcess.d.ts +7 -7
- package/PostProcesses/colorCorrectionPostProcess.d.ts +6 -6
- package/PostProcesses/convolutionPostProcess.d.ts +6 -6
- package/PostProcesses/depthOfFieldBlurPostProcess.d.ts +6 -6
- package/PostProcesses/depthOfFieldBlurPostProcess.js +9 -3
- package/PostProcesses/depthOfFieldBlurPostProcess.js.map +1 -1
- package/PostProcesses/depthOfFieldEffect.d.ts +7 -7
- package/PostProcesses/depthOfFieldMergePostProcess.d.ts +5 -5
- package/PostProcesses/displayPassPostProcess.d.ts +6 -6
- package/PostProcesses/extractHighlightsPostProcess.d.ts +6 -6
- package/PostProcesses/filterPostProcess.d.ts +7 -7
- package/PostProcesses/fxaaPostProcess.d.ts +6 -6
- package/PostProcesses/grainPostProcess.d.ts +6 -6
- package/PostProcesses/highlightsPostProcess.d.ts +4 -4
- package/PostProcesses/imageProcessingPostProcess.d.ts +12 -29
- package/PostProcesses/imageProcessingPostProcess.js +27 -138
- package/PostProcesses/imageProcessingPostProcess.js.map +1 -1
- package/PostProcesses/index.d.ts +93 -92
- package/PostProcesses/index.js +1 -0
- package/PostProcesses/index.js.map +1 -1
- package/PostProcesses/motionBlurPostProcess.d.ts +9 -9
- package/PostProcesses/passPostProcess.d.ts +7 -7
- package/PostProcesses/postProcess.d.ts +21 -21
- package/PostProcesses/postProcessManager.d.ts +6 -6
- package/PostProcesses/refractionPostProcess.d.ts +9 -9
- package/PostProcesses/screenSpaceCurvaturePostProcess.d.ts +8 -8
- package/PostProcesses/screenSpaceReflectionPostProcess.d.ts +7 -7
- package/PostProcesses/sharpenPostProcess.d.ts +7 -7
- package/PostProcesses/stereoscopicInterlacePostProcess.d.ts +3 -3
- package/PostProcesses/subSurfaceScatteringPostProcess.d.ts +12 -12
- package/PostProcesses/thinAnaglyphPostProcess.d.ts +1 -1
- package/PostProcesses/thinBlackAndWhitePostProcess.d.ts +1 -1
- package/PostProcesses/thinBloomEffect.d.ts +3 -3
- package/PostProcesses/thinBloomMergePostProcess.d.ts +1 -1
- package/PostProcesses/thinBlurPostProcess.d.ts +1 -1
- package/PostProcesses/thinBlurPostProcess.js +1 -0
- package/PostProcesses/thinBlurPostProcess.js.map +1 -1
- package/PostProcesses/thinChromaticAberrationPostProcess.d.ts +4 -4
- package/PostProcesses/thinChromaticAberrationPostProcess.js.map +1 -1
- package/PostProcesses/thinCircleOfConfusionPostProcess.d.ts +1 -1
- package/PostProcesses/thinDepthOfFieldBlurPostProcess.d.ts +1 -1
- package/PostProcesses/thinDepthOfFieldEffect.d.ts +5 -5
- package/PostProcesses/thinDepthOfFieldEffect.js +3 -3
- package/PostProcesses/thinDepthOfFieldEffect.js.map +1 -1
- package/PostProcesses/thinDepthOfFieldMergePostProcess.d.ts +1 -1
- package/PostProcesses/thinExtractHighlightsPostProcess.d.ts +1 -1
- package/PostProcesses/thinImageProcessingPostProcess.d.ts +258 -0
- package/PostProcesses/thinImageProcessingPostProcess.js +462 -0
- package/PostProcesses/thinImageProcessingPostProcess.js.map +1 -0
- package/PostProcesses/thinSSRBlurCombinerPostProcess.d.ts +1 -1
- package/PostProcesses/thinSSRBlurPostProcess.d.ts +2 -2
- package/PostProcesses/thinTAAPostProcess.d.ts +1 -1
- package/PostProcesses/tonemapPostProcess.d.ts +3 -3
- package/PostProcesses/volumetricLightScatteringPostProcess.d.ts +13 -13
- package/PostProcesses/vrDistortionCorrectionPostProcess.d.ts +4 -4
- package/PostProcesses/vrMultiviewToSingleviewPostProcess.d.ts +5 -5
- package/Probes/index.d.ts +1 -1
- package/Probes/reflectionProbe.d.ts +6 -6
- package/Rendering/GlobalIllumination/giRSM.d.ts +1 -1
- package/Rendering/GlobalIllumination/giRSMManager.d.ts +1 -1
- package/Rendering/GlobalIllumination/index.d.ts +10 -10
- package/Rendering/IBLShadows/iblShadowsAccumulationPass.d.ts +4 -4
- package/Rendering/IBLShadows/iblShadowsRenderPipeline.d.ts +6 -6
- package/Rendering/IBLShadows/iblShadowsSpatialBlurPass.d.ts +3 -3
- package/Rendering/IBLShadows/iblShadowsVoxelRenderer.d.ts +8 -8
- package/Rendering/IBLShadows/iblShadowsVoxelTracingPass.d.ts +4 -4
- package/Rendering/boundingBoxRenderer.d.ts +11 -11
- package/Rendering/depthPeelingRenderer.d.ts +7 -7
- package/Rendering/depthPeelingSceneComponent.d.ts +5 -5
- package/Rendering/depthRenderer.d.ts +10 -10
- package/Rendering/depthRendererSceneComponent.d.ts +6 -6
- package/Rendering/edgesRenderer.d.ts +14 -14
- package/Rendering/fluidRenderer/fluidRenderer.d.ts +3 -3
- package/Rendering/fluidRenderer/fluidRenderingObjectCustomParticles.d.ts +1 -1
- package/Rendering/fluidRenderer/fluidRenderingObjectParticleSystem.d.ts +1 -1
- package/Rendering/fluidRenderer/fluidRenderingTargetRenderer.d.ts +2 -2
- package/Rendering/fluidRenderer/index.d.ts +23 -23
- package/Rendering/geometryBufferRenderer.d.ts +11 -11
- package/Rendering/geometryBufferRendererSceneComponent.d.ts +5 -5
- package/Rendering/iblCdfGenerator.d.ts +7 -7
- package/Rendering/iblCdfGeneratorSceneComponent.d.ts +5 -5
- package/Rendering/index.d.ts +86 -86
- package/Rendering/motionBlurConfiguration.d.ts +1 -1
- package/Rendering/objectRenderer.d.ts +7 -7
- package/Rendering/objectRenderer.js +11 -11
- package/Rendering/objectRenderer.js.map +1 -1
- package/Rendering/outlineRenderer.d.ts +6 -6
- package/Rendering/prePassEffectConfiguration.d.ts +1 -1
- package/Rendering/prePassRenderer.d.ts +11 -11
- package/Rendering/prePassRendererSceneComponent.d.ts +7 -7
- package/Rendering/renderingGroup.d.ts +9 -9
- package/Rendering/renderingManager.d.ts +10 -10
- package/Rendering/screenSpaceReflections2Configuration.d.ts +1 -1
- package/Rendering/screenSpaceReflectionsConfiguration.d.ts +1 -1
- package/Rendering/ssao2Configuration.d.ts +1 -1
- package/Rendering/subSurfaceConfiguration.d.ts +4 -4
- package/Rendering/subSurfaceSceneComponent.d.ts +5 -5
- package/Rendering/utilityLayerRenderer.d.ts +7 -7
- package/Shaders/ShadersInclude/backgroundUboDeclaration.d.ts +1 -1
- package/Shaders/ShadersInclude/bumpFragmentFunctions.d.ts +1 -1
- package/Shaders/ShadersInclude/defaultFragmentDeclaration.d.ts +1 -1
- package/Shaders/ShadersInclude/defaultUboDeclaration.d.ts +2 -2
- package/Shaders/ShadersInclude/defaultVertexDeclaration.d.ts +1 -1
- package/Shaders/ShadersInclude/gaussianSplatting.js +9 -1
- package/Shaders/ShadersInclude/gaussianSplatting.js.map +1 -1
- package/Shaders/ShadersInclude/gaussianSplattingFragmentDeclaration.d.ts +2 -2
- package/Shaders/ShadersInclude/gaussianSplattingUboDeclaration.d.ts +2 -2
- package/Shaders/ShadersInclude/geometryUboDeclaration.d.ts +1 -1
- package/Shaders/ShadersInclude/lightFragment.js +10 -7
- package/Shaders/ShadersInclude/lightFragment.js.map +1 -1
- package/Shaders/ShadersInclude/lightsFragmentFunctions.d.ts +1 -1
- package/Shaders/ShadersInclude/lineUboDeclaration.d.ts +2 -2
- package/Shaders/ShadersInclude/pbrBRDFFunctions.js +5 -1
- package/Shaders/ShadersInclude/pbrBRDFFunctions.js.map +1 -1
- package/Shaders/ShadersInclude/pbrBlockAlbedoOpacity.d.ts +1 -1
- package/Shaders/ShadersInclude/pbrBlockDirectLighting.js +1 -1
- package/Shaders/ShadersInclude/pbrBlockDirectLighting.js.map +1 -1
- package/Shaders/ShadersInclude/pbrBlockFinalUnlitComponents.js +1 -1
- package/Shaders/ShadersInclude/pbrBlockFinalUnlitComponents.js.map +1 -1
- package/Shaders/ShadersInclude/pbrBlockReflectance.js +1 -1
- package/Shaders/ShadersInclude/pbrBlockReflectance.js.map +1 -1
- package/Shaders/ShadersInclude/pbrBlockReflectivity.js +2 -2
- package/Shaders/ShadersInclude/pbrBlockReflectivity.js.map +1 -1
- package/Shaders/ShadersInclude/pbrDirectLightingFunctions.js +16 -4
- package/Shaders/ShadersInclude/pbrDirectLightingFunctions.js.map +1 -1
- package/Shaders/ShadersInclude/pbrDirectLightingSetupFunctions.d.ts +1 -1
- package/Shaders/ShadersInclude/pbrFragmentDeclaration.d.ts +1 -1
- package/Shaders/ShadersInclude/pbrFragmentExtraDeclaration.d.ts +1 -1
- package/Shaders/ShadersInclude/pbrFragmentSamplersDeclaration.d.ts +2 -2
- package/Shaders/ShadersInclude/pbrUboDeclaration.d.ts +2 -2
- package/Shaders/ShadersInclude/pbrVertexDeclaration.d.ts +1 -1
- package/Shaders/ShadersInclude/shadowMapFragmentExtraDeclaration.d.ts +2 -2
- package/Shaders/ShadersInclude/shadowMapUboDeclaration.d.ts +2 -2
- package/Shaders/ShadersInclude/shadowMapVertexDeclaration.d.ts +2 -2
- package/Shaders/background.fragment.d.ts +18 -18
- package/Shaders/background.vertex.d.ts +18 -18
- package/Shaders/boundingBoxRenderer.fragment.d.ts +2 -2
- package/Shaders/boundingBoxRenderer.vertex.d.ts +2 -2
- package/Shaders/color.fragment.d.ts +4 -4
- package/Shaders/color.vertex.d.ts +11 -11
- package/Shaders/copyTextureToTexture.fragment.d.ts +1 -1
- package/Shaders/default.fragment.d.ts +28 -28
- package/Shaders/default.vertex.d.ts +33 -33
- package/Shaders/depth.fragment.d.ts +3 -3
- package/Shaders/depth.vertex.d.ts +14 -14
- package/Shaders/extractHighlights.fragment.d.ts +1 -1
- package/Shaders/gaussianSplatting.fragment.d.ts +5 -5
- package/Shaders/gaussianSplatting.vertex.d.ts +10 -10
- package/Shaders/gaussianSplatting.vertex.js +2 -2
- package/Shaders/gaussianSplatting.vertex.js.map +1 -1
- package/Shaders/geometry.fragment.d.ts +7 -7
- package/Shaders/geometry.vertex.d.ts +15 -15
- package/Shaders/glowMapGeneration.fragment.d.ts +3 -3
- package/Shaders/glowMapGeneration.vertex.d.ts +12 -12
- package/Shaders/gpuRenderParticles.fragment.d.ts +9 -9
- package/Shaders/gpuRenderParticles.vertex.d.ts +6 -6
- package/Shaders/gpuTransform.vertex.d.ts +8 -8
- package/Shaders/grain.fragment.d.ts +1 -1
- package/Shaders/greasedLine.vertex.d.ts +2 -2
- package/Shaders/hdrFiltering.fragment.d.ts +4 -4
- package/Shaders/hdrIrradianceFiltering.fragment.d.ts +4 -4
- package/Shaders/iblCdfy.fragment.d.ts +1 -1
- package/Shaders/iblIcdf.fragment.d.ts +1 -1
- package/Shaders/iblScaledLuminance.fragment.d.ts +1 -1
- package/Shaders/iblVoxelGrid.vertex.d.ts +10 -10
- package/Shaders/imageProcessing.fragment.d.ts +3 -3
- package/Shaders/kernelBlur.fragment.d.ts +4 -4
- package/Shaders/kernelBlur.vertex.d.ts +2 -2
- package/Shaders/layer.fragment.d.ts +1 -1
- package/Shaders/line.fragment.d.ts +4 -4
- package/Shaders/line.vertex.d.ts +8 -8
- package/Shaders/meshUVSpaceRenderer.vertex.d.ts +10 -10
- package/Shaders/outline.fragment.d.ts +4 -4
- package/Shaders/outline.vertex.d.ts +14 -14
- package/Shaders/particles.fragment.d.ts +9 -9
- package/Shaders/particles.vertex.d.ts +6 -6
- package/Shaders/pbr.fragment.d.ts +58 -58
- package/Shaders/pbr.vertex.d.ts +33 -33
- package/Shaders/picking.vertex.d.ts +10 -10
- package/Shaders/rgbdDecode.fragment.d.ts +1 -1
- package/Shaders/rgbdEncode.fragment.d.ts +1 -1
- package/Shaders/screenSpaceReflection2.fragment.d.ts +3 -3
- package/Shaders/screenSpaceReflection2BlurCombiner.fragment.d.ts +3 -3
- package/Shaders/shadowMap.fragment.d.ts +4 -4
- package/Shaders/shadowMap.vertex.d.ts +17 -17
- package/Shaders/spriteMap.fragment.d.ts +4 -4
- package/Shaders/spriteMap.vertex.d.ts +3 -3
- package/Shaders/sprites.fragment.d.ts +5 -5
- package/Shaders/sprites.vertex.d.ts +3 -3
- package/Shaders/standard.fragment.d.ts +1 -1
- package/Shaders/subSurfaceScattering.fragment.d.ts +4 -4
- package/Shaders/velocity.vertex.d.ts +2 -2
- package/Shaders/volumetricLightScatteringPass.vertex.d.ts +10 -10
- package/ShadersWGSL/ShadersInclude/backgroundUboDeclaration.d.ts +1 -1
- package/ShadersWGSL/ShadersInclude/bumpFragmentFunctions.d.ts +1 -1
- package/ShadersWGSL/ShadersInclude/defaultUboDeclaration.d.ts +2 -2
- package/ShadersWGSL/ShadersInclude/gaussianSplatting.js +11 -2
- package/ShadersWGSL/ShadersInclude/gaussianSplatting.js.map +1 -1
- package/ShadersWGSL/ShadersInclude/gaussianSplattingFragmentDeclaration.d.ts +2 -2
- package/ShadersWGSL/ShadersInclude/gaussianSplattingUboDeclaration.d.ts +2 -2
- package/ShadersWGSL/ShadersInclude/lightFragment.js +10 -7
- package/ShadersWGSL/ShadersInclude/lightFragment.js.map +1 -1
- package/ShadersWGSL/ShadersInclude/lightsFragmentFunctions.d.ts +1 -1
- package/ShadersWGSL/ShadersInclude/pbrBRDFFunctions.js +5 -1
- package/ShadersWGSL/ShadersInclude/pbrBRDFFunctions.js.map +1 -1
- package/ShadersWGSL/ShadersInclude/pbrBlockAlbedoOpacity.d.ts +1 -1
- package/ShadersWGSL/ShadersInclude/pbrBlockDirectLighting.js +1 -1
- package/ShadersWGSL/ShadersInclude/pbrBlockDirectLighting.js.map +1 -1
- package/ShadersWGSL/ShadersInclude/pbrBlockFinalUnlitComponents.js +1 -1
- package/ShadersWGSL/ShadersInclude/pbrBlockFinalUnlitComponents.js.map +1 -1
- package/ShadersWGSL/ShadersInclude/pbrBlockReflectance.js +1 -1
- package/ShadersWGSL/ShadersInclude/pbrBlockReflectance.js.map +1 -1
- package/ShadersWGSL/ShadersInclude/pbrBlockReflectivity.js +2 -2
- package/ShadersWGSL/ShadersInclude/pbrBlockReflectivity.js.map +1 -1
- package/ShadersWGSL/ShadersInclude/pbrDirectLightingFunctions.js +24 -8
- package/ShadersWGSL/ShadersInclude/pbrDirectLightingFunctions.js.map +1 -1
- package/ShadersWGSL/ShadersInclude/pbrDirectLightingSetupFunctions.d.ts +1 -1
- package/ShadersWGSL/ShadersInclude/pbrFragmentExtraDeclaration.d.ts +1 -1
- package/ShadersWGSL/ShadersInclude/pbrFragmentSamplersDeclaration.d.ts +2 -2
- package/ShadersWGSL/ShadersInclude/pbrUboDeclaration.d.ts +2 -2
- package/ShadersWGSL/ShadersInclude/shadowMapFragmentExtraDeclaration.d.ts +2 -2
- package/ShadersWGSL/background.fragment.d.ts +16 -16
- package/ShadersWGSL/background.vertex.d.ts +16 -16
- package/ShadersWGSL/color.fragment.d.ts +4 -4
- package/ShadersWGSL/color.vertex.d.ts +11 -11
- package/ShadersWGSL/copyTextureToTexture.fragment.d.ts +1 -1
- package/ShadersWGSL/default.fragment.d.ts +26 -26
- package/ShadersWGSL/default.vertex.d.ts +31 -31
- package/ShadersWGSL/depth.fragment.d.ts +3 -3
- package/ShadersWGSL/depth.vertex.d.ts +12 -12
- package/ShadersWGSL/extractHighlights.fragment.d.ts +1 -1
- package/ShadersWGSL/gaussianSplatting.fragment.d.ts +5 -5
- package/ShadersWGSL/gaussianSplatting.vertex.d.ts +10 -9
- package/ShadersWGSL/gaussianSplatting.vertex.js +6 -3
- package/ShadersWGSL/gaussianSplatting.vertex.js.map +1 -1
- package/ShadersWGSL/geometry.fragment.d.ts +6 -6
- package/ShadersWGSL/geometry.vertex.d.ts +14 -14
- package/ShadersWGSL/glowMapGeneration.fragment.d.ts +3 -3
- package/ShadersWGSL/glowMapGeneration.vertex.d.ts +12 -12
- package/ShadersWGSL/grain.fragment.d.ts +1 -1
- package/ShadersWGSL/greasedLine.vertex.d.ts +4 -4
- package/ShadersWGSL/hdrFiltering.fragment.d.ts +4 -4
- package/ShadersWGSL/hdrIrradianceFiltering.fragment.d.ts +4 -4
- package/ShadersWGSL/iblIcdf.fragment.d.ts +1 -1
- package/ShadersWGSL/iblScaledLuminance.fragment.d.ts +1 -1
- package/ShadersWGSL/iblVoxelGrid.vertex.d.ts +10 -10
- package/ShadersWGSL/imageProcessing.fragment.d.ts +3 -3
- package/ShadersWGSL/kernelBlur.fragment.d.ts +4 -4
- package/ShadersWGSL/kernelBlur.vertex.d.ts +2 -2
- package/ShadersWGSL/layer.fragment.d.ts +1 -1
- package/ShadersWGSL/line.fragment.d.ts +4 -4
- package/ShadersWGSL/line.vertex.d.ts +8 -8
- package/ShadersWGSL/meshUVSpaceRenderer.vertex.d.ts +10 -10
- package/ShadersWGSL/outline.fragment.d.ts +4 -4
- package/ShadersWGSL/outline.vertex.d.ts +14 -14
- package/ShadersWGSL/particles.fragment.d.ts +9 -9
- package/ShadersWGSL/particles.vertex.d.ts +6 -6
- package/ShadersWGSL/pbr.fragment.d.ts +56 -56
- package/ShadersWGSL/pbr.vertex.d.ts +31 -31
- package/ShadersWGSL/picking.vertex.d.ts +10 -10
- package/ShadersWGSL/rgbdDecode.fragment.d.ts +1 -1
- package/ShadersWGSL/rgbdEncode.fragment.d.ts +1 -1
- package/ShadersWGSL/screenSpaceReflection2.fragment.d.ts +3 -3
- package/ShadersWGSL/screenSpaceReflection2BlurCombiner.fragment.d.ts +3 -3
- package/ShadersWGSL/shadowMap.fragment.d.ts +4 -4
- package/ShadersWGSL/shadowMap.vertex.d.ts +17 -17
- package/ShadersWGSL/sprites.fragment.d.ts +5 -5
- package/ShadersWGSL/sprites.vertex.d.ts +3 -3
- package/ShadersWGSL/subSurfaceScattering.fragment.d.ts +4 -4
- package/Sprites/index.d.ts +10 -10
- package/Sprites/sprite.d.ts +9 -9
- package/Sprites/spriteManager.d.ts +9 -9
- package/Sprites/spriteMap.d.ts +7 -7
- package/Sprites/spritePackedManager.d.ts +3 -3
- package/Sprites/spriteRenderer.d.ts +8 -8
- package/Sprites/spriteSceneComponent.d.ts +10 -10
- package/Sprites/thinSprite.d.ts +2 -2
- package/States/alphaCullingState.d.ts +1 -1
- package/States/depthCullingState.d.ts +1 -1
- package/States/index.d.ts +4 -4
- package/States/stencilState.d.ts +1 -1
- package/States/stencilStateComposer.d.ts +1 -1
- package/XR/features/Layers/WebXRProjectionLayer.d.ts +1 -1
- package/XR/features/WebXRAbstractFeature.d.ts +4 -4
- package/XR/features/WebXRAnchorSystem.d.ts +6 -6
- package/XR/features/WebXRBackgroundRemover.d.ts +4 -4
- package/XR/features/WebXRControllerMovement.d.ts +9 -9
- package/XR/features/WebXRControllerPhysics.d.ts +6 -6
- package/XR/features/WebXRControllerPointerSelection.d.ts +10 -10
- package/XR/features/WebXRControllerTeleportation.d.ts +12 -12
- package/XR/features/WebXRDOMOverlay.d.ts +3 -3
- package/XR/features/WebXRDepthSensing.d.ts +6 -6
- package/XR/features/WebXREyeTracking.d.ts +5 -5
- package/XR/features/WebXRFeaturePointSystem.d.ts +4 -4
- package/XR/features/WebXRHandTracking.d.ts +11 -11
- package/XR/features/WebXRHitTest.d.ts +5 -5
- package/XR/features/WebXRHitTestLegacy.d.ts +6 -6
- package/XR/features/WebXRImageTracking.d.ts +5 -5
- package/XR/features/WebXRLayers.d.ts +8 -8
- package/XR/features/WebXRLightEstimation.d.ts +9 -9
- package/XR/features/WebXRMeshDetector.d.ts +6 -6
- package/XR/features/WebXRNearInteraction.d.ts +13 -13
- package/XR/features/WebXRPlaneDetector.d.ts +5 -5
- package/XR/features/WebXRRawCameraAccess.d.ts +4 -4
- package/XR/features/WebXRSpaceWarp.d.ts +10 -10
- package/XR/features/WebXRWalkingLocomotion.d.ts +4 -4
- package/XR/features/index.d.ts +23 -23
- package/XR/index.d.ts +14 -14
- package/XR/motionController/index.d.ts +9 -9
- package/XR/motionController/webXRAbstractMotionController.d.ts +5 -5
- package/XR/motionController/webXRControllerComponent.d.ts +3 -3
- package/XR/motionController/webXRGenericHandController.d.ts +4 -4
- package/XR/motionController/webXRGenericMotionController.d.ts +4 -4
- package/XR/motionController/webXRHTCViveMotionController.d.ts +4 -4
- package/XR/motionController/webXRMicrosoftMixedRealityController.d.ts +4 -4
- package/XR/motionController/webXRMotionControllerManager.d.ts +2 -2
- package/XR/motionController/webXROculusTouchMotionController.d.ts +4 -4
- package/XR/motionController/webXRProfiledMotionController.d.ts +4 -4
- package/XR/native/index.d.ts +2 -2
- package/XR/native/nativeXRRenderTarget.d.ts +7 -7
- package/XR/webXRCamera.d.ts +7 -7
- package/XR/webXRDefaultExperience.d.ts +16 -16
- package/XR/webXREnterExitUI.d.ts +5 -5
- package/XR/webXRExperienceHelper.d.ts +7 -7
- package/XR/webXRFeaturesManager.d.ts +2 -2
- package/XR/webXRInput.d.ts +6 -6
- package/XR/webXRInputSource.d.ts +7 -7
- package/XR/webXRLayerWrapper.d.ts +3 -3
- package/XR/webXRManagedOutputCanvas.d.ts +5 -5
- package/XR/webXRRenderTargetTextureProvider.d.ts +5 -5
- package/XR/webXRSessionManager.d.ts +9 -9
- package/XR/webXRTypes.d.ts +2 -2
- package/XR/webXRWebGLLayer.d.ts +6 -6
- package/assetContainer.d.ts +27 -27
- package/index.d.ts +49 -49
- package/node.d.ts +15 -15
- package/package.json +1 -1
- package/scene.d.ts +62 -62
- package/sceneComponent.d.ts +12 -12
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"characterController.js","sourceRoot":"","sources":["../../../../../dev/core/src/Physics/v2/characterController.ts"],"names":[],"mappings":"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","sourcesContent":["import { Vector3, Quaternion, Matrix, TmpVectors } from \"../../Maths/math.vector\";\r\nimport type { Scene } from \"../../scene\";\r\nimport type { DeepImmutableObject } from \"../../types\";\r\nimport type { PhysicsBody } from \"./physicsBody\";\r\nimport { PhysicsShapeCapsule, type PhysicsShape } from \"./physicsShape\";\r\nimport { PhysicsMotionType } from \"./IPhysicsEnginePlugin\";\r\nimport type { HavokPlugin } from \"./Plugins/havokPlugin\";\r\nimport { BuildArray } from \"core/Misc/arrayTools\";\r\n\r\n/**\r\n * Shape properties for the character controller\r\n */\r\nexport interface CharacterShapeOptions {\r\n /**\r\n * optional shape used for collision detection\r\n */\r\n shape?: PhysicsShape;\r\n /**\r\n * capsule height for the capsule shape if no shape is provided\r\n */\r\n capsuleHeight?: number;\r\n /**\r\n * capsule radius for the capsule shape if no shape is provided\r\n */\r\n capsuleRadius?: number;\r\n}\r\n/**\r\n * State of the character on the surface\r\n */\r\nexport const enum CharacterSupportedState {\r\n UNSUPPORTED,\r\n SLIDING,\r\n SUPPORTED,\r\n}\r\n\r\n/**\r\n * Surface information computed by checkSupport method\r\n */\r\nexport interface CharacterSurfaceInfo {\r\n /**\r\n * Indicates whether the surface is dynamic.\r\n * A dynamic surface is one that can change its properties over time,\r\n * such as moving platforms or surfaces that can be affected by external forces.\r\n * surfaceInfo.supportedState is always CharacterSupportedState.SUPPORTED when isSurfaceDynamic is true.\r\n */\r\n isSurfaceDynamic: boolean;\r\n /**\r\n * The supported state of the character on the surface.\r\n */\r\n supportedState: CharacterSupportedState;\r\n /**\r\n * The average normal vector of the surface.\r\n * This vector is perpendicular to the surface and points outwards.\r\n */\r\n averageSurfaceNormal: Vector3;\r\n /**\r\n * The average velocity of the surface.\r\n * This vector represents the speed and direction in which the surface is moving.\r\n */\r\n averageSurfaceVelocity: Vector3;\r\n /**\r\n * The average angular velocity of the surface.\r\n */\r\n averageAngularSurfaceVelocity: Vector3;\r\n}\r\n\r\n/** @internal */\r\ninterface Contact {\r\n /** @internal */\r\n position: Vector3;\r\n /** @internal */\r\n normal: Vector3;\r\n /** @internal */\r\n distance: number;\r\n /** @internal */\r\n fraction: number;\r\n /** @internal */\r\n bodyB: { body: PhysicsBody; index: number };\r\n /** @internal */\r\n allowedPenetration: number;\r\n}\r\n\r\n/** @internal */\r\ninterface SurfaceConstraintInfo {\r\n /** @internal */\r\n planeNormal: Vector3;\r\n /** @internal */\r\n planeDistance: number;\r\n /** @internal */\r\n velocity: Vector3;\r\n /** @internal */\r\n angularVelocity: Vector3;\r\n /** @internal */\r\n staticFriction: number;\r\n /** @internal */\r\n extraUpStaticFriction: number;\r\n /** @internal */\r\n extraDownStaticFriction: number;\r\n /** @internal */\r\n dynamicFriction: number;\r\n /** @internal */\r\n priority: number;\r\n}\r\n\r\n/** @internal */\r\nconst enum SurfaceConstraintInteractionStatus {\r\n OK,\r\n FAILURE_3D,\r\n FAILURE_2D,\r\n}\r\n\r\n/** @internal */\r\ninterface SurfaceConstraintInteraction {\r\n /** @internal */\r\n touched: boolean;\r\n /** @internal */\r\n stopped: boolean;\r\n /** @internal */\r\n surfaceTime: number;\r\n /** @internal */\r\n penaltyDistance: number;\r\n /** @internal */\r\n status: SurfaceConstraintInteractionStatus;\r\n}\r\n\r\n/** @internal */\r\nclass SimplexSolverOutput {\r\n /** @internal */\r\n public position: Vector3;\r\n /** @internal */\r\n public velocity: Vector3;\r\n /** @internal */\r\n public deltaTime: number;\r\n /** @internal */\r\n public planeInteractions: SurfaceConstraintInteraction[];\r\n}\r\n\r\n/** @internal */\r\nclass SimplexSolverActivePlanes {\r\n /** @internal */\r\n public index: number;\r\n /** @internal */\r\n public constraint: SurfaceConstraintInfo;\r\n /** @internal */\r\n public interaction: SurfaceConstraintInteraction;\r\n\r\n /** @internal */\r\n public copyFrom(other: SimplexSolverActivePlanes) {\r\n this.index = other.index;\r\n this.constraint = other.constraint;\r\n this.interaction = other.interaction;\r\n }\r\n}\r\n\r\n/** @internal */\r\nclass SimplexSolverInfo {\r\n /** @internal */\r\n public supportPlanes: Array<SimplexSolverActivePlanes> = new Array<SimplexSolverActivePlanes>(4);\r\n /** @internal */\r\n public numSupportPlanes: number = 0;\r\n /** @internal */\r\n public currentTime: number = 0;\r\n /** @internal */\r\n public inputConstraints: SurfaceConstraintInfo[];\r\n /** @internal */\r\n public outputInteractions: SurfaceConstraintInteraction[];\r\n /** @internal */\r\n public getOutput(constraint: SurfaceConstraintInfo): SurfaceConstraintInteraction {\r\n return this.outputInteractions[this.inputConstraints.indexOf(constraint)]; //<todo.eoin This is O(1) in C++! Equivalent in TS?\r\n }\r\n}\r\n\r\n/** @internal */\r\nfunction contactFromCast(hp: HavokPlugin, cp: any /*ContactPoint*/, castPath: Vector3, hitFraction: number, keepDistance: number): Contact {\r\n //@ts-ignore\r\n const bodyMap = hp._bodies;\r\n\r\n const normal = Vector3.FromArray(cp[4]);\r\n const dist = -hitFraction * castPath.dot(normal);\r\n return {\r\n position: Vector3.FromArray(cp[3]),\r\n normal: normal,\r\n distance: dist,\r\n fraction: hitFraction,\r\n bodyB: bodyMap.get(cp[0][0])!,\r\n allowedPenetration: Math.min(Math.max(keepDistance - dist, 0.0), keepDistance),\r\n };\r\n}\r\n\r\n/**\r\n * Character controller using physics\r\n */\r\nexport class PhysicsCharacterController {\r\n private _position: Vector3;\r\n private _orientation: Quaternion = Quaternion.Identity();\r\n private _velocity: Vector3;\r\n private _lastVelocity: Vector3;\r\n private _shape: PhysicsShape;\r\n private _manifold: Contact[] = [];\r\n private _lastDisplacement: Vector3;\r\n private _contactAngleSensitivity = 10.0;\r\n private _lastInvDeltaTime: number;\r\n private _scene: Scene;\r\n private _tmpMatrix = new Matrix();\r\n private _tmpVecs: Vector3[] = BuildArray(31, Vector3.Zero);\r\n\r\n /**\r\n * minimum distance to make contact\r\n * default 0.05\r\n */\r\n public keepDistance: number = 0.05;\r\n /**\r\n * maximum distance to keep contact\r\n * default 0.1\r\n */\r\n public keepContactTolerance: number = 0.1;\r\n /**\r\n * maximum number of raycast per integration starp\r\n * default 10\r\n */\r\n public maxCastIterations: number = 10;\r\n /**\r\n * speed when recovery from penetration\r\n * default 1.0\r\n */\r\n public penetrationRecoverySpeed = 1.0;\r\n /**\r\n * friction with static surfaces\r\n * default 0\r\n */\r\n public staticFriction = 0;\r\n /**\r\n * friction with dynamic surfaces\r\n * default 1\r\n */\r\n public dynamicFriction = 1;\r\n /**\r\n * cosine value of slop angle that can be climbed\r\n * computed as `Math.cos(Math.PI * (angleInDegree / 180.0));`\r\n * default 0.5 (value for a 60deg angle)\r\n */\r\n public maxSlopeCosine = 0.5;\r\n /**\r\n * character maximum speed\r\n * default 10\r\n */\r\n public maxCharacterSpeedForSolver = 10.0;\r\n /**\r\n * up vector\r\n */\r\n public up = new Vector3(0, 1, 0);\r\n /**\r\n * Strength when pushing other bodies\r\n * default 1e38\r\n */\r\n public characterStrength = 1e38;\r\n\r\n /**\r\n * Acceleration factor. A value of 1 means reaching max velocity immediately\r\n */\r\n public acceleration = 0.05;\r\n\r\n /**\r\n * maximum acceleration in world space coordinate\r\n */\r\n public maxAcceleration = 50;\r\n\r\n /**\r\n * character mass\r\n * default 0\r\n */\r\n public characterMass = 0;\r\n private _startCollector;\r\n private _castCollector;\r\n\r\n /**\r\n * instanciate a new characterController\r\n * @param position Initial position\r\n * @param characterShapeOptions character physics shape options\r\n * @param scene Scene\r\n */\r\n public constructor(position: Vector3, characterShapeOptions: CharacterShapeOptions, scene: Scene) {\r\n this._position = position.clone();\r\n this._velocity = Vector3.Zero();\r\n this._lastVelocity = Vector3.Zero();\r\n const r = characterShapeOptions.capsuleRadius ?? 0.6;\r\n const h = characterShapeOptions.capsuleHeight ?? 1.8;\r\n this._tmpVecs[0].set(0, h * 0.5 - r, 0);\r\n this._tmpVecs[1].set(0, -h * 0.5 + r, 0);\r\n this._shape = characterShapeOptions.shape ?? new PhysicsShapeCapsule(this._tmpVecs[0], this._tmpVecs[1], r, scene);\r\n this._lastInvDeltaTime = 1.0 / 60.0;\r\n this._lastDisplacement = Vector3.Zero();\r\n this._scene = scene;\r\n\r\n const hk = this._scene.getPhysicsEngine()!.getPhysicsPlugin() as HavokPlugin;\r\n const hknp = hk._hknp;\r\n\r\n this._startCollector = hknp.HP_QueryCollector_Create(16)[1];\r\n this._castCollector = hknp.HP_QueryCollector_Create(16)[1];\r\n }\r\n\r\n /**\r\n * Character position\r\n * @returns Character position\r\n */\r\n public getPosition(): Vector3 {\r\n return this._position;\r\n }\r\n\r\n /**\r\n * Character velocity\r\n * @returns Character velocity vector\r\n */\r\n public getVelocity(): Vector3 {\r\n return this._velocity;\r\n }\r\n\r\n /**\r\n * Set velocity vector\r\n * @param velocity vector\r\n */\r\n public setVelocity(velocity: Vector3) {\r\n this._velocity.copyFrom(velocity);\r\n }\r\n\r\n protected _validateManifold() {\r\n const newManifold = [];\r\n for (let i = 0; i < this._manifold.length; i++) {\r\n if (!this._manifold[i].bodyB.body.isDisposed) {\r\n newManifold.push(this._manifold[i]);\r\n }\r\n }\r\n this._manifold = newManifold;\r\n }\r\n\r\n private _getPointVelocityToRef(body: { body: PhysicsBody; index: number }, pointWorld: Vector3, result: Vector3) {\r\n //<todo does this really not exist in body interface?\r\n const comWorld = this._tmpVecs[10];\r\n this._getComWorldToRef(body, comWorld);\r\n const relPos = this._tmpVecs[11];\r\n pointWorld.subtractToRef(comWorld, relPos);\r\n const av = this._tmpVecs[12];\r\n body.body.getAngularVelocityToRef(av, body.index);\r\n const arm = this._tmpVecs[13];\r\n Vector3.CrossToRef(av, relPos, arm);\r\n arm.addToRef(body.body.getLinearVelocity(body.index), result);\r\n }\r\n\r\n protected _compareContacts(contactA: Contact, contactB: Contact): number {\r\n const angSquared = (1.0 - contactA.normal.dot(contactB.normal)) * this._contactAngleSensitivity * this._contactAngleSensitivity;\r\n const planeDistSquared = (contactA.distance - contactB.distance) * (contactA.distance * contactB.distance);\r\n\r\n const p1Vel = this._tmpVecs[7];\r\n this._getPointVelocityToRef(contactA.bodyB, contactA.position, p1Vel);\r\n const p2Vel = this._tmpVecs[8];\r\n this._getPointVelocityToRef(contactB.bodyB, contactB.position, p2Vel);\r\n const velocityDiff = this._tmpVecs[9];\r\n p1Vel.subtractToRef(p2Vel, velocityDiff);\r\n const velocityDiffSquared = velocityDiff.lengthSquared();\r\n\r\n const fitness = angSquared * 10.0 + velocityDiffSquared * 0.1 + planeDistSquared;\r\n return fitness;\r\n }\r\n\r\n protected _findContact(referenceContact: Contact, contactList: Contact[], threshold: number) {\r\n let bestIdx = -1;\r\n let bestFitness = threshold;\r\n for (let i = 0; i < contactList.length; i++) {\r\n const fitness = this._compareContacts(referenceContact, contactList[i]);\r\n if (fitness < bestFitness) {\r\n bestFitness = fitness;\r\n bestIdx = i;\r\n }\r\n }\r\n return bestIdx;\r\n }\r\n\r\n protected _updateManifold(startCollector: any /*HP_CollectorId*/, castCollector: any /*HP_CollectorId*/, castPath: Vector3): number {\r\n const hk = this._scene.getPhysicsEngine()!.getPhysicsPlugin() as HavokPlugin;\r\n const hknp = hk._hknp;\r\n\r\n const numProximityHits = hknp.HP_QueryCollector_GetNumHits(startCollector)[1];\r\n if (numProximityHits > 0) {\r\n const newContacts = [];\r\n let minDistance = 1e38;\r\n const bodyMap = (<any>hk)._bodies;\r\n for (let i = 0; i < numProximityHits; i++) {\r\n const [distance, , contactWorld] = hknp.HP_QueryCollector_GetShapeProximityResult(startCollector, i)[1];\r\n minDistance = Math.min(minDistance, distance);\r\n newContacts.push({\r\n position: Vector3.FromArray(contactWorld[3]),\r\n normal: Vector3.FromArray(contactWorld[4]),\r\n distance: distance,\r\n fraction: 0,\r\n bodyB: bodyMap.get(contactWorld[0][0])!,\r\n allowedPenetration: Math.min(Math.max(this.keepDistance - distance, 0.0), this.keepDistance),\r\n });\r\n }\r\n\r\n for (let i = this._manifold.length - 1; i >= 0; i--) {\r\n const currentContact = this._manifold[i];\r\n const bestMatch = this._findContact(currentContact, newContacts, 1.1);\r\n if (bestMatch >= 0) {\r\n const newAllowedPenetration = Math.min(Math.max(this.keepDistance - newContacts[bestMatch].distance, 0.0), currentContact.allowedPenetration);\r\n this._manifold[i] = newContacts[bestMatch];\r\n this._manifold[i].allowedPenetration = newAllowedPenetration;\r\n newContacts.splice(bestMatch, 1);\r\n } else {\r\n this._manifold.splice(i, 1);\r\n }\r\n }\r\n\r\n const closestContactIndex = newContacts.findIndex((c) => c.distance == minDistance);\r\n if (closestContactIndex >= 0) {\r\n const bestMatch = this._findContact(newContacts[closestContactIndex], this._manifold, 0.1);\r\n if (bestMatch >= 0) {\r\n const newAllowedPenetration = Math.min(\r\n Math.max(this.keepDistance - newContacts[closestContactIndex].distance, 0.0),\r\n this._manifold[bestMatch].allowedPenetration\r\n );\r\n this._manifold[bestMatch] = newContacts[closestContactIndex];\r\n this._manifold[bestMatch].allowedPenetration = newAllowedPenetration;\r\n } else {\r\n this._manifold.push(newContacts[closestContactIndex]);\r\n }\r\n }\r\n } else {\r\n // No start hits; clear manifold completely\r\n this._manifold.length = 0;\r\n }\r\n\r\n let numHitBodies = 0; //< == CASTCOLLECTOR_HIT_SINGLE_BODY\r\n // Process shape cast results if any\r\n const numCastHits = hknp.HP_QueryCollector_GetNumHits(castCollector)[1];\r\n if (numCastHits > 0) {\r\n let closestHitBody = null;\r\n for (let i = 0; i < numCastHits; i++) {\r\n const [fraction, , hitWorld] = hknp.HP_QueryCollector_GetShapeCastResult(castCollector, i)[1];\r\n if (closestHitBody == null) {\r\n const contact = contactFromCast(hk, hitWorld, castPath, fraction, this.keepDistance);\r\n closestHitBody = hitWorld[0][0];\r\n const bestMatch = this._findContact(contact, this._manifold, 0.1);\r\n if (bestMatch == -1) {\r\n this._manifold.push(contact);\r\n }\r\n\r\n if (contact.bodyB.body.getMotionType(contact.bodyB.index) == PhysicsMotionType.STATIC) {\r\n // The closest body is static, so it cannot move away from CC and we don't need to look any further.\r\n break;\r\n }\r\n } else if (closestHitBody._pluginData && hitWorld[0] != closestHitBody._pluginData.hpBodyId) {\r\n numHitBodies++;\r\n break;\r\n }\r\n }\r\n }\r\n\r\n // Remove from the manifold contacts that are too similar as the simplex does not handle parallel planes\r\n for (let e1 = this._manifold.length - 1; e1 >= 0; e1--) {\r\n let e2 = e1 - 1;\r\n for (; e2 >= 0; e2--) {\r\n const fitness = this._compareContacts(this._manifold[e1], this._manifold[e2]);\r\n if (fitness < 0.1) break;\r\n }\r\n if (e2 >= 0) {\r\n this._manifold.slice(e1, 1);\r\n }\r\n }\r\n\r\n return numHitBodies;\r\n }\r\n\r\n protected _createSurfaceConstraint(contact: Contact, timeTravelled: number): SurfaceConstraintInfo {\r\n const constraint = {\r\n //let distance = contact.distance - this.keepDistance;\r\n planeNormal: contact.normal.clone(),\r\n planeDistance: contact.distance,\r\n staticFriction: this.staticFriction,\r\n dynamicFriction: this.dynamicFriction,\r\n extraUpStaticFriction: 0,\r\n extraDownStaticFriction: 0,\r\n velocity: Vector3.Zero(),\r\n angularVelocity: Vector3.Zero(),\r\n priority: 0,\r\n };\r\n\r\n const maxSlopeCosEps = 0.1;\r\n const maxSlopeCosine = Math.max(this.maxSlopeCosine, maxSlopeCosEps);\r\n const normalDotUp = contact.normal.dot(this.up);\r\n\r\n const contactPosition = contact.position.clone();\r\n if (normalDotUp > maxSlopeCosine) {\r\n const com = this.getPosition();\r\n const contactArm = this._tmpVecs[20];\r\n contact.position.subtractToRef(com, contactArm);\r\n const scale = contact.normal.dot(contactArm);\r\n contactPosition.x = com.x + this.up.x * scale;\r\n contactPosition.y = com.y + this.up.y * scale;\r\n contactPosition.z = com.z + this.up.z * scale;\r\n }\r\n\r\n const motionType = contact.bodyB.body.getMotionType(contact.bodyB.index);\r\n if (motionType != PhysicsMotionType.STATIC) {\r\n //<todo Need hknpMotionUtil::predictPontVelocity\r\n }\r\n\r\n const shift = constraint.velocity.dot(constraint.planeNormal) * timeTravelled;\r\n constraint.planeDistance -= shift;\r\n\r\n if (motionType == PhysicsMotionType.STATIC) {\r\n constraint.priority = 2;\r\n } else if (motionType == PhysicsMotionType.ANIMATED) {\r\n constraint.priority = 1;\r\n }\r\n\r\n return constraint;\r\n }\r\n\r\n protected _addMaxSlopePlane(maxSlopeCos: number, up: Vector3, index: number, constraints: SurfaceConstraintInfo[], allowedPenetration: number): boolean {\r\n const verticalComponent = constraints[index].planeNormal.dot(up);\r\n if (verticalComponent > 0.01 && verticalComponent < maxSlopeCos) {\r\n const newConstraint = {\r\n planeNormal: constraints[index].planeNormal.clone(),\r\n planeDistance: constraints[index].planeDistance,\r\n velocity: constraints[index].velocity.clone(),\r\n angularVelocity: constraints[index].angularVelocity.clone(),\r\n priority: constraints[index].priority,\r\n dynamicFriction: constraints[index].dynamicFriction,\r\n staticFriction: constraints[index].staticFriction,\r\n extraDownStaticFriction: constraints[index].extraDownStaticFriction,\r\n extraUpStaticFriction: constraints[index].extraUpStaticFriction,\r\n };\r\n const distance = newConstraint.planeDistance;\r\n newConstraint.planeNormal.subtractInPlace(up.scale(verticalComponent));\r\n newConstraint.planeNormal.normalize();\r\n if (distance >= 0) {\r\n newConstraint.planeDistance = distance * newConstraint.planeNormal.dot(constraints[index].planeNormal);\r\n } else {\r\n const penetrationToResolve = Math.min(0, distance + allowedPenetration);\r\n newConstraint.planeDistance = penetrationToResolve / newConstraint.planeNormal.dot(constraints[index].planeNormal);\r\n constraints[index].planeDistance = 0;\r\n this._resolveConstraintPenetration(newConstraint, this.penetrationRecoverySpeed);\r\n }\r\n constraints.push(newConstraint);\r\n return true;\r\n }\r\n return false;\r\n }\r\n\r\n protected _resolveConstraintPenetration(constraint: SurfaceConstraintInfo, penetrationRecoverySpeed: number) {\r\n // If penetrating we add extra velocity to push the character back out\r\n const eps = 1e-6;\r\n if (constraint.planeDistance < -eps) {\r\n constraint.planeNormal.scaleToRef(constraint.planeDistance * penetrationRecoverySpeed, this._tmpVecs[6]);\r\n constraint.velocity.subtractInPlace(this._tmpVecs[6]);\r\n }\r\n }\r\n\r\n protected _createConstraintsFromManifold(dt: number, timeTravelled: number): SurfaceConstraintInfo[] {\r\n const constraints = [];\r\n for (let i = 0; i < this._manifold.length; i++) {\r\n const surfaceConstraint = this._createSurfaceConstraint(this._manifold[i], timeTravelled);\r\n constraints.push(surfaceConstraint);\r\n this._addMaxSlopePlane(this.maxSlopeCosine, this.up, i, constraints, this._manifold[i].allowedPenetration);\r\n this._resolveConstraintPenetration(surfaceConstraint, this.penetrationRecoverySpeed);\r\n }\r\n return constraints;\r\n }\r\n\r\n protected _simplexSolverSortInfo(info: SimplexSolverInfo) {\r\n // simple bubble sort by (priority,velocity)\r\n for (let i = 0; i < info.numSupportPlanes - 1; i++) {\r\n for (let j = i + 1; j < info.numSupportPlanes; j++) {\r\n const p0 = info.supportPlanes[i];\r\n const p1 = info.supportPlanes[j];\r\n if (p0.constraint.priority < p1.constraint.priority) {\r\n continue;\r\n }\r\n if (p0.constraint.priority == p1.constraint.priority) {\r\n const vel0 = p0.constraint.velocity.lengthSquared();\r\n const vel1 = p1.constraint.velocity.lengthSquared();\r\n if (vel0 < vel1) {\r\n continue;\r\n }\r\n }\r\n info.supportPlanes[i] = p1;\r\n info.supportPlanes[j] = p0;\r\n }\r\n }\r\n }\r\n\r\n protected _simplexSolverSolve1d(info: SimplexSolverInfo, sci: SurfaceConstraintInfo, velocityIn: Vector3, velocityOut: Vector3) {\r\n const eps = 1e-5;\r\n const groundVelocity = sci.velocity;\r\n const relativeVelocity = this._tmpVecs[22];\r\n velocityIn.subtractToRef(groundVelocity, relativeVelocity);\r\n\r\n const planeVel = relativeVelocity.dot(sci.planeNormal);\r\n\r\n const origVelocity2 = relativeVelocity.lengthSquared();\r\n relativeVelocity.subtractInPlace(sci.planeNormal.scale(planeVel));\r\n {\r\n const vp2 = planeVel * planeVel;\r\n // static friction is active if\r\n // velProjPlane * friction > |(velParallel)|\r\n // vplane * f > vpar\r\n // vp * f > vpar\r\n // vp2 * f2 > vpar2\r\n const extraStaticFriction = relativeVelocity.dot(this.up) > 0 ? sci.extraUpStaticFriction : sci.extraDownStaticFriction;\r\n if (extraStaticFriction > 0) {\r\n const horizontal = this.up.cross(sci.planeNormal);\r\n const hor2 = horizontal.lengthSquared();\r\n let horVel = 0.0;\r\n if (hor2 > eps) {\r\n horizontal.scaleInPlace(1 / Math.sqrt(hor2));\r\n\r\n horVel = relativeVelocity.dot(horizontal);\r\n\r\n // horizontal component\r\n {\r\n const horVel2 = horVel * horVel;\r\n const f2 = sci.staticFriction * sci.staticFriction;\r\n if (vp2 * f2 >= horVel2) {\r\n relativeVelocity.subtractInPlace(horizontal.scale(horVel));\r\n horVel = 0;\r\n }\r\n }\r\n }\r\n\r\n // vert component\r\n {\r\n const vertVel2 = origVelocity2 - horVel * horVel - vp2;\r\n const f2 = (sci.staticFriction + extraStaticFriction) * (sci.staticFriction + extraStaticFriction);\r\n if (vp2 * f2 >= vertVel2) {\r\n if (horVel == 0.0) {\r\n velocityOut.copyFrom(groundVelocity);\r\n return;\r\n }\r\n }\r\n }\r\n } else {\r\n // static friction is active if\r\n // velProjPlane * friction > |(vel-velProjPlane)|\r\n // vp * f > rvProj\r\n //\r\n // -> vp * f >= rvProj\r\n // -> vp * f >= sqrt( vel^2 - vp^2 )\r\n // -> vp^2 ( f^2 + 1 ) >= vel^2\r\n const f2 = sci.staticFriction * sci.staticFriction;\r\n if (vp2 * (1 + f2) >= origVelocity2) {\r\n velocityOut.copyFrom(groundVelocity);\r\n return;\r\n }\r\n }\r\n }\r\n\r\n if (sci.dynamicFriction < 1) {\r\n // apply dynamic friction 0 = conserve input velocity 1 = clip against normal\r\n const velOut2 = relativeVelocity.lengthSquared();\r\n if (velOut2 >= eps) {\r\n if (velOut2 > 1e-4 * origVelocity2) {\r\n let f = Math.sqrt(origVelocity2 / velOut2);\r\n f = sci.dynamicFriction + (1 - sci.dynamicFriction) * f;\r\n relativeVelocity.scaleInPlace(f);\r\n const p = sci.planeNormal.dot(relativeVelocity);\r\n relativeVelocity.subtractInPlace(sci.planeNormal.scale(p));\r\n }\r\n }\r\n }\r\n velocityOut.copyFrom(relativeVelocity);\r\n velocityOut.addInPlace(groundVelocity);\r\n }\r\n\r\n protected _simplexSolverSolveTest1d(sci: SurfaceConstraintInfo, velocityIn: Vector3): boolean {\r\n const eps = 1e-3;\r\n const relativeVelocity = this._tmpVecs[23];\r\n velocityIn.subtractToRef(sci.velocity, relativeVelocity);\r\n return relativeVelocity.dot(sci.planeNormal) < -eps;\r\n }\r\n\r\n protected _simplexSolverSolve2d(\r\n info: SimplexSolverInfo,\r\n maxSurfaceVelocity: Vector3,\r\n sci0: SurfaceConstraintInfo,\r\n sci1: SurfaceConstraintInfo,\r\n velocityIn: Vector3,\r\n velocityOut: Vector3\r\n ) {\r\n const eps = 1e-5;\r\n const axis = sci0.planeNormal.cross(sci1.planeNormal);\r\n const axisLen2 = axis.lengthSquared();\r\n\r\n let solveSequentially = false;\r\n let axisVel = null;\r\n\r\n // eslint-disable-next-line no-constant-condition\r\n while (true) {\r\n // Check for parallel planes\r\n if (axisLen2 <= eps || solveSequentially) {\r\n info.getOutput(sci0).status = SurfaceConstraintInteractionStatus.FAILURE_2D;\r\n info.getOutput(sci1).status = SurfaceConstraintInteractionStatus.FAILURE_2D;\r\n\r\n if (sci0.priority > sci1.priority) {\r\n this._simplexSolverSolve1d(info, sci1, velocityIn, velocityOut);\r\n this._simplexSolverSolve1d(info, sci0, velocityIn, velocityOut);\r\n } else {\r\n this._simplexSolverSolve1d(info, sci0, velocityIn, velocityOut);\r\n this._simplexSolverSolve1d(info, sci1, velocityIn, velocityOut);\r\n }\r\n return;\r\n }\r\n\r\n const invAxisLen = 1.0 / Math.sqrt(axisLen2);\r\n axis.scaleInPlace(invAxisLen);\r\n\r\n // Calculate the velocity of the free axis\r\n {\r\n const r0 = sci0.planeNormal.cross(sci1.planeNormal);\r\n const r1 = sci1.planeNormal.cross(axis);\r\n const r2 = axis.cross(sci0.planeNormal);\r\n\r\n const sVel = sci0.velocity.add(sci1.velocity);\r\n\r\n const t = this._tmpVecs[2];\r\n t.set(0.5 * axis.dot(sVel), sci0.planeNormal.dot(sci0.velocity), sci1.planeNormal.dot(sci1.velocity));\r\n const m = Matrix.FromValues(r0.x, r1.x, r2.x, 0, r0.y, r1.y, r2.y, 0, r0.z, r1.z, r2.z, 0, 0, 0, 0, 1);\r\n axisVel = Vector3.TransformNormal(t, m);\r\n axisVel.scaleInPlace(invAxisLen);\r\n\r\n if (Math.abs(axisVel.x) > maxSurfaceVelocity.x || Math.abs(axisVel.y) > maxSurfaceVelocity.y || Math.abs(axisVel.z) > maxSurfaceVelocity.z) {\r\n solveSequentially = true;\r\n } else {\r\n break;\r\n }\r\n }\r\n }\r\n\r\n const groundVelocity = axisVel;\r\n const relativeVelocity = this._tmpVecs[24];\r\n velocityIn.subtractToRef(groundVelocity, relativeVelocity);\r\n\r\n const vel2 = relativeVelocity.lengthSquared();\r\n const axisVert = this.up.dot(axis);\r\n let axisProjVelocity = relativeVelocity.dot(axis);\r\n\r\n let staticFriction = sci0.staticFriction + sci1.staticFriction;\r\n if (axisVert * axisProjVelocity > 0) {\r\n staticFriction += (sci0.extraUpStaticFriction + sci1.extraUpStaticFriction) * axisVert;\r\n } else {\r\n staticFriction += (sci0.extraDownStaticFriction + sci1.extraDownStaticFriction) * axisVert;\r\n }\r\n staticFriction *= 0.5;\r\n\r\n const dynamicFriction = (sci0.dynamicFriction + sci1.dynamicFriction) * 0.5;\r\n // static friction is active if\r\n // |vel-axisProjVelocity|(rv) * friction(f) > axisProjVelocity(av)\r\n // -> sqrt( vel2 - av2 ) * f > av\r\n // -> (vel2 - av2) * f2 > av2\r\n const f2 = staticFriction * staticFriction;\r\n const av2 = axisProjVelocity * axisProjVelocity;\r\n if ((vel2 - av2) * f2 >= av2) {\r\n // static friction kicks in\r\n velocityOut.copyFrom(groundVelocity);\r\n return;\r\n }\r\n\r\n if (dynamicFriction < 1) {\r\n // apply dynamic friction\r\n if (axisProjVelocity * axisProjVelocity > 1e-4 * vel2) {\r\n const tmp = 1.0 / axisProjVelocity;\r\n const f = Math.abs(tmp) * Math.sqrt(vel2) * (1.0 - dynamicFriction) + dynamicFriction;\r\n axisProjVelocity *= f;\r\n }\r\n }\r\n velocityOut.copyFrom(groundVelocity);\r\n velocityOut.addInPlace(axis.scale(axisProjVelocity));\r\n }\r\n\r\n protected _simplexSolverSolve3d(\r\n info: SimplexSolverInfo,\r\n maxSurfaceVelocity: Vector3,\r\n sci0: SurfaceConstraintInfo,\r\n sci1: SurfaceConstraintInfo,\r\n sci2: SurfaceConstraintInfo,\r\n allowResort: boolean,\r\n velocityIn: Vector3,\r\n velocityOut: Vector3\r\n ) {\r\n const eps = 1e-5;\r\n // Calculate the velocity of the point axis\r\n let pointVel = null;\r\n {\r\n const r0 = sci1.planeNormal.cross(sci2.planeNormal);\r\n const r1 = sci2.planeNormal.cross(sci0.planeNormal);\r\n const r2 = sci0.planeNormal.cross(sci1.planeNormal);\r\n\r\n const det = r0.dot(sci0.planeNormal);\r\n let solveSequentially = false;\r\n // eslint-disable-next-line no-constant-condition\r\n while (true) {\r\n if (Math.abs(det) < eps || solveSequentially) {\r\n if (allowResort) {\r\n this._simplexSolverSortInfo(info);\r\n sci0 = info.supportPlanes[0].constraint;\r\n sci1 = info.supportPlanes[1].constraint;\r\n sci2 = info.supportPlanes[2].constraint;\r\n }\r\n info.getOutput(sci0).status = SurfaceConstraintInteractionStatus.FAILURE_3D;\r\n info.getOutput(sci1).status = SurfaceConstraintInteractionStatus.FAILURE_3D;\r\n info.getOutput(sci2).status = SurfaceConstraintInteractionStatus.FAILURE_3D;\r\n\r\n const oldNum = info.numSupportPlanes;\r\n this._simplexSolverSolve2d(info, maxSurfaceVelocity, sci0, sci1, velocityIn, velocityOut);\r\n if (oldNum == info.numSupportPlanes) {\r\n this._simplexSolverSolve2d(info, maxSurfaceVelocity, sci0, sci2, velocityIn, velocityOut);\r\n }\r\n if (oldNum == info.numSupportPlanes) {\r\n this._simplexSolverSolve2d(info, maxSurfaceVelocity, sci1, sci2, velocityIn, velocityOut);\r\n }\r\n\r\n return;\r\n }\r\n\r\n const t = this._tmpVecs[2];\r\n t.set(sci0.planeNormal.dot(sci0.velocity), sci1.planeNormal.dot(sci1.velocity), sci2.planeNormal.dot(sci2.velocity));\r\n const m = Matrix.FromValues(r0.x, r0.y, r0.z, 0, r1.x, r1.y, r1.z, 0, r2.x, r2.y, r2.z, 0, 0, 0, 0, 1);\r\n pointVel = Vector3.TransformNormal(t, m);\r\n pointVel.scaleInPlace(1 / det);\r\n if (Math.abs(pointVel.x) > maxSurfaceVelocity.x || Math.abs(pointVel.y) > maxSurfaceVelocity.y || Math.abs(pointVel.z) > maxSurfaceVelocity.z) {\r\n solveSequentially = true;\r\n } else {\r\n break;\r\n }\r\n }\r\n }\r\n velocityOut.copyFrom(pointVel);\r\n }\r\n\r\n protected _simplexSolverExamineActivePlanes(info: SimplexSolverInfo, maxSurfaceVelocity: Vector3, velocityIn: Vector3, velocityOut: Vector3) {\r\n // eslint-disable-next-line no-constant-condition\r\n while (true) {\r\n switch (info.numSupportPlanes) {\r\n case 1: {\r\n const sci = info.supportPlanes[0].constraint;\r\n this._simplexSolverSolve1d(info, sci, velocityIn, velocityOut);\r\n return;\r\n }\r\n case 2: {\r\n const velocity = Vector3.Zero();\r\n this._simplexSolverSolve1d(info, info.supportPlanes[1].constraint, velocityIn, velocity);\r\n const plane0Used = this._simplexSolverSolveTest1d(info.supportPlanes[0].constraint, velocity);\r\n if (!plane0Used) {\r\n // Only need plane 1, so remove plane 0\r\n info.supportPlanes[0].copyFrom(info.supportPlanes[1]);\r\n info.numSupportPlanes = 1;\r\n velocityOut.copyFrom(velocity);\r\n } else {\r\n this._simplexSolverSolve2d(info, maxSurfaceVelocity, info.supportPlanes[0].constraint, info.supportPlanes[1].constraint, velocityIn, velocityOut);\r\n }\r\n return;\r\n }\r\n case 3: {\r\n // Try to drop both planes\r\n {\r\n const velocity = Vector3.Zero();\r\n this._simplexSolverSolve1d(info, info.supportPlanes[2].constraint, velocityIn, velocityOut);\r\n\r\n const plane0Used = this._simplexSolverSolveTest1d(info.supportPlanes[0].constraint, velocity);\r\n if (!plane0Used) {\r\n const plane1Used = this._simplexSolverSolveTest1d(info.supportPlanes[1].constraint, velocity);\r\n if (!plane1Used) {\r\n velocityOut.copyFrom(velocity);\r\n info.supportPlanes[0].copyFrom(info.supportPlanes[2]);\r\n info.numSupportPlanes = 1;\r\n continue;\r\n }\r\n }\r\n }\r\n\r\n // Try to drop plane 0 or 1\r\n {\r\n let droppedAPlane = false;\r\n for (let testPlane = 0; testPlane < 2; testPlane++) {\r\n const velocity = Vector3.Zero();\r\n this._simplexSolverSolve2d(\r\n info,\r\n maxSurfaceVelocity,\r\n info.supportPlanes[testPlane].constraint,\r\n info.supportPlanes[2].constraint,\r\n velocityIn,\r\n velocityOut\r\n );\r\n const planeUsed = this._simplexSolverSolveTest1d(info.supportPlanes[1 - testPlane].constraint, velocity);\r\n if (!planeUsed) {\r\n info.supportPlanes[0].copyFrom(info.supportPlanes[testPlane]);\r\n info.supportPlanes[1].copyFrom(info.supportPlanes[2]);\r\n info.numSupportPlanes--;\r\n droppedAPlane = true;\r\n break;\r\n }\r\n }\r\n\r\n if (droppedAPlane) {\r\n continue;\r\n }\r\n }\r\n\r\n // Otherwise, try and solve all three planes:\r\n this._simplexSolverSolve3d(\r\n info,\r\n maxSurfaceVelocity,\r\n info.supportPlanes[0].constraint,\r\n info.supportPlanes[1].constraint,\r\n info.supportPlanes[2].constraint,\r\n true,\r\n velocityIn,\r\n velocityOut\r\n );\r\n return;\r\n }\r\n case 4: {\r\n this._simplexSolverSortInfo(info);\r\n let droppedAPlane = false;\r\n\r\n for (let i = 0; i < 3; i++) {\r\n const velocity = Vector3.Zero();\r\n this._simplexSolverSolve3d(\r\n info,\r\n maxSurfaceVelocity,\r\n info.supportPlanes[(i + 1) % 3].constraint,\r\n info.supportPlanes[(i + 2) % 3].constraint,\r\n info.supportPlanes[3].constraint,\r\n false,\r\n velocityIn,\r\n velocity\r\n );\r\n const planeUsed = this._simplexSolverSolveTest1d(info.supportPlanes[i].constraint, velocity);\r\n if (!planeUsed) {\r\n info.supportPlanes[i].copyFrom(info.supportPlanes[2]);\r\n info.supportPlanes[2].copyFrom(info.supportPlanes[3]);\r\n info.numSupportPlanes = 3;\r\n droppedAPlane = true;\r\n break;\r\n }\r\n }\r\n\r\n if (droppedAPlane) {\r\n continue;\r\n }\r\n\r\n // Nothing can be dropped so we've failed to solve\r\n // Now we try all 3d combinations\r\n {\r\n const velocity = velocityIn.clone();\r\n const sci0 = info.supportPlanes[0].constraint;\r\n const sci1 = info.supportPlanes[1].constraint;\r\n const sci2 = info.supportPlanes[2].constraint;\r\n const sci3 = info.supportPlanes[3].constraint;\r\n const oldNum = info.numSupportPlanes;\r\n if (oldNum == info.numSupportPlanes) {\r\n this._simplexSolverSolve3d(info, maxSurfaceVelocity, sci0, sci1, sci2, false, velocity, velocity);\r\n // eslint-disable-next-line no-dupe-else-if\r\n } else if (oldNum == info.numSupportPlanes) {\r\n this._simplexSolverSolve3d(info, maxSurfaceVelocity, sci0, sci1, sci3, false, velocity, velocity);\r\n // eslint-disable-next-line no-dupe-else-if\r\n } else if (oldNum == info.numSupportPlanes) {\r\n this._simplexSolverSolve3d(info, maxSurfaceVelocity, sci0, sci2, sci3, false, velocity, velocity);\r\n // eslint-disable-next-line no-dupe-else-if\r\n } else if (oldNum == info.numSupportPlanes) {\r\n this._simplexSolverSolve3d(info, maxSurfaceVelocity, sci1, sci2, sci3, false, velocity, velocity);\r\n }\r\n\r\n velocityOut.copyFrom(velocity);\r\n }\r\n\r\n // Search a plane to drop\r\n {\r\n // Search the highest penalty value\r\n let maxStatus = SurfaceConstraintInteractionStatus.OK;\r\n for (let i = 0; i < 4; i++) {\r\n maxStatus = Math.max(maxStatus, info.supportPlanes[i].interaction.status);\r\n }\r\n\r\n // Remove the place with the lowest priority and the highest penalty\r\n let i = 0;\r\n for (; i < 4; i++) {\r\n if (maxStatus == info.supportPlanes[i].interaction.status) {\r\n info.supportPlanes[i].copyFrom(info.supportPlanes[3]);\r\n break;\r\n }\r\n info.numSupportPlanes--;\r\n }\r\n }\r\n\r\n // Clear penalty flags for the other planes\r\n for (let i = 0; i < 3; i++) {\r\n info.supportPlanes[i].interaction.status = SurfaceConstraintInteractionStatus.OK;\r\n }\r\n\r\n continue;\r\n }\r\n }\r\n }\r\n }\r\n\r\n protected _simplexSolverSolve(\r\n constraints: SurfaceConstraintInfo[],\r\n velocity: Vector3,\r\n deltaTime: number,\r\n minDeltaTime: number,\r\n up: Vector3,\r\n maxSurfaceVelocity: Vector3\r\n ): SimplexSolverOutput {\r\n const eps = 1e-6;\r\n const output = new SimplexSolverOutput();\r\n output.position = Vector3.Zero();\r\n output.velocity = velocity.clone();\r\n output.planeInteractions = [];\r\n let remainingTime = deltaTime;\r\n\r\n for (let i = 0; i < constraints.length; i++) {\r\n output.planeInteractions.push({\r\n touched: false,\r\n stopped: false,\r\n surfaceTime: 0,\r\n penaltyDistance: 0,\r\n status: SurfaceConstraintInteractionStatus.OK,\r\n });\r\n }\r\n\r\n const info = new SimplexSolverInfo();\r\n info.inputConstraints = constraints;\r\n info.outputInteractions = output.planeInteractions;\r\n info.supportPlanes[0] = new SimplexSolverActivePlanes();\r\n info.supportPlanes[1] = new SimplexSolverActivePlanes();\r\n info.supportPlanes[2] = new SimplexSolverActivePlanes();\r\n info.supportPlanes[3] = new SimplexSolverActivePlanes();\r\n\r\n while (remainingTime > 0) {\r\n // search for a plane which collides our current direction\r\n let hitIndex = -1;\r\n let minCollisionTime = remainingTime;\r\n for (let i = 0; i < constraints.length; i++) {\r\n // Do not search existing active planes\r\n if (info.numSupportPlanes >= 1 && info.supportPlanes[0].index == i) continue;\r\n if (info.numSupportPlanes >= 2 && info.supportPlanes[1].index == i) continue;\r\n if (info.numSupportPlanes >= 3 && info.supportPlanes[2].index == i) continue;\r\n if (output.planeInteractions[i].status != SurfaceConstraintInteractionStatus.OK) {\r\n continue;\r\n }\r\n\r\n // Try to find the plane with the shortest time to move\r\n const sci = constraints[i];\r\n const relativeVel = this._tmpVecs[25];\r\n output.velocity.subtractToRef(sci.velocity, relativeVel);\r\n const relativeProjectedVel = -relativeVel.dot(sci.planeNormal);\r\n // if projected velocity is pointing away skip it\r\n if (relativeProjectedVel <= 0) {\r\n continue;\r\n }\r\n\r\n // Calculate the time of impact\r\n const relativePos = this._tmpVecs[26];\r\n sci.velocity.scaleToRef(info.currentTime, this._tmpVecs[27]);\r\n output.position.subtractToRef(this._tmpVecs[27], relativePos);\r\n let projectedPos = sci.planeNormal.dot(relativePos);\r\n\r\n // treat penetrations\r\n const penaltyDist = output.planeInteractions[i].penaltyDistance;\r\n if (penaltyDist < eps) {\r\n projectedPos = 0;\r\n }\r\n projectedPos += penaltyDist;\r\n\r\n // check for new hit\r\n if (projectedPos < minCollisionTime * relativeProjectedVel) {\r\n minCollisionTime = projectedPos / relativeProjectedVel;\r\n hitIndex = i;\r\n }\r\n }\r\n\r\n // integrate: Walk to our hitPosition we must walk more than 10 microseconds into the future to consider it valid.\r\n const minAcceptableCollisionTime = 1e-4;\r\n if (minCollisionTime > minAcceptableCollisionTime) {\r\n info.currentTime += minCollisionTime;\r\n remainingTime -= minCollisionTime;\r\n output.position.addInPlace(output.velocity.scale(minCollisionTime));\r\n for (let i = 0; i < info.numSupportPlanes; i++) {\r\n info.supportPlanes[i].interaction.surfaceTime += minCollisionTime;\r\n info.supportPlanes[i].interaction.touched = true;\r\n }\r\n\r\n output.deltaTime = info.currentTime;\r\n if (info.currentTime > minDeltaTime) {\r\n return output;\r\n }\r\n }\r\n\r\n // If we have no hit than we are done\r\n if (hitIndex < 0) {\r\n output.deltaTime = deltaTime;\r\n break;\r\n }\r\n\r\n // Add our hit to our current list of active planes\r\n const supportPlane = info.supportPlanes[info.numSupportPlanes++];\r\n supportPlane.constraint = constraints[hitIndex];\r\n supportPlane.interaction = output.planeInteractions[hitIndex];\r\n supportPlane.interaction.penaltyDistance = (supportPlane.interaction.penaltyDistance + eps) * 2.0;\r\n supportPlane.index = hitIndex;\r\n\r\n // Move our character along the current set of active planes\r\n this._simplexSolverExamineActivePlanes(info, maxSurfaceVelocity, velocity, output.velocity);\r\n }\r\n\r\n return output;\r\n }\r\n\r\n /**\r\n * Compute a CharacterSurfaceInfo from current state and a direction\r\n * @param deltaTime frame delta time in seconds. When using scene.deltaTime divide by 1000.0\r\n * @param direction direction to check, usually gravity direction\r\n * @returns a CharacterSurfaceInfo object\r\n */\r\n public checkSupport(deltaTime: number, direction: Vector3): CharacterSurfaceInfo {\r\n const surfaceInfo = {\r\n isSurfaceDynamic: false,\r\n supportedState: CharacterSupportedState.UNSUPPORTED,\r\n averageSurfaceNormal: Vector3.Zero(),\r\n averageSurfaceVelocity: Vector3.Zero(),\r\n averageAngularSurfaceVelocity: Vector3.Zero(),\r\n };\r\n this.checkSupportToRef(deltaTime, direction, surfaceInfo);\r\n return surfaceInfo;\r\n }\r\n\r\n /**\r\n * Compute a CharacterSurfaceInfo from current state and a direction\r\n * @param deltaTime frame delta time in seconds. When using scene.deltaTime divide by 1000.0\r\n * @param direction direction to check, usually gravity direction\r\n * @param surfaceInfo output for surface info\r\n */\r\n public checkSupportToRef(deltaTime: number, direction: Vector3, surfaceInfo: CharacterSurfaceInfo): void {\r\n const eps = 1e-4;\r\n\r\n this._validateManifold();\r\n const constraints = this._createConstraintsFromManifold(deltaTime, 0.0);\r\n const storedVelocities: Vector3[] = [];\r\n // Remove velocities and friction to make this a query of the static geometry\r\n for (let i = 0; i < constraints.length; i++) {\r\n storedVelocities.push(constraints[i].velocity.clone());\r\n constraints[i].velocity.setAll(0);\r\n }\r\n\r\n const maxSurfaceVelocity = this._tmpVecs[3];\r\n maxSurfaceVelocity.set(this.maxCharacterSpeedForSolver, this.maxCharacterSpeedForSolver, this.maxCharacterSpeedForSolver);\r\n const output = this._simplexSolverSolve(constraints, direction, deltaTime, deltaTime, this.up, maxSurfaceVelocity);\r\n\r\n surfaceInfo.averageSurfaceVelocity.setAll(0);\r\n surfaceInfo.averageAngularSurfaceVelocity.setAll(0);\r\n surfaceInfo.averageSurfaceNormal.setAll(0);\r\n surfaceInfo.isSurfaceDynamic = false;\r\n\r\n // If the constraints did not affect the character movement then it is unsupported and we can finish\r\n if (output.velocity.equalsWithEpsilon(direction, eps)) {\r\n surfaceInfo.supportedState = CharacterSupportedState.UNSUPPORTED;\r\n return;\r\n }\r\n\r\n // Check how was the input velocity modified to determine if the character is supported or sliding\r\n if (output.velocity.lengthSquared() < eps) {\r\n surfaceInfo.supportedState = CharacterSupportedState.SUPPORTED;\r\n } else {\r\n output.velocity.normalize();\r\n const angleSin = output.velocity.dot(direction);\r\n const cosSqr = 1 - angleSin * angleSin;\r\n if (cosSqr < this.maxSlopeCosine * this.maxSlopeCosine) {\r\n surfaceInfo.supportedState = CharacterSupportedState.SLIDING;\r\n } else {\r\n surfaceInfo.supportedState = CharacterSupportedState.SUPPORTED;\r\n }\r\n }\r\n\r\n // Add all supporting constraints to the ground information\r\n let numTouching = 0;\r\n for (let i = -0; i < constraints.length; i++) {\r\n if (output.planeInteractions[i].touched && constraints[i].planeNormal.dot(direction) < -0.08) {\r\n surfaceInfo.averageSurfaceNormal.addInPlace(constraints[i].planeNormal);\r\n surfaceInfo.averageSurfaceVelocity.addInPlace(storedVelocities[i]);\r\n surfaceInfo.averageAngularSurfaceVelocity.addInPlace(constraints[i].angularVelocity);\r\n numTouching++;\r\n }\r\n }\r\n\r\n if (numTouching > 0) {\r\n surfaceInfo.averageSurfaceNormal.normalize();\r\n surfaceInfo.averageSurfaceVelocity.scaleInPlace(1 / numTouching);\r\n surfaceInfo.averageAngularSurfaceVelocity.scaleInPlace(1 / numTouching);\r\n }\r\n\r\n // isSurfaceDynamic update\r\n if (surfaceInfo.supportedState == CharacterSupportedState.SUPPORTED) {\r\n for (let i = 0; i < this._manifold.length; i++) {\r\n const manifold = this._manifold[i];\r\n const bodyB = manifold.bodyB;\r\n\r\n if (this._manifold[i].normal.dot(direction) < -0.08 && bodyB.body.getMotionType(0) == PhysicsMotionType.DYNAMIC) {\r\n surfaceInfo.isSurfaceDynamic = true;\r\n break;\r\n }\r\n }\r\n }\r\n }\r\n\r\n protected _castWithCollectors(startPos: Vector3, endPos: Vector3, castCollector: any /*HP_CollectorId*/, startCollector?: any /*HP_CollectorId*/) {\r\n const hk = this._scene.getPhysicsEngine()!.getPhysicsPlugin() as HavokPlugin;\r\n const hknp = hk._hknp;\r\n\r\n const startNative = [startPos.x, startPos.y, startPos.z];\r\n const orientation = [this._orientation.x, this._orientation.y, this._orientation.z, this._orientation.w];\r\n if (startCollector != null) {\r\n const query /*: ShapeProximityInput*/ = [\r\n this._shape._pluginData,\r\n //@ts-ignore\r\n startNative,\r\n //@ts-ignore\r\n orientation,\r\n this.keepDistance + this.keepContactTolerance, // max distance\r\n false, // should hit triggers\r\n [BigInt(0)], // body to ignore //<todo allow for a proxy body!\r\n ];\r\n hknp.HP_World_ShapeProximityWithCollector(hk.world, startCollector, query);\r\n }\r\n\r\n {\r\n const query /*: ShapeCastInput*/ = [\r\n this._shape._pluginData,\r\n //@ts-ignore\r\n orientation,\r\n //@ts-ignore\r\n startNative,\r\n [endPos.x, endPos.y, endPos.z],\r\n false, // should hit triggers\r\n [BigInt(0)], // body to ignore //<todo allow for proxy body\r\n ];\r\n hknp.HP_World_ShapeCastWithCollector(hk.world, castCollector, query);\r\n }\r\n }\r\n\r\n protected _resolveContacts(deltaTime: number, gravity: Vector3) {\r\n const eps = 1e-12;\r\n //<todo object interactions out\r\n for (let i = 0; i < this._manifold.length; i++) {\r\n const contact = this._manifold[i];\r\n const bodyB = this._manifold[i].bodyB;\r\n\r\n //<todo test if bodyB is another character with a proxy body\r\n\r\n // Skip fixed or keyframed bodies as we won't apply impulses to them\r\n if (bodyB.body.getMotionType(bodyB.index) != PhysicsMotionType.DYNAMIC) {\r\n continue;\r\n }\r\n\r\n // Calculate and apply impulse on contacted body\r\n {\r\n //<todo input/output for callbacks\r\n let inputObjectMassInv = 0;\r\n let inputObjectImpulse = 0;\r\n let outputObjectImpulse = Vector3.Zero();\r\n const outputImpulsePosition = contact.position;\r\n\r\n // Calculate relative normal velocity of the contact point in the contacted body\r\n const pointRelVel = this._tmpVecs[19];\r\n this._getPointVelocityToRef(bodyB, contact.position, pointRelVel);\r\n pointRelVel.subtractInPlace(this._velocity);\r\n const inputProjectedVelocity = pointRelVel.dot(contact.normal);\r\n const dampFactor = 0.9;\r\n\r\n // Change velocity\r\n let deltaVelocity = -inputProjectedVelocity * dampFactor;\r\n\r\n // Apply an extra impulse if the collision is actually penetrating\r\n if (contact.distance < 0) {\r\n const recoveryTau = 0.4;\r\n deltaVelocity += (contact.distance * recoveryTau) / deltaTime;\r\n }\r\n\r\n // Apply impulse if required to keep bodies apart\r\n if (deltaVelocity < 0) {\r\n // Calculate the impulse magnitude\r\n const invInertia = this._getInverseInertiaWorld(bodyB);\r\n const comWorld = this._tmpVecs[15];\r\n this._getComWorldToRef(bodyB, comWorld);\r\n const r = this._tmpVecs[16];\r\n contact.position.subtractToRef(comWorld, r);\r\n const jacAng = this._tmpVecs[17];\r\n Vector3.CrossToRef(r, contact.normal, jacAng);\r\n const rc = this._tmpVecs[18];\r\n Vector3.TransformNormalToRef(jacAng, invInertia, rc);\r\n inputObjectMassInv = rc.dot(jacAng) + this._getInvMass(bodyB);\r\n inputObjectImpulse = deltaVelocity / inputObjectMassInv;\r\n\r\n // Clamp impulse magnitude if required and apply it to the normal direction\r\n const maxPushImpulse = -this.characterStrength * deltaTime;\r\n if (inputObjectImpulse < maxPushImpulse) {\r\n inputObjectImpulse = maxPushImpulse;\r\n }\r\n outputObjectImpulse = contact.normal.scale(inputObjectImpulse);\r\n } else {\r\n inputObjectImpulse = 0;\r\n inputObjectMassInv = this._getInvMass(bodyB);\r\n }\r\n\r\n // Add gravity\r\n {\r\n // Calculate effect of gravity on the velocity of the character in the contact normal direction\r\n let relVelN = contact.normal.dot(gravity.scale(deltaTime));\r\n // If it is a separating contact subtract the separation velocity\r\n if (inputProjectedVelocity < 0) {\r\n relVelN -= inputProjectedVelocity;\r\n }\r\n // If the resulting velocity is negative an impulse is applied to stop the character from falling into\r\n // the contacted body\r\n if (relVelN < -eps) {\r\n outputObjectImpulse.addInPlace(contact.normal.scale(this.characterMass * relVelN));\r\n }\r\n }\r\n\r\n //<todo Fire callback to allow user to change impulse + use the info / play sounds\r\n\r\n bodyB.body.applyImpulse(outputObjectImpulse, outputImpulsePosition, bodyB.index);\r\n }\r\n }\r\n }\r\n\r\n protected _getInverseInertiaWorld(body: { body: PhysicsBody; index: number }): DeepImmutableObject<Matrix> {\r\n const mp = body.body.getMassProperties(body.index);\r\n if (!mp.inertia || !mp.inertiaOrientation) {\r\n return Matrix.IdentityReadOnly;\r\n }\r\n const invOrientation = Matrix.FromQuaternionToRef(mp.inertiaOrientation, TmpVectors.Matrix[0]).invert();\r\n const it = TmpVectors.Matrix[1];\r\n\r\n const ir = invOrientation.getRowToRef(0, TmpVectors.Vector4[0]);\r\n it.setRowFromFloats(0, mp.inertia.x * ir.x, mp.inertia.x * ir.y, mp.inertia.x * ir.z, 0);\r\n invOrientation.getRowToRef(1, ir);\r\n it.setRowFromFloats(0, mp.inertia.y * ir.x, mp.inertia.y * ir.y, mp.inertia.y * ir.z, 0);\r\n invOrientation.getRowToRef(2, ir);\r\n it.setRowFromFloats(0, mp.inertia.z * ir.x, mp.inertia.z * ir.y, mp.inertia.z * ir.z, 0);\r\n invOrientation.multiplyToRef(it, this._tmpMatrix);\r\n return this._tmpMatrix;\r\n }\r\n\r\n protected _getComWorldToRef(body: { body: PhysicsBody; index: number }, result: Vector3) {\r\n const mp = body.body.getMassProperties(body.index);\r\n Vector3.TransformCoordinatesToRef(mp.centerOfMass!, body.body.transformNode.getWorldMatrix(), result);\r\n }\r\n\r\n protected _getInvMass(body: { body: PhysicsBody; index: number }): number {\r\n return 1 / body.body.getMassProperties(body.index).mass!;\r\n }\r\n\r\n /**\r\n * Update internal state. Must be called once per frame\r\n * @param deltaTime frame delta time in seconds. When using scene.deltaTime divide by 1000.0\r\n * @param surfaceInfo surface information returned by checkSupport\r\n * @param gravity gravity applied to the character. Can be different that world gravity\r\n */\r\n public integrate(deltaTime: number, surfaceInfo: CharacterSurfaceInfo, gravity: Vector3) {\r\n const hk = this._scene.getPhysicsEngine()!.getPhysicsPlugin() as HavokPlugin;\r\n\r\n const invDeltaTime = 1 / deltaTime;\r\n let remainingTime = deltaTime;\r\n let newVelocity = Vector3.Zero();\r\n\r\n // If the difference between the cast displacement and the simplex solver output position is less than this\r\n // value (per component), do not do a second cast to check if it's possible to reach the output position.\r\n const displacementEps = 1e-4;\r\n const epsSqrd = 1e-8;\r\n\r\n // Choose the first cast direction. If velocity hasn't changed from the previous integrate, guess that the\r\n // displacement will be the same as last integrate, scaled by relative step length. Otherwise, guess based\r\n // on current velocity.\r\n {\r\n const tolerance = displacementEps * invDeltaTime;\r\n if (this._velocity.equalsWithEpsilon(this._lastVelocity, tolerance)) {\r\n this._lastDisplacement.scaleInPlace(remainingTime * this._lastInvDeltaTime);\r\n } else {\r\n const displacementVelocity = this._velocity;\r\n if (surfaceInfo.supportedState == CharacterSupportedState.SUPPORTED) {\r\n const relativeVelocity = this._tmpVecs[28];\r\n this._velocity.subtractToRef(surfaceInfo.averageSurfaceVelocity, relativeVelocity);\r\n const normalDotVelocity = surfaceInfo.averageSurfaceNormal.dot(relativeVelocity);\r\n if (normalDotVelocity < 0) {\r\n relativeVelocity.subtractInPlace(surfaceInfo.averageSurfaceNormal.scale(normalDotVelocity));\r\n displacementVelocity.copyFrom(relativeVelocity);\r\n displacementVelocity.addInPlace(surfaceInfo.averageSurfaceVelocity);\r\n }\r\n }\r\n this._lastDisplacement.copyFrom(displacementVelocity);\r\n this._lastDisplacement.scaleInPlace(remainingTime);\r\n }\r\n this._lastVelocity.copyFrom(this._velocity);\r\n this._lastInvDeltaTime = invDeltaTime;\r\n }\r\n\r\n // Make sure that contact with bodies that have been removed since the call to checkSupport() are removed from the\r\n // manifold\r\n this._validateManifold();\r\n\r\n for (let iter = 0; iter < this.maxCastIterations && remainingTime > 1e-5; iter++) {\r\n this._castWithCollectors(this._position, this._position.add(this._lastDisplacement), this._castCollector, this._startCollector);\r\n const updateResult = this._updateManifold(this._startCollector, this._castCollector, this._lastDisplacement);\r\n\r\n // Create surface constraints from the manifold contacts.\r\n const constraints = this._createConstraintsFromManifold(deltaTime, deltaTime - remainingTime);\r\n const maxSurfaceVelocity = this._tmpVecs[3];\r\n maxSurfaceVelocity.set(this.maxCharacterSpeedForSolver, this.maxCharacterSpeedForSolver, this.maxCharacterSpeedForSolver);\r\n const minDeltaTime = this._velocity.lengthSquared() == 0 ? 0.0 : (0.5 * this.keepDistance) / this._velocity.length();\r\n const solveResults = this._simplexSolverSolve(constraints, this._velocity, remainingTime, minDeltaTime, this.up, maxSurfaceVelocity);\r\n const newDisplacement = solveResults.position;\r\n const solverDeltaTime = solveResults.deltaTime;\r\n newVelocity = solveResults.velocity;\r\n\r\n this._resolveContacts(deltaTime, gravity);\r\n\r\n let newContactIndex = -1;\r\n // todo if (updateResult == hit multiple bodies) ... cast again\r\n\r\n // If castCollector had hits on different bodies (so we're not sure if some non-closest body could be in our way) OR\r\n // the simplex has given an output direction different from the cast guess\r\n // we re-cast to check we can move there. There is no need to get the start points again.\r\n if (updateResult != 0 || (newDisplacement.lengthSquared() > epsSqrd && !this._lastDisplacement.equalsWithEpsilon(newDisplacement, displacementEps))) {\r\n this._castWithCollectors(this._position, this._position.add(newDisplacement), this._castCollector, this._startCollector);\r\n const hknp = hk._hknp;\r\n const numCastHits = hknp.HP_QueryCollector_GetNumHits(this._castCollector)[1];\r\n // Find the first contact that isn't already in the manifold\r\n if (numCastHits > 0) {\r\n //<todo sortHits()\r\n for (let i = 0; i < numCastHits; i++) {\r\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\r\n const [fraction, _hitLocal, hitWorld] = hknp.HP_QueryCollector_GetShapeCastResult(this._castCollector, i)[1];\r\n const newContact = contactFromCast(hk, hitWorld, newDisplacement, fraction, this.keepDistance);\r\n if (this._findContact(newContact, this._manifold, 0.1) == -1) {\r\n //<todo fireContactAdded\r\n newContactIndex = this._manifold.length;\r\n this._manifold.push(newContact);\r\n //<todo updateTriggersSeen()\r\n break;\r\n }\r\n }\r\n }\r\n }\r\n\r\n if (newContactIndex >= 0) {\r\n const newContact = this._manifold[newContactIndex];\r\n const displacementLengthInv = 1.0 / newDisplacement.length();\r\n const angleBetweenMovementAndSurface = newDisplacement.dot(newContact.normal) * displacementLengthInv;\r\n const keepDistanceAlongMovement = this.keepDistance / -angleBetweenMovementAndSurface;\r\n const distance = newContact.fraction;\r\n let fraction = distance - keepDistanceAlongMovement * displacementLengthInv;\r\n fraction = Math.min(Math.max(fraction, 0.0), 1.0);\r\n\r\n const displacement = newDisplacement.scale(fraction);\r\n this._position.addInPlace(displacement);\r\n remainingTime -= solverDeltaTime * fraction;\r\n } else {\r\n this._position.addInPlace(newDisplacement);\r\n remainingTime -= solverDeltaTime;\r\n }\r\n this._lastDisplacement.copyFrom(newDisplacement);\r\n }\r\n\r\n this._velocity.copyFrom(newVelocity);\r\n }\r\n\r\n /**\r\n * Helper function to calculate velocity based on surface informations and current velocity state and target\r\n * @param deltaTime frame delta time in seconds. When using scene.deltaTime divide by 1000.0\r\n * @param forwardWorld character forward in world coordinates\r\n * @param surfaceNormal surface normal direction\r\n * @param currentVelocity current velocity\r\n * @param surfaceVelocity velocity induced by the surface\r\n * @param desiredVelocity desired character velocity\r\n * @param upWorld up vector in world space\r\n * @param result resulting velocity vector\r\n * @returns boolean true if result has been computed\r\n */\r\n public calculateMovementToRef(\r\n deltaTime: number,\r\n forwardWorld: Vector3,\r\n surfaceNormal: Vector3,\r\n currentVelocity: Vector3,\r\n surfaceVelocity: Vector3,\r\n desiredVelocity: Vector3,\r\n upWorld: Vector3,\r\n result: Vector3\r\n ): boolean {\r\n const eps = 1e-5;\r\n let binorm = forwardWorld.cross(upWorld);\r\n if (binorm.lengthSquared() < eps) {\r\n return false;\r\n }\r\n binorm.normalize();\r\n const tangent = binorm.cross(surfaceNormal);\r\n tangent.normalize();\r\n binorm = tangent.cross(surfaceNormal);\r\n binorm.normalize();\r\n\r\n const surfaceFrame = Matrix.FromValues(\r\n tangent.x,\r\n tangent.y,\r\n tangent.z,\r\n 0,\r\n binorm.x,\r\n binorm.y,\r\n binorm.z,\r\n 0,\r\n surfaceNormal.x,\r\n surfaceNormal.y,\r\n surfaceNormal.z,\r\n 0,\r\n 0,\r\n 0,\r\n 0,\r\n 1\r\n );\r\n const invSurfaceFrame = surfaceFrame.clone().invert();\r\n\r\n currentVelocity.subtractToRef(surfaceVelocity, this._tmpVecs[29]);\r\n const relative = this._tmpVecs[30];\r\n Vector3.TransformNormalToRef(this._tmpVecs[29], invSurfaceFrame, relative);\r\n\r\n const sideVec = upWorld.cross(forwardWorld);\r\n const fwd = desiredVelocity.dot(forwardWorld);\r\n const side = desiredVelocity.dot(sideVec);\r\n const len = desiredVelocity.length();\r\n\r\n const desiredVelocitySF = this._tmpVecs[4];\r\n desiredVelocitySF.set(-fwd, side, 0);\r\n desiredVelocitySF.normalize();\r\n desiredVelocitySF.scaleInPlace(len);\r\n const diff = this._tmpVecs[5];\r\n desiredVelocitySF.subtractToRef(relative, diff);\r\n\r\n // Clamp it by maxAcceleration and limit it by gain.\r\n {\r\n const lenSq = diff.lengthSquared();\r\n const maxVelocityDelta = this.maxAcceleration * deltaTime;\r\n let tmp: number;\r\n if (lenSq * this.acceleration * this.acceleration > maxVelocityDelta * maxVelocityDelta) {\r\n tmp = maxVelocityDelta / Math.sqrt(lenSq);\r\n } else {\r\n tmp = this.acceleration;\r\n }\r\n diff.scaleInPlace(tmp);\r\n }\r\n\r\n relative.addInPlace(diff);\r\n\r\n // Transform back to world space and apply\r\n Vector3.TransformNormalToRef(relative, surfaceFrame, result);\r\n\r\n // Add back in the surface velocity\r\n result.addInPlace(surfaceVelocity);\r\n return true;\r\n }\r\n\r\n /**\r\n * Helper function to calculate velocity based on surface informations and current velocity state and target\r\n * @param deltaTime frame delta time in seconds. When using scene.deltaTime divide by 1000.0\r\n * @param forwardWorld character forward in world coordinates\r\n * @param surfaceNormal surface normal direction\r\n * @param currentVelocity current velocity\r\n * @param surfaceVelocity velocity induced by the surface\r\n * @param desiredVelocity desired character velocity\r\n * @param upWorld up vector in world space\r\n * @returns a new velocity vector\r\n */\r\n public calculateMovement(\r\n deltaTime: number,\r\n forwardWorld: Vector3,\r\n surfaceNormal: Vector3,\r\n currentVelocity: Vector3,\r\n surfaceVelocity: Vector3,\r\n desiredVelocity: Vector3,\r\n upWorld: Vector3\r\n ): Vector3 {\r\n const result = new Vector3(0, 0, 0);\r\n this.calculateMovementToRef(deltaTime, forwardWorld, surfaceNormal, currentVelocity, surfaceVelocity, desiredVelocity, upWorld, result);\r\n return result;\r\n }\r\n}\r\n"]}
|
|
1
|
+
{"version":3,"file":"characterController.js","sourceRoot":"","sources":["../../../../../dev/core/src/Physics/v2/characterController.ts"],"names":[],"mappings":"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","sourcesContent":["import { Vector3, Quaternion, Matrix, TmpVectors } from \"../../Maths/math.vector\";\r\nimport type { Scene } from \"../../scene\";\r\nimport type { DeepImmutableObject } from \"../../types\";\r\nimport type { PhysicsBody } from \"./physicsBody\";\r\nimport { PhysicsShapeCapsule, type PhysicsShape } from \"./physicsShape\";\r\nimport { PhysicsMotionType } from \"./IPhysicsEnginePlugin\";\r\nimport type { HavokPlugin } from \"./Plugins/havokPlugin\";\r\nimport { BuildArray } from \"core/Misc/arrayTools\";\r\n\r\n/**\r\n * Shape properties for the character controller\r\n */\r\nexport interface CharacterShapeOptions {\r\n /**\r\n * optional shape used for collision detection\r\n */\r\n shape?: PhysicsShape;\r\n /**\r\n * capsule height for the capsule shape if no shape is provided\r\n */\r\n capsuleHeight?: number;\r\n /**\r\n * capsule radius for the capsule shape if no shape is provided\r\n */\r\n capsuleRadius?: number;\r\n}\r\n/**\r\n * State of the character on the surface\r\n */\r\nexport const enum CharacterSupportedState {\r\n UNSUPPORTED,\r\n SLIDING,\r\n SUPPORTED,\r\n}\r\n\r\n/**\r\n * Surface information computed by checkSupport method\r\n */\r\nexport interface CharacterSurfaceInfo {\r\n /**\r\n * Indicates whether the surface is dynamic.\r\n * A dynamic surface is one that can change its properties over time,\r\n * such as moving platforms or surfaces that can be affected by external forces.\r\n * surfaceInfo.supportedState is always CharacterSupportedState.SUPPORTED when isSurfaceDynamic is true.\r\n */\r\n isSurfaceDynamic: boolean;\r\n /**\r\n * The supported state of the character on the surface.\r\n */\r\n supportedState: CharacterSupportedState;\r\n /**\r\n * The average normal vector of the surface.\r\n * This vector is perpendicular to the surface and points outwards.\r\n */\r\n averageSurfaceNormal: Vector3;\r\n /**\r\n * The average velocity of the surface.\r\n * This vector represents the speed and direction in which the surface is moving.\r\n */\r\n averageSurfaceVelocity: Vector3;\r\n /**\r\n * The average angular velocity of the surface.\r\n */\r\n averageAngularSurfaceVelocity: Vector3;\r\n}\r\n\r\n/** @internal */\r\ninterface Contact {\r\n /** @internal */\r\n position: Vector3;\r\n /** @internal */\r\n normal: Vector3;\r\n /** @internal */\r\n distance: number;\r\n /** @internal */\r\n fraction: number;\r\n /** @internal */\r\n bodyB: { body: PhysicsBody; index: number };\r\n /** @internal */\r\n allowedPenetration: number;\r\n}\r\n\r\n/** @internal */\r\ninterface SurfaceConstraintInfo {\r\n /** @internal */\r\n planeNormal: Vector3;\r\n /** @internal */\r\n planeDistance: number;\r\n /** @internal */\r\n velocity: Vector3;\r\n /** @internal */\r\n angularVelocity: Vector3;\r\n /** @internal */\r\n staticFriction: number;\r\n /** @internal */\r\n extraUpStaticFriction: number;\r\n /** @internal */\r\n extraDownStaticFriction: number;\r\n /** @internal */\r\n dynamicFriction: number;\r\n /** @internal */\r\n priority: number;\r\n}\r\n\r\n/** @internal */\r\nconst enum SurfaceConstraintInteractionStatus {\r\n OK,\r\n FAILURE_3D,\r\n FAILURE_2D,\r\n}\r\n\r\n/** @internal */\r\ninterface SurfaceConstraintInteraction {\r\n /** @internal */\r\n touched: boolean;\r\n /** @internal */\r\n stopped: boolean;\r\n /** @internal */\r\n surfaceTime: number;\r\n /** @internal */\r\n penaltyDistance: number;\r\n /** @internal */\r\n status: SurfaceConstraintInteractionStatus;\r\n}\r\n\r\n/** @internal */\r\nclass SimplexSolverOutput {\r\n /** @internal */\r\n public position: Vector3;\r\n /** @internal */\r\n public velocity: Vector3;\r\n /** @internal */\r\n public deltaTime: number;\r\n /** @internal */\r\n public planeInteractions: SurfaceConstraintInteraction[];\r\n}\r\n\r\n/** @internal */\r\nclass SimplexSolverActivePlanes {\r\n /** @internal */\r\n public index: number;\r\n /** @internal */\r\n public constraint: SurfaceConstraintInfo;\r\n /** @internal */\r\n public interaction: SurfaceConstraintInteraction;\r\n\r\n /** @internal */\r\n public copyFrom(other: SimplexSolverActivePlanes) {\r\n this.index = other.index;\r\n this.constraint = other.constraint;\r\n this.interaction = other.interaction;\r\n }\r\n}\r\n\r\n/** @internal */\r\nclass SimplexSolverInfo {\r\n /** @internal */\r\n public supportPlanes: Array<SimplexSolverActivePlanes> = new Array<SimplexSolverActivePlanes>(4);\r\n /** @internal */\r\n public numSupportPlanes: number = 0;\r\n /** @internal */\r\n public currentTime: number = 0;\r\n /** @internal */\r\n public inputConstraints: SurfaceConstraintInfo[];\r\n /** @internal */\r\n public outputInteractions: SurfaceConstraintInteraction[];\r\n /** @internal */\r\n public getOutput(constraint: SurfaceConstraintInfo): SurfaceConstraintInteraction {\r\n return this.outputInteractions[this.inputConstraints.indexOf(constraint)]; //<todo.eoin This is O(1) in C++! Equivalent in TS?\r\n }\r\n}\r\n\r\n/** @internal */\r\nfunction contactFromCast(hp: HavokPlugin, cp: any /*ContactPoint*/, castPath: Vector3, hitFraction: number, keepDistance: number): Contact {\r\n //@ts-ignore\r\n const bodyMap = hp._bodies;\r\n\r\n const normal = Vector3.FromArray(cp[4]);\r\n const dist = -hitFraction * castPath.dot(normal);\r\n return {\r\n position: Vector3.FromArray(cp[3]),\r\n normal: normal,\r\n distance: dist,\r\n fraction: hitFraction,\r\n bodyB: bodyMap.get(cp[0][0])!,\r\n allowedPenetration: Math.min(Math.max(keepDistance - dist, 0.0), keepDistance),\r\n };\r\n}\r\n\r\n/**\r\n * Character controller using physics\r\n */\r\nexport class PhysicsCharacterController {\r\n private _position: Vector3;\r\n private _orientation: Quaternion = Quaternion.Identity();\r\n private _velocity: Vector3;\r\n private _lastVelocity: Vector3;\r\n private _shape: PhysicsShape;\r\n private _manifold: Contact[] = [];\r\n private _lastDisplacement: Vector3;\r\n private _contactAngleSensitivity = 10.0;\r\n private _lastInvDeltaTime: number;\r\n private _scene: Scene;\r\n private _tmpMatrix = new Matrix();\r\n private _tmpVecs: Vector3[] = BuildArray(31, Vector3.Zero);\r\n\r\n /**\r\n * minimum distance to make contact\r\n * default 0.05\r\n */\r\n public keepDistance: number = 0.05;\r\n /**\r\n * maximum distance to keep contact\r\n * default 0.1\r\n */\r\n public keepContactTolerance: number = 0.1;\r\n /**\r\n * maximum number of raycast per integration starp\r\n * default 10\r\n */\r\n public maxCastIterations: number = 10;\r\n /**\r\n * speed when recovery from penetration\r\n * default 1.0\r\n */\r\n public penetrationRecoverySpeed = 1.0;\r\n /**\r\n * friction with static surfaces\r\n * default 0\r\n */\r\n public staticFriction = 0;\r\n /**\r\n * friction with dynamic surfaces\r\n * default 1\r\n */\r\n public dynamicFriction = 1;\r\n /**\r\n * cosine value of slop angle that can be climbed\r\n * computed as `Math.cos(Math.PI * (angleInDegree / 180.0));`\r\n * default 0.5 (value for a 60deg angle)\r\n */\r\n public maxSlopeCosine = 0.5;\r\n /**\r\n * character maximum speed\r\n * default 10\r\n */\r\n public maxCharacterSpeedForSolver = 10.0;\r\n /**\r\n * up vector\r\n */\r\n public up = new Vector3(0, 1, 0);\r\n /**\r\n * Strength when pushing other bodies\r\n * default 1e38\r\n */\r\n public characterStrength = 1e38;\r\n\r\n /**\r\n * Acceleration factor. A value of 1 means reaching max velocity immediately\r\n */\r\n public acceleration = 0.05;\r\n\r\n /**\r\n * maximum acceleration in world space coordinate\r\n */\r\n public maxAcceleration = 50;\r\n\r\n /**\r\n * character mass\r\n * default 0\r\n */\r\n public characterMass = 0;\r\n private _startCollector;\r\n private _castCollector;\r\n\r\n /**\r\n * instanciate a new characterController\r\n * @param position Initial position\r\n * @param characterShapeOptions character physics shape options\r\n * @param scene Scene\r\n */\r\n public constructor(position: Vector3, characterShapeOptions: CharacterShapeOptions, scene: Scene) {\r\n this._position = position.clone();\r\n this._velocity = Vector3.Zero();\r\n this._lastVelocity = Vector3.Zero();\r\n const r = characterShapeOptions.capsuleRadius ?? 0.6;\r\n const h = characterShapeOptions.capsuleHeight ?? 1.8;\r\n this._tmpVecs[0].set(0, h * 0.5 - r, 0);\r\n this._tmpVecs[1].set(0, -h * 0.5 + r, 0);\r\n this._shape = characterShapeOptions.shape ?? new PhysicsShapeCapsule(this._tmpVecs[0], this._tmpVecs[1], r, scene);\r\n this._lastInvDeltaTime = 1.0 / 60.0;\r\n this._lastDisplacement = Vector3.Zero();\r\n this._scene = scene;\r\n\r\n const hk = this._scene.getPhysicsEngine()!.getPhysicsPlugin() as HavokPlugin;\r\n const hknp = hk._hknp;\r\n\r\n this._startCollector = hknp.HP_QueryCollector_Create(16)[1];\r\n this._castCollector = hknp.HP_QueryCollector_Create(16)[1];\r\n }\r\n\r\n /**\r\n * Character position\r\n * @returns Character position\r\n */\r\n public getPosition(): Vector3 {\r\n return this._position;\r\n }\r\n\r\n /**\r\n * Teleport character to a new position\r\n * @param position new position\r\n */\r\n public setPosition(position: Vector3) {\r\n this._position.copyFrom(position);\r\n }\r\n\r\n /**\r\n * Character velocity\r\n * @returns Character velocity vector\r\n */\r\n public getVelocity(): Vector3 {\r\n return this._velocity;\r\n }\r\n\r\n /**\r\n * Set velocity vector\r\n * @param velocity vector\r\n */\r\n public setVelocity(velocity: Vector3) {\r\n this._velocity.copyFrom(velocity);\r\n }\r\n\r\n protected _validateManifold() {\r\n const newManifold = [];\r\n for (let i = 0; i < this._manifold.length; i++) {\r\n if (!this._manifold[i].bodyB.body.isDisposed) {\r\n newManifold.push(this._manifold[i]);\r\n }\r\n }\r\n this._manifold = newManifold;\r\n }\r\n\r\n private _getPointVelocityToRef(body: { body: PhysicsBody; index: number }, pointWorld: Vector3, result: Vector3) {\r\n //<todo does this really not exist in body interface?\r\n const comWorld = this._tmpVecs[10];\r\n this._getComWorldToRef(body, comWorld);\r\n const relPos = this._tmpVecs[11];\r\n pointWorld.subtractToRef(comWorld, relPos);\r\n const av = this._tmpVecs[12];\r\n body.body.getAngularVelocityToRef(av, body.index);\r\n const arm = this._tmpVecs[13];\r\n Vector3.CrossToRef(av, relPos, arm);\r\n arm.addToRef(body.body.getLinearVelocity(body.index), result);\r\n }\r\n\r\n protected _compareContacts(contactA: Contact, contactB: Contact): number {\r\n const angSquared = (1.0 - contactA.normal.dot(contactB.normal)) * this._contactAngleSensitivity * this._contactAngleSensitivity;\r\n const planeDistSquared = (contactA.distance - contactB.distance) * (contactA.distance * contactB.distance);\r\n\r\n const p1Vel = this._tmpVecs[7];\r\n this._getPointVelocityToRef(contactA.bodyB, contactA.position, p1Vel);\r\n const p2Vel = this._tmpVecs[8];\r\n this._getPointVelocityToRef(contactB.bodyB, contactB.position, p2Vel);\r\n const velocityDiff = this._tmpVecs[9];\r\n p1Vel.subtractToRef(p2Vel, velocityDiff);\r\n const velocityDiffSquared = velocityDiff.lengthSquared();\r\n\r\n const fitness = angSquared * 10.0 + velocityDiffSquared * 0.1 + planeDistSquared;\r\n return fitness;\r\n }\r\n\r\n protected _findContact(referenceContact: Contact, contactList: Contact[], threshold: number) {\r\n let bestIdx = -1;\r\n let bestFitness = threshold;\r\n for (let i = 0; i < contactList.length; i++) {\r\n const fitness = this._compareContacts(referenceContact, contactList[i]);\r\n if (fitness < bestFitness) {\r\n bestFitness = fitness;\r\n bestIdx = i;\r\n }\r\n }\r\n return bestIdx;\r\n }\r\n\r\n protected _updateManifold(startCollector: any /*HP_CollectorId*/, castCollector: any /*HP_CollectorId*/, castPath: Vector3): number {\r\n const hk = this._scene.getPhysicsEngine()!.getPhysicsPlugin() as HavokPlugin;\r\n const hknp = hk._hknp;\r\n\r\n const numProximityHits = hknp.HP_QueryCollector_GetNumHits(startCollector)[1];\r\n if (numProximityHits > 0) {\r\n const newContacts = [];\r\n let minDistance = 1e38;\r\n const bodyMap = (<any>hk)._bodies;\r\n for (let i = 0; i < numProximityHits; i++) {\r\n const [distance, , contactWorld] = hknp.HP_QueryCollector_GetShapeProximityResult(startCollector, i)[1];\r\n minDistance = Math.min(minDistance, distance);\r\n newContacts.push({\r\n position: Vector3.FromArray(contactWorld[3]),\r\n normal: Vector3.FromArray(contactWorld[4]),\r\n distance: distance,\r\n fraction: 0,\r\n bodyB: bodyMap.get(contactWorld[0][0])!,\r\n allowedPenetration: Math.min(Math.max(this.keepDistance - distance, 0.0), this.keepDistance),\r\n });\r\n }\r\n\r\n for (let i = this._manifold.length - 1; i >= 0; i--) {\r\n const currentContact = this._manifold[i];\r\n const bestMatch = this._findContact(currentContact, newContacts, 1.1);\r\n if (bestMatch >= 0) {\r\n const newAllowedPenetration = Math.min(Math.max(this.keepDistance - newContacts[bestMatch].distance, 0.0), currentContact.allowedPenetration);\r\n this._manifold[i] = newContacts[bestMatch];\r\n this._manifold[i].allowedPenetration = newAllowedPenetration;\r\n newContacts.splice(bestMatch, 1);\r\n } else {\r\n this._manifold.splice(i, 1);\r\n }\r\n }\r\n\r\n const closestContactIndex = newContacts.findIndex((c) => c.distance == minDistance);\r\n if (closestContactIndex >= 0) {\r\n const bestMatch = this._findContact(newContacts[closestContactIndex], this._manifold, 0.1);\r\n if (bestMatch >= 0) {\r\n const newAllowedPenetration = Math.min(\r\n Math.max(this.keepDistance - newContacts[closestContactIndex].distance, 0.0),\r\n this._manifold[bestMatch].allowedPenetration\r\n );\r\n this._manifold[bestMatch] = newContacts[closestContactIndex];\r\n this._manifold[bestMatch].allowedPenetration = newAllowedPenetration;\r\n } else {\r\n this._manifold.push(newContacts[closestContactIndex]);\r\n }\r\n }\r\n } else {\r\n // No start hits; clear manifold completely\r\n this._manifold.length = 0;\r\n }\r\n\r\n let numHitBodies = 0; //< == CASTCOLLECTOR_HIT_SINGLE_BODY\r\n // Process shape cast results if any\r\n const numCastHits = hknp.HP_QueryCollector_GetNumHits(castCollector)[1];\r\n if (numCastHits > 0) {\r\n let closestHitBody = null;\r\n for (let i = 0; i < numCastHits; i++) {\r\n const [fraction, , hitWorld] = hknp.HP_QueryCollector_GetShapeCastResult(castCollector, i)[1];\r\n if (closestHitBody == null) {\r\n const contact = contactFromCast(hk, hitWorld, castPath, fraction, this.keepDistance);\r\n closestHitBody = hitWorld[0][0];\r\n const bestMatch = this._findContact(contact, this._manifold, 0.1);\r\n if (bestMatch == -1) {\r\n this._manifold.push(contact);\r\n }\r\n\r\n if (contact.bodyB.body.getMotionType(contact.bodyB.index) == PhysicsMotionType.STATIC) {\r\n // The closest body is static, so it cannot move away from CC and we don't need to look any further.\r\n break;\r\n }\r\n } else if (closestHitBody._pluginData && hitWorld[0] != closestHitBody._pluginData.hpBodyId) {\r\n numHitBodies++;\r\n break;\r\n }\r\n }\r\n }\r\n\r\n // Remove from the manifold contacts that are too similar as the simplex does not handle parallel planes\r\n for (let e1 = this._manifold.length - 1; e1 >= 0; e1--) {\r\n let e2 = e1 - 1;\r\n for (; e2 >= 0; e2--) {\r\n const fitness = this._compareContacts(this._manifold[e1], this._manifold[e2]);\r\n if (fitness < 0.1) break;\r\n }\r\n if (e2 >= 0) {\r\n this._manifold.slice(e1, 1);\r\n }\r\n }\r\n\r\n return numHitBodies;\r\n }\r\n\r\n protected _createSurfaceConstraint(contact: Contact, timeTravelled: number): SurfaceConstraintInfo {\r\n const constraint = {\r\n //let distance = contact.distance - this.keepDistance;\r\n planeNormal: contact.normal.clone(),\r\n planeDistance: contact.distance,\r\n staticFriction: this.staticFriction,\r\n dynamicFriction: this.dynamicFriction,\r\n extraUpStaticFriction: 0,\r\n extraDownStaticFriction: 0,\r\n velocity: Vector3.Zero(),\r\n angularVelocity: Vector3.Zero(),\r\n priority: 0,\r\n };\r\n\r\n const maxSlopeCosEps = 0.1;\r\n const maxSlopeCosine = Math.max(this.maxSlopeCosine, maxSlopeCosEps);\r\n const normalDotUp = contact.normal.dot(this.up);\r\n\r\n const contactPosition = contact.position.clone();\r\n if (normalDotUp > maxSlopeCosine) {\r\n const com = this.getPosition();\r\n const contactArm = this._tmpVecs[20];\r\n contact.position.subtractToRef(com, contactArm);\r\n const scale = contact.normal.dot(contactArm);\r\n contactPosition.x = com.x + this.up.x * scale;\r\n contactPosition.y = com.y + this.up.y * scale;\r\n contactPosition.z = com.z + this.up.z * scale;\r\n }\r\n\r\n const motionType = contact.bodyB.body.getMotionType(contact.bodyB.index);\r\n if (motionType != PhysicsMotionType.STATIC) {\r\n //<todo Need hknpMotionUtil::predictPontVelocity\r\n }\r\n\r\n const shift = constraint.velocity.dot(constraint.planeNormal) * timeTravelled;\r\n constraint.planeDistance -= shift;\r\n\r\n if (motionType == PhysicsMotionType.STATIC) {\r\n constraint.priority = 2;\r\n } else if (motionType == PhysicsMotionType.ANIMATED) {\r\n constraint.priority = 1;\r\n }\r\n\r\n return constraint;\r\n }\r\n\r\n protected _addMaxSlopePlane(maxSlopeCos: number, up: Vector3, index: number, constraints: SurfaceConstraintInfo[], allowedPenetration: number): boolean {\r\n const verticalComponent = constraints[index].planeNormal.dot(up);\r\n if (verticalComponent > 0.01 && verticalComponent < maxSlopeCos) {\r\n const newConstraint = {\r\n planeNormal: constraints[index].planeNormal.clone(),\r\n planeDistance: constraints[index].planeDistance,\r\n velocity: constraints[index].velocity.clone(),\r\n angularVelocity: constraints[index].angularVelocity.clone(),\r\n priority: constraints[index].priority,\r\n dynamicFriction: constraints[index].dynamicFriction,\r\n staticFriction: constraints[index].staticFriction,\r\n extraDownStaticFriction: constraints[index].extraDownStaticFriction,\r\n extraUpStaticFriction: constraints[index].extraUpStaticFriction,\r\n };\r\n const distance = newConstraint.planeDistance;\r\n newConstraint.planeNormal.subtractInPlace(up.scale(verticalComponent));\r\n newConstraint.planeNormal.normalize();\r\n if (distance >= 0) {\r\n newConstraint.planeDistance = distance * newConstraint.planeNormal.dot(constraints[index].planeNormal);\r\n } else {\r\n const penetrationToResolve = Math.min(0, distance + allowedPenetration);\r\n newConstraint.planeDistance = penetrationToResolve / newConstraint.planeNormal.dot(constraints[index].planeNormal);\r\n constraints[index].planeDistance = 0;\r\n this._resolveConstraintPenetration(newConstraint, this.penetrationRecoverySpeed);\r\n }\r\n constraints.push(newConstraint);\r\n return true;\r\n }\r\n return false;\r\n }\r\n\r\n protected _resolveConstraintPenetration(constraint: SurfaceConstraintInfo, penetrationRecoverySpeed: number) {\r\n // If penetrating we add extra velocity to push the character back out\r\n const eps = 1e-6;\r\n if (constraint.planeDistance < -eps) {\r\n constraint.planeNormal.scaleToRef(constraint.planeDistance * penetrationRecoverySpeed, this._tmpVecs[6]);\r\n constraint.velocity.subtractInPlace(this._tmpVecs[6]);\r\n }\r\n }\r\n\r\n protected _createConstraintsFromManifold(dt: number, timeTravelled: number): SurfaceConstraintInfo[] {\r\n const constraints = [];\r\n for (let i = 0; i < this._manifold.length; i++) {\r\n const surfaceConstraint = this._createSurfaceConstraint(this._manifold[i], timeTravelled);\r\n constraints.push(surfaceConstraint);\r\n this._addMaxSlopePlane(this.maxSlopeCosine, this.up, i, constraints, this._manifold[i].allowedPenetration);\r\n this._resolveConstraintPenetration(surfaceConstraint, this.penetrationRecoverySpeed);\r\n }\r\n return constraints;\r\n }\r\n\r\n protected _simplexSolverSortInfo(info: SimplexSolverInfo) {\r\n // simple bubble sort by (priority,velocity)\r\n for (let i = 0; i < info.numSupportPlanes - 1; i++) {\r\n for (let j = i + 1; j < info.numSupportPlanes; j++) {\r\n const p0 = info.supportPlanes[i];\r\n const p1 = info.supportPlanes[j];\r\n if (p0.constraint.priority < p1.constraint.priority) {\r\n continue;\r\n }\r\n if (p0.constraint.priority == p1.constraint.priority) {\r\n const vel0 = p0.constraint.velocity.lengthSquared();\r\n const vel1 = p1.constraint.velocity.lengthSquared();\r\n if (vel0 < vel1) {\r\n continue;\r\n }\r\n }\r\n info.supportPlanes[i] = p1;\r\n info.supportPlanes[j] = p0;\r\n }\r\n }\r\n }\r\n\r\n protected _simplexSolverSolve1d(info: SimplexSolverInfo, sci: SurfaceConstraintInfo, velocityIn: Vector3, velocityOut: Vector3) {\r\n const eps = 1e-5;\r\n const groundVelocity = sci.velocity;\r\n const relativeVelocity = this._tmpVecs[22];\r\n velocityIn.subtractToRef(groundVelocity, relativeVelocity);\r\n\r\n const planeVel = relativeVelocity.dot(sci.planeNormal);\r\n\r\n const origVelocity2 = relativeVelocity.lengthSquared();\r\n relativeVelocity.subtractInPlace(sci.planeNormal.scale(planeVel));\r\n {\r\n const vp2 = planeVel * planeVel;\r\n // static friction is active if\r\n // velProjPlane * friction > |(velParallel)|\r\n // vplane * f > vpar\r\n // vp * f > vpar\r\n // vp2 * f2 > vpar2\r\n const extraStaticFriction = relativeVelocity.dot(this.up) > 0 ? sci.extraUpStaticFriction : sci.extraDownStaticFriction;\r\n if (extraStaticFriction > 0) {\r\n const horizontal = this.up.cross(sci.planeNormal);\r\n const hor2 = horizontal.lengthSquared();\r\n let horVel = 0.0;\r\n if (hor2 > eps) {\r\n horizontal.scaleInPlace(1 / Math.sqrt(hor2));\r\n\r\n horVel = relativeVelocity.dot(horizontal);\r\n\r\n // horizontal component\r\n {\r\n const horVel2 = horVel * horVel;\r\n const f2 = sci.staticFriction * sci.staticFriction;\r\n if (vp2 * f2 >= horVel2) {\r\n relativeVelocity.subtractInPlace(horizontal.scale(horVel));\r\n horVel = 0;\r\n }\r\n }\r\n }\r\n\r\n // vert component\r\n {\r\n const vertVel2 = origVelocity2 - horVel * horVel - vp2;\r\n const f2 = (sci.staticFriction + extraStaticFriction) * (sci.staticFriction + extraStaticFriction);\r\n if (vp2 * f2 >= vertVel2) {\r\n if (horVel == 0.0) {\r\n velocityOut.copyFrom(groundVelocity);\r\n return;\r\n }\r\n }\r\n }\r\n } else {\r\n // static friction is active if\r\n // velProjPlane * friction > |(vel-velProjPlane)|\r\n // vp * f > rvProj\r\n //\r\n // -> vp * f >= rvProj\r\n // -> vp * f >= sqrt( vel^2 - vp^2 )\r\n // -> vp^2 ( f^2 + 1 ) >= vel^2\r\n const f2 = sci.staticFriction * sci.staticFriction;\r\n if (vp2 * (1 + f2) >= origVelocity2) {\r\n velocityOut.copyFrom(groundVelocity);\r\n return;\r\n }\r\n }\r\n }\r\n\r\n if (sci.dynamicFriction < 1) {\r\n // apply dynamic friction 0 = conserve input velocity 1 = clip against normal\r\n const velOut2 = relativeVelocity.lengthSquared();\r\n if (velOut2 >= eps) {\r\n if (velOut2 > 1e-4 * origVelocity2) {\r\n let f = Math.sqrt(origVelocity2 / velOut2);\r\n f = sci.dynamicFriction + (1 - sci.dynamicFriction) * f;\r\n relativeVelocity.scaleInPlace(f);\r\n const p = sci.planeNormal.dot(relativeVelocity);\r\n relativeVelocity.subtractInPlace(sci.planeNormal.scale(p));\r\n }\r\n }\r\n }\r\n velocityOut.copyFrom(relativeVelocity);\r\n velocityOut.addInPlace(groundVelocity);\r\n }\r\n\r\n protected _simplexSolverSolveTest1d(sci: SurfaceConstraintInfo, velocityIn: Vector3): boolean {\r\n const eps = 1e-3;\r\n const relativeVelocity = this._tmpVecs[23];\r\n velocityIn.subtractToRef(sci.velocity, relativeVelocity);\r\n return relativeVelocity.dot(sci.planeNormal) < -eps;\r\n }\r\n\r\n protected _simplexSolverSolve2d(\r\n info: SimplexSolverInfo,\r\n maxSurfaceVelocity: Vector3,\r\n sci0: SurfaceConstraintInfo,\r\n sci1: SurfaceConstraintInfo,\r\n velocityIn: Vector3,\r\n velocityOut: Vector3\r\n ) {\r\n const eps = 1e-5;\r\n const axis = sci0.planeNormal.cross(sci1.planeNormal);\r\n const axisLen2 = axis.lengthSquared();\r\n\r\n let solveSequentially = false;\r\n let axisVel = null;\r\n\r\n // eslint-disable-next-line no-constant-condition\r\n while (true) {\r\n // Check for parallel planes\r\n if (axisLen2 <= eps || solveSequentially) {\r\n info.getOutput(sci0).status = SurfaceConstraintInteractionStatus.FAILURE_2D;\r\n info.getOutput(sci1).status = SurfaceConstraintInteractionStatus.FAILURE_2D;\r\n\r\n if (sci0.priority > sci1.priority) {\r\n this._simplexSolverSolve1d(info, sci1, velocityIn, velocityOut);\r\n this._simplexSolverSolve1d(info, sci0, velocityIn, velocityOut);\r\n } else {\r\n this._simplexSolverSolve1d(info, sci0, velocityIn, velocityOut);\r\n this._simplexSolverSolve1d(info, sci1, velocityIn, velocityOut);\r\n }\r\n return;\r\n }\r\n\r\n const invAxisLen = 1.0 / Math.sqrt(axisLen2);\r\n axis.scaleInPlace(invAxisLen);\r\n\r\n // Calculate the velocity of the free axis\r\n {\r\n const r0 = sci0.planeNormal.cross(sci1.planeNormal);\r\n const r1 = sci1.planeNormal.cross(axis);\r\n const r2 = axis.cross(sci0.planeNormal);\r\n\r\n const sVel = sci0.velocity.add(sci1.velocity);\r\n\r\n const t = this._tmpVecs[2];\r\n t.set(0.5 * axis.dot(sVel), sci0.planeNormal.dot(sci0.velocity), sci1.planeNormal.dot(sci1.velocity));\r\n const m = Matrix.FromValues(r0.x, r1.x, r2.x, 0, r0.y, r1.y, r2.y, 0, r0.z, r1.z, r2.z, 0, 0, 0, 0, 1);\r\n axisVel = Vector3.TransformNormal(t, m);\r\n axisVel.scaleInPlace(invAxisLen);\r\n\r\n if (Math.abs(axisVel.x) > maxSurfaceVelocity.x || Math.abs(axisVel.y) > maxSurfaceVelocity.y || Math.abs(axisVel.z) > maxSurfaceVelocity.z) {\r\n solveSequentially = true;\r\n } else {\r\n break;\r\n }\r\n }\r\n }\r\n\r\n const groundVelocity = axisVel;\r\n const relativeVelocity = this._tmpVecs[24];\r\n velocityIn.subtractToRef(groundVelocity, relativeVelocity);\r\n\r\n const vel2 = relativeVelocity.lengthSquared();\r\n const axisVert = this.up.dot(axis);\r\n let axisProjVelocity = relativeVelocity.dot(axis);\r\n\r\n let staticFriction = sci0.staticFriction + sci1.staticFriction;\r\n if (axisVert * axisProjVelocity > 0) {\r\n staticFriction += (sci0.extraUpStaticFriction + sci1.extraUpStaticFriction) * axisVert;\r\n } else {\r\n staticFriction += (sci0.extraDownStaticFriction + sci1.extraDownStaticFriction) * axisVert;\r\n }\r\n staticFriction *= 0.5;\r\n\r\n const dynamicFriction = (sci0.dynamicFriction + sci1.dynamicFriction) * 0.5;\r\n // static friction is active if\r\n // |vel-axisProjVelocity|(rv) * friction(f) > axisProjVelocity(av)\r\n // -> sqrt( vel2 - av2 ) * f > av\r\n // -> (vel2 - av2) * f2 > av2\r\n const f2 = staticFriction * staticFriction;\r\n const av2 = axisProjVelocity * axisProjVelocity;\r\n if ((vel2 - av2) * f2 >= av2) {\r\n // static friction kicks in\r\n velocityOut.copyFrom(groundVelocity);\r\n return;\r\n }\r\n\r\n if (dynamicFriction < 1) {\r\n // apply dynamic friction\r\n if (axisProjVelocity * axisProjVelocity > 1e-4 * vel2) {\r\n const tmp = 1.0 / axisProjVelocity;\r\n const f = Math.abs(tmp) * Math.sqrt(vel2) * (1.0 - dynamicFriction) + dynamicFriction;\r\n axisProjVelocity *= f;\r\n }\r\n }\r\n velocityOut.copyFrom(groundVelocity);\r\n velocityOut.addInPlace(axis.scale(axisProjVelocity));\r\n }\r\n\r\n protected _simplexSolverSolve3d(\r\n info: SimplexSolverInfo,\r\n maxSurfaceVelocity: Vector3,\r\n sci0: SurfaceConstraintInfo,\r\n sci1: SurfaceConstraintInfo,\r\n sci2: SurfaceConstraintInfo,\r\n allowResort: boolean,\r\n velocityIn: Vector3,\r\n velocityOut: Vector3\r\n ) {\r\n const eps = 1e-5;\r\n // Calculate the velocity of the point axis\r\n let pointVel = null;\r\n {\r\n const r0 = sci1.planeNormal.cross(sci2.planeNormal);\r\n const r1 = sci2.planeNormal.cross(sci0.planeNormal);\r\n const r2 = sci0.planeNormal.cross(sci1.planeNormal);\r\n\r\n const det = r0.dot(sci0.planeNormal);\r\n let solveSequentially = false;\r\n // eslint-disable-next-line no-constant-condition\r\n while (true) {\r\n if (Math.abs(det) < eps || solveSequentially) {\r\n if (allowResort) {\r\n this._simplexSolverSortInfo(info);\r\n sci0 = info.supportPlanes[0].constraint;\r\n sci1 = info.supportPlanes[1].constraint;\r\n sci2 = info.supportPlanes[2].constraint;\r\n }\r\n info.getOutput(sci0).status = SurfaceConstraintInteractionStatus.FAILURE_3D;\r\n info.getOutput(sci1).status = SurfaceConstraintInteractionStatus.FAILURE_3D;\r\n info.getOutput(sci2).status = SurfaceConstraintInteractionStatus.FAILURE_3D;\r\n\r\n const oldNum = info.numSupportPlanes;\r\n this._simplexSolverSolve2d(info, maxSurfaceVelocity, sci0, sci1, velocityIn, velocityOut);\r\n if (oldNum == info.numSupportPlanes) {\r\n this._simplexSolverSolve2d(info, maxSurfaceVelocity, sci0, sci2, velocityIn, velocityOut);\r\n }\r\n if (oldNum == info.numSupportPlanes) {\r\n this._simplexSolverSolve2d(info, maxSurfaceVelocity, sci1, sci2, velocityIn, velocityOut);\r\n }\r\n\r\n return;\r\n }\r\n\r\n const t = this._tmpVecs[2];\r\n t.set(sci0.planeNormal.dot(sci0.velocity), sci1.planeNormal.dot(sci1.velocity), sci2.planeNormal.dot(sci2.velocity));\r\n const m = Matrix.FromValues(r0.x, r0.y, r0.z, 0, r1.x, r1.y, r1.z, 0, r2.x, r2.y, r2.z, 0, 0, 0, 0, 1);\r\n pointVel = Vector3.TransformNormal(t, m);\r\n pointVel.scaleInPlace(1 / det);\r\n if (Math.abs(pointVel.x) > maxSurfaceVelocity.x || Math.abs(pointVel.y) > maxSurfaceVelocity.y || Math.abs(pointVel.z) > maxSurfaceVelocity.z) {\r\n solveSequentially = true;\r\n } else {\r\n break;\r\n }\r\n }\r\n }\r\n velocityOut.copyFrom(pointVel);\r\n }\r\n\r\n protected _simplexSolverExamineActivePlanes(info: SimplexSolverInfo, maxSurfaceVelocity: Vector3, velocityIn: Vector3, velocityOut: Vector3) {\r\n // eslint-disable-next-line no-constant-condition\r\n while (true) {\r\n switch (info.numSupportPlanes) {\r\n case 1: {\r\n const sci = info.supportPlanes[0].constraint;\r\n this._simplexSolverSolve1d(info, sci, velocityIn, velocityOut);\r\n return;\r\n }\r\n case 2: {\r\n const velocity = Vector3.Zero();\r\n this._simplexSolverSolve1d(info, info.supportPlanes[1].constraint, velocityIn, velocity);\r\n const plane0Used = this._simplexSolverSolveTest1d(info.supportPlanes[0].constraint, velocity);\r\n if (!plane0Used) {\r\n // Only need plane 1, so remove plane 0\r\n info.supportPlanes[0].copyFrom(info.supportPlanes[1]);\r\n info.numSupportPlanes = 1;\r\n velocityOut.copyFrom(velocity);\r\n } else {\r\n this._simplexSolverSolve2d(info, maxSurfaceVelocity, info.supportPlanes[0].constraint, info.supportPlanes[1].constraint, velocityIn, velocityOut);\r\n }\r\n return;\r\n }\r\n case 3: {\r\n // Try to drop both planes\r\n {\r\n const velocity = Vector3.Zero();\r\n this._simplexSolverSolve1d(info, info.supportPlanes[2].constraint, velocityIn, velocityOut);\r\n\r\n const plane0Used = this._simplexSolverSolveTest1d(info.supportPlanes[0].constraint, velocity);\r\n if (!plane0Used) {\r\n const plane1Used = this._simplexSolverSolveTest1d(info.supportPlanes[1].constraint, velocity);\r\n if (!plane1Used) {\r\n velocityOut.copyFrom(velocity);\r\n info.supportPlanes[0].copyFrom(info.supportPlanes[2]);\r\n info.numSupportPlanes = 1;\r\n continue;\r\n }\r\n }\r\n }\r\n\r\n // Try to drop plane 0 or 1\r\n {\r\n let droppedAPlane = false;\r\n for (let testPlane = 0; testPlane < 2; testPlane++) {\r\n const velocity = Vector3.Zero();\r\n this._simplexSolverSolve2d(\r\n info,\r\n maxSurfaceVelocity,\r\n info.supportPlanes[testPlane].constraint,\r\n info.supportPlanes[2].constraint,\r\n velocityIn,\r\n velocityOut\r\n );\r\n const planeUsed = this._simplexSolverSolveTest1d(info.supportPlanes[1 - testPlane].constraint, velocity);\r\n if (!planeUsed) {\r\n info.supportPlanes[0].copyFrom(info.supportPlanes[testPlane]);\r\n info.supportPlanes[1].copyFrom(info.supportPlanes[2]);\r\n info.numSupportPlanes--;\r\n droppedAPlane = true;\r\n break;\r\n }\r\n }\r\n\r\n if (droppedAPlane) {\r\n continue;\r\n }\r\n }\r\n\r\n // Otherwise, try and solve all three planes:\r\n this._simplexSolverSolve3d(\r\n info,\r\n maxSurfaceVelocity,\r\n info.supportPlanes[0].constraint,\r\n info.supportPlanes[1].constraint,\r\n info.supportPlanes[2].constraint,\r\n true,\r\n velocityIn,\r\n velocityOut\r\n );\r\n return;\r\n }\r\n case 4: {\r\n this._simplexSolverSortInfo(info);\r\n let droppedAPlane = false;\r\n\r\n for (let i = 0; i < 3; i++) {\r\n const velocity = Vector3.Zero();\r\n this._simplexSolverSolve3d(\r\n info,\r\n maxSurfaceVelocity,\r\n info.supportPlanes[(i + 1) % 3].constraint,\r\n info.supportPlanes[(i + 2) % 3].constraint,\r\n info.supportPlanes[3].constraint,\r\n false,\r\n velocityIn,\r\n velocity\r\n );\r\n const planeUsed = this._simplexSolverSolveTest1d(info.supportPlanes[i].constraint, velocity);\r\n if (!planeUsed) {\r\n info.supportPlanes[i].copyFrom(info.supportPlanes[2]);\r\n info.supportPlanes[2].copyFrom(info.supportPlanes[3]);\r\n info.numSupportPlanes = 3;\r\n droppedAPlane = true;\r\n break;\r\n }\r\n }\r\n\r\n if (droppedAPlane) {\r\n continue;\r\n }\r\n\r\n // Nothing can be dropped so we've failed to solve\r\n // Now we try all 3d combinations\r\n {\r\n const velocity = velocityIn.clone();\r\n const sci0 = info.supportPlanes[0].constraint;\r\n const sci1 = info.supportPlanes[1].constraint;\r\n const sci2 = info.supportPlanes[2].constraint;\r\n const sci3 = info.supportPlanes[3].constraint;\r\n const oldNum = info.numSupportPlanes;\r\n if (oldNum == info.numSupportPlanes) {\r\n this._simplexSolverSolve3d(info, maxSurfaceVelocity, sci0, sci1, sci2, false, velocity, velocity);\r\n // eslint-disable-next-line no-dupe-else-if\r\n } else if (oldNum == info.numSupportPlanes) {\r\n this._simplexSolverSolve3d(info, maxSurfaceVelocity, sci0, sci1, sci3, false, velocity, velocity);\r\n // eslint-disable-next-line no-dupe-else-if\r\n } else if (oldNum == info.numSupportPlanes) {\r\n this._simplexSolverSolve3d(info, maxSurfaceVelocity, sci0, sci2, sci3, false, velocity, velocity);\r\n // eslint-disable-next-line no-dupe-else-if\r\n } else if (oldNum == info.numSupportPlanes) {\r\n this._simplexSolverSolve3d(info, maxSurfaceVelocity, sci1, sci2, sci3, false, velocity, velocity);\r\n }\r\n\r\n velocityOut.copyFrom(velocity);\r\n }\r\n\r\n // Search a plane to drop\r\n {\r\n // Search the highest penalty value\r\n let maxStatus = SurfaceConstraintInteractionStatus.OK;\r\n for (let i = 0; i < 4; i++) {\r\n maxStatus = Math.max(maxStatus, info.supportPlanes[i].interaction.status);\r\n }\r\n\r\n // Remove the place with the lowest priority and the highest penalty\r\n let i = 0;\r\n for (; i < 4; i++) {\r\n if (maxStatus == info.supportPlanes[i].interaction.status) {\r\n info.supportPlanes[i].copyFrom(info.supportPlanes[3]);\r\n break;\r\n }\r\n info.numSupportPlanes--;\r\n }\r\n }\r\n\r\n // Clear penalty flags for the other planes\r\n for (let i = 0; i < 3; i++) {\r\n info.supportPlanes[i].interaction.status = SurfaceConstraintInteractionStatus.OK;\r\n }\r\n\r\n continue;\r\n }\r\n }\r\n }\r\n }\r\n\r\n protected _simplexSolverSolve(\r\n constraints: SurfaceConstraintInfo[],\r\n velocity: Vector3,\r\n deltaTime: number,\r\n minDeltaTime: number,\r\n up: Vector3,\r\n maxSurfaceVelocity: Vector3\r\n ): SimplexSolverOutput {\r\n const eps = 1e-6;\r\n const output = new SimplexSolverOutput();\r\n output.position = Vector3.Zero();\r\n output.velocity = velocity.clone();\r\n output.planeInteractions = [];\r\n let remainingTime = deltaTime;\r\n\r\n for (let i = 0; i < constraints.length; i++) {\r\n output.planeInteractions.push({\r\n touched: false,\r\n stopped: false,\r\n surfaceTime: 0,\r\n penaltyDistance: 0,\r\n status: SurfaceConstraintInteractionStatus.OK,\r\n });\r\n }\r\n\r\n const info = new SimplexSolverInfo();\r\n info.inputConstraints = constraints;\r\n info.outputInteractions = output.planeInteractions;\r\n info.supportPlanes[0] = new SimplexSolverActivePlanes();\r\n info.supportPlanes[1] = new SimplexSolverActivePlanes();\r\n info.supportPlanes[2] = new SimplexSolverActivePlanes();\r\n info.supportPlanes[3] = new SimplexSolverActivePlanes();\r\n\r\n while (remainingTime > 0) {\r\n // search for a plane which collides our current direction\r\n let hitIndex = -1;\r\n let minCollisionTime = remainingTime;\r\n for (let i = 0; i < constraints.length; i++) {\r\n // Do not search existing active planes\r\n if (info.numSupportPlanes >= 1 && info.supportPlanes[0].index == i) continue;\r\n if (info.numSupportPlanes >= 2 && info.supportPlanes[1].index == i) continue;\r\n if (info.numSupportPlanes >= 3 && info.supportPlanes[2].index == i) continue;\r\n if (output.planeInteractions[i].status != SurfaceConstraintInteractionStatus.OK) {\r\n continue;\r\n }\r\n\r\n // Try to find the plane with the shortest time to move\r\n const sci = constraints[i];\r\n const relativeVel = this._tmpVecs[25];\r\n output.velocity.subtractToRef(sci.velocity, relativeVel);\r\n const relativeProjectedVel = -relativeVel.dot(sci.planeNormal);\r\n // if projected velocity is pointing away skip it\r\n if (relativeProjectedVel <= 0) {\r\n continue;\r\n }\r\n\r\n // Calculate the time of impact\r\n const relativePos = this._tmpVecs[26];\r\n sci.velocity.scaleToRef(info.currentTime, this._tmpVecs[27]);\r\n output.position.subtractToRef(this._tmpVecs[27], relativePos);\r\n let projectedPos = sci.planeNormal.dot(relativePos);\r\n\r\n // treat penetrations\r\n const penaltyDist = output.planeInteractions[i].penaltyDistance;\r\n if (penaltyDist < eps) {\r\n projectedPos = 0;\r\n }\r\n projectedPos += penaltyDist;\r\n\r\n // check for new hit\r\n if (projectedPos < minCollisionTime * relativeProjectedVel) {\r\n minCollisionTime = projectedPos / relativeProjectedVel;\r\n hitIndex = i;\r\n }\r\n }\r\n\r\n // integrate: Walk to our hitPosition we must walk more than 10 microseconds into the future to consider it valid.\r\n const minAcceptableCollisionTime = 1e-4;\r\n if (minCollisionTime > minAcceptableCollisionTime) {\r\n info.currentTime += minCollisionTime;\r\n remainingTime -= minCollisionTime;\r\n output.position.addInPlace(output.velocity.scale(minCollisionTime));\r\n for (let i = 0; i < info.numSupportPlanes; i++) {\r\n info.supportPlanes[i].interaction.surfaceTime += minCollisionTime;\r\n info.supportPlanes[i].interaction.touched = true;\r\n }\r\n\r\n output.deltaTime = info.currentTime;\r\n if (info.currentTime > minDeltaTime) {\r\n return output;\r\n }\r\n }\r\n\r\n // If we have no hit than we are done\r\n if (hitIndex < 0) {\r\n output.deltaTime = deltaTime;\r\n break;\r\n }\r\n\r\n // Add our hit to our current list of active planes\r\n const supportPlane = info.supportPlanes[info.numSupportPlanes++];\r\n supportPlane.constraint = constraints[hitIndex];\r\n supportPlane.interaction = output.planeInteractions[hitIndex];\r\n supportPlane.interaction.penaltyDistance = (supportPlane.interaction.penaltyDistance + eps) * 2.0;\r\n supportPlane.index = hitIndex;\r\n\r\n // Move our character along the current set of active planes\r\n this._simplexSolverExamineActivePlanes(info, maxSurfaceVelocity, velocity, output.velocity);\r\n }\r\n\r\n return output;\r\n }\r\n\r\n /**\r\n * Compute a CharacterSurfaceInfo from current state and a direction\r\n * @param deltaTime frame delta time in seconds. When using scene.deltaTime divide by 1000.0\r\n * @param direction direction to check, usually gravity direction\r\n * @returns a CharacterSurfaceInfo object\r\n */\r\n public checkSupport(deltaTime: number, direction: Vector3): CharacterSurfaceInfo {\r\n const surfaceInfo = {\r\n isSurfaceDynamic: false,\r\n supportedState: CharacterSupportedState.UNSUPPORTED,\r\n averageSurfaceNormal: Vector3.Zero(),\r\n averageSurfaceVelocity: Vector3.Zero(),\r\n averageAngularSurfaceVelocity: Vector3.Zero(),\r\n };\r\n this.checkSupportToRef(deltaTime, direction, surfaceInfo);\r\n return surfaceInfo;\r\n }\r\n\r\n /**\r\n * Compute a CharacterSurfaceInfo from current state and a direction\r\n * @param deltaTime frame delta time in seconds. When using scene.deltaTime divide by 1000.0\r\n * @param direction direction to check, usually gravity direction\r\n * @param surfaceInfo output for surface info\r\n */\r\n public checkSupportToRef(deltaTime: number, direction: Vector3, surfaceInfo: CharacterSurfaceInfo): void {\r\n const eps = 1e-4;\r\n\r\n this._validateManifold();\r\n const constraints = this._createConstraintsFromManifold(deltaTime, 0.0);\r\n const storedVelocities: Vector3[] = [];\r\n // Remove velocities and friction to make this a query of the static geometry\r\n for (let i = 0; i < constraints.length; i++) {\r\n storedVelocities.push(constraints[i].velocity.clone());\r\n constraints[i].velocity.setAll(0);\r\n }\r\n\r\n const maxSurfaceVelocity = this._tmpVecs[3];\r\n maxSurfaceVelocity.set(this.maxCharacterSpeedForSolver, this.maxCharacterSpeedForSolver, this.maxCharacterSpeedForSolver);\r\n const output = this._simplexSolverSolve(constraints, direction, deltaTime, deltaTime, this.up, maxSurfaceVelocity);\r\n\r\n surfaceInfo.averageSurfaceVelocity.setAll(0);\r\n surfaceInfo.averageAngularSurfaceVelocity.setAll(0);\r\n surfaceInfo.averageSurfaceNormal.setAll(0);\r\n surfaceInfo.isSurfaceDynamic = false;\r\n\r\n // If the constraints did not affect the character movement then it is unsupported and we can finish\r\n if (output.velocity.equalsWithEpsilon(direction, eps)) {\r\n surfaceInfo.supportedState = CharacterSupportedState.UNSUPPORTED;\r\n return;\r\n }\r\n\r\n // Check how was the input velocity modified to determine if the character is supported or sliding\r\n if (output.velocity.lengthSquared() < eps) {\r\n surfaceInfo.supportedState = CharacterSupportedState.SUPPORTED;\r\n } else {\r\n output.velocity.normalize();\r\n const angleSin = output.velocity.dot(direction);\r\n const cosSqr = 1 - angleSin * angleSin;\r\n if (cosSqr < this.maxSlopeCosine * this.maxSlopeCosine) {\r\n surfaceInfo.supportedState = CharacterSupportedState.SLIDING;\r\n } else {\r\n surfaceInfo.supportedState = CharacterSupportedState.SUPPORTED;\r\n }\r\n }\r\n\r\n // Add all supporting constraints to the ground information\r\n let numTouching = 0;\r\n for (let i = -0; i < constraints.length; i++) {\r\n if (output.planeInteractions[i].touched && constraints[i].planeNormal.dot(direction) < -0.08) {\r\n surfaceInfo.averageSurfaceNormal.addInPlace(constraints[i].planeNormal);\r\n surfaceInfo.averageSurfaceVelocity.addInPlace(storedVelocities[i]);\r\n surfaceInfo.averageAngularSurfaceVelocity.addInPlace(constraints[i].angularVelocity);\r\n numTouching++;\r\n }\r\n }\r\n\r\n if (numTouching > 0) {\r\n surfaceInfo.averageSurfaceNormal.normalize();\r\n surfaceInfo.averageSurfaceVelocity.scaleInPlace(1 / numTouching);\r\n surfaceInfo.averageAngularSurfaceVelocity.scaleInPlace(1 / numTouching);\r\n }\r\n\r\n // isSurfaceDynamic update\r\n if (surfaceInfo.supportedState == CharacterSupportedState.SUPPORTED) {\r\n for (let i = 0; i < this._manifold.length; i++) {\r\n const manifold = this._manifold[i];\r\n const bodyB = manifold.bodyB;\r\n\r\n if (this._manifold[i].normal.dot(direction) < -0.08 && bodyB.body.getMotionType(0) == PhysicsMotionType.DYNAMIC) {\r\n surfaceInfo.isSurfaceDynamic = true;\r\n break;\r\n }\r\n }\r\n }\r\n }\r\n\r\n protected _castWithCollectors(startPos: Vector3, endPos: Vector3, castCollector: any /*HP_CollectorId*/, startCollector?: any /*HP_CollectorId*/) {\r\n const hk = this._scene.getPhysicsEngine()!.getPhysicsPlugin() as HavokPlugin;\r\n const hknp = hk._hknp;\r\n\r\n const startNative = [startPos.x, startPos.y, startPos.z];\r\n const orientation = [this._orientation.x, this._orientation.y, this._orientation.z, this._orientation.w];\r\n if (startCollector != null) {\r\n const query /*: ShapeProximityInput*/ = [\r\n this._shape._pluginData,\r\n //@ts-ignore\r\n startNative,\r\n //@ts-ignore\r\n orientation,\r\n this.keepDistance + this.keepContactTolerance, // max distance\r\n false, // should hit triggers\r\n [BigInt(0)], // body to ignore //<todo allow for a proxy body!\r\n ];\r\n hknp.HP_World_ShapeProximityWithCollector(hk.world, startCollector, query);\r\n }\r\n\r\n {\r\n const query /*: ShapeCastInput*/ = [\r\n this._shape._pluginData,\r\n //@ts-ignore\r\n orientation,\r\n //@ts-ignore\r\n startNative,\r\n [endPos.x, endPos.y, endPos.z],\r\n false, // should hit triggers\r\n [BigInt(0)], // body to ignore //<todo allow for proxy body\r\n ];\r\n hknp.HP_World_ShapeCastWithCollector(hk.world, castCollector, query);\r\n }\r\n }\r\n\r\n protected _resolveContacts(deltaTime: number, gravity: Vector3) {\r\n const eps = 1e-12;\r\n //<todo object interactions out\r\n for (let i = 0; i < this._manifold.length; i++) {\r\n const contact = this._manifold[i];\r\n const bodyB = this._manifold[i].bodyB;\r\n\r\n //<todo test if bodyB is another character with a proxy body\r\n\r\n // Skip fixed or keyframed bodies as we won't apply impulses to them\r\n if (bodyB.body.getMotionType(bodyB.index) != PhysicsMotionType.DYNAMIC) {\r\n continue;\r\n }\r\n\r\n // Calculate and apply impulse on contacted body\r\n {\r\n //<todo input/output for callbacks\r\n let inputObjectMassInv = 0;\r\n let inputObjectImpulse = 0;\r\n let outputObjectImpulse = Vector3.Zero();\r\n const outputImpulsePosition = contact.position;\r\n\r\n // Calculate relative normal velocity of the contact point in the contacted body\r\n const pointRelVel = this._tmpVecs[19];\r\n this._getPointVelocityToRef(bodyB, contact.position, pointRelVel);\r\n pointRelVel.subtractInPlace(this._velocity);\r\n const inputProjectedVelocity = pointRelVel.dot(contact.normal);\r\n const dampFactor = 0.9;\r\n\r\n // Change velocity\r\n let deltaVelocity = -inputProjectedVelocity * dampFactor;\r\n\r\n // Apply an extra impulse if the collision is actually penetrating\r\n if (contact.distance < 0) {\r\n const recoveryTau = 0.4;\r\n deltaVelocity += (contact.distance * recoveryTau) / deltaTime;\r\n }\r\n\r\n // Apply impulse if required to keep bodies apart\r\n if (deltaVelocity < 0) {\r\n // Calculate the impulse magnitude\r\n const invInertia = this._getInverseInertiaWorld(bodyB);\r\n const comWorld = this._tmpVecs[15];\r\n this._getComWorldToRef(bodyB, comWorld);\r\n const r = this._tmpVecs[16];\r\n contact.position.subtractToRef(comWorld, r);\r\n const jacAng = this._tmpVecs[17];\r\n Vector3.CrossToRef(r, contact.normal, jacAng);\r\n const rc = this._tmpVecs[18];\r\n Vector3.TransformNormalToRef(jacAng, invInertia, rc);\r\n inputObjectMassInv = rc.dot(jacAng) + this._getInvMass(bodyB);\r\n inputObjectImpulse = deltaVelocity / inputObjectMassInv;\r\n\r\n // Clamp impulse magnitude if required and apply it to the normal direction\r\n const maxPushImpulse = -this.characterStrength * deltaTime;\r\n if (inputObjectImpulse < maxPushImpulse) {\r\n inputObjectImpulse = maxPushImpulse;\r\n }\r\n outputObjectImpulse = contact.normal.scale(inputObjectImpulse);\r\n } else {\r\n inputObjectImpulse = 0;\r\n inputObjectMassInv = this._getInvMass(bodyB);\r\n }\r\n\r\n // Add gravity\r\n {\r\n // Calculate effect of gravity on the velocity of the character in the contact normal direction\r\n let relVelN = contact.normal.dot(gravity.scale(deltaTime));\r\n // If it is a separating contact subtract the separation velocity\r\n if (inputProjectedVelocity < 0) {\r\n relVelN -= inputProjectedVelocity;\r\n }\r\n // If the resulting velocity is negative an impulse is applied to stop the character from falling into\r\n // the contacted body\r\n if (relVelN < -eps) {\r\n outputObjectImpulse.addInPlace(contact.normal.scale(this.characterMass * relVelN));\r\n }\r\n }\r\n\r\n //<todo Fire callback to allow user to change impulse + use the info / play sounds\r\n\r\n bodyB.body.applyImpulse(outputObjectImpulse, outputImpulsePosition, bodyB.index);\r\n }\r\n }\r\n }\r\n\r\n protected _getInverseInertiaWorld(body: { body: PhysicsBody; index: number }): DeepImmutableObject<Matrix> {\r\n const mp = body.body.getMassProperties(body.index);\r\n if (!mp.inertia || !mp.inertiaOrientation) {\r\n return Matrix.IdentityReadOnly;\r\n }\r\n const invOrientation = Matrix.FromQuaternionToRef(mp.inertiaOrientation, TmpVectors.Matrix[0]).invert();\r\n const it = TmpVectors.Matrix[1];\r\n\r\n const ir = invOrientation.getRowToRef(0, TmpVectors.Vector4[0]);\r\n it.setRowFromFloats(0, mp.inertia.x * ir.x, mp.inertia.x * ir.y, mp.inertia.x * ir.z, 0);\r\n invOrientation.getRowToRef(1, ir);\r\n it.setRowFromFloats(0, mp.inertia.y * ir.x, mp.inertia.y * ir.y, mp.inertia.y * ir.z, 0);\r\n invOrientation.getRowToRef(2, ir);\r\n it.setRowFromFloats(0, mp.inertia.z * ir.x, mp.inertia.z * ir.y, mp.inertia.z * ir.z, 0);\r\n invOrientation.multiplyToRef(it, this._tmpMatrix);\r\n return this._tmpMatrix;\r\n }\r\n\r\n protected _getComWorldToRef(body: { body: PhysicsBody; index: number }, result: Vector3) {\r\n const mp = body.body.getMassProperties(body.index);\r\n Vector3.TransformCoordinatesToRef(mp.centerOfMass!, body.body.transformNode.getWorldMatrix(), result);\r\n }\r\n\r\n protected _getInvMass(body: { body: PhysicsBody; index: number }): number {\r\n return 1 / body.body.getMassProperties(body.index).mass!;\r\n }\r\n\r\n /**\r\n * Update internal state. Must be called once per frame\r\n * @param deltaTime frame delta time in seconds. When using scene.deltaTime divide by 1000.0\r\n * @param surfaceInfo surface information returned by checkSupport\r\n * @param gravity gravity applied to the character. Can be different that world gravity\r\n */\r\n public integrate(deltaTime: number, surfaceInfo: CharacterSurfaceInfo, gravity: Vector3) {\r\n const hk = this._scene.getPhysicsEngine()!.getPhysicsPlugin() as HavokPlugin;\r\n\r\n const invDeltaTime = 1 / deltaTime;\r\n let remainingTime = deltaTime;\r\n let newVelocity = Vector3.Zero();\r\n\r\n // If the difference between the cast displacement and the simplex solver output position is less than this\r\n // value (per component), do not do a second cast to check if it's possible to reach the output position.\r\n const displacementEps = 1e-4;\r\n const epsSqrd = 1e-8;\r\n\r\n // Choose the first cast direction. If velocity hasn't changed from the previous integrate, guess that the\r\n // displacement will be the same as last integrate, scaled by relative step length. Otherwise, guess based\r\n // on current velocity.\r\n {\r\n const tolerance = displacementEps * invDeltaTime;\r\n if (this._velocity.equalsWithEpsilon(this._lastVelocity, tolerance)) {\r\n this._lastDisplacement.scaleInPlace(remainingTime * this._lastInvDeltaTime);\r\n } else {\r\n const displacementVelocity = this._velocity;\r\n if (surfaceInfo.supportedState == CharacterSupportedState.SUPPORTED) {\r\n const relativeVelocity = this._tmpVecs[28];\r\n this._velocity.subtractToRef(surfaceInfo.averageSurfaceVelocity, relativeVelocity);\r\n const normalDotVelocity = surfaceInfo.averageSurfaceNormal.dot(relativeVelocity);\r\n if (normalDotVelocity < 0) {\r\n relativeVelocity.subtractInPlace(surfaceInfo.averageSurfaceNormal.scale(normalDotVelocity));\r\n displacementVelocity.copyFrom(relativeVelocity);\r\n displacementVelocity.addInPlace(surfaceInfo.averageSurfaceVelocity);\r\n }\r\n }\r\n this._lastDisplacement.copyFrom(displacementVelocity);\r\n this._lastDisplacement.scaleInPlace(remainingTime);\r\n }\r\n this._lastVelocity.copyFrom(this._velocity);\r\n this._lastInvDeltaTime = invDeltaTime;\r\n }\r\n\r\n // Make sure that contact with bodies that have been removed since the call to checkSupport() are removed from the\r\n // manifold\r\n this._validateManifold();\r\n\r\n for (let iter = 0; iter < this.maxCastIterations && remainingTime > 1e-5; iter++) {\r\n this._castWithCollectors(this._position, this._position.add(this._lastDisplacement), this._castCollector, this._startCollector);\r\n const updateResult = this._updateManifold(this._startCollector, this._castCollector, this._lastDisplacement);\r\n\r\n // Create surface constraints from the manifold contacts.\r\n const constraints = this._createConstraintsFromManifold(deltaTime, deltaTime - remainingTime);\r\n const maxSurfaceVelocity = this._tmpVecs[3];\r\n maxSurfaceVelocity.set(this.maxCharacterSpeedForSolver, this.maxCharacterSpeedForSolver, this.maxCharacterSpeedForSolver);\r\n const minDeltaTime = this._velocity.lengthSquared() == 0 ? 0.0 : (0.5 * this.keepDistance) / this._velocity.length();\r\n const solveResults = this._simplexSolverSolve(constraints, this._velocity, remainingTime, minDeltaTime, this.up, maxSurfaceVelocity);\r\n const newDisplacement = solveResults.position;\r\n const solverDeltaTime = solveResults.deltaTime;\r\n newVelocity = solveResults.velocity;\r\n\r\n this._resolveContacts(deltaTime, gravity);\r\n\r\n let newContactIndex = -1;\r\n // todo if (updateResult == hit multiple bodies) ... cast again\r\n\r\n // If castCollector had hits on different bodies (so we're not sure if some non-closest body could be in our way) OR\r\n // the simplex has given an output direction different from the cast guess\r\n // we re-cast to check we can move there. There is no need to get the start points again.\r\n if (updateResult != 0 || (newDisplacement.lengthSquared() > epsSqrd && !this._lastDisplacement.equalsWithEpsilon(newDisplacement, displacementEps))) {\r\n this._castWithCollectors(this._position, this._position.add(newDisplacement), this._castCollector, this._startCollector);\r\n const hknp = hk._hknp;\r\n const numCastHits = hknp.HP_QueryCollector_GetNumHits(this._castCollector)[1];\r\n // Find the first contact that isn't already in the manifold\r\n if (numCastHits > 0) {\r\n //<todo sortHits()\r\n for (let i = 0; i < numCastHits; i++) {\r\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\r\n const [fraction, _hitLocal, hitWorld] = hknp.HP_QueryCollector_GetShapeCastResult(this._castCollector, i)[1];\r\n const newContact = contactFromCast(hk, hitWorld, newDisplacement, fraction, this.keepDistance);\r\n if (this._findContact(newContact, this._manifold, 0.1) == -1) {\r\n //<todo fireContactAdded\r\n newContactIndex = this._manifold.length;\r\n this._manifold.push(newContact);\r\n //<todo updateTriggersSeen()\r\n break;\r\n }\r\n }\r\n }\r\n }\r\n\r\n if (newContactIndex >= 0) {\r\n const newContact = this._manifold[newContactIndex];\r\n const displacementLengthInv = 1.0 / newDisplacement.length();\r\n const angleBetweenMovementAndSurface = newDisplacement.dot(newContact.normal) * displacementLengthInv;\r\n const keepDistanceAlongMovement = this.keepDistance / -angleBetweenMovementAndSurface;\r\n const distance = newContact.fraction;\r\n let fraction = distance - keepDistanceAlongMovement * displacementLengthInv;\r\n fraction = Math.min(Math.max(fraction, 0.0), 1.0);\r\n\r\n const displacement = newDisplacement.scale(fraction);\r\n this._position.addInPlace(displacement);\r\n remainingTime -= solverDeltaTime * fraction;\r\n } else {\r\n this._position.addInPlace(newDisplacement);\r\n remainingTime -= solverDeltaTime;\r\n }\r\n this._lastDisplacement.copyFrom(newDisplacement);\r\n }\r\n\r\n this._velocity.copyFrom(newVelocity);\r\n }\r\n\r\n /**\r\n * Helper function to calculate velocity based on surface informations and current velocity state and target\r\n * @param deltaTime frame delta time in seconds. When using scene.deltaTime divide by 1000.0\r\n * @param forwardWorld character forward in world coordinates\r\n * @param surfaceNormal surface normal direction\r\n * @param currentVelocity current velocity\r\n * @param surfaceVelocity velocity induced by the surface\r\n * @param desiredVelocity desired character velocity\r\n * @param upWorld up vector in world space\r\n * @param result resulting velocity vector\r\n * @returns boolean true if result has been computed\r\n */\r\n public calculateMovementToRef(\r\n deltaTime: number,\r\n forwardWorld: Vector3,\r\n surfaceNormal: Vector3,\r\n currentVelocity: Vector3,\r\n surfaceVelocity: Vector3,\r\n desiredVelocity: Vector3,\r\n upWorld: Vector3,\r\n result: Vector3\r\n ): boolean {\r\n const eps = 1e-5;\r\n let binorm = forwardWorld.cross(upWorld);\r\n if (binorm.lengthSquared() < eps) {\r\n return false;\r\n }\r\n binorm.normalize();\r\n const tangent = binorm.cross(surfaceNormal);\r\n tangent.normalize();\r\n binorm = tangent.cross(surfaceNormal);\r\n binorm.normalize();\r\n\r\n const surfaceFrame = Matrix.FromValues(\r\n tangent.x,\r\n tangent.y,\r\n tangent.z,\r\n 0,\r\n binorm.x,\r\n binorm.y,\r\n binorm.z,\r\n 0,\r\n surfaceNormal.x,\r\n surfaceNormal.y,\r\n surfaceNormal.z,\r\n 0,\r\n 0,\r\n 0,\r\n 0,\r\n 1\r\n );\r\n const invSurfaceFrame = surfaceFrame.clone().invert();\r\n\r\n currentVelocity.subtractToRef(surfaceVelocity, this._tmpVecs[29]);\r\n const relative = this._tmpVecs[30];\r\n Vector3.TransformNormalToRef(this._tmpVecs[29], invSurfaceFrame, relative);\r\n\r\n const sideVec = upWorld.cross(forwardWorld);\r\n const fwd = desiredVelocity.dot(forwardWorld);\r\n const side = desiredVelocity.dot(sideVec);\r\n const len = desiredVelocity.length();\r\n\r\n const desiredVelocitySF = this._tmpVecs[4];\r\n desiredVelocitySF.set(-fwd, side, 0);\r\n desiredVelocitySF.normalize();\r\n desiredVelocitySF.scaleInPlace(len);\r\n const diff = this._tmpVecs[5];\r\n desiredVelocitySF.subtractToRef(relative, diff);\r\n\r\n // Clamp it by maxAcceleration and limit it by gain.\r\n {\r\n const lenSq = diff.lengthSquared();\r\n const maxVelocityDelta = this.maxAcceleration * deltaTime;\r\n let tmp: number;\r\n if (lenSq * this.acceleration * this.acceleration > maxVelocityDelta * maxVelocityDelta) {\r\n tmp = maxVelocityDelta / Math.sqrt(lenSq);\r\n } else {\r\n tmp = this.acceleration;\r\n }\r\n diff.scaleInPlace(tmp);\r\n }\r\n\r\n relative.addInPlace(diff);\r\n\r\n // Transform back to world space and apply\r\n Vector3.TransformNormalToRef(relative, surfaceFrame, result);\r\n\r\n // Add back in the surface velocity\r\n result.addInPlace(surfaceVelocity);\r\n return true;\r\n }\r\n\r\n /**\r\n * Helper function to calculate velocity based on surface informations and current velocity state and target\r\n * @param deltaTime frame delta time in seconds. When using scene.deltaTime divide by 1000.0\r\n * @param forwardWorld character forward in world coordinates\r\n * @param surfaceNormal surface normal direction\r\n * @param currentVelocity current velocity\r\n * @param surfaceVelocity velocity induced by the surface\r\n * @param desiredVelocity desired character velocity\r\n * @param upWorld up vector in world space\r\n * @returns a new velocity vector\r\n */\r\n public calculateMovement(\r\n deltaTime: number,\r\n forwardWorld: Vector3,\r\n surfaceNormal: Vector3,\r\n currentVelocity: Vector3,\r\n surfaceVelocity: Vector3,\r\n desiredVelocity: Vector3,\r\n upWorld: Vector3\r\n ): Vector3 {\r\n const result = new Vector3(0, 0, 0);\r\n this.calculateMovementToRef(deltaTime, forwardWorld, surfaceNormal, currentVelocity, surfaceVelocity, desiredVelocity, upWorld, result);\r\n return result;\r\n }\r\n}\r\n"]}
|