UNPKG

@react-vertex/orbit-camera

Version:
50 lines 2.44 kB
import { useMemo, useEffect } from 'react'; import { useCanvas } from '@react-vertex/core'; import { OrbitCamera } from './OrbitCamera'; import { OrbitControls } from './OrbitControls'; export { OrbitCamera } from './OrbitCamera'; export { OrbitControls } from './OrbitControls'; export function useOrbitCamera() { var fov = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 100; var aspect = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 1; var near = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 1; var far = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : 1000; var configure = arguments.length > 4 ? arguments[4] : undefined; var memoized = useMemo(function () { var camera = new OrbitCamera(fov, aspect, near, far); configure && configure(camera); return camera; }, []); useMemo(function () { memoized.setProjection(fov, aspect, near, far); }, [memoized, fov, aspect, near, far]); return memoized; } export function useOrbitControls(camera, configure) { var canvas = useCanvas(); var memoized = useMemo(function () { var controls = new OrbitControls(camera, canvas); configure && configure(controls); return controls; }, [camera, canvas]); useEffect(function () { canvas.addEventListener('mousedown', memoized.onMouseDown, false); canvas.addEventListener('mouseup', memoized.onMouseUp, false); canvas.addEventListener('mousemove', memoized.onMouseMove, false); canvas.addEventListener('touchstart', memoized.onTouchStart, false); canvas.addEventListener('touchend', memoized.onTouchEnd, false); canvas.addEventListener('touchmove', memoized.onTouchMove, false); canvas.addEventListener('wheel', memoized.onMouseWheel, false); return function () { canvas.removeEventListener('mousedown', memoized.onMouseDown, false); canvas.removeEventListener('mouseup', memoized.onMouseUp, false); canvas.removeEventListener('mousemove', memoized.onMouseMove, false); canvas.removeEventListener('touchstart', memoized.onTouchStart, false); canvas.removeEventListener('touchend', memoized.onTouchEnd, false); canvas.removeEventListener('touchmove', memoized.onTouchMove, false); canvas.removeEventListener('wheel', memoized.onMouseWheel, false); }; }, [canvas, memoized]); return memoized; } //# sourceMappingURL=index.js.map