YOUSKOOL
forked from Old Skool [Optimised] (diff: 176)
+ WebCam input + Code simplification
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;
}
}
}
}
}