UNPKG

1.52 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 event.preventDefault();
24 if (keyMap.hasOwnProperty(event.keyCode)) {
25 if (self.keys[keyMap[event.keyCode]] === 0) {
26 self.keys[keyMap[event.keyCode]] = 2;
27 }
28 return false;
29 }
30 });
31 window.addEventListener("keyup", function(event) {
32 event.preventDefault();
33 if (keyMap.hasOwnProperty(event.keyCode)) {
34 self.keys[keyMap[event.keyCode]] = 0;
35 return false;
36 }
37 });
38}
39/**
40 * Test if a key is currently pressed.
41 * @param {string} name The name of the key to test
42 * @returns {boolean}
43 */
44Keyboard.prototype.isPressed = function(name) {
45 return this.keys[name] >= 1;
46};
47/**
48 * Test if a key is currently pressed, also making it look like the key was unpressed.
49 * This makes is so multiple successive calls will not return true unless the key was repressed.
50 * @param {string} name The name of the key to test
51 * @returns {boolean}
52 */
53Keyboard.prototype.consumePressed = function(name) {
54 var p = this.keys[name] === 2;
55 if (p) {
56 this.keys[name] = 1;
57 }
58 return p;
59};
60
61module.exports = Keyboard;