var Clone = require('./clone'); var Blocks = require('../engine/blocks'); /** * Sprite to be used on the Scratch stage. * All clones of a sprite have shared blocks, shared costumes, shared variables. * @param {?Blocks} blocks Shared blocks object for all clones of sprite. * @param {Runtime} runtime Reference to the runtime. * @constructor */ function Sprite (blocks, runtime) { this.runtime = runtime; if (!blocks) { // Shared set of blocks for all clones. blocks = new Blocks(); } this.blocks = blocks; /** * Human-readable name for this sprite (and all clones). * @type {string} */ this.name = ''; /** * List of costumes for this sprite. * Each entry is an object, e.g., * { * skin: "costume.svg", * name: "Costume Name", * bitmapResolution: 2, * rotationCenterX: 0, * rotationCenterY: 0 * } * @type {Array.} */ this.costumes = []; /** * List of clones for this sprite, including the original. * @type {Array.} */ this.clones = []; } /** * Create a clone of this sprite. * @returns {!Clone} Newly created clone. */ Sprite.prototype.createClone = function () { var newClone = new Clone(this, this.runtime); newClone.isOriginal = this.clones.length == 0; this.clones.push(newClone); if (newClone.isOriginal) { newClone.initDrawable(); newClone.updateAllDrawableProperties(); } return newClone; }; module.exports = Sprite;