string AsteroidTracker::nextCommand(double currentTime) { Analysis a; string the_big_answer; vector<_link> links, rankedLinks; vector<int> targetList; vector<double> timesToRelocate; int commandListSize; nextCommandTime = currentTime; while ((!commandDeckLoaded) && (nextCommandTime < SIMULATION_TIME)) { links.clear(); rankedLinks.clear(); targetList.clear(); timesToRelocate.clear(); links = generateLinks(nextCommandTime); rankedLinks = rankLinks(links); targetList = generateTargetLinks(rankedLinks); timesToRelocate = generateTimesToRelocate(targetList, nextCommandTime); double maxRelocateTime = a.max(timesToRelocate); relocateAntennas(targetList, maxRelocateTime, nextCommandTime); double beamTime = activateAntennas(nextCommandTime); monitorAsteroids(beamTime, nextCommandTime); } commandDeckLoaded = true; if (!antennasRetired) { // set a trap to prevent the deck from being overloaded retireAntennas(); antennasRetired = true; commandListSize = commandList.size(); } // fill the output returned with the command note. if (commandDeckLoaded) { // Added to v2 if (commandNumber < commandListSize) { the_big_answer = commandList.at(commandNumber).commandNote; } commandNumber++; } // evaluate all links to determine the best candidate cout << "Number of Antennas: " << numberOfAntennas << endl; cout << "Number of Asteroids: " << numberOfAsteroids << endl; cout << "Number of Commands: " << commandList.size() << endl; return the_big_answer; }