STELLA
/**
* Copyright spanvega ( http://wonderfl.net/user/spanvega )
* MIT License ( http://www.opensource.org/licenses/mit-license.php )
* Downloaded from: http://wonderfl.net/c/xHXa
*/
package
{
import flash.geom.*;
import flash.events.*;
import flash.display.*;
import flash.filters.*;
import com.bit101.components.*;
/** @author SPANVEGA // CHRISTIAN **/
[ SWF (width = '465', height = '465', backgroundColor = '0x000000', frameRate = '50')]
public class STELLA extends Sprite
{
private var tran : ColorTransform = new ColorTransform (1, 1, 1, 0.95);
private var blur : BlurFilter = new BlurFilter (2.5, 2.5, 1);
private var seed : int = Math.random () * uint.MAX_VALUE;
private var p_vec : Vector.<PARTICLE> = new <PARTICLE>[];
private var m_vec : Vector.<Matrix> = new <Matrix>[];
private var blend : Vector.<String> = new <String>[];
private var o : Array = [new Point (), new Point ()];
private var size : int = 465, half : int = size >> 1;
private var rect : Rectangle = new Rectangle (0, 0, size, size);
private var emission : Boolean = true;
private var quantity : Number = 75;
private var velocity : Number = 5;
private var speed : Number = 1.5;
private var limit : int = 10000;
private var image : BitmapData;
private var pixel : BitmapData;
private var model : BitmapData;
private var q : ProgressBar;
private var rad : Number;
private var num : Number;
private var m : Matrix, s : String;
private var p : PARTICLE;
private var r : Number, g : Number;
private var b : Number, c : uint;
private var i : int;
public function STELLA ()
{
stage ? init () : addEventListener (Event.ADDED_TO_STAGE, init);
}
private function init () : void
{
if (hasEventListener (Event.ADDED_TO_STAGE))
{removeEventListener (Event.ADDED_TO_STAGE, init);}
stage.scaleMode = 'noScale';
m_vec.push
(
new Matrix ( 1, 1,-1, 1, half,-half),
new Matrix (-1,-1,-1, 1, half * 3, half),
new Matrix (-1,-1, 1,-1, half, half * 3),
new Matrix ( 1, 1, 1,-1,-half, half)
);
blend.push
(
BlendMode.INVERT, BlendMode.HARDLIGHT,
BlendMode.MULTIPLY, BlendMode.MULTIPLY
);
//
model = new BitmapData (half, half, false, 0);
image = new BitmapData (size, size, true, 0);
pixel = image.clone ();
//
addChild (new Bitmap (image));
addChild (new Bitmap (pixel));
gui ();
//
frame (); stage.addEventListener (Event.ENTER_FRAME, frame);
}
private function frame (e : Event = null) : void
{
o[1].x =- (o[0].x += speed);
o[1].y =- (o[0].y -= speed);
// --o CANVAS
model.perlinNoise (233, 233, 2, seed, true, false, 7, false, o);
for each (s in blend) model.draw (model, null, null, s);
for each (m in m_vec) image.draw (model, m);
// --o PIXELS
pixel.lock ();
pixel.colorTransform (rect, tran);
pixel.applyFilter (pixel, rect, rect.topLeft, blur);
for each (p in p_vec)
{
c = image.getPixel (p.x, p.y);
r = (c << 8 >>> 24) / 0x80;
g = (c << 16 >>> 24) / 0x80;
b = (c << 24 >>> 24) / 0x40;
p.x += p.vx * (r - b);
p.y += p.vy * (g - b);
pixel.setPixel32 (p.x, p.y, p.c);
if (p.y < 0 || p.y > size || p.x < 0 || p.x > size)
{
p_vec.splice (p_vec.indexOf (p), 1); p = null;
}
}
//
num = (emission ? (p_vec.length < limit ? quantity % (limit - p_vec.length) : 0) : 0);
for (i = 0; i < num; i++)
{
p = new PARTICLE ();
p.c = 0xFFFFFFFF;
p.x = half;
p.y = half;
rad = (Math.random () * 360) * (3.1415926535 / 180);
p.vx = Math.cos (rad) * velocity;
p.vy = Math.sin (rad) * velocity;
p_vec.push (p);
}
pixel.unlock ();
q.value = p_vec.length / limit;
}
private function gui () : void
{
with (Style) { BACKGROUND = LABEL_TEXT = DROPSHADOW = 0xFFFFFF; BUTTON_FACE = PROGRESS_BAR = 0x000000; }
with (addChild (new Sprite ()))
{ graphics.beginFill (0x000000, 0.5); graphics.drawRect (0, 440, 465, 25); }
var w : HUISlider = new HUISlider (this, 10, 443, 'VELOCITY', function () : void { velocity = w.value; });
with (w) { setSliderParams (1, 10, velocity); width = 160; labelPrecision = 2; tick = 0.01; draw (); }
var s : HUISlider = new HUISlider (this, 170, 443, 'SPEED', function () : void { speed = s.value; });
with (s) { setSliderParams (-2.5, 2.5, speed); width = 160; labelPrecision = 2; draw (); }
var c : CheckBox = new CheckBox (this, 333, 447, '', function () : void { emission = c.selected; });
c.selected = emission;
q = new ProgressBar (this, 353, 447);
with (q) { height = 10; draw (); }
}
}
}
//
internal class PARTICLE
{
public var c : uint;
public var x : Number, vx : Number;
public var y : Number, vy : Number;
}