pixi.js
Version:
<p align="center"> <a href="https://pixijs.com" target="_blank" rel="noopener noreferrer"> <img height="150" src="https://files.pixijs.download/branding/pixijs-logo-transparent-dark.svg?v=1" alt="PixiJS logo"> </a> </p> <br/> <p align="center">
1 lines • 7.96 kB
Source Map (JSON)
{"version":3,"file":"BackgroundLoader.mjs","sources":["../../src/assets/BackgroundLoader.ts"],"sourcesContent":["import type { Loader } from './loader/Loader';\nimport type { ResolvedAsset } from './types';\n\n/**\n * The BackgroundLoader handles loading assets passively in the background to prepare them for future use.\n * It loads one asset at a time to minimize impact on application performance.\n *\n * Key features:\n * - Sequential loading of assets\n * - Automatic pause when high-priority loads occur\n * - Configurable concurrency\n * @example\n * ```ts\n * import { Assets } from 'pixi.js';\n *\n * // Background load level assets while in menu\n * Assets.backgroundLoad([\n * 'level1/background.png',\n * 'level1/sprites.json',\n * 'level1/music.mp3'\n * ]);\n *\n * // Assets will be instantly available when needed\n * const assets = await Assets.load([\n * 'level1/background.png',\n * 'level1/sprites.json'\n * ]);\n *\n * // Background load bundles\n * Assets.backgroundLoadBundle('level2');\n *\n * // Later, instant access\n * const level2 = await Assets.loadBundle('level2');\n * ```\n * > [!NOTE] You typically do not need to use this class directly. Use the main {@link Assets.backgroundLoad} API instead.\n * @remarks\n * - Background loading is automatically paused when `Assets.load()` is called\n * - Assets are loaded sequentially to minimize performance impact\n * - Assets are cached as they complete loading\n * - No progress tracking is available for background loading\n * @see {@link Assets.backgroundLoad} For the main background loading API\n * @see {@link Assets.backgroundLoadBundle} For background loading bundles\n * @category assets\n * @advanced\n */\nexport class BackgroundLoader\n{\n /** Whether or not the loader should continue loading. */\n private _isActive: boolean;\n\n /** Assets to load. */\n private readonly _assetList: ResolvedAsset[];\n\n /** Whether or not the loader is loading. */\n private _isLoading: boolean;\n\n /** Number of assets to load at a time. */\n private readonly _maxConcurrent: number;\n\n /**\n * Should the loader log to the console.\n * @advanced\n */\n public verbose: boolean;\n private readonly _loader: Loader;\n\n /**\n * @param loader\n * @param verbose - should the loader log to the console\n */\n constructor(loader: Loader, verbose = false)\n {\n this._loader = loader;\n this._assetList = [];\n this._isLoading = false;\n this._maxConcurrent = 1;\n this.verbose = verbose;\n }\n\n /**\n * Adds assets to the background loading queue. Assets are loaded one at a time to minimize\n * performance impact.\n * @param assetUrls - Array of resolved assets to load in the background\n * @example\n * ```ts\n * // Add assets to background load queue\n * backgroundLoader.add([\n * { src: 'images/level1/bg.png' },\n * { src: 'images/level1/characters.json' }\n * ]);\n *\n * // Assets will load sequentially in the background\n * // The loader automatically pauses when high-priority loads occur\n * // e.g. Assets.load() is called\n * ```\n * @remarks\n * - Assets are loaded one at a time to minimize performance impact\n * - Loading automatically pauses when Assets.load() is called\n * - No progress tracking is available for background loading\n * - Assets are cached as they complete loading\n * @internal\n */\n public add(assetUrls: ResolvedAsset[]): void\n {\n assetUrls.forEach((a) =>\n {\n this._assetList.push(a);\n });\n\n if (this.verbose)\n {\n // eslint-disable-next-line no-console\n console.log('[BackgroundLoader] assets: ', this._assetList);\n }\n\n if (this._isActive && !this._isLoading)\n {\n void this._next();\n }\n }\n\n /**\n * Loads the next set of assets. Will try to load as many assets as it can at the same time.\n *\n * The max assets it will try to load at one time will be 4.\n */\n private async _next(): Promise<void>\n {\n if (this._assetList.length && this._isActive)\n {\n this._isLoading = true;\n\n const toLoad = [];\n\n const toLoadAmount = Math.min(this._assetList.length, this._maxConcurrent);\n\n for (let i = 0; i < toLoadAmount; i++)\n {\n toLoad.push(this._assetList.pop());\n }\n\n await this._loader.load(toLoad);\n\n this._isLoading = false;\n\n void this._next();\n }\n }\n\n /**\n * Controls the active state of the background loader. When active, the loader will\n * continue processing its queue. When inactive, loading is paused.\n * @returns Whether the background loader is currently active\n * @example\n * ```ts\n * // Pause background loading\n * backgroundLoader.active = false;\n *\n * // Resume background loading\n * backgroundLoader.active = true;\n *\n * // Check current state\n * console.log(backgroundLoader.active); // true/false\n *\n * // Common use case: Pause during intensive operations\n * backgroundLoader.active = false; // Pause background loading\n * ... // Perform high-priority tasks\n * backgroundLoader.active = true; // Resume background loading\n * ```\n * @remarks\n * - Setting to true resumes loading immediately\n * - Setting to false pauses after current asset completes\n * - Background loading is automatically paused during `Assets.load()`\n * - Assets already being loaded will complete even when set to false\n */\n public get active(): boolean\n {\n return this._isActive;\n }\n\n set active(value: boolean)\n {\n if (this._isActive === value) return;\n\n this._isActive = value;\n\n if (value && !this._isLoading)\n {\n void this._next();\n }\n }\n}\n"],"names":[],"mappings":";AA6CO,MAAM,gBACb,CAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAwBI,WAAA,CAAY,MAAgB,EAAA,OAAA,GAAU,KACtC,EAAA;AACI,IAAA,IAAA,CAAK,OAAU,GAAA,MAAA,CAAA;AACf,IAAA,IAAA,CAAK,aAAa,EAAC,CAAA;AACnB,IAAA,IAAA,CAAK,UAAa,GAAA,KAAA,CAAA;AAClB,IAAA,IAAA,CAAK,cAAiB,GAAA,CAAA,CAAA;AACtB,IAAA,IAAA,CAAK,OAAU,GAAA,OAAA,CAAA;AAAA,GACnB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAyBO,IAAI,SACX,EAAA;AACI,IAAU,SAAA,CAAA,OAAA,CAAQ,CAAC,CACnB,KAAA;AACI,MAAK,IAAA,CAAA,UAAA,CAAW,KAAK,CAAC,CAAA,CAAA;AAAA,KACzB,CAAA,CAAA;AAED,IAAA,IAAI,KAAK,OACT,EAAA;AAEI,MAAQ,OAAA,CAAA,GAAA,CAAI,6BAA+B,EAAA,IAAA,CAAK,UAAU,CAAA,CAAA;AAAA,KAC9D;AAEA,IAAA,IAAI,IAAK,CAAA,SAAA,IAAa,CAAC,IAAA,CAAK,UAC5B,EAAA;AACI,MAAA,KAAK,KAAK,KAAM,EAAA,CAAA;AAAA,KACpB;AAAA,GACJ;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,MAAc,KACd,GAAA;AACI,IAAA,IAAI,IAAK,CAAA,UAAA,CAAW,MAAU,IAAA,IAAA,CAAK,SACnC,EAAA;AACI,MAAA,IAAA,CAAK,UAAa,GAAA,IAAA,CAAA;AAElB,MAAA,MAAM,SAAS,EAAC,CAAA;AAEhB,MAAA,MAAM,eAAe,IAAK,CAAA,GAAA,CAAI,KAAK,UAAW,CAAA,MAAA,EAAQ,KAAK,cAAc,CAAA,CAAA;AAEzE,MAAA,KAAA,IAAS,CAAI,GAAA,CAAA,EAAG,CAAI,GAAA,YAAA,EAAc,CAClC,EAAA,EAAA;AACI,QAAA,MAAA,CAAO,IAAK,CAAA,IAAA,CAAK,UAAW,CAAA,GAAA,EAAK,CAAA,CAAA;AAAA,OACrC;AAEA,MAAM,MAAA,IAAA,CAAK,OAAQ,CAAA,IAAA,CAAK,MAAM,CAAA,CAAA;AAE9B,MAAA,IAAA,CAAK,UAAa,GAAA,KAAA,CAAA;AAElB,MAAA,KAAK,KAAK,KAAM,EAAA,CAAA;AAAA,KACpB;AAAA,GACJ;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EA4BA,IAAW,MACX,GAAA;AACI,IAAA,OAAO,IAAK,CAAA,SAAA,CAAA;AAAA,GAChB;AAAA,EAEA,IAAI,OAAO,KACX,EAAA;AACI,IAAA,IAAI,KAAK,SAAc,KAAA,KAAA;AAAO,MAAA,OAAA;AAE9B,IAAA,IAAA,CAAK,SAAY,GAAA,KAAA,CAAA;AAEjB,IAAI,IAAA,KAAA,IAAS,CAAC,IAAA,CAAK,UACnB,EAAA;AACI,MAAA,KAAK,KAAK,KAAM,EAAA,CAAA;AAAA,KACpB;AAAA,GACJ;AACJ;;;;"}