///
import { BaseTexture } from '@pixi/core';
import type { Dict } from '@pixi/utils';
import type { ExtensionMetadata } from '@pixi/core';
import type { IPointData } from '@pixi/math';
import { LoaderResource } from '@pixi/loaders';
import { Texture } from '@pixi/core';
/** Atlas format. */
export declare interface ISpritesheetData {
frames: Dict;
animations?: Dict;
meta: {
scale: string;
related_multi_packs?: string[];
};
}
/** Represents the JSON data for a spritesheet atlas. */
export declare 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;
}
/**
* 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
* PIXI.Loader.shared.add("images/spritesheet.json").load(setup);
*
* function setup() {
* let sheet = PIXI.Loader.shared.resources["images/spritesheet.json"].spritesheet;
* ...
* }
* ```
*
* Alternately, you may circumvent the loader by instantiating the Spritesheet directly:
* ```js
* const sheet = new PIXI.Spritesheet(texture, spritesheetData);
* await sheet.parse();
* console.log('Spritesheet ready to use!');
* ```
*
* With the `sheet.textures` you can create Sprite objects,`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}:
* ```js
* new PIXI.Sprite(sheet.textures["image.png"]);
* ```
*/
textures: Dict;
/**
* A map containing the textures for each animation.
* Can be used to create an {@link PIXI.AnimatedSprite|AnimatedSprite}:
* ```js
* new PIXI.AnimatedSprite(sheet.animations["anim_name"])
* ```
*/
animations: 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>;
/**
* Please use the Promise-based version of this function.
* @method PIXI.Spritesheet#parse
* @deprecated since version 6.5.0
* @param {Function} callback - Callback when complete returns
* a map of the Textures for this spritesheet.
*/
parse(callback?: (textures?: Dict) => void): void;
/**
* 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;
}
/**
* {@link PIXI.Loader} middleware for loading texture atlases that have been created with
* TexturePacker or similar JSON-based spritesheet.
*
* This middleware automatically generates Texture resources.
*
* If you're using Webpack or other bundlers and plan on bundling the atlas' JSON,
* use the {@link PIXI.Spritesheet} class to directly parse the JSON.
*
* The Loader's image Resource name is automatically appended with `"_image"`.
* If a Resource with this name is already loaded, the Loader will skip parsing the
* Spritesheet. The code below will generate an internal Loader Resource called `"myatlas_image"`.
* @example
* loader.add('myatlas', 'path/to/myatlas.json');
* loader.load(() => {
* loader.resources.myatlas; // atlas JSON resource
* loader.resources.myatlas_image; // atlas Image resource
* });
* @memberof PIXI
*/
export declare class SpritesheetLoader {
/** @ignore */
static extension: ExtensionMetadata;
/**
* Called after a resource is loaded.
* @see PIXI.Loader.loaderMiddleware
* @param resource
* @param next
*/
static use(resource: LoaderResource, next: (...args: unknown[]) => void): void;
/**
* Get the spritesheets root path
* @param resource - Resource to check path
* @param baseUrl - Base root url
*/
static getResourcePath(resource: LoaderResource, baseUrl: string): string;
}
export { }