diff options
author | Matthias Schiffer <mschiffer@universe-factory.net> | 2019-12-24 13:53:16 +0100 |
---|---|---|
committer | Matthias Schiffer <mschiffer@universe-factory.net> | 2019-12-24 13:53:16 +0100 |
commit | 3c51a1994f41b625823c4f15e92396b5498ce23c (patch) | |
tree | 7a96310ec32df82ac87039ea555300bcab510a5e /src/renderer/runtime/view/input/inputhandler.ts | |
parent | 33926af829848050c54c698ed22da9fe2b912aea (diff) | |
download | rpgedit-3c51a1994f41b625823c4f15e92396b5498ce23c.tar rpgedit-3c51a1994f41b625823c4f15e92396b5498ce23c.zip |
Move renderer into "runtime" subdirectory
Diffstat (limited to 'src/renderer/runtime/view/input/inputhandler.ts')
-rw-r--r-- | src/renderer/runtime/view/input/inputhandler.ts | 44 |
1 files changed, 44 insertions, 0 deletions
diff --git a/src/renderer/runtime/view/input/inputhandler.ts b/src/renderer/runtime/view/input/inputhandler.ts new file mode 100644 index 0000000..17abfe6 --- /dev/null +++ b/src/renderer/runtime/view/input/inputhandler.ts @@ -0,0 +1,44 @@ +import { Listenable } from '../../util'; + +export class InputHandler extends Listenable<[string, boolean]> { + private readonly keys: Set<string> = new Set(); + + constructor(relevantKeys: Set<string>) { + super(); + + window.addEventListener('keydown', (ev) => { + if (!relevantKeys.has(ev.code)) + return; + + ev.preventDefault(); + + if (ev.repeat) + return; + + this.keys.add(ev.code); + this.runListeners(ev.code, true); + }); + + window.addEventListener('keyup', (ev) => { + if (!relevantKeys.has(ev.code)) + return; + + ev.preventDefault(); + + if (!this.keys.has(ev.code)) + return; + + this.keys.delete(ev.code); + this.runListeners(ev.code, false); + }); + + window.addEventListener('blur', () => { + this.keys.clear(); + this.runListeners('', false); + }); + } + + public has(key: string): boolean { + return this.keys.has(key); + } +} |