UNPKG

1.47 kBJavaScriptView Raw
1"use strict";
2
3/**
4 * Keyboard input handling. An instance of Keyboard is available as {@link Splat.Game#keyboard}.
5 * @constructor
6 * @param {module:KeyMap} keymap A map of keycodes to descriptive key names.
7 */
8function Keyboard(keyMap) {
9 /**
10 * The current key states.
11 * @member {object}
12 * @private
13 */
14 this.keys = {};
15
16 var self = this;
17 for (var kc in keyMap) {
18 if (keyMap.hasOwnProperty(kc)) {
19 this.keys[keyMap[kc]] = 0;
20 }
21 }
22 window.addEventListener("keydown", function(event) {
23 if (keyMap.hasOwnProperty(event.keyCode)) {
24 if (self.keys[keyMap[event.keyCode]] === 0) {
25 self.keys[keyMap[event.keyCode]] = 2;
26 }
27 return false;
28 }
29 });
30 window.addEventListener("keyup", function(event) {
31 if (keyMap.hasOwnProperty(event.keyCode)) {
32 self.keys[keyMap[event.keyCode]] = 0;
33 return false;
34 }
35 });
36}
37/**
38 * Test if a key is currently pressed.
39 * @param {string} name The name of the key to test
40 * @returns {boolean}
41 */
42Keyboard.prototype.isPressed = function(name) {
43 return this.keys[name] >= 1;
44};
45/**
46 * Test if a key is currently pressed, also making it look like the key was unpressed.
47 * This makes is so multiple successive calls will not return true unless the key was repressed.
48 * @param {string} name The name of the key to test
49 * @returns {boolean}
50 */
51Keyboard.prototype.consumePressed = function(name) {
52 var p = this.keys[name] === 2;
53 if (p) {
54 this.keys[name] = 1;
55 }
56 return p;
57};
58
59module.exports = Keyboard;