avocado-old/packages/graphics/image.js
2019-03-18 20:06:47 -05:00

57 lines
1.2 KiB
JavaScript

const PIXI = 'undefined' !== typeof window ? require('pixi.js') : undefined;
import {Resource} from '@avocado/resource';
const baseTextureCache = {};
export class Image extends Resource {
constructor() {
super();
this.texture = null;
}
static load(uri) {
return this.loadBaseTexture(uri).then((baseTexture) => {
const image = new Image();
image.uri = uri;
image.texture = new PIXI.Texture(baseTexture);
return image;
});
}
static loadBaseTexture(uri) {
if (baseTextureCache[uri]) {
return Promise.resolve(baseTextureCache[uri]);
}
return new Promise((resolve, reject) => {
const baseTexture = PIXI.BaseTexture.fromImage(uri);
baseTexture.on('error', () => {
reject(new Error(`Couldn't load image "${uri}"`));
});
baseTexture.on('loaded', () => {
resolve(baseTextureCache[uri] = baseTexture);
});
});
}
get height() {
if (!this.texture) {
return 0;
}
return this.texture.height;
}
get size() {
return [this.width, this.height];
}
get width() {
if (!this.texture) {
return 0;
}
return this.texture.width;
}
}