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(); }
//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; }