From 9fce7ce7b76b859c5b70cc622d885cd9d6c1579f Mon Sep 17 00:00:00 2001 From: luxiaotao1123 <t1341870251@163.com> Date: 星期二, 23 四月 2024 10:58:30 +0800 Subject: [PATCH] # --- src/utils/common.js | 22 ++++++++++ src/core/warehouse.jsx | 2 src/components/agv.jsx | 53 ++++++++++++++++++++------ 3 files changed, 62 insertions(+), 15 deletions(-) diff --git a/src/components/agv.jsx b/src/components/agv.jsx index 56da776..ebe1451 100644 --- a/src/components/agv.jsx +++ b/src/components/agv.jsx @@ -8,25 +8,52 @@ 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; } - 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 }); - }) - .start(); + // 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) => { @@ -60,7 +87,7 @@ return ( <> <group - rotation-y={Common.rotationParseNum(theta)} + rotation-y={Common.rotationParseNum(groupTheta)} scale={0.5} position={[groupPos.x, groupPos.y, groupPos.z]} > diff --git a/src/core/warehouse.jsx b/src/core/warehouse.jsx index d19c2ac..89a95c8 100644 --- a/src/core/warehouse.jsx +++ b/src/core/warehouse.jsx @@ -26,7 +26,7 @@ setAgvData(agvRealData); } index++; - }, 1000); + }, INTERVAL_TIME * 1.1); return () => { clearInterval(timer); diff --git a/src/utils/common.js b/src/utils/common.js index 2ace608..4806db1 100644 --- a/src/utils/common.js +++ b/src/utils/common.js @@ -42,4 +42,24 @@ setColor(child); }); } -}; \ No newline at end of file +}; + +export const deepEqual = (obj1, obj2) => { + if (obj1 === obj2) { + return true; + } + if (typeof obj1 !== "object" || obj1 === null || typeof obj2 !== "object" || obj2 === null) { + return false; + } + var keys1 = Object.keys(obj1); + var keys2 = Object.keys(obj2); + if (keys1.length !== keys2.length) { + return false; + } + for (var key of keys1) { + if (!keys2.includes(key) || !deepEqual(obj1[key], obj2[key])) { + return false; + } + } + return true; +} \ No newline at end of file -- Gitblit v1.9.1