Source: helper/spritesheet.js

goog.provide('lime.SpriteSheet');

goog.require('lime.fill.Frame');
/** @namespace lime.parser */
goog.require('lime.parser.ZWOPTEX');
goog.require('lime.parser.ZWOPTEX2');
goog.require('lime.parser.JSON');
goog.require('lime.parser.TMX');

/**
 * [Sprite Sheets]{@link http://www.limejs.com/2011/02/21/introducing-sprite-sheets} allows you to gather your image 
 * assets to the same image file and define frames that contains the needed keyframe animations, 
 * [multiple formats]{@link http://www.limejs.com/2011/02/27/new-formats-for-spritesheets} are supported.
 *
 * @param {string|Image|lime.Sprite} image The url, image or sprite, to use.
 * @param {object} metadata The metadata needed by the parser.
 * @param {lime.parser.JSON|lime.parser.TMX|lime.parser.ZWOPTEX|lime.parser.ZWOPTEX2} parser The parser that should be 
 * used instead of ZWOPTEX.
 * @constructor
 */
lime.SpriteSheet = function(image, metadata, parser) {
    this.image_ = new lime.fill.Image(image);

    if (!goog.isDef(parser) && goog.DEBUG && goog.global['console'] && goog.global['console']['warn']) {
        goog.global['console']['warn']('DEPRECATED: SpriteSheet 3rd parser parameter is now required.');
    }

    var p = parser || lime.parser.ZWOPTEX,
        data = metadata.data ? metadata.data() : metadata;

    this.metadata_ = p(data);
};

/**
 * Return the frame from the sprite sheet that has the given name.
 * @param {string} name The name of the frame.
 */
lime.SpriteSheet.prototype.getFrame = function(name) {
    var m = this.metadata_[name];
    if (!m) {
        throw ("Frame " + name + " not found in the spritesheet");
    }
    return new lime.fill.Frame(this.image_.image_, m[0], m[1], m[2], m[3]);
};

/**
 * Returns true if the sprite sheet contains a frame with the given name.
 * @param {string} name The name to check if the sprite sheete contains.
 */
lime.SpriteSheet.prototype.hasFrame = function(name) {
    return goog.isDef(this.metadata_[name]);
};