react-native-filament
Version:
A real-time physically based 3D rendering engine for React Native
30 lines (29 loc) • 1.02 kB
JavaScript
import { useMemo } from 'react';
import { useFilamentContext } from './useFilamentContext';
function isFilamentModel(asset) {
// @ts-expect-error Because asset is a HostObject and using "in" check is a) expensive and b) somehow broken
return asset.state != null;
}
/**
* Creates a animator for the given {@linkcode FilamentAsset} or {@linkcode FilamentInstance}.
*
* @note For each asset/instance you should only have one animator.
*/
export function useAnimator(modelOrAsset) {
const {
nameComponentManager
} = useFilamentContext();
const animator = useMemo(() => {
if (modelOrAsset == null) return undefined;
if (isFilamentModel(modelOrAsset)) {
if (modelOrAsset.state === 'loading') return undefined;
const {
asset
} = modelOrAsset;
return asset.createAnimator(nameComponentManager);
}
return modelOrAsset.createAnimator(nameComponentManager);
}, [modelOrAsset, nameComponentManager]);
return animator;
}
//# sourceMappingURL=useAnimator.js.map