{"mappings":"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","sources":["src/js/keyboard_input_manager.js"],"sourcesContent":["function KeyboardInputManager() {\n this.events = {};\n\n if (window.navigator.msPointerEnabled) {\n //Internet Explorer 10 style\n this.eventTouchstart = \"MSPointerDown\";\n this.eventTouchmove = \"MSPointerMove\";\n this.eventTouchend = \"MSPointerUp\";\n } else {\n this.eventTouchstart = \"touchstart\";\n this.eventTouchmove = \"touchmove\";\n this.eventTouchend = \"touchend\";\n }\n\n this.listen();\n}\n\nKeyboardInputManager.prototype.on = function (event, callback) {\n if (!this.events[event]) {\n this.events[event] = [];\n }\n this.events[event].push(callback);\n};\n\nKeyboardInputManager.prototype.emit = function (event, data) {\n var callbacks = this.events[event];\n if (callbacks) {\n callbacks.forEach(function (callback) {\n callback(data);\n });\n }\n};\n\nKeyboardInputManager.prototype.listen = function () {\n var self = this;\n\n var map = {\n 38: 0, // Up\n 39: 1, // Right\n 40: 2, // Down\n 37: 3, // Left\n 75: 0, // Vim up\n 76: 1, // Vim right\n 74: 2, // Vim down\n 72: 3, // Vim left\n 87: 0, // W\n 68: 1, // D\n 83: 2, // S\n 65: 3 // A\n };\n\n // Respond to direction keys\n document.addEventListener(\"keydown\", function (event) {\n var modifiers = event.altKey || event.ctrlKey || event.metaKey ||\n event.shiftKey;\n var mapped = map[event.which];\n\n if (!modifiers) {\n if (mapped !== undefined) {\n event.preventDefault();\n self.emit(\"move\", mapped);\n }\n }\n\n // R key restarts the game\n if (!modifiers && event.which === 82) {\n self.restart.call(self, event);\n }\n });\n\n // Respond to button presses\n this.bindButtonPress(\".retry-button\", this.restart);\n this.bindButtonPress(\".restart-button\", this.restart);\n this.bindButtonPress(\".keep-playing-button\", this.keepPlaying);\n\n // Respond to swipe events\n var touchStartClientX, touchStartClientY;\n var gameContainer = document.getElementsByClassName(\"game-container\")[0];\n\n gameContainer.addEventListener(this.eventTouchstart, function (event) {\n if ((!window.navigator.msPointerEnabled && event.touches.length > 1) ||\n event.targetTouches.length > 1) {\n return; // Ignore if touching with more than 1 finger\n }\n\n if (window.navigator.msPointerEnabled) {\n touchStartClientX = event.pageX;\n touchStartClientY = event.pageY;\n } else {\n touchStartClientX = event.touches[0].clientX;\n touchStartClientY = event.touches[0].clientY;\n }\n\n event.preventDefault();\n });\n\n gameContainer.addEventListener(this.eventTouchmove, function (event) {\n event.preventDefault();\n });\n\n gameContainer.addEventListener(this.eventTouchend, function (event) {\n if ((!window.navigator.msPointerEnabled && event.touches.length > 0) ||\n event.targetTouches.length > 0) {\n return; // Ignore if still touching with one or more fingers\n }\n\n var touchEndClientX, touchEndClientY;\n\n if (window.navigator.msPointerEnabled) {\n touchEndClientX = event.pageX;\n touchEndClientY = event.pageY;\n } else {\n touchEndClientX = event.changedTouches[0].clientX;\n touchEndClientY = event.changedTouches[0].clientY;\n }\n\n var dx = touchEndClientX - touchStartClientX;\n var absDx = Math.abs(dx);\n\n var dy = touchEndClientY - touchStartClientY;\n var absDy = Math.abs(dy);\n\n if (Math.max(absDx, absDy) > 10) {\n // (right : left) : (down : up)\n self.emit(\"move\", absDx > absDy ? (dx > 0 ? 1 : 3) : (dy > 0 ? 2 : 0));\n }\n });\n};\n\nKeyboardInputManager.prototype.restart = function (event) {\n event.preventDefault();\n this.emit(\"restart\");\n};\n\nKeyboardInputManager.prototype.keepPlaying = function (event) {\n event.preventDefault();\n this.emit(\"keepPlaying\");\n};\n\nKeyboardInputManager.prototype.bindButtonPress = function (selector, fn) {\n var button = document.querySelector(selector);\n button.addEventListener(\"click\", fn.bind(this));\n button.addEventListener(this.eventTouchend, fn.bind(this));\n};\n"],"names":["KeyboardInputManager","this","events","window","navigator","msPointerEnabled","eventTouchstart","eventTouchmove","eventTouchend","listen","prototype","on","event","callback","push","emit","data","callbacks","forEach","touchStartClientX","touchStartClientY","self","map","document","addEventListener","modifiers","altKey","ctrlKey","metaKey","shiftKey","mapped","which","undefined","preventDefault","restart","call","bindButtonPress","keepPlaying","gameContainer","getElementsByClassName","touches","length","targetTouches","pageX","pageY","clientX","clientY","touchEndClientX","touchEndClientY","changedTouches","dx","absDx","Math","abs","dy","absDy","max","selector","fn","button","querySelector","bind"],"version":3,"file":"index.22df8a05.js.map"}