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 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 | function KeyboardInputManager() { this.events = {}; this.listen(); } KeyboardInputManager.prototype.on = function (event, callback) { if (!this.events[event]) { this.events[event] = []; } this.events[event].push(callback); }; KeyboardInputManager.prototype.emit = function (event, data) { var callbacks = this.events[event]; if (callbacks) { callbacks.forEach(function (callback) { callback(data); }); } }; KeyboardInputManager.prototype.listen = function () { var self = this; var map = { 38: 0, // Up 39: 1, // Right 40: 2, // Down 37: 3, // Left 75: 0, // vim keybindings 76: 1, 74: 2, 72: 3 }; document.addEventListener("keydown", function (event) { var modifiers = event.altKey || event.ctrlKey || event.metaKey || event.shiftKey; var mapped = map[event.which]; if (!modifiers) { if (mapped !== undefined) { event.preventDefault(); self.emit("move", mapped); } if (event.which === 32) self.restart.bind(self)(event); } }); var retry = document.getElementsByClassName("retry-button")[0]; retry.addEventListener("click", this.restart.bind(this)); // Listen to swipe events var gestures = [Hammer.DIRECTION_UP, Hammer.DIRECTION_RIGHT, Hammer.DIRECTION_DOWN, Hammer.DIRECTION_LEFT]; var gameContainer = document.getElementsByClassName("game-container")[0]; var handler = Hammer(gameContainer, { drag_block_horizontal: true, drag_block_vertical: true }); handler.on("swipe", function (event) { event.gesture.preventDefault(); mapped = gestures.indexOf(event.gesture.direction); if (mapped !== -1) self.emit("move", mapped); }); }; KeyboardInputManager.prototype.restart = function (event) { event.preventDefault(); this.emit("restart"); }; |