Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
mamayaya1
GitHub Repository: mamayaya1/game
Path: blob/main/projects/9007199254740992/js/keyboard_input_manager.js
4626 views
1
function KeyboardInputManager() {
2
this.events = {};
3
4
this.listen();
5
}
6
7
KeyboardInputManager.prototype.on = function (event, callback) {
8
if (!this.events[event]) {
9
this.events[event] = [];
10
}
11
this.events[event].push(callback);
12
};
13
14
KeyboardInputManager.prototype.emit = function (event, data) {
15
var callbacks = this.events[event];
16
if (callbacks) {
17
callbacks.forEach(function (callback) {
18
callback(data);
19
});
20
}
21
};
22
23
KeyboardInputManager.prototype.listen = function () {
24
var self = this;
25
26
var map = {
27
38: 0, // Up
28
39: 1, // Right
29
40: 2, // Down
30
37: 3, // Left
31
75: 0, // vim keybindings
32
76: 1,
33
74: 2,
34
72: 3,
35
87: 0, // W
36
68: 1, // D
37
83: 2, // S
38
65: 3 // A
39
};
40
41
document.addEventListener("keydown", function (event) {
42
var modifiers = event.altKey || event.ctrlKey || event.metaKey ||
43
event.shiftKey;
44
var mapped = map[event.which];
45
46
if (!modifiers) {
47
if (mapped !== undefined) {
48
event.preventDefault();
49
self.emit("move", mapped);
50
}
51
52
if (event.which === 32) self.restart.bind(self)(event);
53
}
54
});
55
56
var retry = document.getElementsByClassName("retry-button")[0];
57
retry.addEventListener("click", this.restart.bind(this));
58
retry.addEventListener("touchend", this.restart.bind(this));
59
60
// Listen to swipe events
61
var touchStartClientX, touchStartClientY;
62
var gameContainer = document.getElementsByClassName("game-container")[0];
63
64
gameContainer.addEventListener("touchstart", function (event) {
65
if (event.touches.length > 1) return;
66
67
touchStartClientX = event.touches[0].clientX;
68
touchStartClientY = event.touches[0].clientY;
69
event.preventDefault();
70
});
71
72
gameContainer.addEventListener("touchmove", function (event) {
73
event.preventDefault();
74
});
75
76
gameContainer.addEventListener("touchend", function (event) {
77
if (event.touches.length > 0) return;
78
79
var dx = event.changedTouches[0].clientX - touchStartClientX;
80
var absDx = Math.abs(dx);
81
82
var dy = event.changedTouches[0].clientY - touchStartClientY;
83
var absDy = Math.abs(dy);
84
85
if (Math.max(absDx, absDy) > 10) {
86
// (right : left) : (down : up)
87
self.emit("move", absDx > absDy ? (dx > 0 ? 1 : 3) : (dy > 0 ? 2 : 0));
88
}
89
});
90
};
91
92
KeyboardInputManager.prototype.restart = function (event) {
93
event.preventDefault();
94
this.emit("restart");
95
};
96
97