/**
* Copyright mutantleg ( http://wonderfl.net/user/mutantleg )
* MIT License ( http://www.opensource.org/licenses/mit-license.php )
* Downloaded from: http://wonderfl.net/c/l2Ca
*/
package {
import flash.display.BlendMode;
import flash.geom.ColorTransform;
import flash.geom.Matrix;
import flash.events.Event;
import flash.display.BitmapData;
import flash.display.Sprite;
public class FlashTest extends Sprite {
public function FlashTest() {
skin = new BitmapData(64,64, true, 0);
var ax:Number; var ay:Number;
ax = skin.width*0.5;
ay = skin.height*0.5;
var i:int; var k:int;
var w:int; var h:int;
var c:uint; var n:int; var a:int;
var m:Number; var d:Number;
d = skin.width*0.5;
w= skin.width; h = skin.height;
for (i = 0; i < h; i++)
for (k = 0; k < w;k++)
{
m = 1 - (getMag(ax-k,ay-i) /d);
n = m * 255; if (n > 255) {n = 255;} if (n < 4) { n = 0; }
//a = n *4; if (a > 255) {a=255;}
c = (n<<24) | (n<<16)|(n<<8)|n;
// c = 0x880000F0; if (n < 8) { c = 0x0; }
skin.setPixel32(k,i, c);
}//nextk
graphics.beginBitmapFill(skin,null);
graphics.drawRect(0,0,465,465);
graphics.endFill();
back = new BitmapData(128,128, false, 0);
back.perlinNoise(5,12,5,2,true,true,7,true);
dark = new BitmapData(465,465, true,0);
canvas = new BitmapData(465,465,false, 0);
stage.addEventListener(Event.ENTER_FRAME, onEnter);
}//ctor
public function getMag(ax:Number, ay:Number):Number
{ return Math.sqrt(ax*ax+ay*ay); }
public var skin:BitmapData;
public var canvas:BitmapData;
public var dark:BitmapData;
public var back:BitmapData;
public var ct:ColorTransform = new ColorTransform();
public var gt:int;
public function onEnter(e:Event):void
{
graphics.clear();
gt +=1;
canvas.fillRect(canvas.rect, 0xFF);
drawSprite(canvas,back,230,230,0,false,false,4,4);
dark.fillRect(dark.rect, 0xFF000000);
var blend:String;
blend = BlendMode.ADD;
//blend = BlendMode.HARDLIGHT;
//blend = BlendMode.SCREEN;
//blend = BlendMode.LIGHTEN;
// blend = BlendMode.NORMAL;
// blend = BlendMode.DIFFERENCE;
// ct.blueMultiplier = 1; ct.greenMultiplier = 1; ct.redMultiplier = 1;
ct.blueMultiplier=0.3; ct.redMultiplier = 0.1; ct.greenMultiplier = 1; ct.alphaMultiplier=0.5;
drawSprite(dark, skin, 230,230, gt*0.01, false,false,8+Math.sin(gt*0.03),8+Math.sin(gt*0.03),blend,ct);
ct.blueMultiplier=0.1;ct.greenMultiplier=0.5; ct.redMultiplier = 1; ct.alphaMultiplier=1;
drawSprite(dark, skin, stage.mouseX, stage.mouseY, 0.7, false,false,7,7,blend,ct);
canvas.draw(dark,null, null, BlendMode.MULTIPLY);
graphics.beginBitmapFill(canvas, null, false,false);
graphics.drawRect(0,0,465,465);
graphics.endFill();
}//onenter
public var mirMat:Matrix = new Matrix();
public function drawSprite(to:BitmapData, spr:BitmapData, ax:Number, ay:Number,
ang:Number=0, xmir:Boolean=false,ymir:Boolean=false,
scalex:Number=1.0, scaley:Number=1.0, blend:String = null, trans:ColorTransform=null):void
{
var aw:Number; var ah:Number; var rad:Number;
rad = spr.width > spr.height ? spr.width : spr.height;
if (to.width < ax - rad) { return; } if (to.height < ay - rad) { return; }
if (0 > ax + rad) { return; } if (0 > ay + rad) { return; }
aw = spr.width * 0.5; ah = spr.height * 0.5;
mirMat.identity(); mirMat.tx = -aw; mirMat.ty = -ah;
//fix (should mirror before rotate -- (how this affects xy scale?) (seems to be ok)
mirMat.scale(xmir? -scalex:scalex, ymir? -scaley:scaley ); mirMat.rotate(ang);
mirMat.translate( ax, ay );
to.draw(spr, mirMat, trans, blend, null, false);
}//drawsprite2
}//classend
}