1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859 |
- import { loadGltf } from './loadgltf.js'
- import gsap from 'gsap'
- import * as THREE from 'three'
- export default class Ingredient {
- constructor(ingredientInfo, game) {
- this.ingredientInfo = ingredientInfo
- this.model = null
- this.game = game
- }
- getName() {
- return this.ingredientInfo.name
- }
- async spawn(shelfSlot, stageData) {
- this.model = await loadGltf(this.game, this.ingredientInfo.model)
- this.shelfSlot = shelfSlot
- this.model.position.x = shelfSlot.position.x
- this.model.position.y = shelfSlot.position.y
- this.model.position.z = shelfSlot.position.z
- this.game.scene.add(this.model)
- return this.model
- }
- beginBrew() {
- this.model.moving = true
- clearTimeout(this.model.timeoutId)
- gsap.to(this.model.scale, {
- duration: 2.5, x: 0, y: 0, z: 0, onComplete: () => {
-
- this.model.visible = false
- this.model.timeoutId = setTimeout(() => {
- this.model.position.x = this.shelfSlot.position.x
- this.model.position.y = this.ingredientInfo.wobble.amplitude * Math.sin(this.ingredientInfo.wobble.frequency * this.game.clock.getElapsedTime() + 700) + (this.shelfSlot.position.y + this.ingredientInfo.shelfOffset)
- this.model.position.z = this.shelfSlot.position.z
- this.model.visible = true
- gsap.to(this.model.scale, {
- duration: 0.7, x: 1, y: 1, z: 1, ease: "bounce", onComplete: () => {
- this.model.moving = false
- }
- })
- }, 3000)
- }
- })
- gsap.to(this.model.position, {
- duration: 1.5, motionPath: this.shelfSlot.motionPath, onComplete: () => {
- }
- })
- }
- wobble() {
- if (!this.model.moving) {
- this.model.position.y = this.ingredientInfo.wobble.amplitude * Math.sin( this.ingredientInfo.wobble.frequency * this.game.clock.getElapsedTime()) + (this.shelfSlot.position.y + this.ingredientInfo.shelfOffset)
- this.model.rotateOnAxis(new THREE.Vector3(0, 1, 0), - this.ingredientInfo.wobble.rotation)
- }
- }
- }
|