UNPKG

mylingo3d

Version:

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

23 lines 1.08 kB
import { Raycaster } from "three"; import { mouseEvents } from "../../../../api/mouse"; import { scaleUp } from "../../../../engine/constants"; import { LingoMouseEvent } from "../../../../interface/IMouse"; import { getCameraRendered } from "../../../../states/useCameraRendered"; import { vec2Point } from "../../../utils/vec2Point"; const raycaster = new Raycaster(); raycaster.firstHitOnly = true; export const raycast = (x, y, candidates) => { raycaster.setFromCamera({ x, y }, getCameraRendered()); return raycaster.intersectObjects([...candidates])[0]; }; export default (name, candidates, then) => mouseEvents.on(name, (e) => { if (!candidates.size) return; const result = raycast(e.xNorm, e.yNorm, candidates); if (!result) return; const point = vec2Point(result.point); const distance = result.distance * scaleUp; then(result.object.userData.manager, new LingoMouseEvent(e.clientX, e.clientY, e.xNorm, e.yNorm, point, distance, result.object.userData.manager)); }); //# sourceMappingURL=pickable.js.map