polygonjs-engine
Version:
node-based webgl 3D engine https://polygonjs.com
41 lines (37 loc) • 1.1 kB
text/typescript
export enum ModuleName {
BasisTextureLoader = 'BasisTextureLoader',
DRACOLoader = 'DRACOLoader',
EXRLoader = 'EXRLoader',
FBXLoader = 'FBXLoader',
GLTFLoader = 'GLTFLoader',
OBJLoader2 = 'OBJLoader2',
PDBLoader = 'PDBLoader',
PLYLoader = 'PLYLoader',
RGBELoader = 'RGBELoader',
TTFLoader = 'TTFLoader',
SVGLoader = 'SVGLoader',
}
export class BaseModulesRegister {
private _loaded_module_by_name: Map<ModuleName, any> = new Map();
private _promise_by_name: Map<ModuleName, Promise<object>> = new Map();
register(name: ModuleName, promise: Promise<object>) {
this._promise_by_name.set(name, promise);
}
async module(name: ModuleName) {
const loaded_module = this._loaded_module_by_name.get(name);
if (loaded_module) {
return loaded_module;
} else {
const promise = this._promise_by_name.get(name);
if (promise) {
const new_loaded_module = await promise;
if (new_loaded_module) {
this._loaded_module_by_name.set(name, new_loaded_module);
return new_loaded_module;
}
} else {
console.warn(`module ${name} not registered`);
}
}
}
}