var Resource = require('asset-loader').Resource,
core = require('../core'),
spine = require('../spine');
module.exports = function ()
{
return function (resource, next)
{
// if this is a spritesheet object
if (resource.data && resource.data.bones)
{
/**
* use a bit of hackery to load the atlas file, here we assume that the .json, .atlas and .png files
* that correspond to the spine file are in the same base URL and that the .json and .atlas files
* have the same name
*/
var atlasPath = resource.url.substr(0, resource.url.lastIndexOf('.')) + '.atlas';
var atlasOptions = { crossOrigin: resource.crossOrigin, xhrType: Resource.XHR_RESPONSE_TYPE.TEXT };
this.loadResource(new Resource(atlasPath, atlasOptions), function (res) {
/////////////////////////////////////////////////
// TODO: THIS IS OLD STYLE
// create a new instance of a spine texture loader for this spine object //
var textureLoader = new SpineTextureLoader(this.url.substring(0, this.url.lastIndexOf('/')));
// create a spine atlas using the loaded text and a spine texture loader instance //
var spineAtlas = new spine.Atlas(this.ajaxRequest.responseText, textureLoader);
// now we use an atlas attachment loader //
var attachmentLoader = new spine.AtlasAttachmentLoader(spineAtlas);
// spine animation
var spineJsonParser = new spine.SkeletonJson(attachmentLoader);
var skeletonData = spineJsonParser.readSkeletonData(originalLoader.json);
core.utils.AnimCache[originalLoader.url] = skeletonData;
originalLoader.spine = skeletonData;
originalLoader.spineAtlas = spineAtlas;
originalLoader.spineAtlasLoader = atlasLoader;
// wait for textures to finish loading if needed
if (textureLoader.loadingCount > 0)
{
textureLoader.addEventListener('loadedBaseTexture', function (evt)
{
if (evt.content.content.loadingCount <= 0)
{
originalLoader.onLoaded();
}
});
}
else
{
originalLoader.onLoaded();
}
/////////////////////////////////////////////////
next();
});
}
else {
next();
}
};
};