/**
* Copyright mutantleg ( http://wonderfl.net/user/mutantleg )
* MIT License ( http://www.opensource.org/licenses/mit-license.php )
* Downloaded from: http://wonderfl.net/c/MuMz
*/
package {
import flash.text.TextField;
import flash.display.Sprite;
public class FlashTest extends Sprite {
public function FlashTest() {
deb = new TextField();
deb.width=320; deb.height=240;
deb.mouseEnabled=false;
addChild(deb);
initEmpty(16,16);
for (i=0;i<16;i+=1) { setTile(i, 14, 1); }
setLine(4,3, 1, 5);
setLine(4,7, 1, 5);
setLine(12,7, 1, 1);
setLine(1,11, 1, 5);
setLine(8,11, 1, 5);
graphics.clear();
graphics.lineStyle(2,0);
var ax:Number; var ay:Number;
var i:int; var k:int; var yt:int; var t:int;
for (i=0;i<mh;i+=1)
{
yt = i * mw;
for (k=0;k<mw;k+=1)
{
t = vecGrid[k+yt];
if (t<=0) { continue; }
ax=k*cw;ay=i*ch;
graphics.beginFill(0x404040, 1);
graphics.drawRect(ax,ay,cw,ch);
graphics.endFill();
continue;
}//nextk
}//nexti
var b:xNode;
var a:xNode; var num:int;
var vecNode:Vector.<xNode>;
vecNode = new Vector.<xNode>(0,false);
for (i=0;i<mh;i+=1)
{
yt = i * mw;
for (k=0;k<mw;k+=1)
{
t = vecGrid[k+yt];
if (t>0) { continue; }
if (getTile(k,i+1) <= 0) { continue; }
// if (getTile(k+1,i+1) > 0) {continue;}
if ((getTile(k-1,i+1) <= 0 || getTile(k+1,i+1) <= 0) ==false ) {continue;}
// if (getTile(k-1,i+1) <= 0) { continue; }
ax=k*cw;ay=i*ch;
a = new xNode();
a.cx = ax+cw*0.5;
a.cy = ay+ch*0.5;
a.tx=k;
a.ty=i;
a.dir=1;
vecNode.push(a);
if (getTile(k-1,i+1) <= 0) { b = a; a.dir =-1; }
else if (b!=a)
{
a.vecNext.push(b);
b.vecNext.push(a);
}//endif
}//nextk
}//nexti
/*
var w:int;
num = vecNode.length;
for (i=0;i<num;i+=1)
{
a = vecNode[i];
for (k=i+1;k<num;k+=1)
{
b = vecNode[k];
if (a.cy != b.cy) { continue; }
if (a.dir == b.dir) { continue; }
a.vecNext.push(b);
b.vecNext.push(a);
}//nextk
}//nexti
*/
num = vecNode.length;
for (i=0;i<num;i+=1)
{
a = vecNode[i];
graphics.drawCircle(a.cx,a.cy, 4);
for (k=0;k<32;k+=1)
{
if (getTile(a.tx-1,a.ty+k+1)>0)
{
ax=(a.tx-1)*cw; ay=(a.ty+k)*ch;
b = new xNode();
b.cx = ax+cw*0.5;
b.cy = ay+ch*0.5;
vecNode.push(b);
a.vecNext.push(b);
b.vecNext.push(a);
break;}
}//nextk
for (k=0;k<32;k+=1)
{
if (getTile(a.tx+1,a.ty+k+1)>0)
{
ax=(a.tx+1)*cw; ay=(a.ty+k)*ch;
b = new xNode();
b.cx = ax+cw*0.5;
b.cy = ay+ch*0.5;
vecNode.push(b);
a.vecNext.push(b);
b.vecNext.push(a);
break;}
}//nextk
}//nexti
var nk:int;
num = vecNode.length;
for (i=0;i<num;i+=1)
{
a = vecNode[i];
graphics.drawCircle(a.cx,a.cy, 8);
if (a.dir !=0)
{
graphics.moveTo(a.cx,a.cy);
graphics.lineTo(a.cx+a.dir*16,a.cy);
}
nk = a.vecNext.length;
for (k=0;k<nk;k+=1)
{
b = a.vecNext[k];
graphics.moveTo(a.cx,a.cy);
graphics.lineTo(b.cx,b.cy);
}//nextk
}//nexti
}//ctor
public var deb:TextField;
public var vecGrid:Vector.<int>;
public var mw:int = 0; public var mh:int = 0;
public var cw:Number = 32; public var ch:Number = 32;
public function initEmpty(aw:int, ah:int):void
{ mw=aw; mh=ah; vecGrid = new Vector.<int>(aw*ah, false); }
public function setTile(ax:int, ay:int, t:int):void
{ if (ax<0||ax>=mw||ay<0||ay>=mh) {return;} vecGrid[ay*mw+ax]=t; }
public function getTile(ax:int, ay:int ):int
{ if (ax<0||ax>=mw||ay<0||ay>=mh) {return 0;} return vecGrid[ay*mw+ax]; }
public function setLine(ax:int, ay:int, t:int, w:int):void
{ var i:int; for(i=0;i<w;i+=1) { setTile(ax+i,ay, t);} }
}//classend
}
internal class xNode
{
public var cx:Number = 0;
public var cy:Number = 0;
public var tx:int = 0;
public var ty:int = 0;
public var dir:int =0;
public var vecNext:Vector.<xNode> = new Vector.<xNode>(0,false);
}//xnode