void CombatCommander::StayPut() { Squad & stayPut = _squadData.getSquad("StayPut"); // defend untill we have a science vessel if (_combatUnits.empty() || BWAPI::Broodwar->self()->allUnitCount(BWAPI::UnitTypes::Terran_Science_Vessel) == 1) { return; } for (auto & unit : _combatUnits) { // get every unit of a lower priority and put it into the defense squad if (!unit->getType().isWorker() && (unit->getType() != BWAPI::UnitTypes::Zerg_Overlord) && _squadData.canAssignUnitToSquad(unit, stayPut)) { // if theres a bunker with room, go into it for (auto unit2 : BWAPI::Broodwar->self()->getUnits()){ if ((*unit2).getType() == BWAPI::UnitTypes::Terran_Bunker){ BWAPI::Unit bunker = BWAPI::Broodwar->getUnit((*unit2).getID()); BWAPI::Unitset set = bunker->getLoadedUnits(); if (set.size() < 4) { (*unit).rightClick(bunker); } } } // add units to squad _squadData.assignUnitToSquad(unit, stayPut); } } // fufill squad order SquadOrder mainAttackOrder(SquadOrderTypes::Defend, defensePos, 300, "Attack Enemy Base"); stayPut.setSquadOrder(mainAttackOrder); }