flash on 2013-6-7
♥0 |
Line 127 |
Modified 2013-06-07 17:44:22 |
MIT License
archived:2017-03-30 22:52:19
ActionScript3 source code
/**
* Copyright mutantleg ( http://wonderfl.net/user/mutantleg )
* MIT License ( http://www.opensource.org/licenses/mit-license.php )
* Downloaded from: http://wonderfl.net/c/iV7F
*/
package {
import flash.events.Event;
import flash.display.Sprite;
public class FlashTest extends Sprite {
public function FlashTest() {
// write as3 code here..
vecPlanet = new Vector.<xPlanet>;
var i:int;
var a:xPlanet;
for (i = 0; i < 32; i++)
{
a = new xPlanet();
a.cx = Math.random()*350 + 30;
a.cy = Math.random()*350 + 30;
vecPlanet.push(a);
}//nexti
myRace = new xRace();
vecPlanet[0].race = 1;
stage.addEventListener(Event.ENTER_FRAME, onEnter);
}//ctor
public var vecPlanet:Vector.<xPlanet>;
public var vecShip:Vector.<xShip>;
public var myRace:xRace;
public var wk:int = 0;
public function onEnter(e:Event):void
{
graphics.clear();
graphics.lineStyle(2, 0);
var i:int;
var num:int;
var a:xPlanet;
num = vecPlanet.length;
for (i = 0; i < num; i++)
{
a = vecPlanet[i];
if (a.race != 0)
{
graphics.beginFill(0xFF, 1);
graphics.drawCircle(a.cx, a.cy, 8);
graphics.endFill();
}
else
{
graphics.drawCircle(a.cx, a.cy, 8);
}
}//nexti
wk += 1;
if (wk >= 30)
{
wk = 0;
myRace.turn(vecPlanet);
}
}//onenter
}//classend
}
internal class xPlanet
{
public var cx:Number = 0;
public var cy:Number = 0;
public var maxpop:int = 100;
public var env:int = 0;
public var pop:int = 0;
public var race:int = 0;
public var dist:Number = 0; //used for sorting
//results are stored in these (so we dont make a new array every time)
public static var tempVec:Vector.<xPlanet> = new Vector.<xPlanet>(512,false);
public static var it:int = 0;
//find closest unpopulated planets
public function findCloseUnpop(vec:Vector.<xPlanet>, maxdist:Number=100):void
{
var i:int;
var num:int;
var a:xPlanet;
var d:Number;
var dx:Number;
var dy:Number;
var sqd:Number;
sqd = maxdist * maxdist; //squared length
num = vec.length;
for (i = 0; i < num; i++)
{
a = vec[i];
if (a == this) { continue; } //its this one
if (a.race != 0 ) { continue; } //already colonised
dx = a.cx - cx;
dy = a.cy - cy;
d = (dx*dx+dy*dy);
if (d > sqd) { continue; } //too far
tempVec[it] = a;
it += 1;
//not checking if it is out of range for now
}//nexti
}//findclose
}//planet
internal class xShip
{
public var cx:Number = 0;
public var cy:Number = 0;
public var race:int = 0;
public var warp:Number = 10;
public var u:Number = 0 ;
public var dest:xPlanet = null;
}//ship
internal class xRace
{
/*
public var vecPlanet:Vector.<xPlanet>;
public var vecShip:Vector.<xShip>;
public function xRace()
{
vecPlanet = new Vector.<xPlanet>;
vecShip = new Vector.<xShip>;
}
*/
public var race:int = 1;
public function turn(vec:Vector.<xPlanet>):void
{
var i:int;
var k:int;
var num:int;
var a:xPlanet;
var b:xPlanet;
var vb:Vector.<xPlanet>;
var vnum:int;
num = vec.length;
for (i = 0; i < num; i++)
{
a = vec[i];
if (a.race != race) { continue; }
a.findCloseUnpop(vec, 80);
vb = xPlanet.tempVec;
vnum = xPlanet.it;
//easy colonisation
for (k = 0; k < vnum; k++)
{
b = vb[k];
b.race = race;
}//nextk
}//nexti
}//turn
}//race