You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 

120 lines
3.0 KiB

import * as THREE from 'three'
import BaseEntity from '@/core/base/BaseItemEntity.ts'
import type Viewport from '@/core/engine/Viewport.ts'
import gsap from 'gsap'
import { nextTick } from 'vue'
import Cl23dObject from "./Cl23dObject";
/**
* CL2 机械臂实体类
* 0.4m/ss // a max 1.2m/s
* 90 = 3.5s cl2
* 90 = 5s // cLX
*/
export default class Cl2Entity extends BaseEntity {
constructor(viewport: Viewport, id: string) {
super(viewport, id)
}
// 抬
addArmRaise(height: number) {
// super.addArmRaise(height)
this.taskQueue.add(this.createTask('ARM_RAISE',
() => this.cl2Object.animationUpFork(height)
))
}
// 降
addArmLower() {
// super.addArmLower()
this.taskQueue.add(this.createTask('ARM_LOWER',
() => this.cl2Object.animationDownFork()
))
}
// 伸
addArmExtender(z: number = 1.2) {
// super.addArmExtender()
this.taskQueue.add(this.createTask('ARM_EXTEND',
() => this.cl2Object.animationShowFork(z)
))
}
// 缩
addArmRetractor() {
// super.addArmRetractor()
this.taskQueue.add(this.createTask('ARM_RETRACT',
() => this.cl2Object.animationHideFork()
))
}
// 装
addLoad(item: string): void {
const ptrForkMesh = this.getArmObject()
this.taskQueue.add(this.createTask('LOAD', async () => {
// 实际业务中应包含装载逻辑
this.isCarrying = true
this.isLoading = true
// 将物品拾取到机械臂上
const mesh = this.pickupItem(item)
mesh.position.set(0, 0, -0.15)
mesh.rotation.set(0, THREE.MathUtils.degToRad(90), 0)
ptrForkMesh.add(mesh)
}))
this.taskQueue.add(this.createTask('ARM_RAISE',
()=>{
return new Promise(resolve => {
gsap.to(ptrForkMesh.position, {
y: ptrForkMesh.position.y + 0.2,
duration: 1,
ease: 'sine.inOut',
onComplete: () => {
this.isCarrying = true
this.isLoading = false
resolve()
}
})
})
}))
}
// 卸
addUnload(itemId: string, rackId: string, bay?: number, level?: number, cell?: number): void {
this.taskQueue.add(this.createTask('UNLOAD', async () => {
const item = this.viewport.entityManager.findItemById(itemId)
this.isCarrying = false
this.isUnloading = false
// 将物品从机械臂上卸下
this.dropItem(item, rackId, bay, level)
}))
}
// 帮助方法:获取机械臂对象
getArmObject(): THREE.Object3D | undefined {
const agv = this.object as THREE.Group
if (agv.children.length > 1) {
const pillar = agv.children[1]
if (pillar.children.length > 1) {
return pillar.children[1]
}
}
return undefined
}
// 帮助方法:获取机械臂立柱
getArmPillar(): THREE.Object3D | undefined {
const agv = this.object as THREE.Group
if (agv.children.length > 1) {
return agv.children[1]
}
return undefined
}
get cl2Object(): Cl23dObject {
return this.object as Cl23dObject
}
}