UNPKG

lingo3d

Version:

Lingo3D is a React/Vue 3d game development framework that ships with a complete visual editor

47 lines 1.66 kB
import { createEffect } from "@lincode/reactivity"; import { onKeyClear } from "../events/onKeyClear"; import { emitKeyDown } from "../events/onKeyDown"; import { emitKeyPress } from "../events/onKeyPress"; import { emitKeyUp } from "../events/onKeyUp"; import { getWorldPlayComputed } from "../states/useWorldPlayComputed"; import { keyPressSet } from "../collections/keyPressSet"; import { keyPressEmitSystem } from "../systems/keyPressEmitSystem"; const processKey = (str) => { str = str.length === 1 ? str.toLocaleLowerCase() : str; if (str === " ") str = "Space"; return str; }; createEffect(() => { if (!getWorldPlayComputed()) return; keyPressEmitSystem.add(keyPressSet); const handle = onKeyClear(() => { if (!keyPressSet.size) return; const pressed = [...keyPressSet]; keyPressSet.clear(); for (const key of pressed) emitKeyUp(key); }); const handleKeyDown = (e) => { const key = processKey(e.key); keyPressSet.add(key); emitKeyDown(key); }; const handleKeyUp = (e) => { const key = processKey(e.key); keyPressSet.delete(key); emitKeyUp(key); !keyPressSet.size && emitKeyPress(); }; document.addEventListener("keydown", handleKeyDown); document.addEventListener("keyup", handleKeyUp); return () => { keyPressEmitSystem.delete(keyPressSet); handle.cancel(); document.removeEventListener("keydown", handleKeyDown); document.removeEventListener("keyup", handleKeyUp); }; }, [getWorldPlayComputed]); //# sourceMappingURL=keyboard.js.map