forked from: Plasma demo

by bradsedito forked from Plasma demo (diff: 6)
♥0 | Line 57 | Modified 2012-09-10 01:20:25 | 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/kIBC
 */





package 
{
    import flash.display.*;
    import flash.display.Bitmap;
    import flash.display.BitmapData;    
    import flash.utils.ByteArray;
    
    import flash.events.Event;
    import flash.events.MouseEvent;
    
    public class Demo extends Sprite 
    {
        var bd, time=0;
        var a=1, b=2, c=1, d=1, e=1;
        var sin  = new Array(512);
        var w=400, h=200;

        //var data = new 4);    // array of Bytes
        //var buff = new Uint8Array (data );    // two "views" on the same array
        var img = new ByteArray();
        
        public function Demo() 
        {
            stage.frameRate = 60;
            for (var i=0; i<512; i++) sin[i] = Math.floor(Math.sin(2*Math.PI/512*i) * 127 + 127);            
            
            // write as3 code here..
            bd = new BitmapData(w, h, true, 0x00000000);

            var bm = new Bitmap(bd);
            bm.scaleX = stage.stageWidth/w;
            bm.scaleY = stage.stageHeight/h;
            stage.addChild(bm);

            stage.addEventListener(Event.ENTER_FRAME, onEF);
            stage.addEventListener(MouseEvent.MOUSE_DOWN, onMD);
        }
        
        function onEF(ev)
        {
            visualize();
            bd.setPixels(bd.rect, img);
            time++;
        }
        
        function visualize()
        {
            img.position = 0;
            var hh = h*0.5 +10*d-400;
            var hw = w*0.5 +10*e-400;
            var fr = time<<2, i3 = 1/3;
            var am = a-1, bm = b-1, es = e<<2;
            for(var i=0; i<h; i++)    // rows
                for(var j=0; j<w; j++)    // columns
                {
                    var di = Math.floor( Math.sqrt((hh-i)*(hh-i) + (hw-j)*(hw-j)) );
                    var hi = (sin[(j*b+fr)&511]+sin[(di*a+fr*b)&511]+sin[359-(i*a+j*b+fr)&511])*i3;
                    
                    var re = sin[((hi << am)+d)  & 511];
                    var gr = sin[((hi << bm)+es) & 511];
                    var bl = sin[ (hi << bm)     & 511];
                    var col:uint = (255<<24 | bl<<16 | gr<<8 | re);
                    img.writeUnsignedInt(col);
                }
            img.position = 0;
        }
        
        function onMD(ev) { a = rand(4); b = rand(4); c = rand(8); d = rand(180); e = rand(180); }
        function rand(n)  { return 1+Math.floor(Math.random()*n); }
    }
}