CustumUpdaterTest

by yd_niku
♥0 | Line 136 | Modified 2010-04-20 04:41:03 | MIT License
play

ActionScript3 source code

/**
 * Copyright yd_niku ( http://wonderfl.net/user/yd_niku )
 * MIT License ( http://www.opensource.org/licenses/mit-license.php )
 * Downloaded from: http://wonderfl.net/c/7c8y
 */

package {
    import flash.display.Sprite;
    import flash.text.*;
    import org.libspark.betweenas3.BetweenAS3;
    public class FlashTest extends Sprite {
        public function FlashTest() {
            //I can't register my updater to BetweenAS3
	    //TextFieldUpdater.register( BetweenAS3.updaterClassRegistry );

            var field:TextField = new TextField();
            field.textColor = 0xFF0000;
            field.text= "TESTTEST";
            
            addChild(field);
            
            BetweenAS3.to( field, { textColor:0x0000FF }, 1 ).play();
        }
    }
}

	import flash.text.TextField;
	import org.libspark.betweenas3.core.updaters.AbstractUpdater;
	import org.libspark.betweenas3.core.utils.ClassRegistry;
	
	internal class TextFieldUpdater extends AbstractUpdater
	{
		public static const TARGET_PROPERTIES:Array = [
			'textColor'
		];
		
		public static function register(registry:ClassRegistry):void
		{
			registry.registerClassWithTargetClassAndPropertyNames(TextFieldUpdater, TextField, TARGET_PROPERTIES);
		}
		
		protected var _target:TextField = null;
		protected var _ftc:Boolean = false;
		protected var _stc:uint = NaN;
		protected var _dtc:uint = NaN;
		
		protected var _sr:Number = NaN;
		protected var _sg:Number = NaN;
		protected var _sb:Number = NaN;
		protected var _dr:Number = NaN;
		protected var _dg:Number = NaN;
		protected var _db:Number = NaN;

		protected var _flags:uint = 0;
		
		/**
		 * @inheritDoc
		 */
		override public function get target():Object
		{
			return _target;
		}
		
		/**
		 * @private
		 */
		override public function set target(value:Object):void
		{
			_target = value as TextField;trace(_stc)
		}
		
		/**
		 * @inheritDoc
		 */
		
		override public function setSourceValue(propertyName:String, value:Number, isRelative:Boolean = false):void
		{
			if (propertyName == 'textColor') {
				_ftc = true;
				_stc = value;
				_sr = (_stc >> 16 ) & 0xFF;
				_sg = (_stc >> 8 ) & 0xFF;
				_sb = _stc & 0xFF;
				_flags |= isRelative ? 0x001 : 0;
			}
		}
		
		/**
		 * @inheritDoc
		 */
		override public function setDestinationValue(propertyName:String, value:Number, isRelative:Boolean = false):void
		{
			if (propertyName == 'textColor') {
				_ftc = true;
				_dtc = value;
		
				_dr = (_dtc >> 16 ) & 0xFF;
				_dg = (_dtc >> 8 ) & 0xFF;
				_db = _dtc & 0xFF;
				
				_flags |= isRelative ? 0x002 : 0;
			}
		}
		
		override protected function resolveValues():void 
		{
			var t:TextField = _target;
			
			if (_ftc) {
				if (isNaN(_sr)) {
					_stc = t.textColor;
					
					_sr = (_stc >> 16 ) & 0xFF;
					_sg = (_stc >> 8 ) & 0xFF;
					_sb = _stc & 0xFF;
				}
				else if ((_flags & 0x001) != 0) {
					var vs:uint = t.textColor;
					var vsr:uint = (vs >> 16) & 0xFF;
					var vsg:uint = (vs >> 8) & 0xFF;
					var vsb:uint = (vs >> 0) & 0xFF;
					_sr += vsr;
					_sg += vsg;
					_sb += vsb;
					_stc = _sr<<16 | _sg<<8 | _sb;
				}
				if (isNaN(_dr)) {
					_dtc = t.textColor;
					_dr = (_dtc >> 16 ) & 0xFF;
					_dg = (_dtc >> 8 ) & 0xFF;
					_db = _dtc & 0xFF;
				}
				else if ((_flags & 0x002) != 0) {
					var vd:uint = t.textColor;
					var vdr:uint = (vd >> 16) & 0xFF;
					var vdg:uint = (vd >> 8) & 0xFF;
					var vdb:uint = (vd >> 0) & 0xFF;
					_dr += vdr;
					_dg += vdg;
					_db += vdb;
					_dtc = _dr<<16 | _dg<<8 | _db;
				}
			}
		}
		
		/**
		 * @inheritDoc
		 */
		override protected function updateObject(factor:Number):void 
		{
			var t:TextField = _target;
			
			var invert:Number = 1.0 - factor;
			
			if (_ftc) {
				var tr:uint = _sr * invert + _dr * factor;
				var tg:uint = _sg * invert + _dg* factor;
				var tb:uint = _sb* invert + _db * factor;
				t.textColor = tr << 16 | tg << 8 | tb;
			}
		}
		
		override protected function newInstance():AbstractUpdater 
		{
			return new TextFieldUpdater();
		}
		
		override protected function copyFrom(source:AbstractUpdater):void 
		{
			super.copyFrom(source);
			
			var obj:TextFieldUpdater = source as TextFieldUpdater;
			
			_target = obj._target;
			_stc = obj._stc;
			_dtc = obj._dtc;
			
			_sr = obj._sr;
			_sg = obj._sg;
			_sb = obj._sb;
			
			_dr = obj._sr;
			_dg = obj._sg;
			_db = obj._sb;
			
			_flags = obj._flags;
		}
	}