ThreeJS-Webpack-ES6-Boilerp.../src/js/app/managers/interaction.js

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;
}
}