yuliang 6 months ago
parent
commit
474985fbc4
  1. 67
      src/modules/cl2/Cl23dObject.ts
  2. 69
      src/modules/cl2/Cl2Entity.ts
  3. 21
      src/modules/clx/Clx3dObject.ts

67
src/modules/cl2/Cl23dObject.ts

@ -2,6 +2,7 @@ import * as THREE from "three";
import {CSG} from "three-csg-ts"; import {CSG} from "three-csg-ts";
//@ts-ignore //@ts-ignore
import {mergeGeometries} from 'three/addons/utils/BufferGeometryUtils.js' import {mergeGeometries} from 'three/addons/utils/BufferGeometryUtils.js'
import gsap from "gsap";
export default class Cl23dObject extends THREE.Object3D { export default class Cl23dObject extends THREE.Object3D {
@ -301,7 +302,7 @@ export default class Cl23dObject extends THREE.Object3D {
const ptrPedestalGeometry = Cl23dObject.ptrPedestalGeometry const ptrPedestalGeometry = Cl23dObject.ptrPedestalGeometry
const ptrPedestalMaterial = new THREE.MeshPhongMaterial({color: 0xffdddbca}); const ptrPedestalMaterial = new THREE.MeshPhongMaterial({color: 0xffdddbca});
const ptrPedestalMesh = new THREE.Mesh(ptrPedestalGeometry, ptrPedestalMaterial); const ptrPedestalMesh = new THREE.Mesh(ptrPedestalGeometry, ptrPedestalMaterial);
ptrPedestalMesh.name = 'ptrPedestalMesh' ptrPedestalMesh.name = 'ptrPedestal'
if (!Cl23dObject.ptrPillarGeometry) { if (!Cl23dObject.ptrPillarGeometry) {
Cl23dObject.ptrPillarGeometry = Cl23dObject.createPtrPillar() Cl23dObject.ptrPillarGeometry = Cl23dObject.createPtrPillar()
@ -309,7 +310,7 @@ export default class Cl23dObject extends THREE.Object3D {
const ptrPillarGeometry = Cl23dObject.ptrPillarGeometry; const ptrPillarGeometry = Cl23dObject.ptrPillarGeometry;
const ptrPillarMaterial = new THREE.MeshPhongMaterial({color: 0xff6c6956}); const ptrPillarMaterial = new THREE.MeshPhongMaterial({color: 0xff6c6956});
const ptrPillarMesh = new THREE.Mesh(ptrPillarGeometry, ptrPillarMaterial); const ptrPillarMesh = new THREE.Mesh(ptrPillarGeometry, ptrPillarMaterial);
ptrPillarMesh.name = 'ptrPillarMesh'
if (!Cl23dObject.ptrForkGeometry) { if (!Cl23dObject.ptrForkGeometry) {
Cl23dObject.ptrForkGeometry = Cl23dObject.createPtrFork() Cl23dObject.ptrForkGeometry = Cl23dObject.createPtrFork()
@ -317,13 +318,73 @@ export default class Cl23dObject extends THREE.Object3D {
const ptrForkGeometry = Cl23dObject.ptrForkGeometry; const ptrForkGeometry = Cl23dObject.ptrForkGeometry;
const ptrForkMaterial = new THREE.MeshPhongMaterial({color: 0xff444444}); const ptrForkMaterial = new THREE.MeshPhongMaterial({color: 0xff444444});
const ptrForkMesh = new THREE.Mesh(ptrForkGeometry, ptrForkMaterial); const ptrForkMesh = new THREE.Mesh(ptrForkGeometry, ptrForkMaterial);
ptrForkMesh.name = 'ptrForkMesh' ptrForkMesh.name = 'ptrFork'
this.add(ptrPedestalMesh) this.add(ptrPedestalMesh)
const groupPillar = new THREE.Group() const groupPillar = new THREE.Group()
groupPillar.name = 'ptrPillar'
groupPillar.add(ptrPillarMesh) groupPillar.add(ptrPillarMesh)
groupPillar.add(ptrForkMesh) groupPillar.add(ptrForkMesh)
this.add(groupPillar) this.add(groupPillar)
} }
animationShowFork(z: number): Promise<void> {
const ptrPillar = this.getObjectByName('ptrPillar')
const time = 3
return new Promise(resolve => {
gsap.to(ptrPillar.position, {
z: -z,
duration: time,
repeat: 0,
ease: 'sine.inOut',
onComplete: resolve
})
})
}
animationHideFork(): Promise<void> {
return this.animationShowFork(0)
}
animationUpFork(y: number, time?: number = 3): Promise<void> {
const ptrFork = this.getObjectByName('ptrFork')
const ptrPillar = this.getObjectByName('ptrPillar')
const pz = ptrPillar.position.z
return new Promise(resolve => {
const bh = 0.22 + 0.075
const children = ptrFork.children
gsap.to(ptrFork.position, {
y: y,
duration: time,
repeat: 0,
ease: 'sine.inOut',
onComplete: resolve,
onUpdate: function() {
const a = this.targets()[0]
if (a.y < bh) {
if (pz > -1) {
for (let i = 0; i < children.length; i++) {
const child = children[i]
child.position.y = -0.05 + bh - a.y
}
} else if (a.y < 0.1 ) {
for (let i = 0; i < children.length; i++) {
const child = children[i]
child.position.y = -0.05 + 0.15 - a.y
}
}
}
}
})
})
}
animationDownFork(): Promise<void> {
return this.animationUpFork(0)
}
} }

69
src/modules/cl2/Cl2Entity.ts

@ -3,6 +3,7 @@ import BaseEntity from '@/core/base/BaseItemEntity.ts'
import type Viewport from '@/core/engine/Viewport.ts' import type Viewport from '@/core/engine/Viewport.ts'
import gsap from 'gsap' import gsap from 'gsap'
import { nextTick } from 'vue' import { nextTick } from 'vue'
import Cl23dObject from "@/modules/cl2/Cl23dObject";
/** /**
* CL2 * CL2
@ -12,33 +13,67 @@ export default class Cl2Entity extends BaseEntity {
super(viewport, id) 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 { addLoad(item: string): void {
const ptrForkMesh = this.getArmObject()
this.taskQueue.add(this.createTask('LOAD', async () => { this.taskQueue.add(this.createTask('LOAD', async () => {
// 实际业务中应包含装载逻辑 // 实际业务中应包含装载逻辑
this.isCarrying = true this.isCarrying = true
const arm = this.getArmObject()
this.isLoading = true this.isLoading = true
// 将物品拾取到机械臂上 // 将物品拾取到机械臂上
const mesh = this.pickupItem(item) const mesh = this.pickupItem(item)
const ptrForkMesh = this.getArmObject() mesh.position.set(0, -0.05, -0.15)
mesh.position.set(0, 0.1, 0)
mesh.rotation.set(0, THREE.MathUtils.degToRad(90), 0) mesh.rotation.set(0, THREE.MathUtils.degToRad(90), 0)
ptrForkMesh.add(mesh) ptrForkMesh.add(mesh)
}))
// 抬高20cm this.taskQueue.add(this.createTask('ARM_RAISE',
gsap.to(arm.position, { ()=>{
y: arm.position.y + 0.2, return new Promise(resolve => {
duration: 0.5, gsap.to(ptrForkMesh.position, {
ease: 'sine.inOut', y: ptrForkMesh.position.y + 0.2,
onComplete: () => { duration: 1,
this.isCarrying = true ease: 'sine.inOut',
this.isLoading = false onComplete: () => {
} this.isCarrying = true
this.isLoading = false
resolve()
}
})
}) })
})) }))
} }
// 卸 // 卸
@ -73,4 +108,8 @@ export default class Cl2Entity extends BaseEntity {
} }
return undefined return undefined
} }
get cl2Object(): Cl23dObject {
return this.object as Cl23dObject
}
} }

21
src/modules/clx/Clx3dObject.ts

@ -641,17 +641,18 @@ export default class Clx3dObject extends THREE.Object3D {
onComplete: resolve, onComplete: resolve,
onUpdate: function() { onUpdate: function() {
const a = this.targets()[0] const a = this.targets()[0]
if (a.y < 0.1 ) { if (a.y < bh) {
for (let i = 0; i < children.length; i++) {
const child = children[i]
child.position.y = -0.05 + 0.15 - a.y
}
}
if (a.y < bh && a.z > -1) {
console.log(a.z) console.log(a.z)
for (let i = 0; i < children.length; i++) { if (a.z > -1) {
const child = children[i] for (let i = 0; i < children.length; i++) {
child.position.y = -0.05 + bh - a.y const child = children[i]
child.position.y = -0.05 + bh - a.y
}
} else if (a.y < 0.1 ) {
for (let i = 0; i < children.length; i++) {
const child = children[i]
child.position.y = -0.05 + 0.15 - a.y
}
} }
} }
} }

Loading…
Cancel
Save