FilterTweenAnimation.as

Go to the documentation of this file.
00001 import mx.utils.Delegate;
00002 
00003 import gugga.animations.IAnimation;
00004 import gugga.animations.PropertiesTweenAnimation;
00005 import gugga.animations.PropertiesTweenAnimationType;
00006 import gugga.debug.Assertion;
00007 import gugga.events.EventDispatcher;
00008 import gugga.tween.TweensManager;
00009 import gugga.utils.EventRethrower;
00010 
00014 class gugga.animations.FilterTweenAnimation
00015         extends EventDispatcher implements IAnimation 
00016 {
00017         private var mSubject : MovieClip;
00018         private var mFilterObjectType : Function;
00019         private var mTweenedFilterProperties : Array;
00020         private var mTweenToValues : Array;
00021         private var mTweenTime : Number;
00022         private var mEasingEquatation : Function;
00023         
00024         private var mFiltersArray : Array;
00025         private var mFilterInstance : Object;
00026         private var mFilterIndex : Number;
00027         
00028         private var mPropertiesTweenAnimation : PropertiesTweenAnimation;
00029         private var mTweenType : PropertiesTweenAnimationType;
00030         private var mTweensUpdatedDelegate : Function;
00031         
00032         public function FilterTweenAnimation()
00033         {
00034                 super();
00035                 
00036                 mPropertiesTweenAnimation = new PropertiesTweenAnimation();
00037                 
00038                 EventRethrower.create(this, mPropertiesTweenAnimation, "completed");
00039                 EventRethrower.create(this, mPropertiesTweenAnimation, "interrupted");
00040                 EventRethrower.create(this, mPropertiesTweenAnimation, "start");
00041                 
00042                 mPropertiesTweenAnimation.addEventListener("completed", Delegate.create(this, onCompleted));
00043                 
00044                 mTweensUpdatedDelegate = Delegate.create(this, onTweensUpdated);
00045         }
00046         
00047         public function setFrameTween
00048         (
00049                 aSubject : MovieClip, 
00050                 aFilterObjectType : Function, 
00051                 aTweenedFilterProperties : Array, 
00052                 aTweenToValues : Array,
00053                 aTweenTime : Number,
00054                 aEasingEquation : Function
00055         ) : Void
00056         {
00057                 mSubject = aSubject;
00058                 mFilterObjectType = aFilterObjectType;
00059                 mTweenedFilterProperties = aTweenedFilterProperties;
00060                 mTweenToValues = aTweenToValues;
00061                 mTweenTime = aTweenTime;
00062                 mEasingEquatation = aEasingEquation;
00063                 
00064                 mTweenType = PropertiesTweenAnimationType.FrameTween;
00065         }
00066         
00067         public function setTimeTween
00068         (
00069                 aSubject : MovieClip, 
00070                 aFilterObjectType : Function, 
00071                 aTweenedFilterProperties : Array, 
00072                 aTweenToValues : Array,
00073                 aTweenTime : Number, 
00074                 aEasingEquation : Function
00075         ) : Void
00076         {
00077                 mSubject = aSubject;
00078                 mFilterObjectType = aFilterObjectType;
00079                 mTweenedFilterProperties = aTweenedFilterProperties;
00080                 mTweenToValues = aTweenToValues;
00081                 mTweenTime = aTweenTime;
00082                 mEasingEquatation = aEasingEquation;
00083                 
00084                 mTweenType = PropertiesTweenAnimationType.TimeTween;
00085         }
00086         
00087         public function addCuePoint(aPosition : Number, aEventName : String) : Void 
00088         {
00089                 mPropertiesTweenAnimation.addCuePoint(aPosition, aEventName);
00090                 EventRethrower.create(this, mPropertiesTweenAnimation, aEventName);
00091         }
00092 
00093         public function start() : Void 
00094         {
00095                 mFiltersArray = mSubject.filters;
00096                 if(!mFiltersArray)
00097                 {
00098                         mFiltersArray = new Array();
00099                 }
00100                 
00101                 for (var i : Number = 0; i < mFiltersArray.length; i++) 
00102                 {
00103                         if(mFiltersArray[i] instanceof mFilterObjectType)
00104                         {
00105                                 Assertion.warningIfTrue(
00106                                         (mFilterInstance != null),
00107                                         "Subject's filters array contains multiple instances of the tweened filter type.", 
00108                                         this, arguments);
00109                                         
00110                                 mFilterInstance = mFiltersArray[i]; 
00111                                 mFilterIndex = i;
00112                         }
00113                 }
00114                 
00115                 if(!mFilterInstance)
00116                 {
00117                         mFilterInstance = new mFilterObjectType();
00118                         mFilterIndex = 0;
00119                         mFiltersArray.push(mFilterInstance);
00120                 }
00121                 
00122                 if(mTweenType == PropertiesTweenAnimationType.FrameTween)
00123                 {
00124                         mPropertiesTweenAnimation.setFrameTween(
00125                                 mFilterInstance, mTweenedFilterProperties, mTweenToValues, mTweenTime, mEasingEquatation);
00126                 }
00127                 else
00128                 {
00129                         mPropertiesTweenAnimation.setTimeTween(
00130                                 mFilterInstance, mTweenedFilterProperties, mTweenToValues, mTweenTime, mEasingEquatation);
00131                 }
00132                 
00133                 TweensManager.Instance.addEventListener("tweensUpdated", mTweensUpdatedDelegate);
00134                 
00135                 mPropertiesTweenAnimation.start();
00136         }
00137 
00138         public function isRunning() : Boolean 
00139         {
00140                 return mPropertiesTweenAnimation.isRunning();
00141         }
00142 
00143         public function isImmediatelyInterruptable() : Boolean 
00144         {
00145                 return mPropertiesTweenAnimation.isImmediatelyInterruptable();
00146         }
00147 
00148         public function interrupt() : Void 
00149         {
00150                 TweensManager.Instance.removeEventListener("tweensUpdated", mTweensUpdatedDelegate);
00151                 mPropertiesTweenAnimation.interrupt();
00152                 mFilterInstance = null;
00153                 mFiltersArray = null;
00154         }
00155         
00156         private function onTweensUpdated () : Void
00157         {
00158                 mFiltersArray[mFilterIndex] = mFilterInstance;
00159                 mSubject.filters = mFiltersArray;
00160         }
00161         
00162         private function onCompleted () : Void
00163         {
00164                 TweensManager.Instance.removeEventListener("tweensUpdated", mTweensUpdatedDelegate);
00165                 mFilterInstance = null;
00166                 mFiltersArray = null;
00167         }
00168 }

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