1
0
forked from sent/waves
waves/public/assets/g/burgerandfrights/js/framework/modelmanager.class.js
2025-04-09 17:11:14 -05:00

53 lines
1.4 KiB
JavaScript

/**
* @file modelmanager.class.js
* @version 1.1.0
*/
import config from '../resources/config.js';
import resources from '../resources/resources.js';
import { GLTFLoader } from '../lib/three.js/GLTFLoader.js';
export default class ModelManager {
static _init() {
ModelManager._models = new Map();
}
static asyncLoadModels() {
const loader = new GLTFLoader();
return Promise.all(Object.keys(resources.models).map(name => {
const info = resources.models[name];
const url = `./models/${info.path}${config.debug.preventCaching ? '?time=' + new Date().getTime() : ''}`;
return new Promise((resolve, reject) => {
if (info.type !== 'gltf') {
reject(new Error(`Unsupported model type "${info.type}"`));
}
loader.load(url, model => {
ModelManager._models.set(name, model);
resolve();
}, undefined, () => {
reject(new Error(`Error loading model file "${url}"`));
});
});
}));
}
static getModelNames() {
return Array.from(ModelManager._models.keys());
}
static getModel(name) {
const model = ModelManager._models.get(name);
if (model === undefined) {
throw new Error(`Model "${name}" does not exist`);
}
return model;
}
}
ModelManager._init();