import { Resource } from 'resource-loader';
import path from 'path';
import { Spritesheet } from '../core';
export default function ()
{
return function spritesheetParser(resource, next)
{
let resourcePath;
const imageResourceName = `${resource.name}_image`;
// skip if no data, its not json, it isn't spritesheet data, or the image resource already exists
if (!resource.data
|| resource.type !== Resource.TYPE.JSON
|| !resource.data.frames
|| this.resources[imageResourceName]
)
{
next();
return;
}
const loadOptions = {
crossOrigin: resource.crossOrigin,
loadType: Resource.LOAD_TYPE.IMAGE,
metadata: resource.metadata.imageMetadata,
parentResource: resource,
};
// Prepend url path unless the resource image is a data url
if (resource.isDataUrl)
{
resourcePath = resource.data.meta.image;
}
else
{
resourcePath = `${path.dirname(resource.url.replace(this.baseUrl, ''))}/${resource.data.meta.image}`;
}
// load the image for this sheet
this.add(imageResourceName, resourcePath, loadOptions, function onImageLoad(res)
{
const spritesheet = new Spritesheet(
res.texture.baseTexture,
resource.data,
resource.url
);
spritesheet.parse(() =>
{
resource.spritesheet = spritesheet;
resource.textures = spritesheet.textures;
next();
});
});
};
}