/** * @author Inateno / http://inateno.com / http://dreamirl.com */ /** * @constructor SpriteRenderer * @augments Renderer * @class draw a sprite<br> * if the given sprite is animated, it'll animate it automatically according to you imagesDatas file<br> * checkout Renderer for standard parameters * @example var ship = new DE.GameObject( { * x: 500, y: 500, * renderer: new DE.SpriteRenderer( { "spriteName": "ship", "scale": 0.7, "offsetY": -30 } ) * } ); */ define( [ 'DE.Renderer', 'DE.ImageManager', 'DE.Sizes', 'DE.SpriteRenderer.render', 'DE.CONFIG', 'DE.Time', 'DE.Event' ], function( Renderer, ImageManager, Sizes, SpriteRender, CONFIG, Time, Event ) { function SpriteRenderer( params ) { if ( !params ) throw new Error( "SpriteRenderer :: You have to pass arguments object to instantiate -- see the doc" ); Renderer.call( this, params ); this.spriteName = params.spriteName || undefined; if ( !this.spriteName ) throw new Error( "SpriteRenderer :: No spriteName defined -- declaration canceled" ); if ( !ImageManager.images[ this.spriteName ] ) throw new Error( "SpriteRenderer :: Can't find image " + this.spriteName + " in imagesDatas" ); this.startFrame = params.startFrame || 0; this.endFrame = params.endFrame || ImageManager.images[ this.spriteName ].totalFrame || 0; this.totalFrame = ImageManager.images[ this.spriteName ].totalFrame || 0; this.totalLine = params.totalLine || ImageManager.images[ this.spriteName ].totalLine || 0; this.eachAnim = params.eachAnim || ImageManager.images[ this.spriteName ].eachAnim || 0; this.lastAnim = Date.now(); this.frameSizes = new Sizes( ImageManager.images[ this.spriteName ].widthFrame , ImageManager.images[ this.spriteName ].heightFrame , 1, 1 ); // need save given sizes, then: // params.w * physicRatio to get real width to display (if there is a width) // and when the currentRatioIndex change, get the new ratio and made again the calcul with saved values /* if ( params.w || params.width || params.Width || params.h || params.height || params.Height ) { this.savedSizes = { "w": params.width || params.w || params.Width || undefined , "h": params.height || params.h || params.Height || undefined }; this.sizes = new Sizes( this.savedSizes.w * physicRatio || ImageManager.images[ this.spriteName ].widthFrame , this.savedSizes.h * physicRatio || ImageManager.images[ this.spriteName ].heightFrame , params.scaleX, params.scaleY ); } */ params.scaleX = params.scale || params.scaleX || params.scalex || 1; params.scaleY = params.scale || params.scaleY || params.scaley || 1; this.sizes = new Sizes( params.width || params.w || ImageManager.images[ this.spriteName ].widthFrame , params.height || params.h || ImageManager.images[ this.spriteName ].heightFrame , params.scaleX, params.scaleY, this ); this.isAnimated = params.isAnimated || ImageManager.images[ this.spriteName ].isAnimated; this.isPaused = params.paused || params.isPaused ImageManager.images[ this.spriteName ].isPaused || false; this.isReversed = params.reversed || params.isreversed || params.isReversed || ImageManager.images[ this.spriteName ].isReversed || false; this.isOver = false; this.isLoop = ( params.isLoop != undefined ) ? params.isLoop : ImageManager.images[ this.spriteName ].isLoop; this.currentFrame = this.startFrame || 0; this.currentLine = params.startLine || 0; this.sizes._center(); this.onAnimEnd = function(){} Event.on( 'imageLoaded', function( n, nt, name ) { if ( name != this.spriteName ) return; this.frameSizes.width = ImageManager.images[ this.spriteName ].widthFrame; this.frameSizes.height = ImageManager.images[ this.spriteName ].heightFrame; this.sizes.setSizes( this.frameSizes ); }, this ); } SpriteRenderer.prototype = new Renderer(); SpriteRenderer.prototype.constructor = SpriteRenderer; SpriteRenderer.prototype.supr = Renderer.prototype; SpriteRenderer.prototype.DEName = "SpriteRenderer"; SpriteRenderer.prototype.render = SpriteRender; SpriteRenderer.prototype.setFrame = function( frame ) { if ( frame + 1 >= this.endFrame ) this.currentFrame = this.endFrame - 1; else if ( frame < this.startFrame ) this.currentFrame = this.startFrame; else this.currentFrame = frame; } SpriteRenderer.prototype.setLine = function( line ) { if ( line + 1 >= this.totalLine ) this.currentLine = this.totalLine - 1; else this.currentLine = line; } SpriteRenderer.prototype.restartAnim = function() { this.isOver = false; if ( !this.isReversed ) this.currentFrame = this.startFrame; else this.currentFrame = this.endFrame - 1; this.lastAnim = Time.currentTime; } SpriteRenderer.prototype.setPause = function( val, disableAnimation ) { this.isPaused = val; if ( !val && !this.isAnimated ) { this.isAnimated = true; this.lastAnim = Date.now(); } } SpriteRenderer.prototype.setEndFrame = function( v ) { if ( this.totalFrame <= v ) this.endFrame = this.totalFrame - 1; else this.endFrame = v; } SpriteRenderer.prototype.setDelay = function( delay ) { this.eachAnim = delay; } SpriteRenderer.prototype.setLoop = function( bool ) { this.isLoop = bool; } CONFIG.debug.log( "SpriteRenderer loaded", 3 ); return SpriteRenderer; } );