Files
nothoughts/node_modules/pixi.js/lib/spritesheet/spritesheetAsset.mjs.map
2025-08-04 18:57:35 +02:00

1 line
12 KiB
Plaintext

{"version":3,"file":"spritesheetAsset.mjs","sources":["../../src/spritesheet/spritesheetAsset.ts"],"sourcesContent":["import { LoaderParserPriority } from '../assets/loader/parsers/LoaderParser';\nimport { Resolver } from '../assets/resolver/Resolver';\nimport { copySearchParams } from '../assets/utils/copySearchParams';\nimport { ExtensionType } from '../extensions/Extensions';\nimport { Texture } from '../rendering/renderers/shared/texture/Texture';\nimport { path } from '../utils/path';\nimport { Spritesheet } from './Spritesheet';\n\nimport type { AssetExtensionAdvanced } from '../assets/AssetExtension';\nimport type { Loader } from '../assets/loader/Loader';\nimport type { ResolvedAsset } from '../assets/types';\nimport type { SpritesheetData } from './Spritesheet';\n\nexport interface SpriteSheetJson extends SpritesheetData\n{\n meta: {\n image: string;\n scale: string;\n // eslint-disable-next-line camelcase\n related_multi_packs?: string[];\n };\n}\n\nconst validImages = ['jpg', 'png', 'jpeg', 'avif', 'webp',\n 'basis', 'etc2', 'bc7', 'bc6h', 'bc5', 'bc4', 'bc3', 'bc2', 'bc1', 'eac', 'astc'];\n\nfunction getCacheableAssets(keys: string[], asset: Spritesheet, ignoreMultiPack: boolean)\n{\n const out: Record<string, any> = {};\n\n keys.forEach((key: string) =>\n {\n out[key] = asset;\n });\n\n Object.keys(asset.textures).forEach((key) =>\n {\n out[key] = asset.textures[key];\n });\n\n if (!ignoreMultiPack)\n {\n const basePath = path.dirname(keys[0]);\n\n asset.linkedSheets.forEach((item: Spritesheet, i) =>\n {\n const out2 = getCacheableAssets([`${basePath}/${asset.data.meta.related_multi_packs[i]}`], item, true);\n\n Object.assign(out, out2);\n });\n }\n\n return out;\n}\n\n/**\n * Asset extension for loading spritesheets\n * @example\n * import { Assets } from 'pixi.js';\n *\n * Assets.load({\n * alias: 'spritesheet',\n * src: 'path/to/spritesheet.json',\n * data: {\n * ignoreMultiPack: true,\n * }\n * })\n * @type {AssetExtension}\n * @memberof assets\n */\nexport const spritesheetAsset = {\n extension: ExtensionType.Asset,\n /** Handle the caching of the related Spritesheet Textures */\n cache: {\n test: (asset: Spritesheet) => asset instanceof Spritesheet,\n getCacheableAssets: (keys: string[], asset: Spritesheet) => getCacheableAssets(keys, asset, false),\n },\n /** Resolve the resolution of the asset. */\n resolver: {\n extension: {\n type: ExtensionType.ResolveParser,\n name: 'resolveSpritesheet',\n },\n test: (value: string): boolean =>\n {\n const tempURL = value.split('?')[0];\n const split = tempURL.split('.');\n const extension = split.pop();\n const format = split.pop();\n\n return extension === 'json' && validImages.includes(format);\n },\n parse: (value: string) =>\n {\n const split = value.split('.');\n\n return {\n resolution: parseFloat(Resolver.RETINA_PREFIX.exec(value)?.[1] ?? '1'),\n format: split[split.length - 2],\n src: value,\n };\n },\n },\n /**\n * Loader plugin that parses sprite sheets!\n * once the JSON has been loaded this checks to see if the JSON is spritesheet data.\n * If it is, we load the spritesheets image and parse the data into Spritesheet\n * All textures in the sprite sheet are then added to the cache\n */\n loader: {\n name: 'spritesheetLoader',\n\n extension: {\n type: ExtensionType.LoadParser,\n priority: LoaderParserPriority.Normal,\n name: 'spritesheetLoader',\n },\n\n async testParse(asset: SpriteSheetJson, options: ResolvedAsset): Promise<boolean>\n {\n return (path.extname(options.src).toLowerCase() === '.json' && !!asset.frames);\n },\n\n async parse(\n asset: SpriteSheetJson,\n options: ResolvedAsset<{texture?: Texture, imageFilename?: string, ignoreMultiPack?: boolean}>,\n loader?: Loader\n ): Promise<Spritesheet>\n {\n const {\n texture: imageTexture, // if user need to use preloaded texture\n imageFilename // if user need to use custom filename (not from jsonFile.meta.image)\n } = options?.data ?? {};\n\n let basePath = path.dirname(options.src);\n\n if (basePath && basePath.lastIndexOf('/') !== (basePath.length - 1))\n {\n basePath += '/';\n }\n\n let texture: Texture;\n\n if (imageTexture instanceof Texture)\n {\n texture = imageTexture;\n }\n else\n {\n const imagePath = copySearchParams(basePath + (imageFilename ?? asset.meta.image), options.src);\n\n const assets = await loader.load<Texture>([imagePath]);\n\n texture = assets[imagePath];\n }\n\n const spritesheet = new Spritesheet(\n texture.source,\n asset,\n );\n\n await spritesheet.parse();\n\n // Check and add the multi atlas\n // Heavily influenced and based on https://github.com/rocket-ua/pixi-tps-loader/blob/master/src/ResourceLoader.js\n // eslint-disable-next-line camelcase\n const multiPacks = asset?.meta?.related_multi_packs;\n\n if (Array.isArray(multiPacks))\n {\n const promises: Promise<Spritesheet<SpriteSheetJson>>[] = [];\n\n for (const item of multiPacks)\n {\n if (typeof item !== 'string')\n {\n continue;\n }\n\n let itemUrl = basePath + item;\n\n // Check if the file wasn't already added as multipack\n if (options.data?.ignoreMultiPack)\n {\n continue;\n }\n\n itemUrl = copySearchParams(itemUrl, options.src);\n\n promises.push(loader.load<Spritesheet<SpriteSheetJson>>({\n src: itemUrl,\n data: {\n ignoreMultiPack: true,\n }\n }));\n }\n\n const res = await Promise.all(promises);\n\n spritesheet.linkedSheets = res;\n res.forEach((item) =>\n {\n item.linkedSheets = [spritesheet].concat(spritesheet.linkedSheets.filter((sp) => (sp !== item)));\n });\n }\n\n return spritesheet;\n },\n\n async unload(spritesheet: Spritesheet, _resolvedAsset, loader)\n {\n await loader.unload(spritesheet.textureSource._sourceOrigin);\n\n spritesheet.destroy(false);\n },\n }\n} satisfies AssetExtensionAdvanced<SpriteSheetJson, Spritesheet, Spritesheet, Spritesheet>;\n"],"names":[],"mappings":"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"}