UNPKG

mylingo3d

Version:

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

75 lines (66 loc) 2.38 kB
import { createNestedEffect } from "@lincode/reactivity" import StaticObjectManager from ".." 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<StaticObjectManager>() let moveSetOld = new Set<StaticObjectManager>() 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]) }