void GameCommander::setScoutUnits() { //BWAPI::Broodwar->drawTextScreen(200, 300, "%d", int(_scoutUnits.size())); if (!_scoutUnits.empty()) { BWAPI::Unit scout = *(_scoutUnits.begin()); if (!scout->exists()) { _scoutUnits.clear(); } } // if we haven't set a scout unit, do it if (_scoutUnits.empty())// && !_initialScoutSet) { BWAPI::Unit supplyProvider = getFirstSupplyProvider(); // if it exists if (supplyProvider) { // grab the closest worker to the supply provider to send to scout BWAPI::Unit workerScout = getClosestWorkerToTarget(supplyProvider->getPosition()); // if we find a worker (which we should) add it to the scout units if (workerScout) { ScoutManager::Instance().setWorkerScout(workerScout); assignUnit(workerScout, _scoutUnits); //_initialScoutSet = true; } } } }
void WorkerManager::updateWorkerStatus() { // for each of our Workers for (auto & worker : workerData.getWorkers()) { if (!worker->isCompleted()) { continue; } // if it's idle if (worker->isIdle() && (workerData.getWorkerJob(worker) != WorkerData::Build) && (workerData.getWorkerJob(worker) != WorkerData::Move) && (workerData.getWorkerJob(worker) != WorkerData::Scout)) { workerData.setWorkerJob(worker, WorkerData::Idle, nullptr); } // if its job is gas if (workerData.getWorkerJob(worker) == WorkerData::Gas) { BWAPI::Unit refinery = workerData.getWorkerResource(worker); // if the refinery doesn't exist anymore if (!refinery || !refinery->exists() || refinery->getHitPoints() <= 0) { setMineralWorker(worker); } } } }
void WorkerManager::updateWorkerStatus() { static bool setGasZero = false; if (BWAPI::Broodwar->elapsedTime() >= 500 && !setGasZero) { for (auto & refinery : BWAPI::Broodwar->self()->getUnits()) { if (refinery->getType().isRefinery()) { setGasZero = true; workerData.setNumRefineryWorkersZero(refinery); } } } // for each of our Workers for (auto & worker : workerData.getWorkers()) { if (!worker->isCompleted()) { continue; } // if it's idle if (worker->isIdle() && (workerData.getWorkerJob(worker) != WorkerData::Build) && (workerData.getWorkerJob(worker) != WorkerData::Move) && (workerData.getWorkerJob(worker) != WorkerData::Scout)) { workerData.setWorkerJob(worker, WorkerData::Idle, nullptr); } // if its job is gas if (workerData.getWorkerJob(worker) == WorkerData::Gas) { BWAPI::Unit refinery = workerData.getWorkerResource(worker); // if the refinery doesn't exist anymore if (!refinery || !refinery->exists() || refinery->getHitPoints() <= 0 || (BWAPI::Broodwar->elapsedTime() > 260 && BWAPI::Broodwar->elapsedTime() < 500 && workerData.getWorkerJob(worker) == WorkerData::Gas)) { workerData.addWorker(worker); setMineralWorker(worker); } } } }
bool UnitUtil::IsValidUnit(BWAPI::Unit unit) { if (!unit) { return false; } if (unit->isCompleted() && unit->getHitPoints() > 0 && unit->exists() && unit->getType() != BWAPI::UnitTypes::Unknown && unit->getPosition().x != BWAPI::Positions::Unknown.x && unit->getPosition().y != BWAPI::Positions::Unknown.y) { return true; } else { return false; } }