UNPKG

react-native-filament-buildcores

Version:

A real-time physically based 3D rendering engine for React Native

87 lines (85 loc) 4.24 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.EntitySelector = EntitySelector; var _react = _interopRequireWildcard(require("react")); var _ParentInstancesContext = require("./ParentInstancesContext"); var _types = require("../types"); var _useFilamentContext = require("../hooks/useFilamentContext"); var _useApplyTransformations = require("../hooks/internal/useApplyTransformations"); var _useWorkletEffect = require("../hooks/useWorkletEffect"); function _getRequireWildcardCache(e) { if ("function" != typeof WeakMap) return null; var r = new WeakMap(), t = new WeakMap(); return (_getRequireWildcardCache = function (e) { return e ? t : r; })(e); } function _interopRequireWildcard(e, r) { if (!r && e && e.__esModule) return e; if (null === e || "object" != typeof e && "function" != typeof e) return { default: e }; var t = _getRequireWildcardCache(r); if (t && t.has(e)) return t.get(e); var n = { __proto__: null }, a = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var u in e) if ("default" !== u && Object.prototype.hasOwnProperty.call(e, u)) { var i = a ? Object.getOwnPropertyDescriptor(e, u) : null; i && (i.get || i.set) ? Object.defineProperty(n, u, i) : n[u] = e[u]; } return n.default = e, t && t.set(e, n), n; } function _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); } function EntitySelector(props) { const parentInstances = (0, _react.useContext)(_ParentInstancesContext.ParentInstancesContext); const parentInstance = parentInstances === null || parentInstances === void 0 ? void 0 : parentInstances[0]; const byName = 'byName' in props ? props.byName : undefined; const byIndex = 'byIndex' in props ? props.byIndex : undefined; const { nameComponentManager } = (0, _useFilamentContext.useFilamentContext)(); const entity = (0, _react.useMemo)(() => { if (parentInstance == null) return; const entities = parentInstance.getEntities(); if (byName != null) { // TODO: can be optimized by using it from asset, or https://github.com/google/filament/discussions/7980 return entities.find(e => nameComponentManager.getEntityName(e) === byName); } else if (byIndex != null) { if (byIndex >= entities.length) { throw new Error('<EntitySelector>: byIndex is out of bounds. Instance only has ' + entities.length + ' entities'); } return entities[byIndex]; } else { return null; } }, [byIndex, byName, nameComponentManager, parentInstance]); if (parentInstance == null) { throw new Error('<EntitySelector> must be used inside a <Model> or <ModelInstance> component'); } if (byName != null && byIndex != null) { throw new Error('<EntitySelector>: Only one of byName or byIndex can be provided'); } if (entity == null) { throw new Error(`<EntitySelector>: Could not find entity by ${byName != null ? 'name' : 'index'} "${byName ?? byIndex}"`); } return /*#__PURE__*/_react.default.createElement(EntitySelectorImpl, _extends({ entity: entity }, props)); } /** * @private */ function EntitySelectorImpl(props) { const [transformProps, { entity, textureMap }] = (0, _types.extractTransformationProps)(props); (0, _useApplyTransformations.useApplyTransformations)({ to: entity, transformProps }); return /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null, textureMap != null && /*#__PURE__*/_react.default.createElement(TextureModifier, _extends({ entity: entity }, textureMap))); } /** * @private */ function TextureModifier({ entity, textureSource, materialName, textureFlags = 'sRGB' }) { const { renderableManager } = (0, _useFilamentContext.useFilamentContext)(); (0, _useWorkletEffect.useWorkletEffect)(() => { 'worklet'; renderableManager.changeMaterialTextureMap(entity, materialName, textureSource, textureFlags); }); return null; } //# sourceMappingURL=EntitySelector.js.map