@osobh/reactar
Version:
AR Library for React Native and Expo
34 lines (31 loc) • 993 B
text/typescript
// src/assets/AssetManager.ts
import * as FileSystem from 'expo-file-system';
import { Asset } from 'expo-asset';
export class AssetManager {
/**
* Loads an asset.
* @param assetSource - Either a local asset (using require) or a remote URI.
*/
static async loadAsset(assetSource: number | string): Promise<Asset> {
let asset: Asset;
if (typeof assetSource === 'number') {
// Local asset (e.g. require('./model.glb'))
asset = Asset.fromModule(assetSource);
if (!asset.downloaded) {
await asset.downloadAsync();
}
} else {
// Remote asset URL
asset = new Asset({ uri: assetSource, name: assetSource, type: 'unknown' });
await asset.downloadAsync();
}
return asset;
}
/**
* Loads multiple assets concurrently.
*/
static async loadAssets(assetSources: (number | string)[]): Promise<Asset[]> {
const promises = assetSources.map(src => this.loadAsset(src));
return Promise.all(promises);
}
}