116 lines
4.1 KiB
JavaScript
116 lines
4.1 KiB
JavaScript
import * as THREE from 'three'
|
|
|
|
|
|
export class Vortex extends THREE.Group {
|
|
constructor(loadingManager) {
|
|
super()
|
|
|
|
this.loadingManager = loadingManager
|
|
|
|
this.globalRotation = 0.028
|
|
|
|
this.darkTextureRotation = 0.006
|
|
this.darkMoveForward = 0.009
|
|
|
|
this.colorFullTextureRotation = 0.006
|
|
this.colorFullMoveForward = 0.025
|
|
|
|
const commonCylinderGeometry = new THREE.CylinderGeometry(35, 35, 1000, 12, 1, true)
|
|
|
|
this.darkCylinder = new THREE.Mesh(
|
|
commonCylinderGeometry,
|
|
new THREE.MeshLambertMaterial({
|
|
side: THREE.BackSide,
|
|
blending: THREE.AdditiveBlending,
|
|
})
|
|
)
|
|
this.add(this.darkCylinder)
|
|
|
|
this.colorFullCylinder = new THREE.Mesh(
|
|
commonCylinderGeometry,
|
|
new THREE.MeshBasicMaterial({
|
|
side: THREE.BackSide,
|
|
blending: THREE.AdditiveBlending,
|
|
})
|
|
)
|
|
this.add(this.colorFullCylinder)
|
|
|
|
this.position.set(5, 100, -10)
|
|
}
|
|
|
|
set theme(theme) {
|
|
switch (theme) {
|
|
case "Plasma":
|
|
new THREE.TextureLoader(this.loadingManager).load("./images/plasma.jpg", texture => {
|
|
texture.wrapS = THREE.RepeatWrapping
|
|
texture.wrapT = THREE.MirroredRepeatWrapping
|
|
texture.repeat.set(1, 2)
|
|
this.darkCylinder.material.map = texture
|
|
})
|
|
this.darkCylinder.material.opacity = 0.17
|
|
|
|
new THREE.TextureLoader(this.loadingManager).load("./images/plasma2.jpg", texture => {
|
|
texture.wrapS = THREE.RepeatWrapping
|
|
texture.wrapT = THREE.MirroredRepeatWrapping
|
|
texture.repeat.set(2, 2)
|
|
this.colorFullCylinder.material.map = texture
|
|
})
|
|
this.colorFullCylinder.material.opacity = 0.7
|
|
|
|
this.globalRotation = 0.028
|
|
this.darkTextureRotation = 0.005
|
|
this.darkMoveForward = 0.009
|
|
this.colorFullTextureRotation = 0.006
|
|
this.colorFullMoveForward = 0.025
|
|
|
|
this.visible = true
|
|
break
|
|
|
|
case "Espace":
|
|
new THREE.TextureLoader(this.loadingManager).load("./images/dark.jpg", texture => {
|
|
texture.wrapS = THREE.RepeatWrapping
|
|
texture.wrapT = THREE.MirroredRepeatWrapping
|
|
texture.repeat.set(2, 2)
|
|
this.darkCylinder.material.map = texture
|
|
})
|
|
this.darkCylinder.material.opacity = 0.05
|
|
|
|
new THREE.TextureLoader(this.loadingManager).load("./images/colorfull.jpg", texture => {
|
|
texture.wrapS = THREE.RepeatWrapping
|
|
texture.wrapT = THREE.MirroredRepeatWrapping
|
|
texture.repeat.set(2, 2)
|
|
this.colorFullCylinder.material.map = texture
|
|
})
|
|
this.colorFullCylinder.material.opacity = 0.34
|
|
|
|
this.globalRotation = 0.028
|
|
this.darkTextureRotation = 0.006
|
|
this.darkMoveForward = 0.03
|
|
this.colorFullTextureRotation = 0.006
|
|
this.colorFullMoveForward = 0.012
|
|
|
|
this.visible = true
|
|
break
|
|
|
|
case "Rétro":
|
|
this.visible = false
|
|
break
|
|
}
|
|
}
|
|
|
|
update(delta) {
|
|
if (this.visible) {
|
|
this.rotation.y += this.globalRotation * delta
|
|
|
|
if (this.darkCylinder.material.map) {
|
|
this.darkCylinder.material.map.offset.y += this.darkMoveForward * delta
|
|
this.darkCylinder.material.map.offset.x += this.darkTextureRotation * delta
|
|
}
|
|
|
|
if (this.colorFullCylinder.material.map) {
|
|
this.colorFullCylinder.material.map.offset.y += this.colorFullMoveForward * delta
|
|
this.colorFullCylinder.material.map.offset.x += this.colorFullTextureRotation * delta
|
|
}
|
|
}
|
|
}
|
|
} |