From 15d3b197f6102f347a828f2b50d5dfebe57780dd Mon Sep 17 00:00:00 2001 From: luxiaotao1123 <t1341870251@163.com> Date: 星期三, 08 五月 2024 15:17:54 +0800 Subject: [PATCH] # --- src/components/agv.jsx | 55 ++++++++++++++++++++++++++++++++++++------------------- 1 files changed, 36 insertions(+), 19 deletions(-) diff --git a/src/components/agv.jsx b/src/components/agv.jsx index c96cf8c..caf04bb 100644 --- a/src/components/agv.jsx +++ b/src/components/agv.jsx @@ -13,8 +13,25 @@ REAL_COMPARE_MAP_OFFSET_Z, } from '../config/setting' +const getCorrectForkDis = (loaderAngle, forkDis) => { + if (loaderAngle > 180 - 10 && loaderAngle < 180 + 10) { + return forkDis; + } + if (loaderAngle > 360 - 10 && loaderAngle < 0 + 10) { + return -forkDis; + } + if (loaderAngle > 270 - 10 && loaderAngle < 270 + 10) { + return -forkDis; + } + if (loaderAngle > 90 - 10 && loaderAngle < 90 + 10) { + return -forkDis; + } + return forkDis; +} + const Agv = (props) => { - const { agvNo, position, theta, trayList, hasBox } = props; + const { agvNo, position, trayList, hasBox } = props; + const theta = -props.theta; const height = props.height * 0.04; const forkLength = props.forkLength * 0.1; const loaderTheta = Number(props.loaderTheta?.toFixed(1)); @@ -22,7 +39,7 @@ const [groupPos, setGroupPos] = useState({ x: 0, y: 0, z: 0 }); const [groupTheta, setGroupTheta] = useState(0); const [loaderHeight, setLoaderHeight] = useState(0); - const [integrateTheta, setIntegrateTheta] = useState(0); + const [loaderAngle, setLoaderAngle] = useState(0); const [forkDis, setForkDis] = useState(0); const [realTrayList, setRealTrayList] = useState([]); @@ -50,10 +67,10 @@ } // group theta - if (groupTheta !== -theta && props.theta !== null) { - const minTheta = Common.minDiffTheta(groupTheta, -theta); + if (groupTheta !== theta && props.theta !== null) { + const targetTheta = Common.normalizeAngle(theta - groupTheta) + groupTheta; new TWEEN.Tween({ value: groupTheta }) - .to({ value: minTheta }, INTERVAL_TIME) + .to({ value: targetTheta }, INTERVAL_TIME) .easing(TWEEN.Easing.Linear.None) .onUpdate((e) => { setGroupTheta(e.value) @@ -77,30 +94,30 @@ } // loader theta + let loaderTargetTheta; const loaderAbsoluteAngle = (theta + loaderTheta) % 360; - // console.log("integrateTheta", integrateTheta); - // console.log("theta", theta); - // console.log("loaderTheta", loaderTheta); - // console.log("loaderAbsoluteAngle", loaderAbsoluteAngle); - if (integrateTheta !== loaderAbsoluteAngle && props.loaderTheta !== null) { - // const minTheta = Common.minDiffTheta(integrateTheta, loaderAbsoluteAngle); - new TWEEN.Tween({ value: integrateTheta }) - .to({ value: loaderAbsoluteAngle }, INTERVAL_TIME) + if (loaderAngle !== loaderAbsoluteAngle && props.loaderTheta !== null) { + console.log("theta", theta); + console.log("loaderTheta", loaderTheta); + console.log("loaderAbsoluteAngle", loaderAbsoluteAngle); + loaderTargetTheta = Common.normalizeAngle(loaderAbsoluteAngle - loaderAngle) + loaderAngle; + console.log("loaderTargetTheta", loaderTargetTheta); + new TWEEN.Tween({ value: loaderAngle }) + .to({ value: loaderTargetTheta }, INTERVAL_TIME) .easing(TWEEN.Easing.Linear.None) .onUpdate((e) => { - setIntegrateTheta(e.value) + setLoaderAngle(e.value) }) .onComplete((e) => { - setIntegrateTheta(e.value) + setLoaderAngle(e.value) }).start(); } // fork lenght - // console.log("forkDis", forkDis); - // console.log("forkLength", forkLength); if (forkDis !== forkLength && props.forkLength !== null) { + const targetForkDis = getCorrectForkDis(Common.positiveAngle(loaderTargetTheta), forkLength); new TWEEN.Tween({ value: forkDis }) - .to({ value: forkLength }, INTERVAL_TIME) + .to({ value: targetForkDis }, INTERVAL_TIME) .easing(TWEEN.Easing.Linear.None) .onUpdate((e) => { setForkDis(e.value) @@ -156,7 +173,7 @@ <primitive object={bodyModel} castShadow /> <group position-y={loaderHeight} - rotation-y={Common.rotationParseNum(integrateTheta)} + rotation-y={Common.rotationParseNum(loaderAngle)} > <primitive object={loaderModel} castShadow position={[0, 20, 0]} /> <group position-z={forkDis}> -- Gitblit v1.9.1