threepipe
Version:
A modern 3D viewer framework built on top of three.js, written in TypeScript, designed to make creating high-quality, modular, and extensible 3D experiences on the web simple and enjoyable.
38 lines (31 loc) • 1.43 kB
text/typescript
import {IAssetImporter} from './IAssetImporter'
import {IImporter, ILoader} from './IImporter'
import {Class, ValOrFunc} from 'ts-browser-helpers'
/**
* Importer for loading files through AssetImporter. By default, it's a wrapper for threejs loaders.
*/
export class Importer<T extends ILoader = ILoader> implements IImporter {
cls?: Class<T>
onCtor?: (l: T|undefined, ai: IAssetImporter, i: IImporter) => T|undefined
ctor(assetImporter: IAssetImporter): ILoader | undefined { // attach all created loaders to this instance and create dispose method to dispose all.
const loader = this.cls && new this.cls(assetImporter.loadingManager)
return typeof this.onCtor === 'function' ? this.onCtor(loader, assetImporter, this) : loader
}
/**
* Supported ext, must be in lower case.
*/
ext: ValOrFunc<string[]> // ['json', 'png', 'jpg', 'data:image/png'...]
/**
* Supported mime types, must be in lower case.
*/
mime: string[]
root: boolean
extensions: any[] = []
constructor(cls: Class<T>, ext: ValOrFunc<string[]>, mime: string[], root: boolean, onCtor?: (l: T|undefined, ai: IAssetImporter, i: Importer) => T|undefined) {
this.cls = cls
this.ext = ext// .filter(Boolean).map(e => e.toLowerCase())
this.mime = mime.filter(Boolean).map(e => e.toLowerCase())
this.root = root
this.onCtor = onCtor
}
}