UNPKG

@pixi/animate

Version:

PIXI plugin for the PixiAnimate Extension

1 lines 11.4 kB
{"version":3,"file":"load.mjs","sources":["../../src/animate/load.ts"],"sourcesContent":["import type { Container } from '@pixi/display';\nimport type { AnimateAsset } from '../AnimateAsset';\nimport type { MovieClip } from './MovieClip';\nimport type { DrawCommands } from './Graphics';\nimport { utils } from './utils';\nimport { Assets } from '@pixi/assets';\nimport { Texture } from '@pixi/core';\nimport { Spritesheet } from '@pixi/spritesheet';\n\ntype Complete = (instance: MovieClip | null) => void;\ntype Progress = (value: number) => void;\nexport interface LoadOptions\n{\n /**\n * The Container to auto-add the stage to, if createInstance is true.\n */\n parent?: Container;\n /**\n * Callback for load completion.\n */\n complete?: Complete;\n /**\n * Callback for load progress.\n */\n progress?: Progress;\n /**\n * Base root directory\n */\n basePath?: string;\n /**\n * Enable or disable automatic instantiation of stage - defaults to false.\n */\n createInstance?: boolean;\n /**\n * Metadata to be handed off to the loader for assets that are loaded.\n */\n metadata?: any;\n}\n\nconst EXPECTED_ASSET_VERSION = 2;\n\n/**\n * Load the stage class and preload any assets\n * ```\n * import MyAsset from './myAsset.js';\n * let renderer = new PIXI.autoDetectRenderer(1280, 720);\n * let stage = new PIXI.Container();\n * PIXI.animate.load(MyAsset, function(asset){\n * stage.addChild(new asset.stage());\n * });\n * function update() {\n * renderer.render(stage);\n * update();\n * }\n * update();\n * ```\n * @param scene - Reference to the scene data.\n * @param complete - The callback function when complete.\n * @return instance of PIXI resource loader\n */\nexport function load(scene: AnimateAsset, complete?: Complete): void;\n/**\n * Load the stage class and preload any assets\n * ```\n * import MyAsset from './myAsset.js';\n * let basePath = 'file:/path/to/assets';\n * let renderer = new PIXI.Renderer(1280, 720);\n *\n * let extensions = PIXI.compressedTextures.detectExtensions(renderer);\n * let loader = new PIXI.Loader();\n * // this is an example of setting up a pre loader plugin to handle compressed textures in this case\n * loader.pre(PIXI.compressedTextures.extensionChooser(extensions));\n *\n * // specify metadata this way if you want to provide a default loading strategy for all assets listed in the PIXI animation\n * let metadata = { default: { metadata: { imageMetadata: { choice: ['.crn'] } } } };\n * // specify metadata this way if you want to provide a specific loading strategy for a\n * // certain asset listed inside the PIXI animation library\n * let metadata = { MyStage_atlas_1: { metadata: { imageMetadata: { choice: ['.crn'] } } } };\n *\n * let stage = new PIXI.Container();\n * PIXI.animate.load(MyAsset, {\n * parent: stage,\n * complete: ()=>{},\n * basePath: basePath,\n * loader: loader,\n * metadata: metadata\n * });\n * function update() {\n * renderer.render(stage);\n * update();\n * }\n * update();\n * ```\n * @param scene - Reference to the scene data.\n * @param options - Options for loading.\n * @return instance of PIXI resource loader\n */\nexport function load(scene: AnimateAsset, options: LoadOptions): void;\nexport function load(scene: AnimateAsset, optionsOrComplete?: Complete | LoadOptions): void\n{\n const complete: Complete = typeof optionsOrComplete === 'function' ? optionsOrComplete : optionsOrComplete?.complete;\n const progress: Progress | undefined = typeof optionsOrComplete === 'function' ? undefined : optionsOrComplete?.progress;\n\n let basePath = '';\n let parent: Container = null;\n let metadata: any;\n let createInstance = false;\n\n // check scene and warn about it\n const { version } = scene;\n\n if (typeof version === 'number')\n {\n /* eslint-disable max-len */\n if (Math.floor(version) !== Math.floor(EXPECTED_ASSET_VERSION))\n {\n console.warn(`Asset version is not the major version expected of ${Math.floor(EXPECTED_ASSET_VERSION)} - it may not load properly`, scene);\n }\n else if (version > EXPECTED_ASSET_VERSION)\n {\n console.warn('Asset has been published with a newer version than PixiAnimate expects. It may not load properly.', scene);\n }\n /* eslint-enable max-len */\n }\n\n if (optionsOrComplete && typeof optionsOrComplete !== 'function')\n {\n basePath = optionsOrComplete.basePath || '';\n parent = optionsOrComplete.parent;\n metadata = optionsOrComplete.metadata;\n createInstance = !!optionsOrComplete.createInstance;\n }\n\n function done(): void\n {\n const instance = (createInstance && typeof scene.stage === 'function') ? new scene.stage() : null;\n\n if (parent && instance)\n {\n parent.addChild(instance);\n }\n if (complete)\n {\n complete(instance);\n }\n }\n\n // Check for assets to preload\n const assets = scene.assets || {};\n\n if (assets && Object.keys(assets).length)\n {\n let totalAssets = 0;\n let loadedAssets = 0;\n\n const promises: Promise<any>[] = [];\n // assetBaseDir can accept either with trailing slash or not\n\n if (basePath)\n {\n basePath += '/';\n }\n for (const id in assets)\n {\n if (progress) totalAssets++;\n\n let data = null;\n\n if (metadata)\n {\n // if the metadata was supplied for this particular asset, use these options\n if (metadata[id])\n {\n data = metadata[id];\n }\n // if the metadata supplied a default option\n else if (metadata.default)\n {\n data = metadata.default;\n }\n }\n promises.push(Assets.load({ alias: [id], src: basePath + assets[id], data }).then((loadedAsset) =>\n {\n if (progress)\n {\n loadedAssets++;\n\n progress(loadedAssets / totalAssets);\n }\n\n if (!loadedAsset)\n {\n return; // not sure if this can ever happen\n }\n if (loadedAsset instanceof Spritesheet)\n {\n scene.spritesheets.push(loadedAsset);\n }\n else if (loadedAsset instanceof Texture)\n {\n scene.textures[id] = loadedAsset;\n }\n else if (Array.isArray(loadedAsset) || typeof loadedAsset === 'string')\n {\n // save shape data\n let items: string | DrawCommands[] = loadedAsset;\n\n // Decode string to map of files\n if (typeof items === 'string')\n {\n items = utils.deserializeShapes(items);\n }\n\n // Convert all hex string colors (animate) to int (pixi.js)\n for (let i = 0; i < items.length; i++)\n {\n const item = items[i];\n\n for (let j = 0; j < item.length; j++)\n {\n const arg = item[j];\n\n if (typeof arg === 'string' && arg[0] === '#')\n {\n item[j] = utils.hexToUint(arg);\n }\n }\n }\n scene.shapes[id] = items;\n }\n }));\n }\n Promise.all(promises).then(done);\n }\n else\n {\n // tiny case where there's only text and no shapes/animations\n done();\n }\n}\n"],"names":[],"mappings":"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"}