UnitTypes CvPlayer::pickBestImmigrant()
{
std::vector<int> aiWeights(GC.getNumUnitInfos(), 0);
for (int iUnitClass = 0; iUnitClass < GC.getNumUnitClassInfos(); ++iUnitClass)
{
UnitTypes eUnit = (UnitTypes) GC.getCivilizationInfo(getCivilizationType()).getCivilizationUnits(iUnitClass);
if (NO_UNIT != eUnit)
{
int iWeight = GC.getUnitInfo(eUnit).getImmigrationWeight();
for (int i = 0; i < getUnitClassImmigrated((UnitClassTypes) iUnitClass); ++i)
{
iWeight *= std::max(0, 100 - GC.getUnitInfo(eUnit).getImmigrationWeightDecay());
iWeight /= 100;
}
aiWeights[eUnit] += iWeight;
}
}
UnitTypes eBestUnit = (UnitTypes) GC.getGameINLINE().getSorenRand().pickValue(aiWeights, "pick immigrant");
FAssert(NO_UNIT != eBestUnit);
if (eBestUnit != NO_UNIT)
{
changeUnitClassImmigrated((UnitClassTypes) GC.getUnitInfo(eBestUnit).getUnitClassType(), 1);
}
return eBestUnit;
}