private void chargeShieldsCode() throws GameActionException {
   if (DataCache.numEnemyRobots > 0) {
     nextSoldierState = SoldierState.PUSHING;
     pushingCode();
   } else {
     if (!ourNukeHalfDone && enemyNukeHalfDone) {
       nextSoldierState = SoldierState.ALL_IN;
       allInCode();
     } else {
       // either charge up shields next to the shields encampment, or wait at another location
       // until there is space
       //			MapLocation shieldQueueLocation = rallyPoint;
       // find an empty space next to the shields encampment
       int distanceSquaredToShields = rc.getLocation().distanceSquaredTo(shieldLocation);
       if (distanceSquaredToShields > 2) {
         // not charging yet
         for (int i = 8; --i >= 0; ) {
           // Check to see if it's empty
           MapLocation iterLocation = shieldLocation.add(DataCache.directionArray[i]);
           if (rc.senseObjectAtLocation(iterLocation) == null) {
             // Oh, there's an empty space! let's go to it
             NavSystem.goToLocation(iterLocation);
             return;
           }
         }
         // we found the shields encampment, but there are no empty spaces, so wait at the queue
         // location
         //					NavSystem.goToLocation(EncampmentJobSystem.shieldsQueueLoc);
         NavSystem.goToLocation(shieldQueueLocation);
       } else {
         // already charging
         mineDensity =
             rc.senseMineLocations(findMidPoint(), rSquared, Team.NEUTRAL).length
                 / (3.0 * rSquared);
         shieldsCutoff = (int) (DataCache.rushDist + 5 * (mineDensity * DataCache.rushDist)) + 50;
         //					rc.setIndicatorString(1, "cutoff: " + Integer.toString(shieldsCutoff));
         if (rc.getShields() > shieldsCutoff) {
           // leave
           if (!ourNukeHalfDone && enemyNukeHalfDone) {
             nextSoldierState = SoldierState.ALL_IN;
             allInCode();
           } else {
             nextSoldierState = SoldierState.RALLYING;
             rallyingCode();
           }
         }
       }
     }
   }
 }
  public void rallyingCode() throws GameActionException {
    if (enemyNukeHalfDone && !ourNukeHalfDone) {
      //			nextSoldierState = SoldierState.ALL_IN;
      //			allInCode();
      // charge up
      if (shieldExists()) {
        nextSoldierState = SoldierState.CHARGE_SHIELDS;
        chargeShieldsCode();
      } else {
        nextSoldierState = SoldierState.ALL_IN;
        allInCode();
      }
    } else {
      //			int hqPowerLevel2 = Integer.MAX_VALUE;
      //			Message message2 = BroadcastSystem.read(powerChannel);
      //			if (message2.isValid) {
      //				hqPowerLevel2 = message2.body;
      //			} else {
      //				hqPowerLevel2 = (int) rc.getTeamPower();
      //			}

      int genCount = Integer.MAX_VALUE;
      Message message = BroadcastSystem.read(genCountChannel);
      if (message.isValid) {
        genCount = message.body;
      }

      // If there are enemies nearby, trigger FIGHTING SoldierState
      if (DataCache.numEnemyRobots > 0) {
        nextSoldierState = SoldierState.FIGHTING;
        fightingCode();
        //			} else if (hqPowerLevel2 < 10*(1+DataCache.numAlliedEncampments) || hqPowerLevel2 <
        // 100) {
      } else if (DataCache.numAlliedSoldiers >= (40 + 10 * genCount) / 1.5) {
        nextSoldierState = SoldierState.PUSHING;
        pushingCode();
      } else {
        mineDensity =
            rc.senseMineLocations(findMidPoint(), rSquared, Team.NEUTRAL).length / (3.0 * rSquared);
        shieldsCutoff = (int) (DataCache.rushDist + 5 * (mineDensity * DataCache.rushDist)) + 50;
        if (rc.getShields() < shieldsCutoff - 50 && shieldExists()) {
          // not enough shields
          nextSoldierState = SoldierState.CHARGE_SHIELDS;
          chargeShieldsCode();
        } else {
          boolean layedMine = false;
          if (rc.senseMine(currentLocation) == null) {
            if (rc.isActive() && Util.Random() < 0.1) {
              rc.layMine();
              layedMine = true;
            }
          }
          if (!layedMine) {
            NavSystem.goToLocation(rallyPoint);
          }
        }
      }
    }
  }
 public void clearOutHQMinesCode() throws GameActionException {
   // Clear out a path to the HQ
   Team mineTeam1 = rc.senseMine(rc.getLocation());
   if (mineTeam1 == null
       || mineTeam1 == rc.getTeam()
           && rc.getLocation().distanceSquaredTo(DataCache.ourHQLocation) > 2) {
     NavSystem.goToLocation(DataCache.ourHQLocation);
   } else {
     // We're done
     if (strategy == Strategy.NUKE) {
       nextSoldierState = SoldierState.FINDING_START_MINE_POSITIONS;
       findingStartMinePositionsCode();
     } else {
       nextSoldierState = SoldierState.RALLYING;
       rallyingCode();
     }
   }
 }
  public void miningCode() throws GameActionException {
    int hqPowerLevel = Integer.MAX_VALUE;
    Message message = BroadcastSystem.read(powerChannel);
    if (message.isValid) {
      hqPowerLevel = message.body;
    } else {
      hqPowerLevel = (int) rc.getTeamPower();
    }

    if (DataCache.numEnemyRobots > 0 && strategy != Strategy.NUKE) {
      //			nextSoldierState = SoldierState.FIGHTING;
      //			fightingCode();
      if (shieldExists()) {
        nextSoldierState = SoldierState.CHARGE_SHIELDS;
        chargeShieldsCode();
      } else {
        //				nextSoldierState = SoldierState.RALLYING;
        //				rallyingCode();
        if (Clock.getRoundNum() < 200) {
          nextSoldierState = SoldierState.PUSHING;
          pushingCode();
        } else {
          nextSoldierState = SoldierState.RALLYING;
          rallyingCode();
        }
      }
    } else if (strategy == Strategy.NUKE && DataCache.numEnemyRobots > 1) {
      //			nextSoldierState = SoldierState.FIGHTING;
      //			fightingCode();
      if (shieldExists()) {
        nextSoldierState = SoldierState.CHARGE_SHIELDS;
        chargeShieldsCode();
      } else {
        //				nextSoldierState = SoldierState.RALLYING;
        //				rallyingCode();
        if (Clock.getRoundNum() < 200) {
          nextSoldierState = SoldierState.PUSHING;
          pushingCode();
        } else {
          nextSoldierState = SoldierState.RALLYING;
          rallyingCode();
        }
      }
    } else if (strategy == Strategy.NUKE && DataCache.numEnemyRobots == 1) {
      Robot[] enemyRobots = rc.senseNearbyGameObjects(Robot.class, 14, rc.getTeam().opponent());
      if (enemyRobots.length == 1) {
        RobotInfo rinfo = rc.senseRobotInfo(enemyRobots[0]);
        NavSystem.goToLocation(rinfo.location);
      } else {
        miningSubroutine();
      }
    } else if (strategy != Strategy.NUKE
        && (hqPowerLevel < 10 * (1 + DataCache.numAlliedEncampments) || hqPowerLevel < 100)) {
      //			nextSoldierState = SoldierState.PUSHING;
      //			pushingCode();
      if (shieldExists()) {
        nextSoldierState = SoldierState.CHARGE_SHIELDS;
        chargeShieldsCode();
      }
    } else {
      miningSubroutine();
    }
  }