@pixi-spine/loader-base
Version:
Pixi loader middleware base
1 lines • 7.78 kB
Source Map (JSON)
{"version":3,"file":"atlasLoader.mjs","sources":["../src/atlasLoader.ts"],"sourcesContent":["import { TextureAtlas, settings as spine_settings } from '@pixi-spine/base';\nimport { type AssetExtension, LoaderParserPriority, LoadAsset, Loader, checkExtension } from '@pixi/assets';\nimport { BaseTexture, extensions, ExtensionType, settings, Texture, utils } from '@pixi/core';\nimport type { ISpineMetadata } from './SpineLoaderAbstract';\n\ntype RawAtlas = string;\n\nconst spineTextureAtlasLoader: AssetExtension<RawAtlas | TextureAtlas, ISpineMetadata> = {\n extension: ExtensionType.Asset,\n\n // cache: {\n // test: (asset: RawAtlas | TextureAtlas) => asset instanceof TextureAtlas,\n // getCacheableAssets: (keys: string[], asset: RawAtlas | TextureAtlas) => getCacheableAssets(keys, asset),\n // },\n\n loader: {\n extension: {\n type: ExtensionType.LoadParser,\n priority: LoaderParserPriority.Normal,\n },\n\n test(url: string): boolean {\n return checkExtension(url, '.atlas');\n },\n\n async load(url: string): Promise<RawAtlas> {\n const response = await settings.ADAPTER.fetch(url);\n\n const txt = await response.text();\n\n return txt as RawAtlas;\n },\n\n testParse(asset: unknown, options: LoadAsset): Promise<boolean> {\n const isExtensionRight = checkExtension(options.src, '.atlas');\n const isString = typeof asset === 'string';\n\n return Promise.resolve(isExtensionRight && isString);\n },\n\n async parse(asset: RawAtlas, options: LoadAsset, loader: Loader): Promise<TextureAtlas> {\n const metadata: ISpineMetadata = options.data;\n let basePath = utils.path.dirname(options.src);\n\n if (basePath && basePath.lastIndexOf('/') !== basePath.length - 1) {\n basePath += '/';\n }\n\n let resolve = null;\n let reject = null;\n const retPromise = new Promise<TextureAtlas>((res, rej) => {\n resolve = res;\n reject = rej;\n });\n\n // Retval is going to be a texture atlas. However we need to wait for it's callback to resolve this promise.\n let retval;\n const resolveCallback = (newAtlas: TextureAtlas): void => {\n if (!newAtlas) {\n reject('Something went terribly wrong loading a spine .atlas file\\nMost likely your texture failed to load.');\n }\n resolve(retval);\n };\n\n // if we have an already loaded pixi image in the image field, use that.\n if (metadata.image || metadata.images) {\n // merge the objects\n const pages = Object.assign(metadata.image ? { default: metadata.image } : {}, metadata.images);\n\n retval = new TextureAtlas(\n asset as RawAtlas,\n (line: any, callback: any) => {\n const page = pages[line] || (pages.default as any);\n\n if (page && page.baseTexture) callback(page.baseTexture);\n else callback(page);\n },\n resolveCallback\n );\n } else {\n // We don't have ready to use pixi textures, we need to load them now!\n retval = new TextureAtlas(asset as RawAtlas, makeSpineTextureAtlasLoaderFunctionFromPixiLoaderObject(loader, basePath, metadata.imageMetadata), resolveCallback);\n }\n\n return (await retPromise) as TextureAtlas;\n },\n\n unload(atlas: TextureAtlas) {\n atlas.dispose();\n },\n },\n} as AssetExtension<RawAtlas | TextureAtlas, ISpineMetadata>;\n\n/**\n * Ugly function to promisify the spine texture atlas loader function.\n * @public\n */\nexport const makeSpineTextureAtlasLoaderFunctionFromPixiLoaderObject = (loader: Loader, atlasBasePath: string, imageMetadata: any) => {\n return async (pageName: string, textureLoadedCallback: (tex: BaseTexture) => any): Promise<void> => {\n try {\n // const url = utils.path.join(...atlasBasePath.split(utils.path.sep), pageName); // Broken in upstream\n\n const url = utils.path.normalize([...atlasBasePath.split(utils.path.sep), pageName].join(utils.path.sep));\n\n const texture = await loader.load<Texture>({ src: url, data: imageMetadata });\n\n textureLoadedCallback(texture.baseTexture);\n } catch (e) {\n if (spine_settings.REPORT_TEXTURE_LOADER_ERROR) {\n console.error('Spine: error in texture loader', e);\n }\n textureLoadedCallback(null);\n }\n };\n};\n\nextensions.add(spineTextureAtlasLoader);\n"],"names":["spine_settings"],"mappings":"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"}