topical media & game development

talk show tell print

#graphic-flex-image-effects-07-source-aeon-animators-FilterAnimator.ax

#graphic-flex-image-effects-07-source-aeon-animators-FilterAnimator.ax [swf] [flash] flex


  package aeon.animators {
  
          import aeon.Animation;
          import aeon.easing.Linear;
          import aeon.events.AnimationEvent;
  
          import flash.display.DisplayObject;
          import flash.filters.BitmapFilter;
          
          public class @ax-graphic-flex-image-effects-07-source-aeon-animators-FilterAnimator extends Animation {
  
                  private var _tween:Tweener;
                  private var _target:DisplayObject;
                  private var _startTransform:Object;
                  private var _endTransform:Object;
                  private var _time:Number;
                  private var _easeFunction:Function;
                  private var _filter:Object;
                  private var _filterIndex:int;
                  private var _removeFilter:Boolean;
          
                  public function @ax-graphic-flex-image-effects-07-source-aeon-animators-FilterAnimator(
                          target:DisplayObject,
                          filter:BitmapFilter,
                          startTransform:Object,
                          endTransform:Object,
                          filterIndex:int=-1,
                          time:Number=1000,
                          easeFunction:Function=null
                  ) {
                          _target = target;
                          _filter = filter;
                          _filterIndex = filterIndex;
                          _removeFilter = _filterIndex < 0;
                          _startTransform = startTransform;
                          _endTransform = endTransform;
                          _time = time;
                          if (easeFunction == null) easeFunction = Linear.easeNone;
                          _easeFunction = easeFunction;
                  }
  
                  private function addFilter():void {
                          var filters:Array = _target.filters || [];
                          _filterIndex = filters.length;
                          filters.push(_filter);
                          _target.filters = filters;
                  }
  
                  private function removeFilter():void {
                          var filters:Array = _target.filters;
                          filters.splice(_filterIndex, 1);
                          _target.filters = filters;
                  }
  
                  private function setFilter():void {
                          var filters:Array = _target.filters;
                          filters.splice(_filterIndex, 1, _filter);
                          _target.filters = filters;
                  }
  
                  private function setFilterProperties(transform:Object):void {
                          for (var property:String in transform) {
                                  _filter[property] = transform[property];
                          }
                  }
  
                  private function onEndTween(event:AnimationEvent):void {
                          if (_removeFilter) {
                                  removeFilter();
                          } else {
                                  setFilterProperties(_endTransform);
                                  setFilter();
                          }
                          stop();
                          dispatchEvent(new AnimationEvent(AnimationEvent.END));
                  }
          
                  private function onChangeTween(event:AnimationEvent):void {
                          setFilterProperties(_tween.currentValue);
                          setFilter();
                          dispatchEvent(new AnimationEvent(AnimationEvent.CHANGE));
                  }
  
                  override public function stop():void {
                          super.stop();
                          _tween.removeEventListener(AnimationEvent.CHANGE, onChangeTween);
                          _tween.removeEventListener(AnimationEvent.END, onEndTween);
                          _tween.stop();
                  }
          
                  override public function start():void {
                          setFilterProperties(_startTransform);
                          if (_removeFilter) {
                                  addFilter();
                          } else {
                                  setFilter();
                          }
                          _tween = new Tweener(null, _startTransform, _endTransform, _time, _easeFunction);
                          _tween.addEventListener(AnimationEvent.CHANGE, onChangeTween);
                          _tween.addEventListener(AnimationEvent.END, onEndTween);
                          _tween.start();
                          super.start();
                  }
  
          }
          
  }


(C) Æliens 04/09/2009

You may not copy or print any of this material without explicit permission of the author or the publisher. In case of other copyright issues, contact the author.