64 lines
1.8 KiB
JavaScript
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();
|