'use strict'; exports.__esModule = true; exports.default = function () { return function spritesheetParser(resource, next) { var resourcePath = void 0; var 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.isJson || !resource.data.frames || this.resources[imageResourceName]) { next(); return; } var loadOptions = { crossOrigin: resource.crossOrigin, loadType: _resourceLoader.Resource.LOAD_TYPE.IMAGE, metadata: resource.metadata.imageMetadata }; // Prepend url path unless the resource image is a data url if (resource.isDataUrl) { resourcePath = resource.data.meta.image; } else { resourcePath = _path2.default.dirname(resource.url.replace(this.baseUrl, '')) + '/' + resource.data.meta.image; } // load the image for this sheet this.add(imageResourceName, resourcePath, loadOptions, function onImageLoad(res) { resource.textures = {}; var frames = resource.data.frames; var frameKeys = Object.keys(frames); var baseTexture = res.texture.baseTexture; var resolution = core.utils.getResolutionOfUrl(resource.url); var scale = resource.data.meta.scale; // for now (to keep things compatible) resolution overrides scale // Support scale field on spritesheet if (resolution === 1 && scale !== undefined && scale !== 1) { baseTexture.resolution = resolution = scale; baseTexture.update(); } var batchIndex = 0; function processFrames(initialFrameIndex, maxFrames) { var frameIndex = initialFrameIndex; while (frameIndex - initialFrameIndex < maxFrames && frameIndex < frameKeys.length) { var i = frameKeys[frameIndex]; var rect = frames[i].frame; if (rect) { var frame = null; var trim = null; var orig = new core.Rectangle(0, 0, frames[i].sourceSize.w / resolution, frames[i].sourceSize.h / resolution); if (frames[i].rotated) { frame = new core.Rectangle(rect.x / resolution, rect.y / resolution, rect.h / resolution, rect.w / resolution); } else { frame = new core.Rectangle(rect.x / resolution, rect.y / resolution, rect.w / resolution, rect.h / resolution); } // Check to see if the sprite is trimmed if (frames[i].trimmed) { trim = new core.Rectangle(frames[i].spriteSourceSize.x / resolution, frames[i].spriteSourceSize.y / resolution, rect.w / resolution, rect.h / resolution); } resource.textures[i] = new core.Texture(baseTexture, frame, orig, trim, frames[i].rotated ? 2 : 0); // lets also add the frame to pixi's global cache for fromFrame and fromImage functions core.utils.TextureCache[i] = resource.textures[i]; } frameIndex++; } } function shouldProcessNextBatch() { return batchIndex * BATCH_SIZE < frameKeys.length; } function processNextBatch(done) { processFrames(batchIndex * BATCH_SIZE, BATCH_SIZE); batchIndex++; setTimeout(done, 0); } function iteration() { processNextBatch(function () { if (shouldProcessNextBatch()) { iteration(); } else { next(); } }); } if (frameKeys.length <= BATCH_SIZE) { processFrames(0, BATCH_SIZE); next(); } else { iteration(); } }); }; }; var _resourceLoader = require('resource-loader'); var _path = require('path'); var _path2 = _interopRequireDefault(_path); var _core = require('../core'); var core = _interopRequireWildcard(_core); function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj.default = obj; return newObj; } } function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } var BATCH_SIZE = 1000; //# sourceMappingURL=spritesheetParser.js.map