コード例 #1
0
ファイル: AllyTeam.cpp プロジェクト: abma/CircuitAI
void CAllyTeam::UpdateFriendlyUnits(CCircuitAI* circuit)
{
	if (lastUpdate >= circuit->GetLastFrame()) {
		return;
	}

	for (auto& kv : friendlyUnits) {
		delete kv.second;
	}
	friendlyUnits.clear();
	const std::vector<Unit*>& units = circuit->GetCallback()->GetFriendlyUnits();
	for (auto u : units) {
		// FIXME: Why engine returns vector with some nullptrs?
		// TODO: Check every GetEnemy/FriendlyUnits for nullptr
		if (u == nullptr) {
			continue;
		}
		int unitId = u->GetUnitId();
		UnitDef* unitDef = u->GetDef();
		CCircuitUnit* unit = new CCircuitUnit(u, circuit->GetCircuitDef(unitDef->GetUnitDefId()));
		delete unitDef;
		friendlyUnits[unitId] = unit;
	}
	lastUpdate = circuit->GetLastFrame();
}
コード例 #2
0
//Return unitType, and populates `result`
int BattleFileReader::CountGroupUnits(vector<Unit*> units_old, vector<int> &result, bool airGroup)
{
	int unitType = ( airGroup ) ? 1 : 0;
	
	result.clear();
	for( unsigned int i = 0 ; i < units_all.size() ; i++ )
	{
		result.push_back(0);
	}

	//fill vectors
	for( unsigned int i=0 ; i < units_old.size() ; i++ )
	{
		UnitDef* ud = units_old[i]->GetDef();

		for( unsigned int j = 0 ; j < units_all[unitType].size() ; j++ )
		{
			if( ud->GetUnitDefId() == units_all[unitType][j] )
			{
				//ai->utility->ChatMsg("Added unit: (%d) %s", j, ud->GetName());
				result[j]++;
				break;
			}
		}
		delete ud;
	}
	return unitType;
}