blob: 1b399ca68b8138dff7287311c26db19edd8a3333 (
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
33
34
35
36
37
38
39
40
41
42
43
44
45
46
|
game.system.KeyboardInput = () => {
"use strict";
const keys = {};
const keyPress = (event) => {
if (!event.repeat) {
keys[event.key] = true;
}
};
const removeKey = (event) => {
delete keys[event.key];
};
const update = (elapsedTime, entities, changedIds) => {
for (let id in entities) {
const entity = entities[id];
if (entity.hasComponent('controllable') && entity.hasComponent('alive')) {
const controls = entity.components.controllable.controls;
if (!changedIds.has(entity.id)) {
if (controls.includes('left') && keys[game.controls.left]) {
entity.addComponent(game.components.Momentum({ dx: -1, dy: 0 }));
} else if (controls.includes('right') && keys[game.controls.right]) {
entity.addComponent(game.components.Momentum({ dx: 1, dy: 0 }));
} else if (controls.includes('up') && keys[game.controls.up]) {
entity.addComponent(game.components.Momentum({ dx: 0, dy: -1 }));
} else if (controls.includes('down') && keys[game.controls.down]) {
entity.addComponent(game.components.Momentum({ dx: 0, dy: 1 }));
}
}
}
}
if (keys[game.controls.undo]) {
game.systems.undo.undo(entities);
}
if (keys[game.controls.reset]) {
game.loadLevelIndex(game.level);
}
if (keys["Escape"]) {
game.systems.menu.bringUpMenu();
}
Object.keys(keys).map((key) => delete keys[key]);
return new Set();
};
window.addEventListener("keydown", keyPress);
window.addEventListener("keyup", removeKey);
return { keys, update };
}
|