mylingo3d
Version:
Lingo3D is a React/Vue 3d game development framework that ships with a complete visual editor
23 lines • 1.08 kB
JavaScript
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