int Commander::addBunkerSquad() { Squad* bSquad = new Squad(100 + AgentManager::getInstance()->countNoUnits(UnitTypes::Terran_Bunker), Squad::BUNKER, "BunkerSquad", 5); bSquad->addSetup(UnitTypes::Terran_Marine, 4); squads.push_back(bSquad); //Try to fill from other squads. int added = 0; for (int i = 0; i < (int)squads.size(); i++) { Squad* sq = squads.at(i); if (sq->isOffensive() || sq->isDefensive()) { for (int i = 0; i < 4 - added; i++) { if (sq->hasUnits(UnitTypes::Terran_Marine, 1)) { if (added < 4) { BaseAgent* ma = sq->removeMember(UnitTypes::Terran_Marine); if (ma != NULL) { added++; bSquad->addMember(ma); ma->clearGoal(); } } } } } } return bSquad->getID(); }
void Commander::assignUnit(BaseAgent* agent) { //Broodwar->printf("%s (%s) is not assigned to a squad", agent->getUnitType().getName().c_str(), agent->getTypeName().c_str()); for (int i = 0; i < (int)squads.size(); i++) { Squad* sq = squads.at(i); if (sq->needUnit(agent->getUnitType())) { sq->addMember(agent); //Broodwar->printf("%s is assigned to SQ %d", agent->getUnitType().getName().c_str(), sq->getID()); return; } } }