rodrigolopezpeker

Genome2D > GMovieClipExtended

Apr 5th, 2013
121
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. /**
  2.  *
  3.  * GMovieClipExtended
  4.  *
  5.  * Extends GMovieClip to add reverse playing and repeat counter.
  6.  * Considerations:
  7.  * - reverseAndPlay takes priority over repeatable.
  8.  * - repeatCount represents 1 entire timeline, so use n*2 in reverseAndPlay.
  9.  *
  10.  * Example:
  11.  *
  12.  * var mc: GMovieClipExtended = GNodeFactory.createNodeWithComponent(GMovieClipExtended) as GMovieClipExtended ;
  13.  * mc.setTextureAtlas(someAtlas);
  14.  * Genome2D.getInstance().root.addChild(explosion_mc.node);
  15.  * mc.frames = ['frame1', 'frame2', 'frame3'] ;
  16.  * mc.reverseAndPlay = true ;
  17.  * mc.repeatCount = 2 ; // 1 in-out animation
  18.  *
  19.  */
  20. package {
  21.     import com.genome2d.components.renderables.GMovieClip;
  22.     import com.genome2d.core.GNode;
  23.     import com.genome2d.g2d;
  24.  
  25.     use namespace g2d ;
  26.  
  27.     public class GMovieClipExtended extends GMovieClip{
  28.  
  29.         public var reverseAndPlay:Boolean = false ;
  30.         public var repeatCount:int = 1 ;
  31.         private var _playDirection: int = 1 ;
  32.         private var _repeatCounter:int = 0 ;
  33.  
  34.         public function GMovieClipExtended(pNode:GNode) {
  35.             super(pNode);
  36.         }
  37.  
  38.         override public function update(p_deltaTime:Number, p_parentTransformUpdate:Boolean, p_parentColorUpdate:Boolean):void {
  39.             if(!cTexture) return ;
  40.             if(_bPlaying){
  41.                 _nAccumulatedTime += p_deltaTime ;
  42.                 if( _nAccumulatedTime >= _nSpeed ){
  43.                     // new frame.
  44.                     _iCurrentFrame += _nAccumulatedTime/_nSpeed * _playDirection ;
  45.                     var lastFrame: Boolean = false ;
  46.                     if( reverseAndPlay ){
  47.                         if( _iCurrentFrame < _iFrameIdsLength-1 && _iCurrentFrame > 0 ){
  48.                             _iCurrentFrame %= _iFrameIdsLength ;
  49.                         } else {
  50.                             lastFrame = true ;
  51.                         }
  52.                     } else {
  53.                         if( _iCurrentFrame < _iFrameIdsLength ){
  54.                             _iCurrentFrame %= _iFrameIdsLength ;
  55.                         } else {
  56.                             lastFrame = true ;
  57.                         }
  58.                     }
  59.                     if( lastFrame ){
  60.                         if ( repeatCount > 0 && ++_repeatCounter >= repeatCount ) {
  61.                             _repeatCounter = 0 ;
  62.                             _iCurrentFrame = _playDirection > 0 ? _iFrameIdsLength-1 : 0 ;
  63.                             _playDirection = 1 ;
  64.                             _bPlaying = false ;
  65.                         } else {
  66.                             if( reverseAndPlay ) {
  67.                                 _playDirection *= -1;
  68.                             } else if( repeatable ){
  69.                                 _iCurrentFrame = 0 ;
  70.                             }
  71.                         }
  72.                     }
  73.                     cTexture = _cTextureAtlas.getTexture(_aFrameIds[_iCurrentFrame]);
  74.                 }
  75.                 _nAccumulatedTime %= _nSpeed ;
  76.             }
  77.         }
  78.     }
  79. }
Add Comment
Please, Sign In to add comment