mylingo3d
Version:
Lingo3D is a React/Vue 3d game development framework that ships with a complete visual editor
54 lines • 2.36 kB
JavaScript
import { createNestedEffect } from "@lincode/reactivity";
import { mouseEvents } from "../../../../api/mouse";
import { getEditing } from "../../../../states/useEditing";
import { resetMultipleSelectionTargets } from "../../../../states/useMultipleSelectionTargets";
import { setSelectionTarget } from "../../../../states/useSelectionTarget";
import pickable from "./pickable";
import { clickSet, mouseDownSet, mouseUpSet, mouseOverSet, mouseOutSet, mouseMoveSet } from "./sets";
export default () => {
createNestedEffect(() => {
if (getEditing())
return;
resetMultipleSelectionTargets();
setSelectionTarget(undefined);
const handle0 = pickable("click", clickSet, (obj, e) => obj.onClick?.(e));
const handle1 = pickable("down", mouseDownSet, (obj, e) => obj.onMouseDown?.(e));
const handle2 = pickable("up", mouseUpSet, (obj, e) => obj.onMouseUp?.(e));
let moveSet = new Set();
let moveSetOld = new Set();
const handle3 = pickable("move", mouseOverSet, (obj, e) => {
moveSet.add(obj);
obj.outerObject3d.userData.eMove = e;
});
const handle4 = pickable("move", mouseOutSet, (obj, e) => {
moveSet.add(obj);
obj.outerObject3d.userData.eMove = e;
});
const handle5 = pickable("move", mouseMoveSet, (obj, e) => {
moveSet.add(obj);
obj.outerObject3d.userData.eMove = e;
});
const handle6 = mouseEvents.on("move", () => {
for (const obj of moveSet) {
if (!moveSetOld.has(obj))
obj.onMouseOver?.(obj.outerObject3d.userData.eMove);
obj.onMouseMove?.(obj.outerObject3d.userData.eMove);
}
for (const obj of moveSetOld)
if (!moveSet.has(obj))
obj.onMouseOut?.(obj.outerObject3d.userData.eMove);
moveSetOld = moveSet;
moveSet = new Set();
});
return () => {
handle0.cancel();
handle1.cancel();
handle2.cancel();
handle3.cancel();
handle4.cancel();
handle5.cancel();
handle6.cancel();
};
}, [getEditing]);
};
//# sourceMappingURL=useRaycastPlay.js.map