This repository has been archived on 2025-03-02. You can view files and clone it, but cannot push or open issues or pull requests.
rpgedit/src/renderer/runtime/view/input/inputhandler.ts

44 lines
849 B
TypeScript

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);
}
}