@vladkrutenyuk/three-kvy-core
Version:
Everything you need to create any-complexity 3D apps with Three.js. Empower Three.js with a modular, lifecycle-managed context that seamlessly propagates through objects via reusable features providing structured logic.
23 lines (19 loc) • 768 B
JavaScript
import * as KVY from "@vladkrutenyuk/three-kvy-core";
export class InputKeyModule extends KVY.CoreContextModule {
keys = new Set();
isKeyDown = (key) => this.keys.has(key);
useCtx(ctx) {
const onKeyDown = (e) => this.keys.add(e.code);
const onKeyUp = (e) => this.keys.delete(e.code);
const onBlur = () => this.keys.clear();
const dom = ctx.three.renderer.domElement;
dom.addEventListener("keydown", onKeyDown);
dom.addEventListener("keyup", onKeyUp);
dom.addEventListener("blur", onBlur);
return () => {
dom.removeEventListener("keydown", onKeyDown);
dom.removeEventListener("keyup", onKeyUp);
dom.removeEventListener("blur", onBlur);
}
}
}