Example #1
0
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;
			}
		}
    }
}
Example #2
0
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);

			}
		}

	}
}
Example #4
0
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;
    }
}