summaryrefslogtreecommitdiff
path: root/centipede/js/game/input.js
blob: 6ceff136f70864c4d549e29493041d218209cc9d (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
game.input = (() => {
  "use strict";
  const Keyboard = () => {
    const keys = {};
    const handlers = {};
    const keyPress = (event) => {
      keys[event.key] = event.timeStamp;
    };
    const keyRelease = (event) => {
      delete keys[event.key];
    };
    const registerCommand = (key, handler) => {
      handlers[key] = handler;
    };
    const unregisterCommand = (key) => {
      delete handlers[key];
    }
    const update = (elapsedTime) => {
      for (let key in keys) {
        if (keys.hasOwnProperty(key)) {
          if (handlers[key]) {
            handlers[key](elapsedTime);
          }
        }
      }
    };
    window.addEventListener("keydown", keyPress);
    window.addEventListener("keyup", keyRelease);
    return {keys, handlers, registerCommand, unregisterCommand, update};
  }
  return { Keyboard };
})();