UNPKG

9.26 kBSource Map (JSON)View Raw
1{"version":3,"file":"AbstractMultiResource.js","sources":["../../../src/textures/resources/AbstractMultiResource.ts"],"sourcesContent":["import { BaseTexture } from '../BaseTexture';\nimport { autoDetectResource } from './autoDetectResource';\nimport { Resource } from './Resource';\n\nimport type { ISize } from '@pixi/math';\nimport type { IAutoDetectOptions } from './autoDetectResource';\n\n/**\n * Resource that can manage several resource (items) inside.\n * All resources need to have the same pixel size.\n * Parent class for CubeResource and ArrayResource\n * @memberof PIXI\n */\nexport abstract class AbstractMultiResource extends Resource\n{\n /** Number of elements in array. */\n readonly length: number;\n\n /**\n * Collection of partial baseTextures that correspond to resources.\n * @readonly\n */\n items: Array<BaseTexture>;\n\n /**\n * Dirty IDs for each part.\n * @readonly\n */\n itemDirtyIds: Array<number>;\n\n /**\n * Promise when loading.\n * @default null\n */\n private _load: Promise<this>;\n\n /** Bound baseTexture, there can only be one. */\n baseTexture: BaseTexture;\n\n /**\n * @param length\n * @param options - Options to for Resource constructor\n * @param {number} [options.width] - Width of the resource\n * @param {number} [options.height] - Height of the resource\n */\n constructor(length: number, options?: ISize)\n {\n const { width, height } = options || {};\n\n super(width, height);\n\n this.items = [];\n this.itemDirtyIds = [];\n\n for (let i = 0; i < length; i++)\n {\n const partTexture = new BaseTexture();\n\n this.items.push(partTexture);\n // -2 - first run of texture array upload\n // -1 - texture item was allocated\n // >=0 - texture item uploaded , in sync with items[i].dirtyId\n this.itemDirtyIds.push(-2);\n }\n\n this.length = length;\n this._load = null;\n this.baseTexture = null;\n }\n\n /**\n * Used from ArrayResource and CubeResource constructors.\n * @param resources - Can be resources, image elements, canvas, etc. ,\n * length should be same as constructor length\n * @param options - Detect options for resources\n */\n protected initFromArray(resources: Array<any>, options?: IAutoDetectOptions): void\n {\n for (let i = 0; i < this.length; i++)\n {\n if (!resources[i])\n {\n continue;\n }\n if (resources[i].castToBaseTexture)\n {\n this.addBaseTextureAt(resources[i].castToBaseTexture(), i);\n }\n else if (resources[i] instanceof Resource)\n {\n this.addResourceAt(resources[i], i);\n }\n else\n {\n this.addResourceAt(autoDetectResource(resources[i], options), i);\n }\n }\n }\n\n /** Destroy this BaseImageResource. */\n dispose(): void\n {\n for (let i = 0, len = this.length; i < len; i++)\n {\n this.items[i].destroy();\n }\n this.items = null;\n this.itemDirtyIds = null;\n this._load = null;\n }\n\n /**\n * Set a baseTexture by ID\n * @param baseTexture\n * @param index - Zero-based index of resource to set\n * @returns - Instance for chaining\n */\n abstract addBaseTextureAt(baseTexture: BaseTexture, index: number): this;\n\n /**\n * Set a resource by ID\n * @param resource\n * @param index - Zero-based index of resource to set\n * @returns - Instance for chaining\n */\n addResourceAt(resource: Resource, index: number): this\n {\n if (!this.items[index])\n {\n throw new Error(`Index ${index} is out of bounds`);\n }\n\n // Inherit the first resource dimensions\n if (resource.valid && !this.valid)\n {\n this.resize(resource.width, resource.height);\n }\n\n this.items[index].setResource(resource);\n\n return this;\n }\n\n /**\n * Set the parent base texture.\n * @param baseTexture\n */\n bind(baseTexture: BaseTexture): void\n {\n if (this.baseTexture !== null)\n {\n throw new Error('Only one base texture per TextureArray is allowed');\n }\n super.bind(baseTexture);\n\n for (let i = 0; i < this.length; i++)\n {\n this.items[i].parentTextureArray = baseTexture;\n this.items[i].on('update', baseTexture.update, baseTexture);\n }\n }\n\n /**\n * Unset the parent base texture.\n * @param baseTexture\n */\n unbind(baseTexture: BaseTexture): void\n {\n super.unbind(baseTexture);\n\n for (let i = 0; i < this.length; i++)\n {\n this.items[i].parentTextureArray = null;\n this.items[i].off('update', baseTexture.update, baseTexture);\n }\n }\n\n /**\n * Load all the resources simultaneously\n * @returns - When load is resolved\n */\n load(): Promise<this>\n {\n if (this._load)\n {\n return this._load;\n }\n\n const resources = this.items.map((item) => item.resource).filter((item) => item);\n\n // TODO: also implement load part-by-part strategy\n const promises = resources.map((item) => item.load());\n\n this._load = Promise.all(promises)\n .then(() =>\n {\n const { realWidth, realHeight } = this.items[0];\n\n this.resize(realWidth, realHeight);\n\n return Promise.resolve(this);\n }\n );\n\n return this._load;\n }\n}\n"],"names":["Resource","BaseTexture","autoDetectResource"],"mappings":"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"}
\No newline at end of file