react-native-filament
Version:
A real-time physically based 3D rendering engine for React Native
36 lines (34 loc) • 1.16 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.useAnimator = useAnimator;
var _react = require("react");
var _useFilamentContext = require("./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.
*/
function useAnimator(modelOrAsset) {
const {
nameComponentManager
} = (0, _useFilamentContext.useFilamentContext)();
const animator = (0, _react.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