lingo3d
Version:
Lingo3D is a React/Vue 3d game development framework that ships with a complete visual editor
58 lines • 2.52 kB
JavaScript
import { createEffect } from "@lincode/reactivity";
import { getWorldPlayComputed } from "../../states/useWorldPlayComputed";
import { clearMultipleSelectionTargets } from "../../states/useMultipleSelectionTargets";
import { setSelectionTarget } from "../../states/useSelectionTarget";
import attachRaycastEvent from "./attachRaycastEvent";
import { clickSet, mouseDownSet, mouseUpSet, mouseOverSet, mouseOutSet, mouseMoveSet } from "../../collections/mouseSets";
import { onMouseClick } from "../../events/onMouseClick";
import { onMouseDown } from "../../events/onMouseDown";
import { onMouseUp } from "../../events/onMouseUp";
import { onMouseMove } from "../../events/onMouseMove";
import { selectionTargetPtr } from "../../pointers/selectionTargetPtr";
createEffect(() => {
if (!getWorldPlayComputed())
return;
const [selectionTargetBackup] = selectionTargetPtr;
clearMultipleSelectionTargets();
setSelectionTarget(undefined);
const handle0 = attachRaycastEvent(onMouseClick, clickSet, (obj, e) => obj.onClick?.(e));
const handle1 = attachRaycastEvent(onMouseDown, mouseDownSet, (obj, e) => obj.onMouseDown?.(e));
const handle2 = attachRaycastEvent(onMouseUp, mouseUpSet, (obj, e) => obj.onMouseUp?.(e));
let moveSet = new Set();
let moveSetOld = new Set();
const handle3 = attachRaycastEvent(onMouseMove, mouseOverSet, (obj, e) => {
moveSet.add(obj);
obj.userData.eMove = e;
});
const handle4 = attachRaycastEvent(onMouseMove, mouseOutSet, (obj, e) => {
moveSet.add(obj);
obj.userData.eMove = e;
});
const handle5 = attachRaycastEvent(onMouseMove, mouseMoveSet, (obj, e) => {
moveSet.add(obj);
obj.userData.eMove = e;
});
const handle6 = onMouseMove(() => {
for (const obj of moveSet) {
if (!moveSetOld.has(obj))
obj.onMouseOver?.(obj.userData.eMove);
obj.onMouseMove?.(obj.userData.eMove);
}
for (const obj of moveSetOld)
if (!moveSet.has(obj))
obj.onMouseOut?.(obj.userData.eMove);
moveSetOld = moveSet;
moveSet = new Set();
});
return () => {
handle0.cancel();
handle1.cancel();
handle2.cancel();
handle3.cancel();
handle4.cancel();
handle5.cancel();
handle6.cancel();
!selectionTargetPtr[0] && setSelectionTarget(selectionTargetBackup);
};
}, [getWorldPlayComputed]);
//# sourceMappingURL=raycastPlay.js.map