summaryrefslogtreecommitdiff
path: root/client/splash/index.js
blob: b07da1a14400c7f966b3586605b40873e636e969 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
import { Vector3 } from 'three'
import OrbitControls from 'three-orbitcontrols'

import { appendRenderer, render, camera, renderer } from './renderer'

import { toArray } from '../util'

import * as modal from './modal'
import * as cloud from './cloud'
import * as face from './face'

let interacted = false

const controls = new OrbitControls(camera, renderer.domElement)
controls.maxDistance = camera.far / 2
controls.enableDamping = true
controls.dampingFactor = 1 / 8
controls.rotateSpeed = 1 / 4
controls.zoomSpeed = 1
controls.keyPanSpeed = 1 / 2

function init() {
  build()
  bind()
  animate()
}

function build() {
  appendRenderer()
  cloud.init()
  face.init()
}

function bind() {
  document.querySelector('.slogan').addEventListener('click', modal.close)
  if (document.querySelector('.about')) {
    toArray(document.querySelectorAll('.aboutLink')).forEach(el => {
      el.addEventListener('click', modal.toggle)
    })
    document.querySelector('.about .inner').addEventListener('click', e => e.stopPropagation())
    document.querySelector('.about').addEventListener('click', modal.close)
    document.querySelector('.close').addEventListener('click', modal.close)
  }
  renderer.domElement.addEventListener('wheel', () => {
    interacted = true
  }, false)
  renderer.domElement.addEventListener('mousedown', () => {
    interacted = true
  }, false)
  renderer.domElement.addEventListener('touchstart', () => {
    interacted = true
  }, false)
  camera.position.z = 1.17
}

function animate() {
  requestAnimationFrame(animate)

  // camera.position.z += -0.0025
  // camera.rotation.y += 0.00001
  if (!interacted && camera.position.z < 2.28) {
    camera.position.z += 0.0025
  }

  controls.update()
  cloud.update()
  // face.update()

  let cameraTarget = new Vector3(0, 0, 0)
  camera.lookAt(cameraTarget)

  render()
}

document.addEventListener('DOMContentLoaded', init)