@react-three/drei 9.32.12 → 9.33.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/core/DeviceOrientationControls.cjs.js +1 -1
- package/core/DeviceOrientationControls.d.ts +2 -1
- package/core/DeviceOrientationControls.js +14 -0
- package/core/FirstPersonControls.cjs.js +1 -1
- package/core/FirstPersonControls.d.ts +2 -1
- package/core/FirstPersonControls.js +14 -0
- package/core/FlyControls.cjs.js +1 -1
- package/core/FlyControls.d.ts +2 -1
- package/core/FlyControls.js +14 -0
- package/core/Instances.cjs.js +1 -1
- package/core/Instances.d.ts +13 -10
- package/core/Instances.js +13 -13
- package/core/PointerLockControls.cjs.js +1 -1
- package/core/PointerLockControls.d.ts +2 -1
- package/core/PointerLockControls.js +14 -1
- package/core/TransformControls.cjs.js +1 -1
- package/core/TransformControls.d.ts +2 -1
- package/core/TransformControls.js +14 -0
- package/index.cjs.js +1 -1
- package/package.json +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("@babel/runtime/helpers/extends"),t=require("@react-three/fiber"),r=require("react"),n=require("three-stdlib");function u(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}function
|
|
1
|
+
"use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("@babel/runtime/helpers/extends"),t=require("@react-three/fiber"),r=require("react"),n=require("three-stdlib");function u(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}function o(e){if(e&&e.__esModule)return e;var t=Object.create(null);return e&&Object.keys(e).forEach((function(r){if("default"!==r){var n=Object.getOwnPropertyDescriptor(e,r);Object.defineProperty(t,r,n.get?n:{enumerable:!0,get:function(){return e[r]}})}})),t.default=e,Object.freeze(t)}var c=u(e),i=o(r);const l=i.forwardRef(((e,r)=>{const{camera:u,onChange:o,makeDefault:l,...s}=e,a=t.useThree((e=>e.camera)),f=t.useThree((e=>e.invalidate)),d=t.useThree((e=>e.get)),v=t.useThree((e=>e.set)),b=u||a,[h]=i.useState((()=>new n.DeviceOrientationControls(b)));return i.useEffect((()=>{const e=e=>{f(),o&&o(e)};return null==h||null==h.addEventListener||h.addEventListener("change",e),()=>null==h||null==h.removeEventListener?void 0:h.removeEventListener("change",e)}),[o,h,f]),t.useFrame((()=>null==h?void 0:h.update()),-1),i.useEffect((()=>{const e=h;return null==e||e.connect(),()=>null==e?void 0:e.dispose()}),[h]),i.useEffect((()=>{if(l){const e=d().controls;return v({controls:h}),()=>v({controls:e})}}),[l,h]),h?i.createElement("primitive",c.default({ref:r,object:h},s)):null}));exports.DeviceOrientationControls=l;
|
|
@@ -5,5 +5,6 @@ import { DeviceOrientationControls as DeviceOrientationControlsImp } from 'three
|
|
|
5
5
|
export declare type DeviceOrientationControlsProps = ReactThreeFiber.Object3DNode<DeviceOrientationControlsImp, typeof DeviceOrientationControlsImp> & {
|
|
6
6
|
camera?: THREE.Camera;
|
|
7
7
|
onChange?: (e?: THREE.Event) => void;
|
|
8
|
+
makeDefault?: boolean;
|
|
8
9
|
};
|
|
9
|
-
export declare const DeviceOrientationControls: React.ForwardRefExoticComponent<Pick<DeviceOrientationControlsProps, "object" | "attach" | "args" | "children" | "key" | "onUpdate" | "position" | "up" | "scale" | "rotation" | "matrix" | "quaternion" | "layers" | "dispose" | "addEventListener" | "hasEventListener" | "removeEventListener" | "dispatchEvent" | "onChange" | keyof import("@react-three/fiber/dist/declarations/src/core/events").EventHandlers | "camera" | "enabled" | "connect" | "disconnect" | "update" | "deviceOrientation" | "screenOrientation" | "alphaOffset"> & React.RefAttributes<DeviceOrientationControlsImp>>;
|
|
10
|
+
export declare const DeviceOrientationControls: React.ForwardRefExoticComponent<Pick<DeviceOrientationControlsProps, "object" | "attach" | "args" | "children" | "key" | "onUpdate" | "position" | "up" | "scale" | "rotation" | "matrix" | "quaternion" | "layers" | "dispose" | "addEventListener" | "hasEventListener" | "removeEventListener" | "dispatchEvent" | "onChange" | keyof import("@react-three/fiber/dist/declarations/src/core/events").EventHandlers | "camera" | "enabled" | "connect" | "disconnect" | "update" | "makeDefault" | "deviceOrientation" | "screenOrientation" | "alphaOffset"> & React.RefAttributes<DeviceOrientationControlsImp>>;
|
|
@@ -7,10 +7,13 @@ const DeviceOrientationControls = /*#__PURE__*/React.forwardRef((props, ref) =>
|
|
|
7
7
|
const {
|
|
8
8
|
camera,
|
|
9
9
|
onChange,
|
|
10
|
+
makeDefault,
|
|
10
11
|
...rest
|
|
11
12
|
} = props;
|
|
12
13
|
const defaultCamera = useThree(state => state.camera);
|
|
13
14
|
const invalidate = useThree(state => state.invalidate);
|
|
15
|
+
const get = useThree(state => state.get);
|
|
16
|
+
const set = useThree(state => state.set);
|
|
14
17
|
const explCamera = camera || defaultCamera;
|
|
15
18
|
const [controls] = React.useState(() => new DeviceOrientationControls$1(explCamera));
|
|
16
19
|
React.useEffect(() => {
|
|
@@ -28,6 +31,17 @@ const DeviceOrientationControls = /*#__PURE__*/React.forwardRef((props, ref) =>
|
|
|
28
31
|
current == null ? void 0 : current.connect();
|
|
29
32
|
return () => current == null ? void 0 : current.dispose();
|
|
30
33
|
}, [controls]);
|
|
34
|
+
React.useEffect(() => {
|
|
35
|
+
if (makeDefault) {
|
|
36
|
+
const old = get().controls;
|
|
37
|
+
set({
|
|
38
|
+
controls
|
|
39
|
+
});
|
|
40
|
+
return () => set({
|
|
41
|
+
controls: old
|
|
42
|
+
});
|
|
43
|
+
}
|
|
44
|
+
}, [makeDefault, controls]);
|
|
31
45
|
return controls ? /*#__PURE__*/React.createElement("primitive", _extends({
|
|
32
46
|
ref: ref,
|
|
33
47
|
object: controls
|
|
@@ -1 +1 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("@babel/runtime/helpers/extends"),r=require("react"),t=require("@react-three/fiber"),n=require("three-stdlib");function u(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}function o(e){if(e&&e.__esModule)return e;var r=Object.create(null);return e&&Object.keys(e).forEach((function(t){if("default"!==t){var n=Object.getOwnPropertyDescriptor(e,t);Object.defineProperty(r,t,n.get?n:{enumerable:!0,get:function(){return e[t]}})}})),r.default=e,Object.freeze(r)}var s=u(e),c=o(r);const
|
|
1
|
+
"use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("@babel/runtime/helpers/extends"),r=require("react"),t=require("@react-three/fiber"),n=require("three-stdlib");function u(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}function o(e){if(e&&e.__esModule)return e;var r=Object.create(null);return e&&Object.keys(e).forEach((function(t){if("default"!==t){var n=Object.getOwnPropertyDescriptor(e,t);Object.defineProperty(r,t,n.get?n:{enumerable:!0,get:function(){return e[t]}})}})),r.default=e,Object.freeze(r)}var s=u(e),c=o(r);const l=c.forwardRef((({domElement:e,makeDefault:r,...u},o)=>{const l=t.useThree((e=>e.camera)),a=t.useThree((e=>e.gl)),f=t.useThree((e=>e.events)),i=t.useThree((e=>e.get)),d=t.useThree((e=>e.set)),b=e||f.connected||a.domElement,[m]=c.useState((()=>new n.FirstPersonControls(l,b)));return c.useEffect((()=>{if(r){const e=i().controls;return d({controls:m}),()=>d({controls:e})}}),[r,m]),t.useFrame(((e,r)=>{m.update(r)}),-1),m?c.createElement("primitive",s.default({ref:o,object:m},u)):null}));exports.FirstPersonControls=l;
|
|
@@ -3,5 +3,6 @@ import { Object3DNode } from '@react-three/fiber';
|
|
|
3
3
|
import { FirstPersonControls as FirstPersonControlImpl } from 'three-stdlib';
|
|
4
4
|
export declare type FirstPersonControlsProps = Object3DNode<FirstPersonControlImpl, typeof FirstPersonControlImpl> & {
|
|
5
5
|
domElement?: HTMLElement;
|
|
6
|
+
makeDefault?: boolean;
|
|
6
7
|
};
|
|
7
|
-
export declare const FirstPersonControls: React.ForwardRefExoticComponent<Pick<FirstPersonControlsProps, "object" | "attach" | "args" | "children" | "key" | "onUpdate" | "position" | "up" | "scale" | "rotation" | "matrix" | "quaternion" | "layers" | "dispose" | "lookAt" | "addEventListener" | "hasEventListener" | "removeEventListener" | "dispatchEvent" | keyof import("@react-three/fiber/dist/declarations/src/core/events").EventHandlers | "enabled" | "connect" | "update" | "domElement" | "movementSpeed" | "autoForward" | "handleResize" | "lookSpeed" | "lookVertical" | "activeLook" | "heightSpeed" | "heightCoef" | "heightMin" | "heightMax" | "constrainVertical" | "verticalMin" | "verticalMax" | "mouseDragOn"> & React.RefAttributes<FirstPersonControlImpl>>;
|
|
8
|
+
export declare const FirstPersonControls: React.ForwardRefExoticComponent<Pick<FirstPersonControlsProps, "object" | "attach" | "args" | "children" | "key" | "onUpdate" | "position" | "up" | "scale" | "rotation" | "matrix" | "quaternion" | "layers" | "dispose" | "lookAt" | "addEventListener" | "hasEventListener" | "removeEventListener" | "dispatchEvent" | keyof import("@react-three/fiber/dist/declarations/src/core/events").EventHandlers | "enabled" | "connect" | "update" | "domElement" | "makeDefault" | "movementSpeed" | "autoForward" | "handleResize" | "lookSpeed" | "lookVertical" | "activeLook" | "heightSpeed" | "heightCoef" | "heightMin" | "heightMax" | "constrainVertical" | "verticalMin" | "verticalMax" | "mouseDragOn"> & React.RefAttributes<FirstPersonControlImpl>>;
|
|
@@ -5,13 +5,27 @@ import { FirstPersonControls as FirstPersonControls$1 } from 'three-stdlib';
|
|
|
5
5
|
|
|
6
6
|
const FirstPersonControls = /*#__PURE__*/React.forwardRef(({
|
|
7
7
|
domElement,
|
|
8
|
+
makeDefault,
|
|
8
9
|
...props
|
|
9
10
|
}, ref) => {
|
|
10
11
|
const camera = useThree(state => state.camera);
|
|
11
12
|
const gl = useThree(state => state.gl);
|
|
12
13
|
const events = useThree(state => state.events);
|
|
14
|
+
const get = useThree(state => state.get);
|
|
15
|
+
const set = useThree(state => state.set);
|
|
13
16
|
const explDomElement = domElement || events.connected || gl.domElement;
|
|
14
17
|
const [controls] = React.useState(() => new FirstPersonControls$1(camera, explDomElement));
|
|
18
|
+
React.useEffect(() => {
|
|
19
|
+
if (makeDefault) {
|
|
20
|
+
const old = get().controls;
|
|
21
|
+
set({
|
|
22
|
+
controls
|
|
23
|
+
});
|
|
24
|
+
return () => set({
|
|
25
|
+
controls: old
|
|
26
|
+
});
|
|
27
|
+
}
|
|
28
|
+
}, [makeDefault, controls]);
|
|
15
29
|
useFrame((_, delta) => {
|
|
16
30
|
controls.update(delta);
|
|
17
31
|
}, -1);
|
package/core/FlyControls.cjs.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("@babel/runtime/helpers/extends"),t=require("@react-three/fiber"),r=require("react"),n=require("three-stdlib");function u(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}function o(e){if(e&&e.__esModule)return e;var t=Object.create(null);return e&&Object.keys(e).forEach((function(r){if("default"!==r){var n=Object.getOwnPropertyDescriptor(e,r);Object.defineProperty(t,r,n.get?n:{enumerable:!0,get:function(){return e[r]}})}})),t.default=e,Object.freeze(t)}var s=u(e),c=o(r);const a=c.forwardRef((({domElement:e,...r},u)=>{const{onChange:o,...
|
|
1
|
+
"use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("@babel/runtime/helpers/extends"),t=require("@react-three/fiber"),r=require("react"),n=require("three-stdlib");function u(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}function o(e){if(e&&e.__esModule)return e;var t=Object.create(null);return e&&Object.keys(e).forEach((function(r){if("default"!==r){var n=Object.getOwnPropertyDescriptor(e,r);Object.defineProperty(t,r,n.get?n:{enumerable:!0,get:function(){return e[r]}})}})),t.default=e,Object.freeze(t)}var s=u(e),c=o(r);const a=c.forwardRef((({domElement:e,...r},u)=>{const{onChange:o,makeDefault:a,...l}=r,i=t.useThree((e=>e.invalidate)),f=t.useThree((e=>e.camera)),d=t.useThree((e=>e.gl)),v=t.useThree((e=>e.events)),m=t.useThree((e=>e.get)),b=t.useThree((e=>e.set)),h=e||v.connected||d.domElement,p=c.useMemo((()=>new n.FlyControls(f)),[f]);return c.useEffect((()=>(p.connect(h),()=>{p.dispose()})),[h,p,i]),c.useEffect((()=>{const e=e=>{i(),o&&o(e)};return null==p.addEventListener||p.addEventListener("change",e),()=>null==p.removeEventListener?void 0:p.removeEventListener("change",e)}),[o,i]),c.useEffect((()=>{if(a){const e=m().controls;return b({controls:p}),()=>b({controls:e})}}),[a,p]),t.useFrame(((e,t)=>p.update(t))),c.createElement("primitive",s.default({ref:u,object:p,args:[f,h]},l))}));exports.FlyControls=a;
|
package/core/FlyControls.d.ts
CHANGED
|
@@ -5,5 +5,6 @@ import { FlyControls as FlyControlsImpl } from 'three-stdlib';
|
|
|
5
5
|
export declare type FlyControlsProps = ReactThreeFiber.Object3DNode<FlyControlsImpl, typeof FlyControlsImpl> & {
|
|
6
6
|
onChange?: (e?: THREE.Event) => void;
|
|
7
7
|
domElement?: HTMLElement;
|
|
8
|
+
makeDefault?: boolean;
|
|
8
9
|
};
|
|
9
|
-
export declare const FlyControls: React.ForwardRefExoticComponent<Pick<FlyControlsProps, "object" | "attach" | "args" | "children" | "key" | "onUpdate" | "position" | "up" | "scale" | "rotation" | "matrix" | "quaternion" | "layers" | "dispose" | "addEventListener" | "hasEventListener" | "removeEventListener" | "dispatchEvent" | "onChange" | keyof import("@react-three/fiber/dist/declarations/src/core/events").EventHandlers | "connect" | "update" | "domElement" | "movementSpeed" | "rollSpeed" | "dragToLook" | "autoForward"> & React.RefAttributes<FlyControlsImpl>>;
|
|
10
|
+
export declare const FlyControls: React.ForwardRefExoticComponent<Pick<FlyControlsProps, "object" | "attach" | "args" | "children" | "key" | "onUpdate" | "position" | "up" | "scale" | "rotation" | "matrix" | "quaternion" | "layers" | "dispose" | "addEventListener" | "hasEventListener" | "removeEventListener" | "dispatchEvent" | "onChange" | keyof import("@react-three/fiber/dist/declarations/src/core/events").EventHandlers | "connect" | "update" | "domElement" | "makeDefault" | "movementSpeed" | "rollSpeed" | "dragToLook" | "autoForward"> & React.RefAttributes<FlyControlsImpl>>;
|
package/core/FlyControls.js
CHANGED
|
@@ -9,12 +9,15 @@ const FlyControls = /*#__PURE__*/React.forwardRef(({
|
|
|
9
9
|
}, fref) => {
|
|
10
10
|
const {
|
|
11
11
|
onChange,
|
|
12
|
+
makeDefault,
|
|
12
13
|
...rest
|
|
13
14
|
} = props;
|
|
14
15
|
const invalidate = useThree(state => state.invalidate);
|
|
15
16
|
const camera = useThree(state => state.camera);
|
|
16
17
|
const gl = useThree(state => state.gl);
|
|
17
18
|
const events = useThree(state => state.events);
|
|
19
|
+
const get = useThree(state => state.get);
|
|
20
|
+
const set = useThree(state => state.set);
|
|
18
21
|
const explDomElement = domElement || events.connected || gl.domElement;
|
|
19
22
|
const controls = React.useMemo(() => new FlyControls$1(camera), [camera]);
|
|
20
23
|
React.useEffect(() => {
|
|
@@ -30,6 +33,17 @@ const FlyControls = /*#__PURE__*/React.forwardRef(({
|
|
|
30
33
|
controls.addEventListener == null ? void 0 : controls.addEventListener('change', callback);
|
|
31
34
|
return () => controls.removeEventListener == null ? void 0 : controls.removeEventListener('change', callback);
|
|
32
35
|
}, [onChange, invalidate]);
|
|
36
|
+
React.useEffect(() => {
|
|
37
|
+
if (makeDefault) {
|
|
38
|
+
const old = get().controls;
|
|
39
|
+
set({
|
|
40
|
+
controls
|
|
41
|
+
});
|
|
42
|
+
return () => set({
|
|
43
|
+
controls: old
|
|
44
|
+
});
|
|
45
|
+
}
|
|
46
|
+
}, [makeDefault, controls]);
|
|
33
47
|
useFrame((_, delta) => controls.update(delta));
|
|
34
48
|
return /*#__PURE__*/React.createElement("primitive", _extends({
|
|
35
49
|
ref: fref,
|
package/core/Instances.cjs.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("@babel/runtime/helpers/extends"),t=require("three"),r=require("react"),n=require("@react-three/fiber"),a=require("react-merge-refs"),c=require("react-composer");function i(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}function s(e){if(e&&e.__esModule)return e;var t=Object.create(null);return e&&Object.keys(e).forEach((function(r){if("default"!==r){var n=Object.getOwnPropertyDescriptor(e,r);Object.defineProperty(t,r,n.get?n:{enumerable:!0,get:function(){return e[r]}})}})),t.default=e,Object.freeze(t)}var o=i(e),u=s(t),l=s(r),f=i(a),d=i(c);const m=new u.Matrix4,y=new u.Matrix4,p=[],h=new u.Mesh;class x extends u.Group{constructor(){super(),this.color=new u.Color("white"),this.instance={current:void 0},this.instanceKey={current:void 0}}get geometry(){var e;return null==(e=this.instance.current)?void 0:e.geometry}raycast(e,t){const r=this.instance.current;if(!r)return;if(!r.geometry||!r.material)return;h.geometry=r.geometry;const n=r.matrixWorld
|
|
1
|
+
"use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("@babel/runtime/helpers/extends"),t=require("three"),r=require("react"),n=require("@react-three/fiber"),a=require("react-merge-refs"),c=require("react-composer");function i(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}function s(e){if(e&&e.__esModule)return e;var t=Object.create(null);return e&&Object.keys(e).forEach((function(r){if("default"!==r){var n=Object.getOwnPropertyDescriptor(e,r);Object.defineProperty(t,r,n.get?n:{enumerable:!0,get:function(){return e[r]}})}})),t.default=e,Object.freeze(t)}var o=i(e),u=s(t),l=s(r),f=i(a),d=i(c);const m=new u.Matrix4,y=new u.Matrix4,p=[],h=new u.Mesh;class x extends u.Group{constructor(){super(),this.color=new u.Color("white"),this.instance={current:void 0},this.instanceKey={current:void 0}}get geometry(){var e;return null==(e=this.instance.current)?void 0:e.geometry}raycast(e,t){const r=this.instance.current;if(!r)return;if(!r.geometry||!r.material)return;h.geometry=r.geometry;const n=r.matrixWorld,a=r.userData.instances.indexOf(this.instanceKey);if(!(-1===a||a>r.count)){r.getMatrixAt(a,m),y.multiplyMatrices(n,m),h.matrixWorld=y,h.raycast(e,p);for(let e=0,r=p.length;e<r;e++){const r=p[e];r.instanceId=a,r.object=this,t.push(r)}p.length=0}}}const g=l.createContext(null),M=new u.Matrix4,b=new u.Matrix4,w=new u.Matrix4,v=new u.Vector3,E=new u.Quaternion,A=new u.Vector3,j=l.forwardRef((({context:e,children:t,...r},a)=>{l.useMemo((()=>n.extend({PositionMesh:x})),[]);const c=l.useRef(),{subscribe:i,getParent:s}=l.useContext(e||g);return l.useLayoutEffect((()=>i(c)),[]),l.createElement("positionMesh",o.default({instance:s(),instanceKey:c,ref:f.default([a,c])},r),t)})),O=l.forwardRef((({children:e,range:t,limit:r=1e3,frames:a=1/0,...c},i)=>{const[{context:s,instance:d}]=l.useState((()=>{const e=l.createContext(null);return{context:e,instance:l.forwardRef(((t,r)=>l.createElement(j,o.default({context:e},t,{ref:r}))))}})),m=l.useRef(null),[y,p]=l.useState([]),[[h,x]]=l.useState((()=>{const e=new Float32Array(16*r);for(let t=0;t<r;t++)w.identity().toArray(e,16*t);return[e,new Float32Array([...new Array(3*r)].map((()=>1)))]}));l.useEffect((()=>{m.current.instanceMatrix.needsUpdate=!0}));let O=0,P=0;n.useFrame((()=>{if(a===1/0||O<a){m.current.updateMatrix(),m.current.updateMatrixWorld(),M.copy(m.current.matrixWorld).invert(),P=Math.min(r,void 0!==t?t:r,y.length),m.current.count=P,m.current.instanceMatrix.updateRange.count=16*P,m.current.instanceColor.updateRange.count=3*P;for(let e=0;e<y.length;e++){const t=y[e].current;t.matrixWorld.decompose(v,E,A),b.compose(v,E,A).premultiply(M),b.toArray(h,16*e),m.current.instanceMatrix.needsUpdate=!0,t.color.toArray(x,3*e),m.current.instanceColor.needsUpdate=!0}O++}}));const R=l.useMemo((()=>({getParent:()=>m,subscribe:e=>(p((t=>[...t,e])),()=>p((t=>t.filter((t=>t.current!==e.current)))))})),[]);return l.createElement("instancedMesh",o.default({userData:{instances:y},matrixAutoUpdate:!1,ref:f.default([i,m]),args:[null,null,0],raycast:()=>null},c),l.createElement("instancedBufferAttribute",{attach:"instanceMatrix",count:h.length/16,array:h,itemSize:16,usage:u.DynamicDrawUsage}),l.createElement("instancedBufferAttribute",{attach:"instanceColor",count:x.length/3,array:x,itemSize:3,usage:u.DynamicDrawUsage}),"function"==typeof e?l.createElement(s.Provider,{value:R},e(d)):l.createElement(g.Provider,{value:R},e))})),P=l.forwardRef((function({meshes:e,children:t,...r},n){const a=Array.isArray(e);if(!a)for(const t of Object.keys(e))e[t].isMesh||delete e[t];return l.createElement("group",{ref:n},l.createElement(d.default,{components:(a?e:Object.values(e)).map((({geometry:e,material:t})=>l.createElement(O,o.default({key:e.uuid,geometry:e,material:t},r))))},(r=>a?t(...r):t(Object.keys(e).filter((t=>e[t].isMesh)).reduce(((e,t,n)=>({...e,[t]:r[n]})),{})))))}));exports.Instance=j,exports.Instances=O,exports.Merged=P;
|
package/core/Instances.d.ts
CHANGED
|
@@ -10,13 +10,16 @@ declare global {
|
|
|
10
10
|
}
|
|
11
11
|
declare type Api = {
|
|
12
12
|
getParent: () => React.MutableRefObject<InstancedMesh>;
|
|
13
|
-
subscribe: (ref:
|
|
13
|
+
subscribe: <T>(ref: React.MutableRefObject<T>) => void;
|
|
14
14
|
};
|
|
15
|
-
declare type InstancesProps = JSX.IntrinsicElements['instancedMesh'] & {
|
|
15
|
+
export declare type InstancesProps = JSX.IntrinsicElements['instancedMesh'] & {
|
|
16
16
|
range?: number;
|
|
17
17
|
limit?: number;
|
|
18
18
|
frames?: number;
|
|
19
19
|
};
|
|
20
|
+
export declare type InstanceProps = JSX.IntrinsicElements['positionMesh'] & {
|
|
21
|
+
context?: React.Context<Api>;
|
|
22
|
+
};
|
|
20
23
|
declare type InstancedMesh = Omit<THREE.InstancedMesh, 'instanceMatrix' | 'instanceColor'> & {
|
|
21
24
|
instanceMatrix: THREE.InstancedBufferAttribute;
|
|
22
25
|
instanceColor: THREE.InstancedBufferAttribute;
|
|
@@ -29,7 +32,7 @@ declare class PositionMesh extends THREE.Group {
|
|
|
29
32
|
get geometry(): THREE.BufferGeometry | undefined;
|
|
30
33
|
raycast(raycaster: THREE.Raycaster, intersects: THREE.Intersection[]): void;
|
|
31
34
|
}
|
|
32
|
-
declare const Instance: React.ForwardRefExoticComponent<Pick<Omit<ReactThreeFiber.ExtendedColors<ReactThreeFiber.Overwrite<Partial<PositionMesh>, ReactThreeFiber.NodeProps<PositionMesh, typeof PositionMesh>>>, ReactThreeFiber.NonFunctionKeys<{
|
|
35
|
+
export declare const Instance: React.ForwardRefExoticComponent<Pick<Omit<ReactThreeFiber.ExtendedColors<ReactThreeFiber.Overwrite<Partial<PositionMesh>, ReactThreeFiber.NodeProps<PositionMesh, typeof PositionMesh>>>, ReactThreeFiber.NonFunctionKeys<{
|
|
33
36
|
position?: ReactThreeFiber.Vector3 | undefined;
|
|
34
37
|
up?: ReactThreeFiber.Vector3 | undefined;
|
|
35
38
|
scale?: ReactThreeFiber.Vector3 | undefined;
|
|
@@ -50,10 +53,10 @@ declare const Instance: React.ForwardRefExoticComponent<Pick<Omit<ReactThreeFibe
|
|
|
50
53
|
} & import("@react-three/fiber/dist/declarations/src/core/events").EventHandlers & {
|
|
51
54
|
context?: React.Context<Api> | undefined;
|
|
52
55
|
}, "visible" | "attach" | "args" | "children" | "key" | "onUpdate" | "position" | "up" | "scale" | "rotation" | "matrix" | "quaternion" | "layers" | "dispose" | "type" | "isGroup" | "id" | "uuid" | "name" | "parent" | "modelViewMatrix" | "normalMatrix" | "matrixWorld" | "matrixAutoUpdate" | "matrixWorldNeedsUpdate" | "castShadow" | "receiveShadow" | "frustumCulled" | "renderOrder" | "animations" | "userData" | "customDepthMaterial" | "customDistanceMaterial" | "isObject3D" | "onBeforeRender" | "onAfterRender" | "applyMatrix4" | "applyQuaternion" | "setRotationFromAxisAngle" | "setRotationFromEuler" | "setRotationFromMatrix" | "setRotationFromQuaternion" | "rotateOnAxis" | "rotateOnWorldAxis" | "rotateX" | "rotateY" | "rotateZ" | "translateOnAxis" | "translateX" | "translateY" | "translateZ" | "localToWorld" | "worldToLocal" | "lookAt" | "add" | "remove" | "removeFromParent" | "clear" | "getObjectById" | "getObjectByName" | "getObjectByProperty" | "getWorldPosition" | "getWorldQuaternion" | "getWorldScale" | "getWorldDirection" | "raycast" | "traverse" | "traverseVisible" | "traverseAncestors" | "updateMatrix" | "updateMatrixWorld" | "updateWorldMatrix" | "toJSON" | "clone" | "copy" | "addEventListener" | "hasEventListener" | "removeEventListener" | "dispatchEvent" | "color" | keyof import("@react-three/fiber/dist/declarations/src/core/events").EventHandlers | "geometry" | "context" | "instance" | "instanceKey"> & React.RefAttributes<unknown>>;
|
|
53
|
-
declare const Instances: React.ForwardRefExoticComponent<Pick<InstancesProps, "visible" | "attach" | "args" | "children" | "key" | "onUpdate" | "position" | "up" | "scale" | "rotation" | "matrix" | "quaternion" | "layers" | "dispose" | "type" | "id" | "uuid" | "name" | "parent" | "modelViewMatrix" | "normalMatrix" | "matrixWorld" | "matrixAutoUpdate" | "matrixWorldNeedsUpdate" | "castShadow" | "receiveShadow" | "frustumCulled" | "renderOrder" | "animations" | "userData" | "customDepthMaterial" | "customDistanceMaterial" | "isObject3D" | "onBeforeRender" | "onAfterRender" | "applyMatrix4" | "applyQuaternion" | "setRotationFromAxisAngle" | "setRotationFromEuler" | "setRotationFromMatrix" | "setRotationFromQuaternion" | "rotateOnAxis" | "rotateOnWorldAxis" | "rotateX" | "rotateY" | "rotateZ" | "translateOnAxis" | "translateX" | "translateY" | "translateZ" | "localToWorld" | "worldToLocal" | "lookAt" | "add" | "remove" | "removeFromParent" | "clear" | "getObjectById" | "getObjectByName" | "getObjectByProperty" | "getWorldPosition" | "getWorldQuaternion" | "getWorldScale" | "getWorldDirection" | "raycast" | "traverse" | "traverseVisible" | "traverseAncestors" | "updateMatrix" | "updateMatrixWorld" | "updateWorldMatrix" | "toJSON" | "clone" | "copy" | "addEventListener" | "hasEventListener" | "removeEventListener" | "dispatchEvent" | keyof import("@react-three/fiber/dist/declarations/src/core/events").EventHandlers | "range" | "material" | "geometry" | "morphTargetInfluences" | "morphTargetDictionary" | "isMesh" | "updateMorphTargets" | "count" | "instanceColor" | "instanceMatrix" | "isInstancedMesh" | "getColorAt" | "getMatrixAt" | "setColorAt" | "setMatrixAt" | "frames" | "limit"> & React.RefAttributes<InstancedMesh>>;
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
export {
|
|
56
|
+
export declare const Instances: React.ForwardRefExoticComponent<Pick<InstancesProps, "visible" | "attach" | "args" | "children" | "key" | "onUpdate" | "position" | "up" | "scale" | "rotation" | "matrix" | "quaternion" | "layers" | "dispose" | "type" | "id" | "uuid" | "name" | "parent" | "modelViewMatrix" | "normalMatrix" | "matrixWorld" | "matrixAutoUpdate" | "matrixWorldNeedsUpdate" | "castShadow" | "receiveShadow" | "frustumCulled" | "renderOrder" | "animations" | "userData" | "customDepthMaterial" | "customDistanceMaterial" | "isObject3D" | "onBeforeRender" | "onAfterRender" | "applyMatrix4" | "applyQuaternion" | "setRotationFromAxisAngle" | "setRotationFromEuler" | "setRotationFromMatrix" | "setRotationFromQuaternion" | "rotateOnAxis" | "rotateOnWorldAxis" | "rotateX" | "rotateY" | "rotateZ" | "translateOnAxis" | "translateX" | "translateY" | "translateZ" | "localToWorld" | "worldToLocal" | "lookAt" | "add" | "remove" | "removeFromParent" | "clear" | "getObjectById" | "getObjectByName" | "getObjectByProperty" | "getWorldPosition" | "getWorldQuaternion" | "getWorldScale" | "getWorldDirection" | "raycast" | "traverse" | "traverseVisible" | "traverseAncestors" | "updateMatrix" | "updateMatrixWorld" | "updateWorldMatrix" | "toJSON" | "clone" | "copy" | "addEventListener" | "hasEventListener" | "removeEventListener" | "dispatchEvent" | keyof import("@react-three/fiber/dist/declarations/src/core/events").EventHandlers | "range" | "material" | "geometry" | "morphTargetInfluences" | "morphTargetDictionary" | "isMesh" | "updateMorphTargets" | "count" | "instanceColor" | "instanceMatrix" | "isInstancedMesh" | "getColorAt" | "getMatrixAt" | "setColorAt" | "setMatrixAt" | "frames" | "limit"> & React.RefAttributes<InstancedMesh>>;
|
|
57
|
+
export interface MergedProps extends InstancesProps {
|
|
58
|
+
meshes: THREE.Mesh[];
|
|
59
|
+
children: React.ReactNode;
|
|
60
|
+
}
|
|
61
|
+
export declare const Merged: React.ForwardRefExoticComponent<Pick<any, string | number | symbol> & React.RefAttributes<THREE.Group>>;
|
|
62
|
+
export {};
|
package/core/Instances.js
CHANGED
|
@@ -39,7 +39,7 @@ class PositionMesh extends THREE.Group {
|
|
|
39
39
|
if (!parent.geometry || !parent.material) return;
|
|
40
40
|
_mesh.geometry = parent.geometry;
|
|
41
41
|
const matrixWorld = parent.matrixWorld;
|
|
42
|
-
|
|
42
|
+
const instanceId = parent.userData.instances.indexOf(this.instanceKey); // If the instance wasn't found or exceeds the parents draw range, bail out
|
|
43
43
|
|
|
44
44
|
if (instanceId === -1 || instanceId > parent.count) return; // calculate the world matrix for each instance
|
|
45
45
|
|
|
@@ -65,7 +65,6 @@ class PositionMesh extends THREE.Group {
|
|
|
65
65
|
|
|
66
66
|
}
|
|
67
67
|
|
|
68
|
-
let i, instanceRef;
|
|
69
68
|
const globalContext = /*@__PURE__*/React.createContext(null);
|
|
70
69
|
const parentMatrix = /*@__PURE__*/new THREE.Matrix4();
|
|
71
70
|
const instanceMatrix = /*@__PURE__*/new THREE.Matrix4();
|
|
@@ -119,7 +118,7 @@ const Instances = /*#__PURE__*/React.forwardRef(({
|
|
|
119
118
|
const [[matrices, colors]] = React.useState(() => {
|
|
120
119
|
const mArray = new Float32Array(limit * 16);
|
|
121
120
|
|
|
122
|
-
for (i = 0; i < limit; i++) tempMatrix.identity().toArray(mArray, i * 16);
|
|
121
|
+
for (let i = 0; i < limit; i++) tempMatrix.identity().toArray(mArray, i * 16);
|
|
123
122
|
|
|
124
123
|
return [mArray, new Float32Array([...new Array(limit * 3)].map(() => 1))];
|
|
125
124
|
});
|
|
@@ -139,15 +138,15 @@ const Instances = /*#__PURE__*/React.forwardRef(({
|
|
|
139
138
|
parentRef.current.instanceMatrix.updateRange.count = updateRange * 16;
|
|
140
139
|
parentRef.current.instanceColor.updateRange.count = updateRange * 3;
|
|
141
140
|
|
|
142
|
-
for (i = 0; i < instances.length; i++) {
|
|
143
|
-
|
|
141
|
+
for (let i = 0; i < instances.length; i++) {
|
|
142
|
+
const instance = instances[i].current; // Multiply the inverse of the InstancedMesh world matrix or else
|
|
144
143
|
// Instances will be double-transformed if <Instances> isn't at identity
|
|
145
144
|
|
|
146
|
-
|
|
145
|
+
instance.matrixWorld.decompose(translation, rotation, scale);
|
|
147
146
|
instanceMatrix.compose(translation, rotation, scale).premultiply(parentMatrix);
|
|
148
147
|
instanceMatrix.toArray(matrices, i * 16);
|
|
149
148
|
parentRef.current.instanceMatrix.needsUpdate = true;
|
|
150
|
-
|
|
149
|
+
instance.color.toArray(colors, i * 3);
|
|
151
150
|
parentRef.current.instanceColor.needsUpdate = true;
|
|
152
151
|
}
|
|
153
152
|
|
|
@@ -187,16 +186,17 @@ const Instances = /*#__PURE__*/React.forwardRef(({
|
|
|
187
186
|
value: api
|
|
188
187
|
}, children));
|
|
189
188
|
});
|
|
190
|
-
|
|
191
|
-
function Merged({
|
|
189
|
+
const Merged = /*#__PURE__*/React.forwardRef(function Merged({
|
|
192
190
|
meshes,
|
|
193
191
|
children,
|
|
194
192
|
...props
|
|
195
|
-
}) {
|
|
193
|
+
}, ref) {
|
|
196
194
|
const isArray = Array.isArray(meshes); // Filter out meshes from collections, which may contain non-meshes
|
|
197
195
|
|
|
198
196
|
if (!isArray) for (const key of Object.keys(meshes)) if (!meshes[key].isMesh) delete meshes[key];
|
|
199
|
-
return /*#__PURE__*/React.createElement(
|
|
197
|
+
return /*#__PURE__*/React.createElement("group", {
|
|
198
|
+
ref: ref
|
|
199
|
+
}, /*#__PURE__*/React.createElement(Composer, {
|
|
200
200
|
components: (isArray ? meshes : Object.values(meshes)).map(({
|
|
201
201
|
geometry,
|
|
202
202
|
material
|
|
@@ -207,7 +207,7 @@ function Merged({
|
|
|
207
207
|
}, props)))
|
|
208
208
|
}, args => isArray ? children(...args) : children(Object.keys(meshes).filter(key => meshes[key].isMesh).reduce((acc, key, i) => ({ ...acc,
|
|
209
209
|
[key]: args[i]
|
|
210
|
-
}), {})));
|
|
211
|
-
}
|
|
210
|
+
}), {}))));
|
|
211
|
+
});
|
|
212
212
|
|
|
213
213
|
export { Instance, Instances, Merged };
|
|
@@ -1 +1 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("@babel/runtime/helpers/extends"),t=require("@react-three/fiber"),r=require("react"),n=require("three-stdlib");function o(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}function c(e){if(e&&e.__esModule)return e;var t=Object.create(null);return e&&Object.keys(e).forEach((function(r){if("default"!==r){var n=Object.getOwnPropertyDescriptor(e,r);Object.defineProperty(t,r,n.get?n:{enumerable:!0,get:function(){return e[r]}})}})),t.default=e,Object.freeze(t)}var s=o(e),i=c(r);const
|
|
1
|
+
"use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("@babel/runtime/helpers/extends"),t=require("@react-three/fiber"),r=require("react"),n=require("three-stdlib");function o(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}function c(e){if(e&&e.__esModule)return e;var t=Object.create(null);return e&&Object.keys(e).forEach((function(r){if("default"!==r){var n=Object.getOwnPropertyDescriptor(e,r);Object.defineProperty(t,r,n.get?n:{enumerable:!0,get:function(){return e[r]}})}})),t.default=e,Object.freeze(t)}var s=o(e),i=c(r);const u=i.forwardRef((({domElement:e,selector:r,onChange:o,onLock:c,onUnlock:u,enabled:a=!0,makeDefault:l,...d},f)=>{const{camera:h,...m}=d,v=t.useThree((e=>e.setEvents)),E=t.useThree((e=>e.gl)),b=t.useThree((e=>e.camera)),p=t.useThree((e=>e.invalidate)),k=t.useThree((e=>e.events)),L=t.useThree((e=>e.get)),g=t.useThree((e=>e.set)),j=h||b,y=e||k.connected||E.domElement,[O]=i.useState((()=>new n.PointerLockControls(j)));return i.useEffect((()=>{if(a){O.connect(y);const e=L().events.compute;return v({compute(e,t){const r=t.size.width/2,n=t.size.height/2;t.pointer.set(r/t.size.width*2-1,-n/t.size.height*2+1),t.raycaster.setFromCamera(t.pointer,t.camera)}}),()=>{O.disconnect(),v({compute:e})}}}),[a,O]),i.useEffect((()=>{const e=e=>{p(),o&&o(e)};O.addEventListener("change",e),c&&O.addEventListener("lock",c),u&&O.addEventListener("unlock",u);const t=()=>O.lock(),n=r?Array.from(document.querySelectorAll(r)):[document];return n.forEach((e=>e&&e.addEventListener("click",t))),()=>{O.removeEventListener("change",e),c&&O.addEventListener("lock",c),u&&O.addEventListener("unlock",u),n.forEach((e=>e?e.removeEventListener("click",t):void 0))}}),[o,c,u,r,O,p]),i.useEffect((()=>{if(l){const e=L().controls;return g({controls:O}),()=>g({controls:e})}}),[l,O]),i.createElement("primitive",s.default({ref:f,object:O},m))}));exports.PointerLockControls=u;
|
|
@@ -10,5 +10,6 @@ export declare type PointerLockControlsProps = ReactThreeFiber.Object3DNode<Poin
|
|
|
10
10
|
onChange?: (e?: THREE.Event) => void;
|
|
11
11
|
onLock?: (e?: THREE.Event) => void;
|
|
12
12
|
onUnlock?: (e?: THREE.Event) => void;
|
|
13
|
+
makeDefault?: boolean;
|
|
13
14
|
};
|
|
14
|
-
export declare const PointerLockControls: React.ForwardRefExoticComponent<Pick<PointerLockControlsProps, "attach" | "args" | "children" | "key" | "onUpdate" | "position" | "up" | "scale" | "rotation" | "matrix" | "quaternion" | "layers" | "dispose" | "addEventListener" | "hasEventListener" | "removeEventListener" | "dispatchEvent" | "onChange" | keyof import("@react-three/fiber/dist/declarations/src/core/events").EventHandlers | "camera" | "enabled" | "connect" | "disconnect" | "domElement" | "minPolarAngle" | "maxPolarAngle" | "isLocked" | "getDirection" | "moveForward" | "moveRight" | "lock" | "unlock" | "selector" | "onLock" | "onUnlock"> & React.RefAttributes<PointerLockControlsImpl>>;
|
|
15
|
+
export declare const PointerLockControls: React.ForwardRefExoticComponent<Pick<PointerLockControlsProps, "attach" | "args" | "children" | "key" | "onUpdate" | "position" | "up" | "scale" | "rotation" | "matrix" | "quaternion" | "layers" | "dispose" | "addEventListener" | "hasEventListener" | "removeEventListener" | "dispatchEvent" | "onChange" | keyof import("@react-three/fiber/dist/declarations/src/core/events").EventHandlers | "camera" | "enabled" | "connect" | "disconnect" | "domElement" | "makeDefault" | "minPolarAngle" | "maxPolarAngle" | "isLocked" | "getDirection" | "moveForward" | "moveRight" | "lock" | "unlock" | "selector" | "onLock" | "onUnlock"> & React.RefAttributes<PointerLockControlsImpl>>;
|
|
@@ -10,18 +10,20 @@ const PointerLockControls = /*#__PURE__*/React.forwardRef(({
|
|
|
10
10
|
onLock,
|
|
11
11
|
onUnlock,
|
|
12
12
|
enabled = true,
|
|
13
|
+
makeDefault,
|
|
13
14
|
...props
|
|
14
15
|
}, ref) => {
|
|
15
16
|
const {
|
|
16
17
|
camera,
|
|
17
18
|
...rest
|
|
18
19
|
} = props;
|
|
19
|
-
const get = useThree(state => state.get);
|
|
20
20
|
const setEvents = useThree(state => state.setEvents);
|
|
21
21
|
const gl = useThree(state => state.gl);
|
|
22
22
|
const defaultCamera = useThree(state => state.camera);
|
|
23
23
|
const invalidate = useThree(state => state.invalidate);
|
|
24
24
|
const events = useThree(state => state.events);
|
|
25
|
+
const get = useThree(state => state.get);
|
|
26
|
+
const set = useThree(state => state.set);
|
|
25
27
|
const explCamera = camera || defaultCamera;
|
|
26
28
|
const explDomElement = domElement || events.connected || gl.domElement;
|
|
27
29
|
const [controls] = React.useState(() => new PointerLockControls$1(explCamera));
|
|
@@ -68,6 +70,17 @@ const PointerLockControls = /*#__PURE__*/React.forwardRef(({
|
|
|
68
70
|
elements.forEach(element => element ? element.removeEventListener('click', handler) : undefined);
|
|
69
71
|
};
|
|
70
72
|
}, [onChange, onLock, onUnlock, selector, controls, invalidate]);
|
|
73
|
+
React.useEffect(() => {
|
|
74
|
+
if (makeDefault) {
|
|
75
|
+
const old = get().controls;
|
|
76
|
+
set({
|
|
77
|
+
controls
|
|
78
|
+
});
|
|
79
|
+
return () => set({
|
|
80
|
+
controls: old
|
|
81
|
+
});
|
|
82
|
+
}
|
|
83
|
+
}, [makeDefault, controls]);
|
|
71
84
|
return /*#__PURE__*/React.createElement("primitive", _extends({
|
|
72
85
|
ref: ref,
|
|
73
86
|
object: controls
|
|
@@ -1 +1 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("@babel/runtime/helpers/extends"),
|
|
1
|
+
"use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("@babel/runtime/helpers/extends"),t=require("@react-three/fiber"),n=require("lodash.omit"),r=require("lodash.pick"),o=require("react"),u=require("three"),a=require("three-stdlib");function l(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}function s(e){if(e&&e.__esModule)return e;var t=Object.create(null);return e&&Object.keys(e).forEach((function(n){if("default"!==n){var r=Object.getOwnPropertyDescriptor(e,n);Object.defineProperty(t,n,r.get?r:{enumerable:!0,get:function(){return e[n]}})}})),t.default=e,Object.freeze(t)}var c=l(e),i=l(n),d=l(r),f=s(o),v=s(u);const m=f.forwardRef((({children:e,domElement:n,onChange:r,onMouseDown:o,onMouseUp:u,onObjectChange:l,object:s,makeDefault:m,...h},E)=>{const b=["enabled","axis","mode","translationSnap","rotationSnap","scaleSnap","space","size","showX","showY","showZ"],{camera:g,...L}=h,p=d.default(L,b),j=i.default(L,b),O=t.useThree((e=>e.controls)),w=t.useThree((e=>e.gl)),T=t.useThree((e=>e.events)),q=t.useThree((e=>e.camera)),D=t.useThree((e=>e.invalidate)),y=t.useThree((e=>e.get)),C=t.useThree((e=>e.set)),M=g||q,x=n||T.connected||w.domElement,_=f.useMemo((()=>new a.TransformControls(M,x)),[M,x]),k=f.useRef();return f.useLayoutEffect((()=>(s?_.attach(s instanceof v.Object3D?s:s.current):k.current instanceof v.Object3D&&_.attach(k.current),()=>{_.detach()})),[s,e,_]),f.useEffect((()=>{if(O){const e=e=>O.enabled=!e.value;return _.addEventListener("dragging-changed",e),()=>_.removeEventListener("dragging-changed",e)}}),[_,O]),f.useEffect((()=>{const e=e=>{D(),r&&r(e)};return null==_||null==_.addEventListener||_.addEventListener("change",e),o&&(null==_||null==_.addEventListener||_.addEventListener("mouseDown",o)),u&&(null==_||null==_.addEventListener||_.addEventListener("mouseUp",u)),l&&(null==_||null==_.addEventListener||_.addEventListener("objectChange",l)),()=>{null==_||null==_.removeEventListener||_.removeEventListener("change",e),o&&(null==_||null==_.removeEventListener||_.removeEventListener("mouseDown",o)),u&&(null==_||null==_.removeEventListener||_.removeEventListener("mouseUp",u)),l&&(null==_||null==_.removeEventListener||_.removeEventListener("objectChange",l))}}),[r,o,u,l,_,D]),f.useEffect((()=>{if(m){const e=y().controls;return C({controls:_}),()=>C({controls:e})}}),[m,_]),_?f.createElement(f.Fragment,null,f.createElement("primitive",c.default({ref:E,object:_},p)),f.createElement("group",c.default({ref:k},j),e)):null}));exports.TransformControls=m;
|
|
@@ -22,5 +22,6 @@ export declare type TransformControlsProps = ReactThreeFiber.Object3DNode<Transf
|
|
|
22
22
|
onMouseDown?: (e?: THREE.Event) => void;
|
|
23
23
|
onMouseUp?: (e?: THREE.Event) => void;
|
|
24
24
|
onObjectChange?: (e?: THREE.Event) => void;
|
|
25
|
+
makeDefault?: boolean;
|
|
25
26
|
};
|
|
26
|
-
export declare const TransformControls: React.ForwardRefExoticComponent<Pick<TransformControlsProps, "object" | "visible" | "attach" | "args" | "children" | "key" | "onUpdate" | "position" | "up" | "scale" | "rotation" | "matrix" | "quaternion" | "layers" | "dispose" | "type" | "isGroup" | "id" | "uuid" | "name" | "parent" | "modelViewMatrix" | "normalMatrix" | "matrixWorld" | "matrixAutoUpdate" | "matrixWorldNeedsUpdate" | "castShadow" | "receiveShadow" | "frustumCulled" | "renderOrder" | "animations" | "userData" | "customDepthMaterial" | "customDistanceMaterial" | "isObject3D" | "onBeforeRender" | "onAfterRender" | "applyMatrix4" | "applyQuaternion" | "setRotationFromAxisAngle" | "setRotationFromEuler" | "setRotationFromMatrix" | "setRotationFromQuaternion" | "rotateOnAxis" | "rotateOnWorldAxis" | "rotateX" | "rotateY" | "rotateZ" | "translateOnAxis" | "translateX" | "translateY" | "translateZ" | "localToWorld" | "worldToLocal" | "lookAt" | "add" | "remove" | "removeFromParent" | "clear" | "getObjectById" | "getObjectByName" | "getObjectByProperty" | "getWorldPosition" | "getWorldQuaternion" | "getWorldScale" | "getWorldDirection" | "raycast" | "traverse" | "traverseVisible" | "traverseAncestors" | "updateMatrix" | "updateMatrixWorld" | "updateWorldMatrix" | "toJSON" | "clone" | "copy" | "addEventListener" | "hasEventListener" | "removeEventListener" | "dispatchEvent" | "onChange" | "onMouseDown" | "onMouseUp" | keyof import("@react-three/fiber/dist/declarations/src/core/events").EventHandlers | "camera" | "size" | "space" | "reset" | "enabled" | "connect" | "update" | "setSize" | "axis" | "domElement" | "isTransformControls" | "detach" | "getMode" | "setMode" | "setTranslationSnap" | "setRotationSnap" | "setScaleSnap" | "setSpace" | "onObjectChange" | "mode" | "translationSnap" | "rotationSnap" | "scaleSnap" | "showX" | "showY" | "showZ"> & React.RefAttributes<TransformControlsImpl<THREE.Camera>>>;
|
|
27
|
+
export declare const TransformControls: React.ForwardRefExoticComponent<Pick<TransformControlsProps, "object" | "visible" | "attach" | "args" | "children" | "key" | "onUpdate" | "position" | "up" | "scale" | "rotation" | "matrix" | "quaternion" | "layers" | "dispose" | "type" | "isGroup" | "id" | "uuid" | "name" | "parent" | "modelViewMatrix" | "normalMatrix" | "matrixWorld" | "matrixAutoUpdate" | "matrixWorldNeedsUpdate" | "castShadow" | "receiveShadow" | "frustumCulled" | "renderOrder" | "animations" | "userData" | "customDepthMaterial" | "customDistanceMaterial" | "isObject3D" | "onBeforeRender" | "onAfterRender" | "applyMatrix4" | "applyQuaternion" | "setRotationFromAxisAngle" | "setRotationFromEuler" | "setRotationFromMatrix" | "setRotationFromQuaternion" | "rotateOnAxis" | "rotateOnWorldAxis" | "rotateX" | "rotateY" | "rotateZ" | "translateOnAxis" | "translateX" | "translateY" | "translateZ" | "localToWorld" | "worldToLocal" | "lookAt" | "add" | "remove" | "removeFromParent" | "clear" | "getObjectById" | "getObjectByName" | "getObjectByProperty" | "getWorldPosition" | "getWorldQuaternion" | "getWorldScale" | "getWorldDirection" | "raycast" | "traverse" | "traverseVisible" | "traverseAncestors" | "updateMatrix" | "updateMatrixWorld" | "updateWorldMatrix" | "toJSON" | "clone" | "copy" | "addEventListener" | "hasEventListener" | "removeEventListener" | "dispatchEvent" | "onChange" | "onMouseDown" | "onMouseUp" | keyof import("@react-three/fiber/dist/declarations/src/core/events").EventHandlers | "camera" | "size" | "space" | "reset" | "enabled" | "connect" | "update" | "setSize" | "axis" | "domElement" | "makeDefault" | "isTransformControls" | "detach" | "getMode" | "setMode" | "setTranslationSnap" | "setRotationSnap" | "setScaleSnap" | "setSpace" | "onObjectChange" | "mode" | "translationSnap" | "rotationSnap" | "scaleSnap" | "showX" | "showY" | "showZ"> & React.RefAttributes<TransformControlsImpl<THREE.Camera>>>;
|
|
@@ -14,6 +14,7 @@ const TransformControls = /*#__PURE__*/React.forwardRef(({
|
|
|
14
14
|
onMouseUp,
|
|
15
15
|
onObjectChange,
|
|
16
16
|
object,
|
|
17
|
+
makeDefault,
|
|
17
18
|
...props
|
|
18
19
|
}, ref) => {
|
|
19
20
|
const transformOnlyPropNames = ['enabled', 'axis', 'mode', 'translationSnap', 'rotationSnap', 'scaleSnap', 'space', 'size', 'showX', 'showY', 'showZ'];
|
|
@@ -29,6 +30,8 @@ const TransformControls = /*#__PURE__*/React.forwardRef(({
|
|
|
29
30
|
const events = useThree(state => state.events);
|
|
30
31
|
const defaultCamera = useThree(state => state.camera);
|
|
31
32
|
const invalidate = useThree(state => state.invalidate);
|
|
33
|
+
const get = useThree(state => state.get);
|
|
34
|
+
const set = useThree(state => state.set);
|
|
32
35
|
const explCamera = camera || defaultCamera;
|
|
33
36
|
const explDomElement = domElement || events.connected || gl.domElement;
|
|
34
37
|
const controls = React.useMemo(() => new TransformControls$1(explCamera, explDomElement), [explCamera, explDomElement]);
|
|
@@ -67,6 +70,17 @@ const TransformControls = /*#__PURE__*/React.forwardRef(({
|
|
|
67
70
|
if (onObjectChange) controls == null ? void 0 : controls.removeEventListener == null ? void 0 : controls.removeEventListener('objectChange', onObjectChange);
|
|
68
71
|
};
|
|
69
72
|
}, [onChange, onMouseDown, onMouseUp, onObjectChange, controls, invalidate]);
|
|
73
|
+
React.useEffect(() => {
|
|
74
|
+
if (makeDefault) {
|
|
75
|
+
const old = get().controls;
|
|
76
|
+
set({
|
|
77
|
+
controls
|
|
78
|
+
});
|
|
79
|
+
return () => set({
|
|
80
|
+
controls: old
|
|
81
|
+
});
|
|
82
|
+
}
|
|
83
|
+
}, [makeDefault, controls]);
|
|
70
84
|
return controls ? /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement("primitive", _extends({
|
|
71
85
|
ref: ref,
|
|
72
86
|
object: controls
|