62 lines
1.5 KiB
JavaScript
62 lines
1.5 KiB
JavaScript
import Keyboard from '../../utils/keyboard';
|
|
import Helpers from '../../utils/helpers';
|
|
import Config from '../../data/config';
|
|
|
|
// Manages all input interactions
|
|
export default class Interaction {
|
|
constructor(renderer, scene, camera, controls) {
|
|
// Properties
|
|
this.renderer = renderer;
|
|
this.scene = scene;
|
|
this.camera = camera;
|
|
this.controls = controls;
|
|
|
|
this.timeout = null;
|
|
|
|
// Instantiate keyboard helper
|
|
this.keyboard = new Keyboard();
|
|
|
|
// Listeners
|
|
// Mouse events
|
|
this.renderer.domElement.addEventListener('mousemove', (event) => Helpers.throttle(this.onMouseMove(event), 250), false);
|
|
this.renderer.domElement.addEventListener('mouseleave', (event) => this.onMouseLeave(event), false);
|
|
this.renderer.domElement.addEventListener('mouseover', (event) => this.onMouseOver(event), false);
|
|
|
|
// Keyboard events
|
|
this.keyboard.domElement.addEventListener('keydown', (event) => {
|
|
// Only once
|
|
if(event.repeat) {
|
|
return;
|
|
}
|
|
|
|
if(this.keyboard.eventMatches(event, 'escape')) {
|
|
console.log('Escape pressed');
|
|
}
|
|
});
|
|
}
|
|
|
|
onMouseOver(event) {
|
|
event.preventDefault();
|
|
|
|
Config.isMouseOver = true;
|
|
}
|
|
|
|
onMouseLeave(event) {
|
|
event.preventDefault();
|
|
|
|
Config.isMouseOver = false;
|
|
}
|
|
|
|
onMouseMove(event) {
|
|
event.preventDefault();
|
|
|
|
clearTimeout(this.timeout);
|
|
|
|
this.timeout = setTimeout(function() {
|
|
Config.isMouseMoving = false;
|
|
}, 200);
|
|
|
|
Config.isMouseMoving = true;
|
|
}
|
|
}
|