|
|
import { OBJLoader } from 'three/examples/jsm/loaders/OBJLoader'
|
|
|
import { MTLLoader } from 'three/examples/jsm/loaders/MTLLoader'
|
|
|
import {
|
|
|
isLoading,
|
|
|
tuopanLocation,
|
|
|
tishengjiLocation, keyidongModel, storeyHeight, tuopanModel, animationLine, storeyWidth
|
|
|
} from './setThree'
|
|
|
import * as TWEEN from '@tweenjs/tween.js'
|
|
|
import { agvData } from '@/views/board/model/agv'
|
|
|
|
|
|
let tuopanInishengji = true
|
|
|
|
|
|
let s = 1
|
|
|
|
|
|
const tishengjiAnimation = (model, floor, newLocation = 0, time = 2000) => {
|
|
|
|
|
|
return new Promise((resolve, reject) => {
|
|
|
tishengjiLocation.floor = floor
|
|
|
if (!model || tishengjiLocation.y === newLocation) {
|
|
|
resolve()
|
|
|
}
|
|
|
let distance = newLocation - tishengjiLocation.y
|
|
|
|
|
|
let tween = new TWEEN.Tween(model.position)
|
|
|
.to({ y: newLocation }, Math.abs(distance) / s * 16) // 移动到(1, 1, 1),持续1000毫秒
|
|
|
.onComplete(() => {
|
|
|
model.position.y = newLocation
|
|
|
tishengjiLocation.y = newLocation
|
|
|
resolve()
|
|
|
tween.stop()
|
|
|
tween = null
|
|
|
})
|
|
|
.start()
|
|
|
|
|
|
// let time1 = setInterval(() => {
|
|
|
// if ((distance > 0 && model.position.y >= newLocation) || (distance < 0 && model.position.y <= newLocation)) {
|
|
|
// model.position.y = newLocation
|
|
|
// tishengjiLocation.y = newLocation
|
|
|
// resolve()
|
|
|
// clearInterval(time1)
|
|
|
// clearTimeout(time3)
|
|
|
// } else {
|
|
|
// model.position.y += distance / (s / 16)
|
|
|
// tishengjiLocation.y = model.position.y
|
|
|
// }
|
|
|
// }, 16)
|
|
|
// let time3 = setTimeout(() => {
|
|
|
// model.position.y = newLocation
|
|
|
// tishengjiLocation.y = newLocation
|
|
|
// resolve()
|
|
|
// clearInterval(time1)
|
|
|
// clearTimeout(time3)
|
|
|
// }, time + 1000)
|
|
|
|
|
|
})
|
|
|
}
|
|
|
|
|
|
const tuopanXAnimation = (model, newLocation = 0, time = 2000) => {
|
|
|
return new Promise((resolve, reject) => {
|
|
|
if (!model || newLocation === tuopanLocation.x || tishengjiLocation.floor !== tuopanLocation.floor) {
|
|
|
resolve()
|
|
|
} else {
|
|
|
tuopanInishengji = newLocation === 0
|
|
|
|
|
|
let distance = newLocation - tuopanLocation.x
|
|
|
let tween = new TWEEN.Tween(model.position)
|
|
|
.to({ x: newLocation }, Math.abs(distance) / s * 16) // 移动到(1, 1, 1),持续1000毫秒
|
|
|
.onComplete(() => {
|
|
|
model.position.x = newLocation
|
|
|
tuopanLocation.x = newLocation
|
|
|
resolve()
|
|
|
tween.stop()
|
|
|
tween = null
|
|
|
})
|
|
|
.start()
|
|
|
|
|
|
// let time1 = setInterval(() => {
|
|
|
// if ((distance > 0 && model.position.x >= newLocation) || (distance < 0 && model.position.x <= newLocation)) {
|
|
|
// model.position.x = newLocation
|
|
|
// tuopanLocation.x = newLocation
|
|
|
// resolve()
|
|
|
// clearInterval(time1)
|
|
|
// clearTimeout(time3)
|
|
|
// } else {
|
|
|
// model.position.x += distance / (time / 16)
|
|
|
// tuopanLocation.x = model.position.x
|
|
|
// }
|
|
|
// }, 16)
|
|
|
// let time3 = setTimeout(() => {
|
|
|
// model.position.x = newLocation
|
|
|
// tuopanLocation.x = newLocation
|
|
|
// resolve(0)
|
|
|
// clearInterval(time1)
|
|
|
// clearTimeout(time3)
|
|
|
// }, time + 1000)
|
|
|
}
|
|
|
})
|
|
|
}
|
|
|
|
|
|
const tuopanYAnimation = (model, floor, newLocation = 0, time = 2000) => {
|
|
|
return new Promise((resolve, reject) => {
|
|
|
tuopanLocation.floor = floor
|
|
|
if (!model || tuopanLocation.y === newLocation) {
|
|
|
resolve()
|
|
|
}
|
|
|
let distance = newLocation - tuopanLocation.y
|
|
|
let tween = new TWEEN.Tween(model.position)
|
|
|
.to({ y: newLocation }, Math.abs(distance) / s * 16) // 移动到(1, 1, 1),持续1000毫秒
|
|
|
.onComplete(() => {
|
|
|
model.position.y = newLocation
|
|
|
tuopanLocation.y = newLocation
|
|
|
resolve()
|
|
|
tween.stop()
|
|
|
tween = null
|
|
|
})
|
|
|
.start()
|
|
|
|
|
|
// let time1 = setInterval(() => {
|
|
|
// if ((distance > 0 && model.position.y >= newLocation) || (distance < 0 && model.position.y <= newLocation)) {
|
|
|
// model.position.y = newLocation
|
|
|
// tuopanLocation.y = newLocation
|
|
|
// resolve()
|
|
|
// clearInterval(time1)
|
|
|
// clearTimeout(time3)
|
|
|
// } else {
|
|
|
// model.position.y += distance / (time / 16)
|
|
|
// tuopanLocation.y = model.position.y
|
|
|
// }
|
|
|
// }, 16)
|
|
|
// let time3 = setTimeout(() => {
|
|
|
// model.position.y = newLocation
|
|
|
// tuopanLocation.y = newLocation
|
|
|
// resolve()
|
|
|
// clearInterval(time1)
|
|
|
// clearTimeout(time3)
|
|
|
// }, time + 1000)
|
|
|
})
|
|
|
}
|
|
|
|
|
|
const addtuopan = (params) => {
|
|
|
return new Promise((resolve, reject) => {
|
|
|
try {
|
|
|
let objLoader1 = new OBJLoader()
|
|
|
let mtlLoader1 = new MTLLoader()
|
|
|
let objLoader2 = new OBJLoader()
|
|
|
let mtlLoader2 = new MTLLoader()
|
|
|
mtlLoader1.load('/model/jiaodongjichang.mtl', function(materials) {
|
|
|
materials.preload()
|
|
|
objLoader1.setMaterials(materials)
|
|
|
objLoader1.load('/model/jiaodongjichang.obj.obj', function(object1) {
|
|
|
// 将模型添加到场景
|
|
|
params.scene.add(object1)
|
|
|
|
|
|
// mtlLoader2.load('/model/tishengji/tishengji.mtl', function(materials2) {
|
|
|
// materials2.preload()
|
|
|
// objLoader2.setMaterials(materials2)
|
|
|
// objLoader2.load('/model/tishengji/tishengji.obj', function(object2) {
|
|
|
// 将模型添加到场景
|
|
|
// object1.add(object2)
|
|
|
resolve(object1)
|
|
|
// })
|
|
|
// })
|
|
|
|
|
|
})
|
|
|
})
|
|
|
} catch (e) {
|
|
|
resolve()
|
|
|
}
|
|
|
})
|
|
|
|
|
|
}
|
|
|
|
|
|
setInterval(() => {
|
|
|
if (isLoading) {
|
|
|
|
|
|
if (animationLine.length < 5) {
|
|
|
|
|
|
let floor = Math.ceil(Math.random() * 5)
|
|
|
|
|
|
animationLine.push(() => {
|
|
|
if (tuopanInishengji) {
|
|
|
return Promise.all([tishengjiAnimation(keyidongModel, floor, storeyHeight[floor]), tuopanYAnimation(tuopanModel, floor, storeyHeight[floor])])
|
|
|
} else {
|
|
|
animationLine.push(() => tishengjiAnimation(keyidongModel, floor, storeyHeight[floor]))
|
|
|
}
|
|
|
})
|
|
|
if (Math.random() > 0.5) {
|
|
|
animationLine.push(() => tuopanXAnimation(tuopanModel, storeyWidth[floor]))
|
|
|
animationLine.push(() => tuopanXAnimation(tuopanModel, 0))
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
}, 1800)
|
|
|
|
|
|
export {
|
|
|
tuopanInishengji,
|
|
|
tishengjiAnimation,
|
|
|
tuopanXAnimation,
|
|
|
tuopanYAnimation,
|
|
|
addtuopan
|
|
|
}
|