YOUSKOOL

by FLASHMAFIA forked from Old Skool [Optimised] (diff: 176)
+ WebCam input
+ Code simplification
♥2 | Line 282 | Modified 2013-07-19 07:11:12 | MIT License
play

ActionScript3 source code

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

package {
    import flash.display.Bitmap;
    import flash.display.BitmapData;
    import flash.display.Sprite;
    import flash.events.Event;
    import flash.geom.Matrix;
    import flash.media.Camera;
    import flash.media.Video;

    [SWF(width='512', height='512')]
    public class YouSkool extends Sprite {
        private var NUM_MODES : int = 51;
        /* */
        private var vbmd : BitmapData;
        private var bmd : BitmapData;
        private var vid : Video;
        private var mirror : Matrix;
        private var lut : Vector.<uint> = new Vector.<uint>();
        private var vbuf : Vector.<uint> = new Vector.<uint>();
        private var buf : Vector.<uint> = new Vector.<uint>();
        private var fcnt : int;
        private var t : uint;
        private var mode : int;

        function YouSkool()
        {
            stage.stageFocusRect = mouseEnabled = tabEnabled = tabChildren = false;
            stage.scaleMode = 'noScale';
            stage.align = 'TL';
            stage.quality = 'high';
            stage.frameRate = 64;
            opaqueBackground = 0x0;

            var bm : Bitmap = new Bitmap(bmd = new BitmapData(512, 512, false));
            addChild(bm);

            vbmd = new BitmapData(512, 512, false);

            buf = new Vector.<uint>(512 * 512, true);

            var cam : Camera = Camera.getCamera();
            vid = new Video(512, 512);
            vid.deblocking = 1;
            vid.attachCamera(cam);

            mirror = new Matrix(-1, 0, 0, 1, 512, 0);

            mode = (NUM_MODES * Math.random()) >> 0;
            resetLUT(mode);

            addEventListener(Event.ENTER_FRAME, oef);
        }

        private function oef(e : Event) : void {
            fcnt++;

            if (!(fcnt & 63) == 1) {
                if (++mode > NUM_MODES) mode = 0;
                resetLUT(mode);
            }

            vbmd.draw(vid, mirror);
            vbuf = vbmd.getVector(vbmd.rect);

            var pos : uint = 512 * 512 - (fcnt & 1);
            while (pos > 1) {
                pos--;
                pos--;

                buf[pos] = vbuf[(((lut[(pos << 1) + 1] + t) & 511) << 9) + ((lut[pos << 1] + t) & 511)];
            }

            bmd.setVector(bmd.rect, buf);

            t += 5;
        }

        private function resetLUT(id : int) : void {
            var k : uint;

            for (var px : int = 0; px < 512; ++px) {
                for (var py : int = 0; py < 512; ++py) {
                    var xx : Number = -1.0 + 2.0 * py / 512;
                    var yy : Number = -1.0 + 2.0 * px / 512;

                    var d : Number = Math.sqrt(xx * xx + yy * yy);
                    var a : Number = Math.atan2(yy, xx);
                    var r : Number = 1;

                    /* ~ MAGIC FORMULAS! ~ */

                    var u : Number;
                    var v : Number;

                    switch(id) {
                        case 0 :
                            u = Math.cos(a) / d;
                            v = Math.sin(a) / d ;
                            break;
                        case 1 :
                            u = xx * Math.cos(2 * r) - yy * Math.sin(2 * r);
                            v = yy * Math.cos(2 * r) + xx * Math.sin(2 * r);
                            break;
                        case 2 :
                            u = 0.5 * a / Math.PI;
                            v = Math.sin(7 * r);
                            break;
                        case 3 :
                            u = 0.3 / (r + 0.5 * xx);
                            v = 3.0 * a / Math.PI;
                            break;
                        case 4 :
                            u = r * Math.cos(a + r);
                            v = r * Math.sin(a + r);
                            break;
                        case 5 :
                            u = 0.02 * yy + 0.03 * Math.cos(a * 3) / r;
                            v = 0.02 * xx + 0.03 * Math.sin(a * 3) / r;
                            break;
                        case 6 :
                            u = 1 / (r + 0.5 + 0.5 * Math.sin(5 * a));
                            v = a * 3 / Math.PI;
                            break;
                        case 7 :
                            u = 0.1 * xx / (0.11 + r * 0.5);
                            v = 0.1 * yy / (0.11 + r * 0.5);
                            break;
                        case 8 :
                            u = 0.2 / Math.abs(yy);
                            v = 0.2 * xx / Math.abs(yy);
                            break;
                        case 9 :
                            u = Math.abs(Math.cos(1.5 * a) / r);
                            v = 0.2 + 0.5 * Math.abs(Math.cos(1.5 * a) / r);
                            break;
                        case 10 :
                            u = 0.3 / (xx * xx - yy);
                            v = 1 - 0.1 * (Math.abs(xx) + Math.abs(1 / (xx * xx - yy)));
                            break;
                        case 11 :
                            u = Math.pow(yy, 2);
                            v = Math.pow(xx, 2);
                            break;
                        case 12 :
                            u = Math.pow(yy, 3);
                            v = Math.pow(xx, 2);
                            break;
                        case 13 :
                            u = Math.sin(yy);
                            v = Math.cos(xx);
                            break;
                        case 14 :
                            u = r;
                            v = 0.2 + 0.8 * (1.2 + 0.6 * Math.sin(13 * a)) / r;
                            break;
                        case 15 :
                            u = 0.2 * xx / Math.abs(yy);
                            v = Math.pow(xx, 2);
                            break;
                        case 16 :
                            u = 0.2 * xx / Math.sin(yy);
                            v = 0.2 * xx / Math.sin(yy);
                            break;
                        case 17 :
                            u = 0.2 * xx / Math.sin(yy);
                            v = 0.2 * yy / Math.cos(xx);
                            break;
                        case 18 :
                            u = 0.2 * xx / Math.tan(yy);
                            v = 0.2 * yy / Math.cos(yy);
                            break;
                        case 19 :
                            u = xx / Math.tan(yy) * d;
                            v = yy / Math.cos(yy) * d;
                            break;
                        case 20 :
                            u = r * xx / Math.tan(yy) * d * Math.sin(a);
                            v = yy / Math.cos(yy) * d * Math.tan(a);
                            break;
                        case 21 :
                            u = Math.pow(xx, 2) * Math.sin(r) * 0.2 * Math.cos(d);
                            v = Math.pow(yy, 2) * Math.cos(r) * 0.2 * Math.sin(d);
                            break;
                        case 22 :
                            u = a * (3 * Math.cos(d) - Math.cos(3 * d));
                            v = a * (3 * Math.sin(d) - Math.sin(3 * d));
                            break;
                        case 23 :
                            u = Math.pow(a, 2);
                            v = Math.pow(d, 2);
                            break;
                        case 24 :
                            u = Math.pow(r, 2);
                            v = Math.pow(d, 2);
                            break;
                        case 25 :
                            u = Math.pow((a + xx), 2);
                            v = Math.pow((3 * a - yy), 2);
                            break;
                        case 26 :
                            u = xx * Math.cos(3) * d;
                            v = yy * Math.sin(3) * d;
                            break;
                        case 27 :
                            u = xx * Math.cos(d);
                            v = yy * Math.sin(d);
                            break;
                        case 28 :
                            u = Math.pow(Math.pow(a, 2) - Math.pow(xx, 2), 2);
                            v = Math.pow((Math.pow(xx, 2) + (2 * a * yy) - Math.pow(a, 2)), 2);
                            break;
                        case 29 :
                            u = xx * d - r * Math.sin(d);
                            v = yy * d - r * Math.cos(d);
                            break;
                        case 30 :
                            u = (a + xx) * Math.cos(d) - yy * Math.cos((a / xx + 1) * d);
                            v = (a + yy) * Math.sin(d) - xx * Math.sin((a / yy + 1) * d);
                            break;
                        case 31 :
                            u = Math.sqrt(d * Math.PI) * xx;
                            v = Math.sqrt(r * Math.PI) * yy;
                            break;
                        case 32 :
                            u = xx * (Math.cos(d) + r * Math.sin(d));
                            v = yy * (Math.sin(d) + r * Math.cos(d));
                            break;
                        case 33 :
                            u = r * (Math.cos(xx) + r * Math.sin(a));
                            v = r * (Math.sin(yy) + r * Math.cos(a));
                            break;
                        case 34 :
                            u = Math.pow((Math.pow(xx, 2) + Math.pow(yy, 2) - 2 * a * xx), 2);
                            v = d * (Math.pow(xx, 2) + Math.pow(yy, 2));
                            break;
                        case 36 :
                            u = Math.sin(r) * Math.pow(yy, 2) + d * yy;
                            v = Math.cos(r) * Math.pow(xx, 2) + d * xx;
                            break;
                        case 37 :
                            u = Math.cos(a) / d;
                            v = Math.sin(a) / d * xx;
                            break;
                        case 38 :
                            u = Math.cos(a) / d - yy;
                            v = Math.sin(a) / d * xx;
                            break;
                        case 39 :
                            u = Math.cos(a) / d - yy;
                            v = Math.sin(a) / d - xx;
                            break;
                        case 40 :
                            u = Math.cos(a) / d * Math.cos(a) * 0.2;
                            v = Math.sin(a) / d * Math.sin(a) * 0.2;
                            break;
                        case 41 :
                            u = Math.cos(a) / d * Math.tan(a) * 0.2;
                            v = Math.sin(a) / d * Math.cos(a) * 0.2;
                            break;
                        case 42 :
                            u = 0.1 / yy;
                            v = 0.1 * xx / Math.abs(yy);
                            break;
                        case 43 :
                            u = Math.PI * 0.1 / Math.abs(yy) + Math.pow(d * Math.PI, 2);
                            v = 0.1 * xx / Math.abs(yy);
                            break;
                        case 44 :
                            u = 0.1 / (Math.abs(yy) + Math.pow(d * Math.PI, 2));
                            v = 0.1 * xx / Math.abs(yy);
                            break;
                        case 45 :
                            u = Math.cos(a) / d;
                            v = 10 * yy / Math.pow(Math.abs(d) * Math.PI, xx * yy * d);
                            break;
                        case 46 :
                            u = 10 * a / Math.PI;
                            v = 0.1 * yy / (Math.abs(d) * Math.PI,xx * yy * d);
                            break;
                        case 47 :
                            u = 50 * Math.pow(d, Math.PI);
                            v = 50 * Math.pow(d, Math.PI);
                            break;
                        case 48 :
                            u = 500 * Math.pow(d, Math.PI);
                            v = 50 * Math.pow(d, Math.PI);
                            break;
                        case 49 :
                            u = 500 * Math.pow(d, Math.PI);
                            v = 50 * Math.pow(r, Math.PI);
                            break;
                        case 50 :
                            u = 500 * Math.pow(d, Math.PI);
                            v = Math.sin(r) * a;
                            break;
                        default :
                            u = xx / yy;
                            v = 1 / yy;
                    }

                    lut[k++] = ((512.0 * u) >> 0) & 511;
                    lut[k++] = ((512.0 * v) >> 0) & 511;
                }
            }
        }
    }
}