import { BaseTexture, Texture, utils } from 'pixijs/core'; import type { IPointData } from 'pixijs/core'; /** Represents the JSON data for a spritesheet atlas. */ export interface ISpritesheetFrameData { frame: { x: number; y: number; w: number; h: number; }; trimmed?: boolean; rotated?: boolean; sourceSize?: { w: number; h: number; }; spriteSourceSize?: { x: number; y: number; }; anchor?: IPointData; } /** Atlas format. */ export interface ISpritesheetData { frames: utils.Dict; animations?: utils.Dict; meta: { scale: string; related_multi_packs?: string[]; }; } /** * Utility class for maintaining reference to a collection * of Textures on a single Spritesheet. * * To access a sprite sheet from your code you may pass its JSON data file to Pixi's loader: * * ```js * import { Assets } from 'pixijs/browser'; * * const sheet = await Assets.load('images/spritesheet.json'); * ``` * * Alternately, you may circumvent the loader by instantiating the Spritesheet directly: * * ```js * import { Spritesheet } from 'pixijs/browser'; * * const sheet = new Spritesheet(texture, spritesheetData); * await sheet.parse(); * console.log('Spritesheet ready to use!'); * ``` * * With the `sheet.textures` you can create Sprite objects, and `sheet.animations` can be used to create an AnimatedSprite. * * Sprite sheets can be packed using tools like {@link https://codeandweb.com/texturepacker|TexturePacker}, * {@link https://renderhjs.net/shoebox/|Shoebox} or {@link https://github.com/krzysztof-o/spritesheet.js|Spritesheet.js}. * Default anchor points (see {@link PIXI.Texture#defaultAnchor}) and grouping of animation sprites are currently only * supported by TexturePacker. * @memberof PIXI */ export declare class Spritesheet { /** The maximum number of Textures to build per process. */ static readonly BATCH_SIZE = 1000; /** For multi-packed spritesheets, this contains a reference to all the other spritesheets it depends on. */ linkedSheets: Spritesheet[]; /** Reference to ths source texture. */ baseTexture: BaseTexture; /** * A map containing all textures of the sprite sheet. * Can be used to create a {@link PIXI.Sprite|Sprite}: * @example * import { Sprite } from 'pixijs/browser'; * * new Sprite(sheet.textures['image.png']); */ textures: utils.Dict; /** * A map containing the textures for each animation. * Can be used to create an {@link PIXI.AnimatedSprite|AnimatedSprite}: * @example * import { AnimatedSprite } from 'pixijs/browser'; * * new AnimatedSprite(sheet.animations['anim_name']); */ animations: utils.Dict; /** * Reference to the original JSON data. * @type {object} */ data: ISpritesheetData; /** The resolution of the spritesheet. */ resolution: number; /** * Reference to original source image from the Loader. This reference is retained so we * can destroy the Texture later on. It is never used internally. */ private _texture; /** * Map of spritesheet frames. * @type {object} */ private _frames; /** Collection of frame names. */ private _frameKeys; /** Current batch index being processed. */ private _batchIndex; /** * Callback when parse is completed. * @type {Function} */ private _callback; /** * @param texture - Reference to the source BaseTexture object. * @param {object} data - Spritesheet image data. * @param resolutionFilename - The filename to consider when determining * the resolution of the spritesheet. If not provided, the imageUrl will * be used on the BaseTexture. */ constructor(texture: BaseTexture | Texture, data: ISpritesheetData, resolutionFilename?: string); /** * Generate the resolution from the filename or fallback * to the meta.scale field of the JSON data. * @param resolutionFilename - The filename to use for resolving * the default resolution. * @returns Resolution to use for spritesheet. */ private _updateResolution; /** * Parser spritesheet from loaded data. This is done asynchronously * to prevent creating too many Texture within a single process. * @method PIXI.Spritesheet#parse */ parse(): Promise>; /** * Process a batch of frames * @param initialFrameIndex - The index of frame to start. */ private _processFrames; /** Parse animations config. */ private _processAnimations; /** The parse has completed. */ private _parseComplete; /** Begin the next batch of textures. */ private _nextBatch; /** * Destroy Spritesheet and don't use after this. * @param {boolean} [destroyBase=false] - Whether to destroy the base texture as well */ destroy(destroyBase?: boolean): void; }