@ -6,20 +6,71 @@ var harvester = require('creeps_harvester');
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				 *  
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				 *  Setup  is  considered  finished  once  3  spawns  have  been  built  and  at  least  one  creep  is  maintaining  the  RCL  and  at  least  one  harvester  is  working 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				 * / 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				const  STATE _INIT  =  0 ; 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				const  STATE _CREATE _HARVESTERS  =  1 ; 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				const  STATE _BUILD _SPAWNS  =  3 ; 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				/ * * 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				 *  Switches  the  overlord  into  the  given  state 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				 *  @ param  { int }  state  
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				 * / 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				setup _overlord . prototype . switch _state  =  function  ( state )  { 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				    this . state  =  state ; 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				    console . log ( "SetupOverlord: switching to state: " + state ) ; 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				} 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				/** Checks the room and sets out the tasks to achieve the goal */ 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				setup _overlord . prototype . run  =  function  ( )  { 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				    console . log ( "SetupOverlord: Running \"" + this . id + "\"! :) Chilling for now ..." ) ; 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				    console . log ( "SetupOverlord: \"" + this . id + "\"has the following underlings: " ,  this . underlings [ 'spawns' ] ,  this . underlings [ 'creeps' ] ) ; 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				    //console.log("SetupOverlord: Running \""+this.id+"\"! :) Chilling for now ...");
 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				    //console.log("SetupOverlord: \""+this.id+"\"has the following underlings: ", this.underlings['spawns'], this.underlings['creeps']);
 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				    
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				    if  ( this . state  ===  null )  { 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				        this . switch _state ( STATE _INIT ) ; 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				    } 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				    switch  ( this . state )  { 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				        case  STATE _INIT : 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				            this . init ( ) ; 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				            break ; 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				        case  STATE _CREATE _HARVESTERS : 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				            this . create _harvesters ( ) ; 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				            break ; 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				        case  STATE _BUILD _SPAWNS : 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				            console . log ( "SetupOverlord [ERROR] run(): state not implemented yet!" ) ; 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				            break ; 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				        default : 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				            console . log ( "SetupOverlord [ERROR] run(): unknown state: " + this . state ) ; 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				    } 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				} ; 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				/ * * 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				 *  Checks  that  the  requirements  are  given  for  the  setup  and  then  advances  the  state . 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				 * / 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				setup _overlord . prototype . init  =  function ( )  { 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				    let  source _count  =  Game . spawns [ this . underlings [ "spawns" ] [ 0 ] ] . room . find ( FIND _SOURCES ) . length ; 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				    this . todo _list  =  { 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				        req _harvesters :  source _count , 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				        req _spawns :  3 , 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				        req _RCL _maintainers :  1 , 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				    } ; 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				    if  ( this . underlings [ 'creeps' ] . length  ===  0  &&  this . underlings [ 'spawns' ] . length  ===  0 )  {   // got NOTHING to work with
 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				        console . log ( "SetupOverlord: ERROR " + this . id + " has nothing! ;W;" ) ; 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				    } 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				    else  if  ( this . underlings [ 'creeps' ] . length  ===  0  &&  this . underlings [ 'spawns' ] . length  >  0 )  { 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				    else  { 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				        this . switch _state ( STATE _CREATE _HARVESTERS ) ; 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				    } 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				} 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				/ * * 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				 *  Function  to  be  run  every  tick  when  the  overlord  aims  to  create  more  harvesters  for  every  energy  source . 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				 *  Switches  to  STATE _BUILD _SPAWNS  if  every  source  has  a  harvester  assigned . 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				 * / 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				setup _overlord . prototype . create _harvesters  =  function ( )  { 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				    if  ( this . underlings [ 'creeps' ] . length  ===  0  &&  this . underlings [ 'spawns' ] . length  >  0 )  {   // first harvester needs to be spawned
 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				        console . log ( "SetupOverlord: \"" + this . id + "\" is trying to create a harvester ..." ) ; 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				        for  ( let  spawn _name  of  this . underlings [ 'spawns' ] )  { 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				        for  ( let  spawn _name  of  this . underlings [ 'spawns' ] )  {   // check every spawn for energy available
  
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				            let  spawn  =  Game . spawns [ spawn _name ] ; 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				            if  ( spawn . store [ RESOURCE _ENERGY ]  >  harvester . min _cost )  {  // can afford a harvester
 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				                console . log ( "SetupOverlord: Spawn " + spawn . name + " can afford a harvester! (" + harvester . min _cost + ") \\o/" ) ; 
 
			
		 
		
	
	
		
			
				
					
						
						
						
							
								 
							 
						
					 
				
			
			 
			 
			
				@ -29,9 +80,10 @@ setup_overlord.prototype.run = function () {
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				                break ; 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				            } 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				        } 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				        //spawn = Game.spawns[this.underlings['spawns']] // TODO set up some goals / overlord tasks
 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				    } 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				} ; 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				} 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				/ * * 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				 *  Set  a  creeps  destination  spot  in  their  memory .  This  defines  where  a  creep  delivers  their  stuff  to .