/**
* Copyright mutantleg ( http://wonderfl.net/user/mutantleg )
* MIT License ( http://www.opensource.org/licenses/mit-license.php )
* Downloaded from: http://wonderfl.net/c/AcYy
*/
package {
import flash.geom.Rectangle;
import flash.display.BitmapData;
import flash.events.Event;
import flash.display.Sprite;
public class FlashTest extends Sprite {
public function FlashTest() {
stage.quality = "LOW";
map = new BitmapData(465,465, false, 0);
var r:Rectangle;
var i:int;
r = new Rectangle();
r.width=465;r.height=465;
map.fillRect(r,0xFF);
r.width=450; r.height=450;
r.x=8; r.y =8;
map.fillRect(r, 0);
for (i=0;i<32;i+=1)
{
r.x=Math.random()*465;
r.y=Math.random()*465;
r.width=32;
r.height=32;
map.fillRect(r, Math.random()*0xFFffFF);
}//nexti
stage.addEventListener(Event.ENTER_FRAME, onEnter);
}//ctor
public var map:BitmapData;
public var cx:Number = 230;
public var cy:Number = 230;
public var ang:Number = 3.1415*1.5;
public function isWall(ax:Number, ay:Number):Boolean
{ return map.getPixel(ax,ay) > 0; }
public var colh:Number = 90; //135;
public function drawColumn(x0:Number, d:Number):void
{
var dx:Number; var dy:Number;
dy = 235;
if (d < 0){d=0;}
//d*=1.5;
var ay:Number;
var by:Number;
ay = dy + d * colh;
by = dy - d * colh;
graphics.moveTo(x0, ay);
graphics.lineTo(x0, by);
}//drawcolumn
public function getCol(c:uint, t:Number):uint
{
var rc:Number;
var gc:Number;
var bc:Number;
bc = (c&0xFF) * t;
gc = ((c>>8)&0xFF) * t ;
rc = ((c>>16)&0xFF) * t;
return (bc&0xFF)| ((gc&0xFF)<<8) | ((rc&0xFF)<<16) ;
}//getcol
public function onEnter(e:Event):void
{
graphics.clear();
graphics.lineStyle(2, 0);
graphics.beginFill(0x88, 1);
graphics.drawRect(0,235-colh,465,colh);
graphics.endFill();
graphics.beginFill(0x880000, 1);
graphics.drawRect(0,235,465,colh);
graphics.endFill();
graphics.beginFill(0, 1);
graphics.drawRect(0,235-16,465,32);
graphics.endFill();
graphics.drawCircle(cx,cy, 8);
cx = stage.mouseX;
cy = stage.mouseY;
// var ang:Number;
//ang = 3.1415*1.5;
/*
if (cx<32){ ang+=0.1; }
if (cx>430){ ang-=0.1; }
*/
// if (isWall(cx,cy)) { ang += 0.1; }
var ta:Number;
var ta2:Number;
ta = ang;
var ax:Number; var ay:Number;
ax = cx + Math.cos(ta) * 160;
ay = cy + Math.sin(ta) * 160;
graphics.drawCircle(ax,ay, 4);
graphics.moveTo(cx,cy);
graphics.lineTo(ax,ay);
ta = ang - 0.785375;
ta2 = ang + 0.785375;
var x0:Number; var y0:Number;
var x1:Number; var y1:Number;
var x2:Number; var y2:Number;
var x3:Number; var y3:Number;
var nr:Number;
var fr:Number;
nr = 16;
fr = 320+160;
x0 = cx + Math.cos(ta) * nr;
y0 = cy + Math.sin(ta) * nr;
x1 = cx + Math.cos(ta2) * nr;
y1 = cy + Math.sin(ta2) * nr;
graphics.moveTo(x0,y0);
graphics.lineTo(x1,y1);
ta = ang - 0.685375;
ta2 = ang + 0.685375;
x2 = cx + Math.cos(ta) * fr;
y2 = cy + Math.sin(ta) * fr;
x3 = cx + Math.cos(ta2) * fr;
y3 = cy + Math.sin(ta2) * fr;
graphics.moveTo(x2,y2);
graphics.lineTo(x3,y3);
var c:uint;
var tw:Number;
var t:Number; var u:Number;
var bx:Number; var by:Number;
var kx:Number; var ky:Number;
var d:Number;
var nx:Number; var ny:Number;
nx = Math.cos(ang);
ny = Math.sin(ang);
for (t=0;t<1;t+=0.005)
{
// tw = t;
// tw = Math.sin(t*0.785);
ax = x0 + (x1-x0)*t;
ay = y0 + (y1-y0)*t;
bx = x2 + (x3-x2)*t;
by = y2 + (y3-y2)*t;
ax=cx;
ay=cy;
tw = ta+(ta2-ta)*t;
// bx = cx + Math.cos(tw) * 320;
// by = cy + Math.sin(tw) * 320;
// ax = cx + Math.cos(tw) * 16;
// ay = cy + Math.sin(tw) * 16;
//graphics.moveTo(ax,ay);
//graphics.lineTo(bx,by);
c = 0;
for (u=0;u<0.85;u+=0.01)
{
kx = ax +(bx-ax)*u;
ky = ay +(by-ay)*u;
//graphics.drawCircle(kx,ky, 4);
// if (isWall(kx,ky)) { break; }
if (isWall(kx,ky)) { c = map.getPixel(kx,ky); break; }
}//nextu
/*
graphics.lineStyle(2, 0);
graphics.moveTo(ax,ay);
graphics.lineTo(kx,ky);
*/
if (c!= 0)
{
d = (kx-cx)*nx + (ky-cy)*ny;
d /= fr;
u = d * 2;
//graphics.lineStyle(6, c);
graphics.lineStyle(3, getCol(c, 1-u));
drawColumn(t*465, 1-u);
}
}//nextt
}//onenter
}//classend
}