/**
* Copyright mutantleg ( http://wonderfl.net/user/mutantleg )
* MIT License ( http://www.opensource.org/licenses/mit-license.php )
* Downloaded from: http://wonderfl.net/c/WYWR
*/
package {
import flash.events.Event;
import flash.display.Sprite;
public class FlashTest extends Sprite {
public function FlashTest() {
stage.quality ="LOW";
mw=16;mh=16;
vecMap=new Vector.<int>(mw*mh,false);
vecFlood=new Vector.<int>(mw*mh,false);
vecTemp=new Vector.<int>(mw*mh,false);
setWall(2,2, 1);
setWall(2,3, 1);
var i:int;
for(i=0;i<64;i+=1)
{
setWall(i,9,1);
setWall(Math.random()*mw, Math.random()*mh,1);
}
setWall(8,9,0);
setWall(4,4,0);
setFlood(4,4,3);
stage.addEventListener(Event.ENTER_FRAME, onEnter);
}//ctor
public var vecMap:Vector.<int>;
public var vecFlood:Vector.<int>;
public var vecTemp:Vector.<int>;
public var mw:int = 0;
public var mh:int = 0;
public var cw:Number=16;
public var ch:Number=16;
public function setWall(ax:int, ay:int, t:int):void
{ if (ax<0||ax>=mw||ay<0||ay>=mh){return;} vecMap[ax+(ay*mw)]=t; }
public function getWall(ax:int, ay:int):int
{ if (ax<0||ax>=mw||ay<0||ay>=mh){return 1;} return vecMap[ax+(ay*mw)]; }
public function setFlood(ax:int, ay:int, t:int):void
{ if (ax<0||ax>=mw||ay<0||ay>=mh){return;}
if (vecMap[ax+(ay*mw)]>0){return ;}
vecFlood[ax+(ay*mw)]=t; }
public function getFlood(ax:int, ay:int):int
{ if (ax<0||ax>=mw||ay<0||ay>=mh){return 0;}
if (vecMap[ax+(ay*mw)]>0){return 0;}
return vecFlood[ax+(ay*mw)]; }
public function setTemp(ax:int, ay:int, t:int):void
{ if (ax<0||ax>=mw||ay<0||ay>=mh){return;} vecTemp[ax+(ay*mw)]=t; }
public function incFlood(ax:int, ay:int, t:int):void
{ var k:int;
k = getFlood(ax,ay);
k+=t;
setTemp(ax,ay,k);
}
public var gt:int = 0;
public function onEnter(e:Event):void
{
graphics.clear();
graphics.lineStyle(2, 0);
setWall(4,4,0);
setFlood(4,4,6);
var mx:Number; var my:Number;
mx=stage.mouseX; my=stage.mouseY;
setFlood(Math.floor(mx/cw),Math.floor(my/ch), 6);
var t:int; var yt:int;
var i:int; var k:int;
for(i=0;i<mh;i+=1)
{ yt=i*mw;
for(k=0;k<mw;k+=1)
{
//graphics.drawRect(k*cw,i*ch,cw,ch);
t = vecMap[k+yt];
if (t==1) {
graphics.beginFill(0,1);
graphics.drawRect(k*cw,i*ch,cw,ch);
graphics.endFill();
}
t = vecFlood[k+yt];
if (t>0) {
graphics.beginFill(0xFF+((t*32)<<8),0.5);
graphics.drawRect(k*cw,i*ch,cw,ch);
graphics.endFill();
}
}//nextk
}//nexti
gt+=1;
if (gt%8==0)
{
for(i=0;i<mh;i+=1)
{ yt=i*mw;
for(k=0;k<mw;k+=1)
{
t = vecFlood[k+yt];
t-=1; if (t<0){t=0;}
if (getFlood(k-1,i) > t) { t= getFlood(k-1,i)-1; }
if (getFlood(k+1,i) > t) { t= getFlood(k+1,i)-1; }
if (getFlood(k,i+1) > t) { t= getFlood(k,i+1)-1; }
if (getFlood(k,i-1) > t) { t= getFlood(k,i-1)-1; }
vecTemp[k+yt]=t;
}//nextk
}//nexti
var swp:Vector.<int>;
swp = vecFlood; vecFlood=vecTemp; vecTemp=swp;
var nw:int;
nw=mw*mh;
for (i=0;i<nw;i+=1) { vecTemp[i]=0; }
}//endfi
}//onenter
}//classend
}