UNPKG

@pixi/core

Version:
90 lines (85 loc) 2.76 kB
'use strict'; Object.defineProperty(exports, '__esModule', { value: true }); var BaseTexture = require('../BaseTexture.js'); var autoDetectResource = require('./autoDetectResource.js'); var Resource = require('./Resource.js'); class AbstractMultiResource extends Resource.Resource { constructor(length, options) { const { width, height } = options || {}; super(width, height); this.items = []; this.itemDirtyIds = []; for (let i = 0; i < length; i++) { const partTexture = new BaseTexture.BaseTexture(); this.items.push(partTexture); this.itemDirtyIds.push(-2); } this.length = length; this._load = null; this.baseTexture = null; } initFromArray(resources, options) { for (let i = 0; i < this.length; i++) { if (!resources[i]) { continue; } if (resources[i].castToBaseTexture) { this.addBaseTextureAt(resources[i].castToBaseTexture(), i); } else if (resources[i] instanceof Resource.Resource) { this.addResourceAt(resources[i], i); } else { this.addResourceAt(autoDetectResource.autoDetectResource(resources[i], options), i); } } } dispose() { for (let i = 0, len = this.length; i < len; i++) { this.items[i].destroy(); } this.items = null; this.itemDirtyIds = null; this._load = null; } addResourceAt(resource, index) { if (!this.items[index]) { throw new Error(`Index ${index} is out of bounds`); } if (resource.valid && !this.valid) { this.resize(resource.width, resource.height); } this.items[index].setResource(resource); return this; } bind(baseTexture) { if (this.baseTexture !== null) { throw new Error("Only one base texture per TextureArray is allowed"); } super.bind(baseTexture); for (let i = 0; i < this.length; i++) { this.items[i].parentTextureArray = baseTexture; this.items[i].on("update", baseTexture.update, baseTexture); } } unbind(baseTexture) { super.unbind(baseTexture); for (let i = 0; i < this.length; i++) { this.items[i].parentTextureArray = null; this.items[i].off("update", baseTexture.update, baseTexture); } } load() { if (this._load) { return this._load; } const resources = this.items.map((item) => item.resource).filter((item) => item); const promises = resources.map((item) => item.load()); this._load = Promise.all(promises).then(() => { const { realWidth, realHeight } = this.items[0]; this.resize(realWidth, realHeight); return Promise.resolve(this); }); return this._load; } } exports.AbstractMultiResource = AbstractMultiResource; //# sourceMappingURL=AbstractMultiResource.js.map