53 lines
1.4 KiB
JavaScript
53 lines
1.4 KiB
JavaScript
"use strict";
|
|
|
|
window.EventEmitter = require("event-emitter-es6");
|
|
window.keycode = require("keycode");
|
|
|
|
/**
|
|
* Makes handling keyboard input just that little bit easier.
|
|
*/
|
|
class Keyboard extends EventEmitter
|
|
{
|
|
constructor()
|
|
{
|
|
super();
|
|
|
|
/**
|
|
* The keyCodes of the keyboard keys that are currently pressed down.
|
|
* @type {[number]}
|
|
*/
|
|
this.DownKeys = [];
|
|
|
|
document.addEventListener("keydown", this.handleKeyDown.bind(this));
|
|
document.addEventListener("keyup", this.handleKeyUp.bind(this));
|
|
}
|
|
|
|
/**
|
|
* Handles keydown events.
|
|
* @param {KeyboardEvent} event The keyboard event to handle.
|
|
*/
|
|
handleKeyDown(event) {
|
|
if(!this.DownKeys.includes(event.keyCode))
|
|
this.DownKeys.push(event.keyCode);
|
|
|
|
console.log("DownKeys:", this.DownKeys);
|
|
console.debug("[keyboard] Emitting key down event", `keydown-${keycode(event.keyCode)}`);
|
|
this.emit(`keydown-${keycode(event.keyCode)}`, event);
|
|
}
|
|
|
|
/**
|
|
* Handles keyup events.
|
|
* @param {KeyboardEvent} event The keyboard event to handle.
|
|
*/
|
|
handleKeyUp(event) {
|
|
if(this.DownKeys.indexOf(event.keyCode) !== -1)
|
|
this.DownKeys.splice(this.DownKeys.indexOf(event.keyCode), 1);
|
|
|
|
console.log("DownKeys:", this.DownKeys);
|
|
console.debug("[keyboard] Emitting key up event", `keyup-${keycode(event.keyCode)}`);
|
|
this.emit(`keyup-${keycode(event.keyCode)}`, event);
|
|
}
|
|
}
|
|
|
|
export default Keyboard;
|