flash on 2013-6-7

by mutantleg
♥0 | Line 127 | Modified 2013-06-07 17:44:22 | MIT License
play

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