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;