topical media & game development

talk show tell print

lib-as-com-asinmotion-effects-Effect.ax

lib-as-com-asinmotion-effects-Effect.ax (swf ) [ flash ] flex


  package com.asinmotion.effects{
          import flash.display.DisplayObject;
          import com.asinmotion.easing.*;
          import flash.events.TimerEvent;
          import flash.utils.Timer;
          import flash.events.Event;
          import flash.events.EventDispatcher;
          import flash.geom.Rectangle;
          
          public class @ax-lib-as-com-asinmotion-effects-Effect extends EventDispatcher{
                  private var _easing:Function = Linear.easeNone;
                  private var _duration:Number = 1000;
                  private var _startVals:Object = {};
                  private var _endVals:Object = {};
                  private var _changeVals:Object = {};
                  private var _target:DisplayObject;
                  private var _delay:Number;
                  private var _iterations:Number;
                  private var _tweenTimer:Timer;
                  
                  public function @ax-lib-as-com-asinmotion-effects-Effect(o:Object = null):void{
                          if(o)make(o);
                  }
                  //*****
                  //private functions
                  //*****                
                  function update(e:TimerEvent):void{
                          dispatchEvent(new Event('update'))
                          render(e.target.currentCount)
                  }
                  
                  //*****
                  //public functions
                  //******
                  function render(timePos:Number):void{
                          for(var i:String in _endVals){
                                  var newVal:Number =_easing(timePos,_startVals[i],_changeVals[i],_iterations)
                                  if(_target.hasOwnProperty(i)){
                                          _target[i] = newVal;
                                  }else{
                                          if(i.match(/scroll/)){
                                                  var prop:String = i.replace(/scroll/,'').toLowerCase();
                                                  var modRect:Rectangle = _target.scrollRect;
                                                  modRect[prop] = newVal;
                                                  _target.scrollRect = modRect;
                                                  trace(_target.scrollRect)
                                          }
                                  }
                          }
                          dispatchEvent(new Event('render'))
                  }
                  
                    function finished(e:TimerEvent):void{
                          for(var i:String in _endVals){
                                  if(_target.hasOwnProperty(i)){
                                          if(i.match(/scroll/)){
                                                  _target.scrollRect[i..replace(/scroll/,'').toLowerCase()] = _endVals[i];
                                          } else {
                                                  _target[i] = _endVals[i];
                                          }
                                  }
                          }
                          dispatchEvent(new Event('complete'))
                    }
                    function addChangeProps():void{
                            for(var i:String in _endVals){
                                    _changeVals[i] = _endVals[i] - _startVals[i];
                            }
                    }
                    function addStartProp(s:String, n:Number):void{
                            var prop:String = s.replace(/start_/,'');
                            if(s.match(/scroll/)){
                                    var scrollProp:String = prop.replace(/scroll/,'').toLowerCase();
                                    if(_target.scrollRect){
                                            if(_target.scrollRect[scrollProp]!=n)_target.scrollRect[scrollProp]=n;
                                    }else{
                                            var rect:Rectangle = new Rectangle(0,0,_target.width,_target.height);
                                            rect[scrollProp] = n;
                                            _target.scrollRect = rect;
                                    }
                                    _startVals[prop] = _target.scrollRect[scrollProp];
                            } else {
                                    _startVals[prop] = n;
                                    if(_target[prop]!=n)_target[prop]=n;
                            }
  
                    }
                    
                    function addEndProp(s:String, n:Number):void{
                            var prop:String = s.replace(/end_/,'')||s;
                            if(s.match(/scroll/)){
                                    _endVals[prop] = n;
                            } else {
                                    _endVals[prop] = n;
                                    if(!_startVals.hasOwnProperty(prop))addStartProp(prop,_target[prop]);        
                            }
                    }
                                      
                    function make(o:Object):void{
                            target = o.target;
                          _easing = o.ease||Linear.easeNone;
                          duration = o.time||1000;
                          o.setPropertyIsEnumerable("target",false);
                          o.setPropertyIsEnumerable("ease",false);
                          o.setPropertyIsEnumerable("time",false);
                          for(var i:String in o){
                                  if(i.match(/start_/)){
                                          addStartProp(i,o[i])
                                  }else if (i.match(/end_/)||_target.hasOwnProperty(i)){
                                          addEndProp(i,o[i])
                                  }
                          }
                    }
                    
                    public function run():void{
                            addChangeProps();
                            _tweenTimer= new Timer(_delay,_iterations);
                            _tweenTimer.addEventListener('timer',update)
                            _tweenTimer.addEventListener('timerComplete',finished)
                            _tweenTimer.start();
                    }
                    public function set ease(f:Function):void{
                             _easing = f;
                    }
                    
                    public function set duration(n:Number):void{
                             _duration = n;
                             if(_delay){_iterations = _duration/_delay;}
                    }
                    
                    public function set target(d:DisplayObject):void{
                            _target = d;
                            _delay = 1000/_target.stage.frameRate;
                            if(_delay){_iterations = _duration/_delay;}
                    }
                    
  
          }
  }


(C) Æliens 20/2/2008

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.