From 9fce7ce7b76b859c5b70cc622d885cd9d6c1579f Mon Sep 17 00:00:00 2001 From: luxiaotao1123 <t1341870251@163.com> Date: 星期二, 23 四月 2024 10:58:30 +0800 Subject: [PATCH] # --- src/components/agv.jsx | 60 ++++++++++++++++++++++++++++++++++++++++++++++++++++-------- 1 files changed, 52 insertions(+), 8 deletions(-) diff --git a/src/components/agv.jsx b/src/components/agv.jsx index ebda1b1..ebe1451 100644 --- a/src/components/agv.jsx +++ b/src/components/agv.jsx @@ -3,18 +3,61 @@ import { useFBX, useAnimations } from '@react-three/drei'; import * as THREE from 'three'; import Box from './box'; -import * as Common from '../utils/common' - -let lastData = {}; +import * as Common from '../utils/common'; +import * as TWEEN from "@tweenjs/tween.js"; +import { INTERVAL_TIME } from '@/config/setting' const Agv = (props) => { - const { position, theta } = props; + const { position, theta, height, loaderTheta, forkLength, trayList, hasBox } = props; + + const [groupPos, setGroupPos] = useState({ x: 0, y: 0, z: 0 }); + const [groupTheta, setGroupTheta] = useState(0); useEffect(() => { + if (!props || Object.keys(props).length === 0) { + return; + } + // group position + const pos = { + x: position?.[0], + y: position?.[1], + z: position?.[2], + } + if (!Common.deepEqual(groupPos, pos)) { + new TWEEN.Tween(groupPos) + .to({ + x: position[0], + y: position[1], + z: position[2] + }, INTERVAL_TIME) + .easing(TWEEN.Easing.Linear.None) + .onUpdate((e) => { + setGroupPos({ ...e }); + }) + .onComplete((e) => { + setGroupPos({ ...e }); + }).start(); + } + + // group theta + if (groupTheta !== theta) { + new TWEEN.Tween({ value: groupTheta }) + .to({ value: theta }, INTERVAL_TIME) + .easing(TWEEN.Easing.Linear.None) + .onUpdate((e) => { + setGroupTheta(e.value) + }) + .onComplete((e) => { + setGroupTheta(e.value) + }).start(); + } + + }, [props]); useFrame((state, delta) => { + TWEEN.update(); }) const bodyModel = useMemo(() => { @@ -41,12 +84,13 @@ return fbx.clone(); }, []) - useEffect(() => { - }, []); - return ( <> - <group rotation-y={Common.rotationParseNum(theta)} scale={0.5} position={position}> + <group + rotation-y={Common.rotationParseNum(groupTheta)} + scale={0.5} + position={[groupPos.x, groupPos.y, groupPos.z]} + > <primitive object={bodyModel} castShadow /> <primitive object={loaderModel} castShadow position={[0, 100, 0]} /> <primitive object={forkModel} castShadow position={[0, 120, 0]} /> -- Gitblit v1.9.1