File:SpriteSheetTask.js
/**
* @module EaselJS Display
* @namespace springroll.easeljs
* @requires Core
*/
(function()
{
var Task = include('springroll.Task'),
SpriteSheet = include('createjs.SpriteSheet');
/**
* Create a createjs.SpriteSheet object, see SpriteSheet for more information
* @class SpriteSheetTask
* @extends springroll.Task
* @constructor
* @private
* @param {Object} asset The data properties
* @param {Array} asset.images The source images
* @param {Array} asset.frames The SpriteSheet source frame data
* @param {String} asset.type Asset type must be "easeljs"
* @param {Boolean} [asset.cache=false] If we should cache the result
* @param {String} [asset.id] Id of asset
* @param {Function} [asset.complete] The event to call when done
* @param {String} [asset.globalProperty='ss'] The global window object for spritesheets
*/
var SpriteSheetTask = function(asset)
{
Task.call(this, asset, asset.images[0]);
/**
* The collection of images paths
* @property {String} images
*/
this.images = asset.images;
/**
* The frame definitions as used by the createjs.SpriteSheet object
* @property {Array|Object} frames
*/
this.frames = asset.frames;
/**
* The name of the window object library items hang on
* @property {String} globalProperty
* @default 'ss'
*/
this.globalProperty = asset.globalProperty || 'ss';
};
// Reference to prototype
var p = Task.extend(SpriteSheetTask);
/**
* Test if we should run this task
* @method test
* @static
* @param {Object} asset The asset to check
* @return {Boolean} If the asset is compatible with this asset
*/
SpriteSheetTask.test = function(asset)
{
return asset.images &&
asset.type == "easeljs" &&
Array.isArray(asset.images) &&
asset.frames;
};
/**
* Start the task
* @method start
* @param {Function} callback Callback when finished
*/
p.start = function(callback)
{
var globalProperty = this.globalProperty;
var id = this.id;
var frames = this.frames;
this.load(this.images, function(results)
{
var spriteSheet = new SpriteSheet(
{
images: results,
frames: frames
});
// Add to the window
namespace(globalProperty)[id] = spriteSheet;
// When spritesheet is destroyed, remove properties
spriteSheet.addEventListener('destroy', function()
{
delete window[globalProperty][id];
for (var i = results.length - 1; i >= 0; --i)
results[i].src = "";
});
// Return spritesheet
callback(spriteSheet);
});
};
// Assign to namespace
namespace('springroll.easeljs').SpriteSheetTask = SpriteSheetTask;
}());