File size: 1,578 Bytes
8194362
 
 
 
 
 
 
 
 
 
 
 
aa14f68
8194362
 
aa14f68
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
8194362
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
aa14f68
 
 
8194362
 
 
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
import Ui from '../Ui'

export default class ControlsManager {

  constructor (keyboardControls, mobileDeviceControls) {
    this.keyboardControls = keyboardControls
    this.mobileDeviceControls = mobileDeviceControls

    this.onKeyPress = this.onKeyPress.bind(this)
    this.onDeviceOrientation = this.onDeviceOrientation.bind(this)
  }

  start () {
    window.addEventListener('deviceorientation', this.onDeviceOrientation, false)

    if (window.DeviceOrientationEvent && window.DeviceOrientationEvent.requestPermission) {
      this.setMobile()

      document.body.classList.add('no-motion-controls')
      document.querySelector('#permit-motion-controls').addEventListener(
        'click',
        () => window.DeviceOrientationEvent.requestPermission(),
        false
      )
    }
    else {
      this.setDesktop()
    }
  }

  setDesktop () {
    this.keyboardControls.enable()
    this.mobileDeviceControls.disable()

    Ui.setUiForDesktop()

    this.onChange && this.onChange('desktop')
  }

  setMobile () {
    this.controls = 'mobile'

    window.addEventListener('keypress', this.onKeyPress, false)

    this.keyboardControls.disable()
    this.mobileDeviceControls.enable()

    Ui.setUiForMobile()

    this.onChange && this.onChange('mobile')
  }

  onKeyPress (event) {
    this.setDesktop()
  }

  onDeviceOrientation (event) {
    if (event.alpha === null) {
      return
    }

    this.setMobile()

    document.body.classList.remove('no-motion-controls')
    window.removeEventListener('deviceorientation', this.onDeviceOrientation, false)
  }

}