BlinkingAnimation.as

Go to the documentation of this file.
00001 import mx.utils.Delegate;
00002 
00003 import gugga.animations.IAnimation;
00004 import gugga.common.EventDescriptor;
00005 import gugga.events.EventDispatcher;
00006 import gugga.utils.Listener;
00007 import gugga.utils.OnEnterFrameBeacon;
00008 
00012 class gugga.animations.BlinkingAnimation 
00013         extends EventDispatcher 
00014         implements IAnimation 
00015 {
00016         private var mMovieClip:MovieClip; 
00017         private var mBlinksCount:Number;
00018         private var mBlinkFramesDuration:Number = 1;
00019         
00020         private var mFramesSinceLastBlink:Number;
00021         private var mBlinksElapsed:Number;
00022         private var mInitialVisibility:Boolean;
00023         
00024         private var mOnEnterFrameBeaconListener:Listener;
00025         
00026         private var mCuePoints : Array;
00027         
00028         public function BlinkingAnimation(
00029                 aMovieClip:MovieClip, aBlinksCount:Number, aBlinkFramesDuration:Number) 
00030         {
00031                 super();
00032                 
00033                 mMovieClip = aMovieClip;
00034                 mBlinksCount = aBlinksCount;
00035                 
00036                 if(aBlinkFramesDuration)
00037                 {
00038                         mBlinkFramesDuration = aBlinkFramesDuration;
00039                 }
00040                 
00041                 mCuePoints = new Array();
00042         }
00043 
00044         public function addCuePoint(aBlinkNumber:Number, aEventName:String) : Void 
00045         {
00046                 mCuePoints.push({position: aBlinkNumber, event:aEventName});
00047                 mCuePoints.sortOn("position");
00048         }
00049 
00050         public function start() : Void 
00051         {
00052                 if(!isRunning())
00053                 {
00054                         mBlinksElapsed = 0;
00055                         mFramesSinceLastBlink = 0;
00056                         mInitialVisibility = mMovieClip._visible;
00057                         
00058                         dispatchEvent({type: "start", target: this});
00059                         
00060                         if(mBlinksCount > 0)
00061                         {               
00062                                 mOnEnterFrameBeaconListener = Listener.create(
00063                                         new EventDescriptor(OnEnterFrameBeacon.Instance, "onEnterFrame"), 
00064                                         Delegate.create(this, onEnterFrame));
00065                         }
00066                         else
00067                         {
00068                                 completed();
00069                         }
00070                 }
00071         }
00072 
00073         public function isRunning() : Boolean 
00074         {
00075                 return (mOnEnterFrameBeaconListener != null);
00076         }
00077 
00078         public function isImmediatelyInterruptable() : Boolean 
00079         {
00080                 return true;
00081         }
00082 
00083         public function interrupt() : Void 
00084         {
00085                 mOnEnterFrameBeaconListener.stop();
00086                 mOnEnterFrameBeaconListener = null;
00087                 mMovieClip._visible = mInitialVisibility;
00088                 
00089                 dispatchEvent({type: "interrupted", target: this});
00090         }
00091         
00092         private function onEnterFrame() : Void 
00093         {
00094                 // TODO: Implement cue point event dispatching
00095                 mFramesSinceLastBlink++;
00096                 
00097                 if(mFramesSinceLastBlink >= mBlinkFramesDuration)
00098                 {
00099                         mBlinksElapsed++;
00100                         mFramesSinceLastBlink = 0;
00101                 }
00102                 
00103                 if(mBlinksElapsed <= mBlinksCount)
00104                 {       
00105                         mMovieClip._visible = !mMovieClip._visible;
00106                 }
00107                 else
00108                 {
00109                         completed();
00110                 }
00111         }
00112         
00113         private function completed() : Void 
00114         {
00115                 mOnEnterFrameBeaconListener.stop();
00116                 mOnEnterFrameBeaconListener = null;
00117                 
00118                 dispatchEvent({type:"completed", target:this});
00119         }
00120 }

Generated on Fri May 11 17:12:42 2007 for GuggaFramework by  doxygen 1.5.2