bool Commander::checkWorkersAttack(BaseAgent *base) { int noAttack = 0; for(set<Unit*>::const_iterator i=Broodwar->enemy()->getUnits().begin();i!=Broodwar->enemy()->getUnits().end();i++) { if ((*i)->exists() && (*i)->getType().isWorker()) { double dist = (*i)->getTilePosition().getDistance(base->getUnit()->getTilePosition()); if (dist <= 12) { //Enemy unit discovered. Attack with some workers. vector<BaseAgent*> agents = AgentManager::getInstance()->getAgents(); for (int j = 0; j < (int)agents.size(); j++) { BaseAgent* agent = agents.at(j); if (agent->isAlive() && agent->isWorker() && noAttack < 1) { WorkerAgent* wAgent = (WorkerAgent*) agent; wAgent->setState(WorkerAgent::ATTACKING); agent->getUnit()->attack((*i)); noAttack++; } } } } } if (noAttack > 0) { return true; } return false; }
void RefineryAgent::computeActions() { for (int i = 0; i < (int)assignedWorkers.size(); i++) { if (!assignedWorkers.at(i)->isAlive()) { assignedWorkers.erase(assignedWorkers.begin() + i); return; } if (!assignedWorkers.at(i)->getUnit()->isGatheringGas()) { assignedWorkers.erase(assignedWorkers.begin() + i); return; } } if ((int)assignedWorkers.size() < Commander::getInstance()->getWorkersPerRefinery()) { if (!unit->isBeingConstructed() && unit->getPlayer()->getID() == Broodwar->self()->getID()) { WorkerAgent* worker = (WorkerAgent*)AgentManager::getInstance()->findClosestFreeWorker(unit->getTilePosition()); if (worker != NULL) { worker->getUnit()->rightClick(unit); worker->setState(WorkerAgent::GATHER_GAS); assignedWorkers.push_back(worker); } } } }
bool Commander::checkWorkersAttack(BaseAgent *base) { int noAttack = 0; for (auto &u : Broodwar->enemy()->getUnits()) { if (u->exists() && u->getType().isWorker()) { double dist = u->getTilePosition().getDistance(base->getUnit()->getTilePosition()); if (dist <= 12) { //Enemy unit discovered. Attack with some workers. Agentset agents = AgentManager::getInstance()->getAgents(); for (auto &a : agents) { if (a->isAlive() && a->isWorker() && noAttack < 1) { WorkerAgent* wAgent = (WorkerAgent*)a; wAgent->setState(WorkerAgent::ATTACKING); a->getUnit()->attack(u); noAttack++; } } } } } if (noAttack > 0) { return true; } return false; }