UNPKG

mylingo3d

Version:

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

77 lines 3.69 kB
import { useEffect } from "preact/hooks"; import { isPositionedItem } from "../../api/core/PositionedItem"; import openFolder from "../../api/files/openFolder"; import saveJSON from "../../api/files/saveJSON"; import deserialize from "../../api/serializer/deserialize"; import serialize from "../../api/serializer/serialize"; import settings from "../../api/settings"; import applyCentripetalQuaternion from "../../display/utils/applyCentripetalQuaternion"; import { emitEditorCenterView } from "../../events/onEditorCenterView"; import { onKeyClear } from "../../events/onKeyClear"; import { emitSelectionTarget } from "../../events/onSelectionTarget"; import { getCentripetal } from "../../states/useCentripetal"; import { setMultipleSelection, getMultipleSelection } from "../../states/useMultipleSelection"; import { getMultipleSelectionTargets } from "../../states/useMultipleSelectionTargets"; import { getSelectionTarget } from "../../states/useSelectionTarget"; import { setTransformControlsSpace } from "../../states/useTransformControlsSpace"; import deleteSelected from "./deleteSelected"; export default () => { useEffect(() => { const handleKeyDown = async (e) => { if (e.key === "Shift" || e.key === "Meta" || e.key === "Control") setMultipleSelection(true); if (e.key === "Backspace" || e.key === "Delete") { e.preventDefault(); !getMultipleSelection() && deleteSelected(); return; } const keyLowerCase = e.key.toLocaleLowerCase(); if (keyLowerCase === "g") { settings.gridHelper = !settings.gridHelper; return; } const target = getSelectionTarget(); if (e.metaKey || e.ctrlKey) { e.preventDefault(); if (keyLowerCase === "s") saveJSON(); else if (keyLowerCase === "o") openFolder(); else if (target) { if (keyLowerCase === "c") { const targets = getMultipleSelectionTargets(); if (targets.length) { //todo: copy multiple } else { const [item] = deserialize(await serialize(target)); if (target.parent && item) { target.parent.attach(item); emitSelectionTarget(item); } } } else if (e.key === "ArrowUp" && getCentripetal()) { applyCentripetalQuaternion(target); setTransformControlsSpace("local"); } } } else if (keyLowerCase === "c") isPositionedItem(target) && emitEditorCenterView(target); }; const handleKeyUp = (e) => { if (e.key === "Shift" || e.key === "Meta" || e.key === "Control") setMultipleSelection(false); }; document.addEventListener("keydown", handleKeyDown); document.addEventListener("keyup", handleKeyUp); const handle = onKeyClear(() => setMultipleSelection(false)); return () => { document.removeEventListener("keydown", handleKeyDown); document.removeEventListener("keyup", handleKeyUp); handle.cancel(); }; }, []); }; //# sourceMappingURL=useHotkeys.js.map