Source: input/Key.js

/**
 * Class that stores and automatically updates which keys are currently pressed
 *   down.
 *
 * @example
 * // Example usage
 * var keyInput = new KeyInput();
 * if (keyInput.isDown(keyInput.LEFT)) {
 *   --ball.position.x;
 * }
 *
 * @module
 */
define(function() {
  'use strict';

  /**
   * @constructor
   * @this {module:input/Key}
   */
  var exports = function() {
    this.__pressed = {};
    window.addEventListener('keydown', function(event) {
      this.__pressDown(event.keyCode);
    }.bind(this));
    window.addEventListener('keyup', function(event) {
      this.__release(event.keyCode);
    }.bind(this));
  };

  /** Left key code. */
  exports.prototype.LEFT = 37;

  /** Up key code. */
  exports.prototype.UP = 38;

  /** Right key code. */
  exports.prototype.RIGHT = 39;

  /** Down key code. */
  exports.prototype.DOWN = 40;

  /**
   * Check whether a key is pressed down or not. This is preferably called in
   *   the game's main loop.
   *
   * @this {module:input/Key}
   * @param {number} keyCode
   * @returns {boolean}
   */
  exports.prototype.isDown = function(keyCode) {
    return this.__pressed[keyCode];
  };

  /**
   * Press down a key.
   *
   * @private
   * @this {module:input/Key}
   * @param {number} keyCode
   */
  exports.prototype.__pressDown = function(keyCode) {
    this.__pressed[keyCode] = true;
  };

  /**
   * Relase a key.
   *
   * @private
   * @this {module:input/Key}
   * @param {number} keyCode
   */
  exports.prototype.__release = function(keyCode) {
    delete this.__pressed[keyCode];
  };

  return exports;
});