-
Notifications
You must be signed in to change notification settings - Fork 304
Commit
- Loading branch information
There are no files selected for viewing
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,91 @@ | ||
|
||
const QueryManagerContext = createContext( null ); | ||
Check warning on line 2 in src/r3f/components/SettledObjects.jsx
|
||
|
||
export const SettledObject = forwardRef( function SettledObject( props, ref ) { | ||
Check warning on line 4 in src/r3f/components/SettledObjects.jsx
|
||
|
||
const { | ||
component = group, | ||
Check failure on line 7 in src/r3f/components/SettledObjects.jsx
|
||
duration = 0, | ||
Check failure on line 8 in src/r3f/components/SettledObjects.jsx
|
||
easeFunction = x => x, | ||
Check failure on line 9 in src/r3f/components/SettledObjects.jsx
|
||
lat = null, | ||
lon = null, | ||
rayorigin = null, | ||
raydirection = null, | ||
...rest | ||
} = props; | ||
|
||
const objectRef = useRef( null ); | ||
Check warning on line 17 in src/r3f/components/SettledObjects.jsx
|
||
const queries = useContext( QueryManagerContext ); | ||
Check warning on line 18 in src/r3f/components/SettledObjects.jsx
|
||
useEffect( () => { | ||
Check warning on line 19 in src/r3f/components/SettledObjects.jsx
|
||
|
||
if ( lat !== null && lon !== null ) { | ||
|
||
const index = queries.registerLatLonQuery( lat, lon, () => { | ||
|
||
} ); | ||
|
||
return () => queries.unregisterQuery( index ); | ||
|
||
} else if ( rayorigin !== null && raydirection !== null ) { | ||
|
||
const ray = new Ray(); | ||
Check warning on line 31 in src/r3f/components/SettledObjects.jsx
|
||
ray.origin.copy( rayorigin ); | ||
ray.direction.copy( raydirection ); | ||
const index = queries.registerLatLonQuery( lat, lon, () => { | ||
|
||
} ); | ||
|
||
return () => queries.unregisterQuery( index ); | ||
|
||
} | ||
|
||
}, [ lat, lon, rayorigin, raydirection ] ); | ||
Check warning on line 42 in src/r3f/components/SettledObjects.jsx
|
||
|
||
return <component { ...rest } ref={ useMultipleRefs( objectRef, ref ) } />; | ||
|
||
} ); | ||
|
||
export const SettledObjects = forwardRef( function SettledObjects( props, ref ) { | ||
|
||
const { | ||
scene, | ||
children, | ||
...rest | ||
} = props; | ||
|
||
const tiles = useContext( TilesRendererContext ); | ||
const queries = useMemo( () => new QueryManager() ); | ||
|
||
useDeepOptions( queries, rest ); | ||
|
||
useEffect( () => { | ||
|
||
queries.setScene( ...scene ); | ||
|
||
}, [ queries, scene ] ); | ||
|
||
useEffect( () => { | ||
|
||
if ( tiles ) { | ||
|
||
// TODO: we need to react to matrix update | ||
queries.ellipsoid.copy( tiles.ellipsoid ); | ||
queries.frame.copy( tiles.group.matrixWorld ); | ||
|
||
} | ||
|
||
}, [ queries, tiles ] ); | ||
|
||
useEffect( () => { | ||
|
||
useMultipleRefs( ref )( queries ); | ||
Check failure on line 81 in src/r3f/components/SettledObjects.jsx
|
||
|
||
}, [ queries, ref ] ); | ||
|
||
return ( | ||
<QueryManagerContext.Provider value={ queries }> | ||
{ children } | ||
</QueryManagerContext.Provider> | ||
); | ||
|
||
} ); |