@react-three/drei
Version:
useful add-ons for react-three-fiber
39 lines (36 loc) • 1.19 kB
JavaScript
import _extends from '@babel/runtime/helpers/esm/extends';
import * as React from 'react';
import { useThree, useFrame } from '@react-three/fiber';
import { FirstPersonControls as FirstPersonControls$1 } from 'three-stdlib';
const FirstPersonControls = /* @__PURE__ */React.forwardRef(({
domElement,
makeDefault,
...props
}, ref) => {
const camera = useThree(state => state.camera);
const gl = useThree(state => state.gl);
const events = useThree(state => state.events);
const get = useThree(state => state.get);
const set = useThree(state => state.set);
const explDomElement = domElement || events.connected || gl.domElement;
const [controls] = React.useState(() => new FirstPersonControls$1(camera, explDomElement));
React.useEffect(() => {
if (makeDefault) {
const old = get().controls;
set({
controls
});
return () => set({
controls: old
});
}
}, [makeDefault, controls]);
useFrame((_, delta) => {
controls.update(delta);
}, -1);
return controls ? /*#__PURE__*/React.createElement("primitive", _extends({
ref: ref,
object: controls
}, props)) : null;
});
export { FirstPersonControls };