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

64 lines
1.8 KiB
JavaScript

/**
* @file imagemanager.class.js
* @version 1.1.0
*/
import config from '../resources/config.js';
import resources from '../resources/resources.js';
import * as THREE from '../lib/three.js/three.module.js';
export default class ImageManager {
static _init() {
ImageManager._images = new Map();
ImageManager._textures = new Map();
}
static asyncLoadImages() {
return Promise.all(Object.keys(resources.images).map(name => {
const info = resources.images[name];
const url = `./images/${info.path}${config.debug.preventCaching ? '?time=' + new Date().getTime() : ''}`;
return new Promise((resolve, reject) => {
const image = new Image();
image.addEventListener('load', () => {
ImageManager._images.set(name, image);
resolve();
});
image.addEventListener('error', () => {
reject(new Error(`Error loading image file "${url}"`));
});
image.src = url;
});
}));
}
static getImageNames() {
return Array.from(ImageManager._images.keys());
}
static getImage(name) {
const image = ImageManager._images.get(name);
if (image === undefined) {
throw new Error(`Image "${name}" does not exist`);
}
return image;
}
static getThreeTexture(name, encoding = THREE.LinearEncoding) {
if (ImageManager._textures.has(name)) {
return ImageManager._textures.get(name);
}
const image = ImageManager.getImage(name);
const texture = new THREE.Texture(image);
texture.encoding = encoding;
texture.needsUpdate = true;
ImageManager._textures.set(name, texture);
return texture;
}
}
ImageManager._init();