|
|
@ -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) |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
} |
|
|
} |
|
|
|