diff --git a/spine-ts/index.html b/spine-ts/index.html index c625f53e8..4b101afe3 100644 --- a/spine-ts/index.html +++ b/spine-ts/index.html @@ -45,6 +45,7 @@
  • Slot Objects - (v7)
  • Slot Objects (Rotation, scale test) - (v7)
  • Bounds - (v7)
  • +
  • Inline loading - (v7)
  • Bunny Mark - (v7)
  • Phaser
  • diff --git a/spine-ts/spine-pixi-v7/example/inline-loading.html b/spine-ts/spine-pixi-v7/example/inline-loading.html new file mode 100644 index 000000000..60cedfba0 --- /dev/null +++ b/spine-ts/spine-pixi-v7/example/inline-loading.html @@ -0,0 +1,103 @@ + + + + spine-pixi + + + + + + + + + + \ No newline at end of file diff --git a/spine-ts/spine-pixi-v7/src/assets/atlasLoader.ts b/spine-ts/spine-pixi-v7/src/assets/atlasLoader.ts index 76b851f33..1f6ef7694 100644 --- a/spine-ts/spine-pixi-v7/src/assets/atlasLoader.ts +++ b/spine-ts/spine-pixi-v7/src/assets/atlasLoader.ts @@ -29,7 +29,7 @@ import { TextureAtlas } from "@esotericsoftware/spine-core"; import { SpineTexture } from "../SpineTexture.js"; -import type { AssetExtension, Loader, UnresolvedAsset } from "@pixi/assets"; +import type { AssetExtension, Loader, ResolvedAsset, UnresolvedAsset } from "@pixi/assets"; import { Assets, copySearchParams } from "@pixi/assets"; import { LoaderParserPriority, checkExtension } from "@pixi/assets"; import type { Texture } from "@pixi/core"; @@ -37,6 +37,8 @@ import { ALPHA_MODES, ExtensionType, settings, utils, BaseTexture, extensions } type RawAtlas = string; +const loaderName = "spineTextureAtlasLoader"; + const spineTextureAtlasLoader: AssetExtension = { extension: ExtensionType.Asset, @@ -53,10 +55,11 @@ const spineTextureAtlasLoader: AssetExtension { - const isExtensionRight = checkExtension(options.src, ".atlas"); + testParse(asset: unknown, options: ResolvedAsset): Promise { + const isExtensionRight = checkExtension(options.src!, ".atlas"); const isString = typeof asset === "string"; + const isExplicitLoadParserSet = options.loadParser === loaderName; - return Promise.resolve(isExtensionRight && isString); + return Promise.resolve((isExtensionRight || isExplicitLoadParserSet) && isString); }, unload(atlas: TextureAtlas) { diff --git a/spine-ts/spine-pixi-v7/src/assets/skeletonLoader.ts b/spine-ts/spine-pixi-v7/src/assets/skeletonLoader.ts index f55ad758c..610ef120a 100644 --- a/spine-ts/spine-pixi-v7/src/assets/skeletonLoader.ts +++ b/spine-ts/spine-pixi-v7/src/assets/skeletonLoader.ts @@ -27,13 +27,15 @@ * THE SPINE RUNTIMES, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. *****************************************************************************/ -import type { AssetExtension } from "@pixi/assets"; +import type { AssetExtension, ResolvedAsset } from "@pixi/assets"; import { LoaderParserPriority, checkExtension } from "@pixi/assets"; import { ExtensionType, settings, extensions } from "@pixi/core"; type SkeletonJsonAsset = any; type SkeletonBinaryAsset = Uint8Array; +const loaderName = "spineSkeletonLoader"; + function isJson(resource: any): resource is SkeletonJsonAsset { return resource.hasOwnProperty("bones"); } @@ -46,9 +48,11 @@ const spineLoaderExtension: AssetExtension { - const isJsonSpineModel = checkExtension(options.src, ".json") && isJson(asset); - const isBinarySpineModel = checkExtension(options.src, ".skel") && isBuffer(asset); + testParse(asset: unknown, options: ResolvedAsset): Promise { + const isJsonSpineModel = checkExtension(options.src!, ".json") && isJson(asset); + const isBinarySpineModel = checkExtension(options.src!, ".skel") && isBuffer(asset); + const isExplicitLoadParserSet = options.loadParser === loaderName; - return Promise.resolve(isJsonSpineModel || isBinarySpineModel); + return Promise.resolve(isJsonSpineModel || isBinarySpineModel || isExplicitLoadParserSet); }, }, } as AssetExtension; diff --git a/spine-ts/spine-pixi-v8/example/inline-loading.html b/spine-ts/spine-pixi-v8/example/inline-loading.html new file mode 100644 index 000000000..65cd7d987 --- /dev/null +++ b/spine-ts/spine-pixi-v8/example/inline-loading.html @@ -0,0 +1,101 @@ + + + + spine-pixi-v8 + + + + + + + + + \ No newline at end of file diff --git a/spine-ts/spine-pixi-v8/src/assets/atlasLoader.ts b/spine-ts/spine-pixi-v8/src/assets/atlasLoader.ts index b5b33138d..d3ed5c0c7 100644 --- a/spine-ts/spine-pixi-v8/src/assets/atlasLoader.ts +++ b/spine-ts/spine-pixi-v8/src/assets/atlasLoader.ts @@ -45,6 +45,8 @@ import type { AssetExtension, Loader, ResolvedAsset, Texture, UnresolvedAsset } type RawAtlas = string; +const loaderName = "spineTextureAtlasLoader"; + const spineTextureAtlasLoader: AssetExtension = { extension: ExtensionType.Asset, @@ -62,10 +64,11 @@ const spineTextureAtlasLoader: AssetExtension { const isExtensionRight = checkExtension(options.src as string, '.atlas'); const isString = typeof asset === 'string'; + const isExplicitLoadParserSet = options.loadParser === loaderName; - return Promise.resolve(isExtensionRight && isString); + return Promise.resolve((isExtensionRight || isExplicitLoadParserSet) && isString); }, unload (atlas: TextureAtlas) { @@ -129,7 +133,9 @@ const spineTextureAtlasLoader: AssetExtension { const isJsonSpineModel = checkExtension(options.src!, '.json') && isJson(asset); const isBinarySpineModel = checkExtension(options.src!, '.skel') && isBuffer(asset); + const isExplicitLoadParserSet = options.loadParser === loaderName; - return Promise.resolve(isJsonSpineModel || isBinarySpineModel); + return Promise.resolve(isJsonSpineModel || isBinarySpineModel || isExplicitLoadParserSet); }, }, } as AssetExtension;