From 10a35b48929ffaac6d2b86d5cf9741afb9f57b0f Mon Sep 17 00:00:00 2001 From: Jerald-Golden-B Date: Wed, 9 Jul 2025 17:13:33 +0530 Subject: [PATCH] added human animation pause --- .../modules/builder/asset/models/model/model.tsx | 7 ++++--- .../modules/simulation/spatialUI/arm/armBotUI.tsx | 13 +++++++------ 2 files changed, 11 insertions(+), 9 deletions(-) diff --git a/app/src/modules/builder/asset/models/model/model.tsx b/app/src/modules/builder/asset/models/model/model.tsx index 7baa4b7..a600a4e 100644 --- a/app/src/modules/builder/asset/models/model/model.tsx +++ b/app/src/modules/builder/asset/models/model/model.tsx @@ -16,7 +16,7 @@ import { getUserData } from '../../../../../functions/getUserData'; import { useSceneContext } from '../../../../scene/sceneContext'; import { useVersionContext } from '../../../version/versionContext'; import { SkeletonUtils } from 'three-stdlib'; -import { useAnimationPlaySpeed } from '../../../../../store/usePlayButtonStore'; +import { useAnimationPlaySpeed, usePauseButtonStore } from '../../../../../store/usePlayButtonStore'; import { upsertProductOrEventApi } from '../../../../../services/simulation/products/UpsertProductOrEventApi'; import { getAssetIksApi } from '../../../../../services/simulation/ik/getAssetIKs'; @@ -29,6 +29,7 @@ function Model({ asset }: { readonly asset: Asset }) { const { subModule } = useSubModuleStore(); const { activeModule } = useModuleStore(); const { speed } = useAnimationPlaySpeed(); + const { isPaused } = usePauseButtonStore(); const { assetStore, eventStore, productStore } = useSceneContext(); const { removeAsset, setAnimations, resetAnimation, setAnimationComplete } = assetStore(); const { setTop } = useTopData(); @@ -386,7 +387,7 @@ function Model({ asset }: { readonly asset: Asset }) { const currentAction = actions.current[current]; const previousAction = previousAnimation ? actions.current[previousAnimation] : null; - if (isPlaying && currentAction) { + if (isPlaying && currentAction && activeModule === 'simulation' && !isPaused) { blendFactor.current = 0; currentAction.reset(); @@ -409,7 +410,7 @@ function Model({ asset }: { readonly asset: Asset }) { mixerRef.current.removeEventListener('finished', handleAnimationComplete); } }; - }, [asset.animationState?.current, asset.animationState?.isPlaying]); + }, [asset.animationState?.current, asset.animationState?.isPlaying, isPaused, activeModule]); useEffect(() => { const canvasElement = gl.domElement; diff --git a/app/src/modules/simulation/spatialUI/arm/armBotUI.tsx b/app/src/modules/simulation/spatialUI/arm/armBotUI.tsx index b9af0a3..1f4dee8 100644 --- a/app/src/modules/simulation/spatialUI/arm/armBotUI.tsx +++ b/app/src/modules/simulation/spatialUI/arm/armBotUI.tsx @@ -171,21 +171,22 @@ const ArmBotUI = () => { } } - const targetMesh = scene?.getObjectByProperty("uuid", selectedArmBotData.modelUuid); + const targetMesh = scene?.getObjectByProperty("uuid", selectedArmBotData?.modelUuid || ''); const { handlePointerDown } = useDraggableGLTF( updatePointToState, { - minDistance: targetMesh?.userData.iks[0].minDistance || 1.2, - maxDistance: targetMesh?.userData.iks[0].maxDistance || 2, - maxheight: targetMesh?.userData.iks[0].maxheight || 0.6, - minheight: targetMesh?.userData.iks[0].minheight || 1.9, + minDistance: targetMesh?.userData?.iks[0]?.minDistance || 1.2, + maxDistance: targetMesh?.userData?.iks[0]?.maxDistance || 2, + maxheight: targetMesh?.userData?.iks[0]?.maxheight || 0.6, + minheight: targetMesh?.userData?.iks[0]?.minheight || 1.9, } ); if (!selectedArmBotData || !Array.isArray(selectedArmBotData.point?.actions)) { - return null; // avoid rendering if no data yet + return null; } + return ( <> {selectedArmBotData.point.actions.map((action: any) => {