/** * System takes care of updating all the entities (based on their component data) * @param apiSystem GameLib.API.System * @constructor */ GameLib.System.Animation = function( apiSystem ) { GameLib.System.call( this, apiSystem ); }; GameLib.System.Animation.prototype = Object.create(GameLib.System.prototype); GameLib.System.Animation.prototype.constructor = GameLib.System.Animation; GameLib.System.Animation.prototype.start = function() { GameLib.System.prototype.start.call(this); this.renderSubscriptions = []; this.animateSubscription = GameLib.Event.Subscribe( GameLib.Event.ANIMATE, this.animate.bind(this) ); }; GameLib.System.Animation.prototype.animate = function(animationData, clientCallback) { this.renderSubscriptions.push( new GameLib.Event.Subscribe( GameLib.Event.BEFORE_RENDER, function(subscriptionIndex) { return function(renderData) { if ( clientCallback( { renderData : renderData, animationData : animationData } ) ) { this.renderSubscriptions[subscriptionIndex].remove(); animationData.done(); } }.bind(this); }.bind(this)(this.renderSubscriptions.length) ) ); }; GameLib.System.Animation.prototype.stop = function() { GameLib.System.prototype.stop.call(this); this.animateSubscription.remove(); };