Dead Code Preservation :: Archived AS3 works from wonderfl.net

Prism Color Drawing

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





package 
{
    import flash.display.Sprite;
    import flash.events.Event;
    import flash.events.MouseEvent;    
    import flash.display.BitmapData;
    import flash.display.Bitmap;    
    import frocessing.color.ColorHSV;
     
    [SWF(width="465", height="465", frameRate="60")]
    

    public class FlashTest extends Sprite 
    {
        private static const WIDTH:int = 465;
        private static const HEIGHT:int = 465;         
        private var _layer_path:Sprite;
        private var _layer_tmp:Sprite;
        private var _layer_main:BitmapData;
        private var _layer_tmp2:BitmapData;        
        private var _particle_list:/*Particle*/Array;
        private var _flag_draw:Boolean = false;
        private var _hsvcolor:ColorHSV;
        
        public function FlashTest() {
            if(stage) init();
            else addEventListener(Event.ADDED_TO_STAGE, init);            
        }
        
        private function init(e:Event = null):void
        {
            removeEventListener(Event.ADDED_TO_STAGE, init);
            
            graphics.beginFill(0);
            graphics.drawRect(0, 0, WIDTH, HEIGHT);
            graphics.endFill();
            
            _layer_main = new BitmapData(WIDTH, HEIGHT, true, 0);
            addChild(new Bitmap(_layer_main));
            
            _layer_path = new Sprite();
            addChild(_layer_path);
            
            _layer_tmp = new Sprite();
            _layer_tmp2 = new BitmapData(WIDTH, HEIGHT, true, 0);
            
            _hsvcolor = new ColorHSV();
            
            _particle_list = [];
            for(var i:int=0; i<300; i++)
            {
                _particle_list.push(new Particle(WIDTH / 2, HEIGHT / 2, 0.01 + 0.0001 * i, 0.90 + i * 0.0001));
            }
            SetParticleColor();
            
            addEventListener(Event.ENTER_FRAME, EnterFrameHandler);
            stage.addEventListener(MouseEvent.MOUSE_DOWN, MouseDownHandler);
            stage.addEventListener(MouseEvent.MOUSE_UP, MouseUpHandler);
        }
        
        private function EnterFrameHandler(e:Event):void
        {
            var length:int, i:int;
            
            length = _particle_list.length;
            for(i = 0; i < length; i++)
            {
                _particle_list[i].Move(stage.mouseX, stage.mouseY);
            }
            
            _layer_path.graphics.clear();
            _layer_path.graphics.lineStyle(1, 0xffffff);
            for(i = 0; i < length; i++)
            {
                _layer_path.graphics.drawCircle(_particle_list[i].x, _particle_list[i].y, 2);
            }
            _layer_tmp.graphics.clear();
            _layer_tmp.blendMode = "screen";
            if(_flag_draw)
            {
                for(i=0; i<length - 1; i++)
                {
                    var p1:Particle = _particle_list[i],
                    p2:Particle = _particle_list[i+1];
                    
                    _layer_tmp.graphics.beginFill(_particle_list[i].color, 0.4);
                    _layer_tmp.graphics.moveTo(p1.prevx, p1.prevy);
                    _layer_tmp.graphics.lineTo(p1.x, p1.y);
                    _layer_tmp.graphics.lineTo(p2.x, p2.y);
                    _layer_tmp.graphics.lineTo(p2.prevx, p2.prevy);
                    _layer_tmp.graphics.endFill();
                }
            }
            
            _layer_tmp2.lock();
            _layer_tmp2.fillRect(_layer_tmp2.rect, 0);
            _layer_tmp2.draw(_layer_tmp);
            _layer_tmp2.unlock();
            
            _layer_main.lock();
            _layer_main.draw(_layer_tmp2, null, null, "add");
            _layer_main.unlock();
        }
        
        private function MouseDownHandler(e:MouseEvent):void
        {
            _flag_draw = true;
            SetParticleColor();
        }
        
        private function MouseUpHandler(e:MouseEvent):void
        {
            _flag_draw = false;
        }
        
        private function SetParticleColor():void
        {
            var length:int, i:int;
            
            _hsvcolor.h = Math.random() * 360;
            
            length = _particle_list.length;
            for(i = 0; i < length; i++)
            {
                _particle_list[i].color = _hsvcolor.value32;
                _hsvcolor.h += 0.5;
            }
        }
    }
}

class Particle {
    private var _x:Number;
    public function get x():Number {return _x;}
    private var _y:Number;
    public function get y():Number {return _y;}
    
    private var _prevx:Number;
    public function get prevx():Number {return _prevx;}
    private var _prevy:Number;
    public function get prevy():Number{return _prevy;}
    
    private var _movex:Number;
    private var _movey:Number;
    
    private var _p1:Number;
    private var _p2:Number;
    
    private var _color:uint;
    public function set color(val:uint) : void {_color = val;}
    public function get color():uint {return _color;}
    public function Particle(x:Number, y:Number, p1:Number, p2:Number) {
        _movex = 0;
        _movey = 0;
        _x = x;
        _y = y;
        _p1 = p1;
        _p2 = p2;
    }
    
    public function Move(tx:Number, ty:Number):void
    {
        _prevx = _x;
        _prevy = _y;
        
        if(!(Math.abs(tx-_x) < 1 && Math.abs(ty - _y)<1))
        {
            _movex += (tx - _x) * _p1;
            _movey += (ty - _y) * _p1;
        }
        
        _movex *= _p2;
        _movey *= _p2;
        
        _x += _movex;
        _y += _movey;
    }
}