import { Listenable } from '../../util'; export class InputHandler extends Listenable<[string, boolean]> { private readonly keys: Set = new Set(); constructor(relevantKeys: Set) { 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); } }