import BaseEntity from '@/core/base/BaseItemEntity.ts' import type Viewport from '@/core/engine/Viewport.ts' import * as THREE from 'three' import gsap from 'gsap' import Clx3dObject from './Clx3dObject.ts' export default class ClxEntity extends BaseEntity { constructor(viewport: Viewport, id: string) { super(viewport, id) } // 抬 addArmRaise(height: number) { // super.addArmRaise(height) this.taskQueue.add(this.createTask('ARM_RAISE', () => this.clxObject.animationUpFork(height) )) } // 降 addArmLower() { // super.addArmLower() this.taskQueue.add(this.createTask('ARM_LOWER', () => this.clxObject.animationDownFork() )) } // 伸 addArmExtender(z: number = 1.3) { // super.addArmExtender() this.taskQueue.add(this.createTask('ARM_EXTEND', () => this.clxObject.animationShowFork(z) )) } // 缩 addArmRetractor() { // super.addArmRetractor() this.taskQueue.add(this.createTask('ARM_RETRACT', () => this.clxObject.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.2) mesh.rotation.set(0, THREE.MathUtils.degToRad(90), 0) ptrForkMesh.add(mesh) })) this.taskQueue.add(this.createTask('ARM_RAISE', ()=>this.clxObject.animationUpFork(ptrForkMesh.position.y + 0.2, 1).then(()=>{ this.isCarrying = true this.isLoading = false }))) } // 卸 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) })) } get clxObject(): Clx3dObject { return this.object as Clx3dObject } // 帮助方法:获取机械臂对象 getArmObject(): THREE.Object3D { return this.clxObject.getObjectByName('clxFork') } }