/**
* Copyright mutantleg ( http://wonderfl.net/user/mutantleg )
* MIT License ( http://www.opensource.org/licenses/mit-license.php )
* Downloaded from: http://wonderfl.net/c/iAvL
*/
package {
import flash.events.Event;
import flash.display.Sprite;
public class FlashTest extends Sprite {
public function FlashTest() {
vecRect = new Vector.<xActor>(0, false);
var a:xActor; var i:int;
for (i = 0; i < 16; i += 1)
{
a = new xActor();
var t:Number;
t = i * 0.4;
a.cx = i*24; a.cy = 100;
a.cx = Math.random()*465;
a.cy = Math.random()*465;
a.cx=240;a.cy=240;
a.col = Math.random() * 0xffFFff;
a.xrad = 8 + i ; a.xrad = 16;
vecRect.push(a);
}//nexti
mw=16; mh=16;
gridAct = new Vector.<xActor>(mw*mh, false);
stage.addEventListener(Event.ENTER_FRAME, onEnter);
}//ctor
public var vecRect:Vector.<xActor>;
public function isInside(ax:Number, ay:Number, a:xActor):Boolean
{
if (ax < a.cx - (a.xrad)) { return false; } if (ax > a.cx + (a.xrad)) { return false; }
if (ay < a.cy - (a.xrad)) { return false; } if (ay > a.cy + (a.xrad)) { return false; }
return true;
}//isinside
public var mw:int = 0; public var mh:int = 0;
public var cw:Number = 32; public var ch:Number = 32;
public var gridAct:Vector.<xActor>;
public function getAct(ax:int, ay:int):xActor
{ if (ax<0||ax>=mw||ay<0||ay>=mh){return null;} return gridAct[ay*mw+ax]; }
public function setAct(ax:int, ay:int, a:xActor):void
{ if (ax < 0 || ax >= mw || ay < 0 || ay >= mh) { return; } gridAct[ay * mw + ax] = a ; }
public function getMag(ax:Number, ay:Number):Number
{ return Math.sqrt(ax*ax+ay*ay); }
public var gt:int = 0;
public function onEnter(e:Event):void
{
var mx:Number; var my:Number;
mx = stage.mouseX;
my = stage.mouseY;
graphics.clear();
graphics.lineStyle(2, 0);
var ang:Number;
var vx:Number; var vy:Number;
var a:xActor; var b:xActor;
var num:int; var i:int; var k:int;
var tx:int; var ty:int;
var ax:Number; var ay:Number;
var ms:Number;
ms = 4;
num = vecRect.length;
for (i = 0; i < num; i += 1)
{
a = vecRect[i];
tx = a.tx; ty = a.ty;
if (getAct(tx,ty) == a) { setAct(tx,ty, null); }
if ((gt+i)%20 ==0 )
{
a.ang = Math.atan2(my-a.cy, mx-a.cx);
}
ang = a.ang;
vx = Math.cos(ang) * ms;
vy = Math.sin(ang) * ms;
/*
for (k = 0; k < num; k += 1)
{
if (i == k) { continue; }
b = vecRect[k];
if (vx > 0 && isInside(a.cx+a.xrad, a.cy, b)) { vx = 0; }
else if (vx < 0 && isInside(a.cx-a.xrad, a.cy, b)) { vx = 0; }
if (vy > 0 && isInside(a.cx, a.cy+a.xrad, b)) { vy = 0; }
else if (vy < 0 && isInside(a.cx, a.cy-a.xrad, b)) { vy = 0; }
}//nextk
*/
ax = a.cx+vx; ay = a.cy+vy;
tx = Math.floor(ax/cw); ty = Math.floor(ay/ch);
if (getAct(tx,ty) == null)
{ a.cx = ax; a.cy = ay;
a.tx = tx; a.ty = ty;
}
else if (getAct(tx, a.ty) == null) { a.cx = ax; a.tx = tx; vy =-vy; }
else if (getAct(a.tx, ty) == null) { a.cy = ay; a.ty = ty; vx =-vx;}
a.ang = Math.atan2(vy,vx);
setAct(a.tx, a.ty, a);
graphics.drawRect(a.tx *cw, a.ty *ch, cw,ch);
//graphics.drawRect(a.cx - a.xrad, a.cy - a.xrad, a.xrad * 2, a.xrad * 2);
graphics.drawCircle(a.cx, a.cy, a.xrad);
}//nexti
var yt:int;
for (i=0;i<mh;i++)
{
yt = i * mw;
for (k=0;k<mw;k++)
{
a = gridAct[k+yt];
if (a != null)
{
graphics.beginFill(a.col, 0.5);
graphics.drawRect(k*cw,i*ch,cw,ch);
graphics.endFill();
continue;
}//endif
//graphics.drawRect(k*cw,i*ch,cw,ch);
}//nextk
}//nexti
graphics.drawCircle(mx,my, 8);
gt += 1;
}//onenter
}//classend
}
internal class xActor
{
public var cx:Number = 0;
public var cy:Number = 0;
public var xrad:Number = 16;
public var ang:Number = 0;
public var tx:int = 0;
public var ty:int = 0;
public var col:uint =0;
}//xActor