diff options
Diffstat (limited to 'src/systems')
-rw-r--r-- | src/systems/keyboardInput.js | 30 |
1 files changed, 30 insertions, 0 deletions
diff --git a/src/systems/keyboardInput.js b/src/systems/keyboardInput.js new file mode 100644 index 0000000..ff2211c --- /dev/null +++ b/src/systems/keyboardInput.js @@ -0,0 +1,30 @@ +game.system.KeyboardInput = () => { + "use strict"; + const keys = {}; + const keyPress = (event) => { + if (!event.repeat) { + keys[event.key] = true; + } + }; + const update = (elapsedTime, entities) => { + for (let id in entities) { + const entity = entities[id]; + if (entity.hasComponent('controllable')) { + const controls = entity.components.controllable.controls; + if (controls.includes('left') && keys['ArrowLeft']) { + entity.addComponent(game.components.Momentum({ dx: -1, dy: 0 })); + } else if (controls.includes('right') && keys['ArrowRight']) { + entity.addComponent(game.components.Momentum({ dx: 1, dy: 0 })); + } else if (controls.includes('up') && keys['ArrowUp']) { + entity.addComponent(game.components.Momentum({ dx: 0, dy: -1 })); + } else if (controls.includes('down') && keys['ArrowDown']) { + entity.addComponent(game.components.Momentum({ dx: 0, dy: 1 })); + } + + Object.keys(keys).map((key) => delete keys[key]); + } + } + }; + window.addEventListener("keydown", keyPress); + return { keys, update }; +}
\ No newline at end of file |