UNPKG

lingo3d

Version:

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

53 lines 1.97 kB
import { emitMouseClick } from "../events/onMouseClick"; import { onMouseDown, emitMouseDown } from "../events/onMouseDown"; import { emitMouseMove } from "../events/onMouseMove"; import { emitMouseRightClick, onMouseRightClick } from "../events/onMouseRightClick"; import { onMouseUp, emitMouseUp } from "../events/onMouseUp"; import { container } from "./renderLoop/containers"; import { rightClickPtr } from "../pointers/rightClickPtr"; import { Point } from "@lincode/math"; import pointerToWorld from "../throttle/pointerToWorld"; import { CLICK_TIME } from "../globals"; let downTime = 0; let downX = 0; let downY = 0; let rightClick = false; container.addEventListener("contextmenu", () => (rightClick = true)); onMouseDown((e) => { downTime = Date.now(); downX = e.x; downY = e.y; }); onMouseUp((e) => { const upTime = Date.now(); const deltaTime = upTime - downTime; const deltaX = Math.abs(e.x - downX); const deltaY = Math.abs(e.y - downY); downTime = upTime; downX = e.x; downY = e.y; if (deltaTime < CLICK_TIME && deltaX < 5 && deltaY < 5) rightClick ? emitMouseRightClick(e) : emitMouseClick(e); rightClick = false; }); container.addEventListener("pointermove", (ev) => emitMouseMove(pointerToWorld(ev))); let down = false; container.addEventListener("pointerdown", (ev) => { down = true; const payload = pointerToWorld(ev); emitMouseDown(payload); emitMouseMove(payload); }); const handleUp = (ev) => { down && emitMouseUp(pointerToWorld(ev)); down = false; }; container.addEventListener("pointerup", handleUp); container.addEventListener("pointercancel", handleUp); container.addEventListener("pointerleave", handleUp); export const toggleRightClick = (x, y) => { rightClickPtr[0] = new Point(x, y); setTimeout(() => rightClickPtr[0] = undefined, CLICK_TIME); }; onMouseRightClick((e) => toggleRightClick(e.clientX, e.clientY)); //# sourceMappingURL=mouse.js.map