|
|
@ -22,6 +22,18 @@ let AGVanimationLine = {
|
|
|
|
'5BFAGV': [],
|
|
|
|
'5BFAGV': [],
|
|
|
|
'5CTU': []
|
|
|
|
'5CTU': []
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
const calculateAngle = (sideA, sideB) => {
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// 计算角度
|
|
|
|
|
|
|
|
let angle = Math.atan2(sideB, sideA) * 180 / Math.PI
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// 确保角度值在0到180度之间
|
|
|
|
|
|
|
|
if (angle < 0) {
|
|
|
|
|
|
|
|
angle += 180
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
return angle
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
let animationEnum = ['2AGV', '3AGV', '5CCAGV', '5BFAGV', '5CTU']
|
|
|
|
let animationEnum = ['2AGV', '3AGV', '5CCAGV', '5BFAGV', '5CTU']
|
|
|
|
|
|
|
|
|
|
|
@ -53,6 +65,35 @@ function AGVanimate() {
|
|
|
|
|
|
|
|
|
|
|
|
AGVanimate()
|
|
|
|
AGVanimate()
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
let floorOrigin = {
|
|
|
|
|
|
|
|
floor2Data: {
|
|
|
|
|
|
|
|
x: 109000,
|
|
|
|
|
|
|
|
y: 119960
|
|
|
|
|
|
|
|
},
|
|
|
|
|
|
|
|
floor3Data: {
|
|
|
|
|
|
|
|
x: 39000,
|
|
|
|
|
|
|
|
y: 49460
|
|
|
|
|
|
|
|
},
|
|
|
|
|
|
|
|
floor5Data: {
|
|
|
|
|
|
|
|
x: 159000,
|
|
|
|
|
|
|
|
y: 150575
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
let floorData1 = {
|
|
|
|
|
|
|
|
floor2Data: {
|
|
|
|
|
|
|
|
x: 42500,
|
|
|
|
|
|
|
|
z: 20500
|
|
|
|
|
|
|
|
},
|
|
|
|
|
|
|
|
floor3Data: {
|
|
|
|
|
|
|
|
x: 42500,
|
|
|
|
|
|
|
|
z: 20500
|
|
|
|
|
|
|
|
},
|
|
|
|
|
|
|
|
floor5Data: {
|
|
|
|
|
|
|
|
x: 50300,
|
|
|
|
|
|
|
|
z: 20500
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|
|
|
|
let floorData = {
|
|
|
|
let floorData = {
|
|
|
|
floor2Data: {
|
|
|
|
floor2Data: {
|
|
|
|
x: 1314,
|
|
|
|
x: 1314,
|
|
|
@ -214,8 +255,9 @@ const loadAGV = (r) => {
|
|
|
|
// 更新渲染器
|
|
|
|
// 更新渲染器
|
|
|
|
renderer.render(scene, camera)
|
|
|
|
renderer.render(scene, camera)
|
|
|
|
},
|
|
|
|
},
|
|
|
|
()=>{},
|
|
|
|
() => {
|
|
|
|
err=>{
|
|
|
|
},
|
|
|
|
|
|
|
|
err => {
|
|
|
|
loadAGV([e])
|
|
|
|
loadAGV([e])
|
|
|
|
}
|
|
|
|
}
|
|
|
|
)
|
|
|
|
)
|
|
|
@ -264,27 +306,75 @@ let rotateF = (e) => {
|
|
|
|
}
|
|
|
|
}
|
|
|
|
return e
|
|
|
|
return e
|
|
|
|
}
|
|
|
|
}
|
|
|
|
const AGVAnimationF = (item, type, newLocation = 0, time = 2000) => {
|
|
|
|
|
|
|
|
|
|
|
|
const AGVAnimationF1 = (item, location, time = 2000) => {
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
let AGVGroupLocationData = AGVGroupEnum[item]
|
|
|
|
|
|
|
|
let AGVLocationData = AGVDataEnum[item]
|
|
|
|
|
|
|
|
let group = groupEnum[item]
|
|
|
|
|
|
|
|
let floor = floorEnum[item]
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
const AGVAnimationF = (item, type, newLocation = {}, time = 2000) => {
|
|
|
|
let s = 1
|
|
|
|
let s = 1
|
|
|
|
newLocation %= 360
|
|
|
|
if (type === 'rotate') {
|
|
|
|
|
|
|
|
newLocation.rotate %= 360
|
|
|
|
if ((item === '2AGV' || item === '3AGV' || item === '5CCAGV') && type === 'rotate') {
|
|
|
|
if ((item === '2AGV' || item === '3AGV' || item === '5CCAGV') && type === 'rotate') {
|
|
|
|
newLocation -= 90
|
|
|
|
newLocation.rotate -= 90
|
|
|
|
}
|
|
|
|
}
|
|
|
|
if ((item === '5CTU') && type === 'rotate') {
|
|
|
|
if ((item === '5CTU') && type === 'rotate') {
|
|
|
|
newLocation += 90
|
|
|
|
newLocation.rotate += 90
|
|
|
|
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
let AGVGroupLocationData = AGVGroupEnum[item]
|
|
|
|
let AGVGroupLocationData = AGVGroupEnum[item]
|
|
|
|
let AGVLocationData = AGVDataEnum[item]
|
|
|
|
let AGVLocationData = AGVDataEnum[item]
|
|
|
|
let group = groupEnum[item]
|
|
|
|
let group = groupEnum[item]
|
|
|
|
let floor = floorEnum[item]
|
|
|
|
let floor = floorEnum[item]
|
|
|
|
switch (type) {
|
|
|
|
switch (type) {
|
|
|
|
|
|
|
|
case 'xz': {
|
|
|
|
|
|
|
|
return new Promise(async(resolve, reject) => {
|
|
|
|
|
|
|
|
let locationx = agvData[AGVGroupLocationData].x - (newLocation.x / 100) * floorData[floor].x
|
|
|
|
|
|
|
|
let locationz = agvData[AGVGroupLocationData].z + (newLocation.z / 100) * floorData[floor].z
|
|
|
|
|
|
|
|
let xlength = agvData[AGVLocationData].x - locationx
|
|
|
|
|
|
|
|
let zlength = agvData[AGVLocationData].z - locationz
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
let rotate = calculateAngle(Math.abs(xlength), Math.abs(zlength))
|
|
|
|
|
|
|
|
if (xlength < 0 && zlength < 0) {
|
|
|
|
|
|
|
|
rotate = 180 - rotate
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
if (xlength < 0 && zlength > 0) {
|
|
|
|
|
|
|
|
rotate = 180 + rotate
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
if (xlength > 0 && zlength > 0) {
|
|
|
|
|
|
|
|
rotate = 360 - rotate
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
await AGVAnimationF(item, 'rotate', { rotate: rotate })
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// let distancex = locationx - agvData[AGVLocationData].x
|
|
|
|
|
|
|
|
// let distancez = locationz - agvData[AGVLocationData].z
|
|
|
|
|
|
|
|
let tween = new TWEEN.Tween(agvData[group].position)
|
|
|
|
|
|
|
|
.to({ x: locationx, z: locationz }, time)
|
|
|
|
|
|
|
|
.onComplete(() => {
|
|
|
|
|
|
|
|
agvData[group].position.x = locationx
|
|
|
|
|
|
|
|
agvData[AGVLocationData].x = locationx
|
|
|
|
|
|
|
|
agvData[group].position.z = locationz
|
|
|
|
|
|
|
|
agvData[AGVLocationData].z = locationz
|
|
|
|
|
|
|
|
resolve()
|
|
|
|
|
|
|
|
tween.stop()
|
|
|
|
|
|
|
|
tween = null
|
|
|
|
|
|
|
|
})
|
|
|
|
|
|
|
|
.start()
|
|
|
|
|
|
|
|
})
|
|
|
|
|
|
|
|
}
|
|
|
|
case 'x': {
|
|
|
|
case 'x': {
|
|
|
|
return new Promise(async(resolve, reject) => {
|
|
|
|
return new Promise(async(resolve, reject) => {
|
|
|
|
let location = agvData[AGVGroupLocationData].x - (newLocation / 100) * floorData[floor].x
|
|
|
|
let location = agvData[AGVGroupLocationData].x - (newLocation.x / 100) * floorData[floor].x
|
|
|
|
if ((agvData[group].position.x - location) > 0) {
|
|
|
|
if ((agvData[group].position.x - location) > 0) {
|
|
|
|
await AGVAnimationF(item, 'rotate', 0)
|
|
|
|
await AGVAnimationF(item, 'rotate', { rotate: 0 })
|
|
|
|
} else {
|
|
|
|
} else {
|
|
|
|
await AGVAnimationF(item, 'rotate', 180)
|
|
|
|
await AGVAnimationF(item, 'rotate', { rotate: 180 })
|
|
|
|
}
|
|
|
|
}
|
|
|
|
if (agvData[AGVLocationData].x === location) {
|
|
|
|
if (agvData[AGVLocationData].x === location) {
|
|
|
|
resolve()
|
|
|
|
resolve()
|
|
|
@ -299,50 +389,16 @@ const AGVAnimationF = (item, type, newLocation = 0, time = 2000) => {
|
|
|
|
tween.stop()
|
|
|
|
tween.stop()
|
|
|
|
tween = null
|
|
|
|
tween = null
|
|
|
|
})
|
|
|
|
})
|
|
|
|
.start() // 立即开始动画
|
|
|
|
.start()
|
|
|
|
// let time1 = setInterval(() => {
|
|
|
|
|
|
|
|
// if ((distance > 0 && agvData[group].position.x >= location) || (distance < 0 && agvData[group].position.x <= location)) {
|
|
|
|
|
|
|
|
// agvData[group].position.x = location
|
|
|
|
|
|
|
|
// agvData[AGVLocationData].x = location
|
|
|
|
|
|
|
|
// resolve()
|
|
|
|
|
|
|
|
// clearInterval(time1)
|
|
|
|
|
|
|
|
// clearTimeout(time3)
|
|
|
|
|
|
|
|
// } else {
|
|
|
|
|
|
|
|
// if (timeOrSpeed) {
|
|
|
|
|
|
|
|
// if ((agvData[group].position.x - location) < 0) {
|
|
|
|
|
|
|
|
// agvData[group].position.x += s
|
|
|
|
|
|
|
|
// } else {
|
|
|
|
|
|
|
|
// agvData[group].position.x -= s
|
|
|
|
|
|
|
|
// }
|
|
|
|
|
|
|
|
// } else {
|
|
|
|
|
|
|
|
// agvData[group].position.x += distance / (time / 16)
|
|
|
|
|
|
|
|
// }
|
|
|
|
|
|
|
|
//
|
|
|
|
|
|
|
|
// agvData[AGVLocationData].x = agvData[group].position.x
|
|
|
|
|
|
|
|
// }
|
|
|
|
|
|
|
|
// }, 16)
|
|
|
|
|
|
|
|
// let intervalTime
|
|
|
|
|
|
|
|
// if (timeOrSpeed) {
|
|
|
|
|
|
|
|
// intervalTime = (distance / ((((agvData[group].position.x - location) < 0) ? 1 : -1) * s) * 16) + 1000
|
|
|
|
|
|
|
|
// } else {
|
|
|
|
|
|
|
|
// intervalTime = time + 1000
|
|
|
|
|
|
|
|
// }
|
|
|
|
|
|
|
|
// let time3 = setTimeout(() => {
|
|
|
|
|
|
|
|
// agvData[group].position.x = location
|
|
|
|
|
|
|
|
// agvData[AGVLocationData].x = location
|
|
|
|
|
|
|
|
// resolve()
|
|
|
|
|
|
|
|
// clearInterval(time1)
|
|
|
|
|
|
|
|
// clearTimeout(time3)
|
|
|
|
|
|
|
|
// }, intervalTime)
|
|
|
|
|
|
|
|
})
|
|
|
|
})
|
|
|
|
}
|
|
|
|
}
|
|
|
|
case 'z': {
|
|
|
|
case 'z': {
|
|
|
|
return new Promise(async(resolve, reject) => {
|
|
|
|
return new Promise(async(resolve, reject) => {
|
|
|
|
let location = agvData[AGVGroupLocationData].z + (newLocation / 100) * floorData[floor].z
|
|
|
|
let location = agvData[AGVGroupLocationData].z + (newLocation.z / 100) * floorData[floor].z
|
|
|
|
if ((agvData[group].position.z - location) > 0) {
|
|
|
|
if ((agvData[group].position.z - location) > 0) {
|
|
|
|
await AGVAnimationF(item, 'rotate', 270)
|
|
|
|
await AGVAnimationF(item, 'rotate', { rotate: 270 })
|
|
|
|
} else {
|
|
|
|
} else {
|
|
|
|
await AGVAnimationF(item, 'rotate', 90)
|
|
|
|
await AGVAnimationF(item, 'rotate', { rotate: 90 })
|
|
|
|
}
|
|
|
|
}
|
|
|
|
if (agvData[AGVLocationData].z === location) {
|
|
|
|
if (agvData[AGVLocationData].z === location) {
|
|
|
|
resolve()
|
|
|
|
resolve()
|
|
|
@ -359,80 +415,28 @@ const AGVAnimationF = (item, type, newLocation = 0, time = 2000) => {
|
|
|
|
tween = null
|
|
|
|
tween = null
|
|
|
|
})
|
|
|
|
})
|
|
|
|
.start()
|
|
|
|
.start()
|
|
|
|
// let time1 = setInterval(() => {
|
|
|
|
|
|
|
|
// if ((distance > 0 && agvData[group].position.z >= location) || (distance < 0 && agvData[group].position.z <= location)) {
|
|
|
|
|
|
|
|
// agvData[group].position.z = location
|
|
|
|
|
|
|
|
// agvData[AGVLocationData].z = location
|
|
|
|
|
|
|
|
// resolve()
|
|
|
|
|
|
|
|
// clearInterval(time1)
|
|
|
|
|
|
|
|
// clearTimeout(time3)
|
|
|
|
|
|
|
|
// } else {
|
|
|
|
|
|
|
|
//
|
|
|
|
|
|
|
|
// if (timeOrSpeed) {
|
|
|
|
|
|
|
|
// if ((agvData[group].position.z - location) < 0) {
|
|
|
|
|
|
|
|
// agvData[group].position.z += s
|
|
|
|
|
|
|
|
// } else {
|
|
|
|
|
|
|
|
// agvData[group].position.z -= s
|
|
|
|
|
|
|
|
// }
|
|
|
|
|
|
|
|
// } else {
|
|
|
|
|
|
|
|
// agvData[group].position.z += distance / (time / 16)
|
|
|
|
|
|
|
|
// }
|
|
|
|
|
|
|
|
//
|
|
|
|
|
|
|
|
// agvData[AGVLocationData].z = agvData[group].position.z
|
|
|
|
|
|
|
|
// }
|
|
|
|
|
|
|
|
// }, 16)
|
|
|
|
|
|
|
|
// let intervalTime
|
|
|
|
|
|
|
|
// if (timeOrSpeed) {
|
|
|
|
|
|
|
|
// intervalTime = (distance / ((((agvData[group].position.z - location) < 0) ? 1 : -1) * s) * 16) + 1000
|
|
|
|
|
|
|
|
// } else {
|
|
|
|
|
|
|
|
// intervalTime = time + 1000
|
|
|
|
|
|
|
|
// }
|
|
|
|
|
|
|
|
// let time3 = setTimeout(() => {
|
|
|
|
|
|
|
|
// agvData[group].position.z = location
|
|
|
|
|
|
|
|
// agvData[AGVLocationData].z = location
|
|
|
|
|
|
|
|
// resolve()
|
|
|
|
|
|
|
|
// clearInterval(time1)
|
|
|
|
|
|
|
|
// clearTimeout(time3)
|
|
|
|
|
|
|
|
// }, intervalTime)
|
|
|
|
|
|
|
|
})
|
|
|
|
})
|
|
|
|
}
|
|
|
|
}
|
|
|
|
case 'rotate': {
|
|
|
|
case 'rotate': {
|
|
|
|
return new Promise((resolve, reject) => {
|
|
|
|
return new Promise((resolve, reject) => {
|
|
|
|
let nowRotate = parseFloat((agvData[group].rotation.y / (Math.PI / 180)).toFixed(2))
|
|
|
|
let nowRotate = parseFloat((agvData[group].rotation.y / (Math.PI / 180)).toFixed(2))
|
|
|
|
nowRotate = rotateF(nowRotate)
|
|
|
|
nowRotate = rotateF(nowRotate)
|
|
|
|
newLocation = rotateF(newLocation)
|
|
|
|
newLocation.rotate = rotateF(newLocation.rotate)
|
|
|
|
let distance = newLocation - nowRotate
|
|
|
|
let distance = newLocation.rotate - nowRotate
|
|
|
|
distance = rotateF(distance)
|
|
|
|
distance = rotateF(distance)
|
|
|
|
let nowRotateNum = agvData[group].rotation.y
|
|
|
|
let nowRotateNum = agvData[group].rotation.y
|
|
|
|
let endRotateNum = nowRotateNum + (distance * (Math.PI / 180))
|
|
|
|
let endRotateNum = nowRotateNum + (distance * (Math.PI / 180))
|
|
|
|
let bool = (nowRotateNum - endRotateNum) > 0
|
|
|
|
let bool = (nowRotateNum - endRotateNum) > 0
|
|
|
|
|
|
|
|
|
|
|
|
let tween = new TWEEN.Tween(agvData[group].rotation)
|
|
|
|
let tween = new TWEEN.Tween(agvData[group].rotation)
|
|
|
|
.to({ y: newLocation * (Math.PI / 180) }, 500) // 移动到(1, 1, 1),持续1000毫秒
|
|
|
|
.to({ y: newLocation.rotate * (Math.PI / 180) }, 500) // 移动到(1, 1, 1),持续1000毫秒
|
|
|
|
.onComplete(() => {
|
|
|
|
.onComplete(() => {
|
|
|
|
agvData[group].rotation.y = (newLocation * (Math.PI / 180))
|
|
|
|
agvData[group].rotation.y = (newLocation.rotate * (Math.PI / 180))
|
|
|
|
resolve()
|
|
|
|
resolve()
|
|
|
|
tween.stop()
|
|
|
|
tween.stop()
|
|
|
|
tween = null
|
|
|
|
tween = null
|
|
|
|
})
|
|
|
|
})
|
|
|
|
.start()
|
|
|
|
.start()
|
|
|
|
// let time1 = setInterval(() => {
|
|
|
|
|
|
|
|
// if ((bool && nowRotateNum < endRotateNum) || (!bool && nowRotateNum > endRotateNum)) {
|
|
|
|
|
|
|
|
// agvData[group].rotation.y = (newLocation * (Math.PI / 180))
|
|
|
|
|
|
|
|
// resolve()
|
|
|
|
|
|
|
|
// clearInterval(time1)
|
|
|
|
|
|
|
|
// clearTimeout(time2)
|
|
|
|
|
|
|
|
// } else {
|
|
|
|
|
|
|
|
// agvData[group].rotation.y += ((distance / (500 / 16)) * (Math.PI / 180))
|
|
|
|
|
|
|
|
// nowRotateNum += ((distance / (500 / 16)) * (Math.PI / 180))
|
|
|
|
|
|
|
|
// }
|
|
|
|
|
|
|
|
// }, 16)
|
|
|
|
|
|
|
|
// let time2 = setTimeout(() => {
|
|
|
|
|
|
|
|
// agvData[group].rotation.y = (newLocation * (Math.PI / 180))
|
|
|
|
|
|
|
|
// resolve()
|
|
|
|
|
|
|
|
// clearInterval(time1)
|
|
|
|
|
|
|
|
// clearTimeout(time2)
|
|
|
|
|
|
|
|
// }, 500 + 1000)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
})
|
|
|
|
})
|
|
|
|
}
|
|
|
|
}
|
|
|
@ -444,7 +448,7 @@ const AGVAnimationF = (item, type, newLocation = 0, time = 2000) => {
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
}
|
|
|
|
const AGVAnimation = (e, item, type, newLocation = 0, time = 2000) => {
|
|
|
|
const AGVAnimation = (e, item, type, newLocation = {}, time = 2000) => {
|
|
|
|
if (agvData[groupEnum[e]] && AGVanimationLine[e].length < 10) {
|
|
|
|
if (agvData[groupEnum[e]] && AGVanimationLine[e].length < 10) {
|
|
|
|
AGVanimationLine[e].push(() => AGVAnimationF(item, type, newLocation, time))
|
|
|
|
AGVanimationLine[e].push(() => AGVAnimationF(item, type, newLocation, time))
|
|
|
|
}
|
|
|
|
}
|
|
|
@ -453,34 +457,14 @@ const AGVAnimation = (e, item, type, newLocation = 0, time = 2000) => {
|
|
|
|
setInterval(() => {
|
|
|
|
setInterval(() => {
|
|
|
|
|
|
|
|
|
|
|
|
if (isLoading) {
|
|
|
|
if (isLoading) {
|
|
|
|
|
|
|
|
AGVAnimation('2AGV', '2AGV', 'xz', { x: Math.random() * 100, z: Math.random() * 100 })
|
|
|
|
|
|
|
|
AGVAnimation('3AGV', '3AGV', 'xz', { x: Math.random() * 100, z: Math.random() * 100 })
|
|
|
|
|
|
|
|
AGVAnimation('5CCAGV', '5CCAGV', 'xz', { x: Math.random() * 100, z: Math.random() * 100 })
|
|
|
|
|
|
|
|
AGVAnimation('5BFAGV', '5BFAGV', 'xz', { x: Math.random() * 100, z: Math.random() * 100 })
|
|
|
|
|
|
|
|
|
|
|
|
if (Math.random() > 0.5) {
|
|
|
|
AGVAnimation('5CTU', '5CTU', 'x', { x: (7 + Math.random() * 70) })
|
|
|
|
AGVAnimation('2AGV', '2AGV', 'x', Math.random() * 100)
|
|
|
|
|
|
|
|
} else {
|
|
|
|
|
|
|
|
AGVAnimation('2AGV', '2AGV', 'z', Math.random() * 100)
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
if (Math.random() > 0.5) {
|
|
|
|
|
|
|
|
AGVAnimation('3AGV', '3AGV', 'x', Math.random() * 100)
|
|
|
|
|
|
|
|
} else {
|
|
|
|
|
|
|
|
AGVAnimation('3AGV', '3AGV', 'z', Math.random() * 100)
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
if (Math.random() > 0.5) {
|
|
|
|
|
|
|
|
AGVAnimation('5CCAGV', '5CCAGV', 'x', Math.random() * 100)
|
|
|
|
|
|
|
|
} else {
|
|
|
|
|
|
|
|
AGVAnimation('5CCAGV', '5CCAGV', 'z', Math.random() * 100)
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
if (Math.random() > 0.5) {
|
|
|
|
|
|
|
|
AGVAnimation('5BFAGV', '5BFAGV', 'x', Math.random() * 100)
|
|
|
|
|
|
|
|
} else {
|
|
|
|
|
|
|
|
AGVAnimation('5BFAGV', '5BFAGV', 'z', Math.random() * 100)
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
AGVAnimation('5CTU', '5CTU', 'x', (7 + Math.random() * 70))
|
|
|
|
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}, 1000)
|
|
|
|
}, 2500)
|
|
|
|
|
|
|
|
|
|
|
|
export {
|
|
|
|
export {
|
|
|
|
agvData,
|
|
|
|
agvData,
|
|
|
|