DustCleaning3D ...[ff: Dust Cleaning]

by bradsedito forked from Dust Cleaning (diff: 26)
♥0 | Line 82 | Modified 2012-10-02 05:05:44 | MIT License
play

ActionScript3 source code

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

// forked from Caiim.'s Dust Cleaning
package {
    import flash.net.URLRequest;
    import flash.display.*;
    import flash.geom.*;
    import flash.text.TextField;
    import flash.events.*;


    public class FlashTest extends Sprite 
    {        
        private const COUNT  :int  =  1000;    //12000;
        private const AOE    :int  = 60;
        private var   bd:BitmapData = new BitmapData(stage.stageWidth, stage.stageHeight, true, 0);        
        private var   px:Vector.<int> = new Vector.<int>();
        private var   py:Vector.<int> = new Vector.<int>();
        private var   pz:Vector.<int> = new Vector.<int>();
        private var   powerX:Vector.<Number> = new Vector.<Number>();
        private var   powerY:Vector.<Number> = new Vector.<Number>();
        private var   powerZ:Vector.<Number> = new Vector.<Number>();
        private var   power3D_X:Vector.<Vector3D> = new Vector.<Vector3D>();
        private var   power3D_Y:Vector.<Vector3D> = new Vector.<Vector3D>();
        private var   power3D_Z:Vector.<Vector3D> = new Vector.<Vector3D>();
        private var   direction3D:Vector.<Vector3D> = new Vector.<Vector3D>();
        private var   direction:Vector.<int> = new Vector.<int>();                
        private var   url:String = "http://www.webdesign.org/img_articles/17313/time1.jpg";
      //private var   url:String = "http://www.allkpop.com/wp-content/uploads/2012/08/20120820_PSy_Gangnamstyle.jpg";
        
        
        public function FlashTest() {
            
            //image loader
            var loader:Loader = new Loader();
            loader.load(new URLRequest(url));
            addChild(loader);
            
            for(var i:int = 0;i<COUNT;i++)
            {
                px.push(Math.random()*stage.stageWidth);
                py.push(Math.random()*stage.stageHeight);
                direction.push(0);
                powerX.push(0);
                powerY.push(0);
            }
            
            addChild(new Bitmap(bd));
            addEventListener(Event.ENTER_FRAME, update);
            stage.addEventListener(MouseEvent.MOUSE_MOVE, push);
            
        }

        
        private function push(e:MouseEvent):void
        {
            for(var i:int = 0 ; i < COUNT ; i++)
            {
                var dist:Number = Math.sqrt(Math.pow(mouseY - py[i], 2) + Math.pow(mouseX - px[i], 2));
                if(dist <= AOE)
                {
                    direction[i] = Math.atan2(py[i] - mouseY, px[i] - mouseX);
                    powerX[i] = powerY[i] = (AOE - dist) / AOE * 10;
                }
            }

        }

        
        private function update(e:Event):void
        {
            bd.fillRect(bd.rect, 0x00000000);
            for(var i:int = 0; i < COUNT ; i++)
            {
                px[i] += Math.cos(direction[i]) * powerX[i];
                py[i] += Math.sin(direction[i]) * powerY[i];
                
                if(px[i] <= 0 || px[i] >= stage.stageWidth)
                {
                    powerX[i] *= -1;
                    powerX[i] *= 1.2;
                }
                if(py[i] <= 0 || py[i] >= stage.stageHeight)
                {
                    powerY[i] *= -1;
                    powerY[i] *= 1.2;
                }
                
                
                var limit:Number = 1;
                powerX[i] *= 0.9;
                if(powerX[i] < limit && powerX[i] > -limit)
                   powerX[i] = 0;
                    
                powerY[i] *= 0.9;
                if(powerY[i] < limit && powerY[i] > -limit)
                   powerY[i] = 0;
                
                for(var offX:int = -1 ; offX <= 0; offX++)
                    for(var offY:int = -1 ; offY <= 0; offY++)
                        bd.setPixel32(px[i] + offX, py[i] + offY, 0xffff5500);
            }
        }

    }
}