DustCleaning3D ...[ff: Dust Cleaning]
forked from Dust Cleaning (diff: 26)
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);
}
}
}
}