Path: blob/main/projects/9007199254740992/js/keyboard_input_manager.js
4626 views
function KeyboardInputManager() {1this.events = {};23this.listen();4}56KeyboardInputManager.prototype.on = function (event, callback) {7if (!this.events[event]) {8this.events[event] = [];9}10this.events[event].push(callback);11};1213KeyboardInputManager.prototype.emit = function (event, data) {14var callbacks = this.events[event];15if (callbacks) {16callbacks.forEach(function (callback) {17callback(data);18});19}20};2122KeyboardInputManager.prototype.listen = function () {23var self = this;2425var map = {2638: 0, // Up2739: 1, // Right2840: 2, // Down2937: 3, // Left3075: 0, // vim keybindings3176: 1,3274: 2,3372: 3,3487: 0, // W3568: 1, // D3683: 2, // S3765: 3 // A38};3940document.addEventListener("keydown", function (event) {41var modifiers = event.altKey || event.ctrlKey || event.metaKey ||42event.shiftKey;43var mapped = map[event.which];4445if (!modifiers) {46if (mapped !== undefined) {47event.preventDefault();48self.emit("move", mapped);49}5051if (event.which === 32) self.restart.bind(self)(event);52}53});5455var retry = document.getElementsByClassName("retry-button")[0];56retry.addEventListener("click", this.restart.bind(this));57retry.addEventListener("touchend", this.restart.bind(this));5859// Listen to swipe events60var touchStartClientX, touchStartClientY;61var gameContainer = document.getElementsByClassName("game-container")[0];6263gameContainer.addEventListener("touchstart", function (event) {64if (event.touches.length > 1) return;6566touchStartClientX = event.touches[0].clientX;67touchStartClientY = event.touches[0].clientY;68event.preventDefault();69});7071gameContainer.addEventListener("touchmove", function (event) {72event.preventDefault();73});7475gameContainer.addEventListener("touchend", function (event) {76if (event.touches.length > 0) return;7778var dx = event.changedTouches[0].clientX - touchStartClientX;79var absDx = Math.abs(dx);8081var dy = event.changedTouches[0].clientY - touchStartClientY;82var absDy = Math.abs(dy);8384if (Math.max(absDx, absDy) > 10) {85// (right : left) : (down : up)86self.emit("move", absDx > absDy ? (dx > 0 ? 1 : 3) : (dy > 0 ? 2 : 0));87}88});89};9091KeyboardInputManager.prototype.restart = function (event) {92event.preventDefault();93this.emit("restart");94};959697