ReligionTypes CvCity::disappearingReligion(ReligionTypes eNewReligion) const
{
int iI;
ReligionTypes eReligion;
std::vector<ReligionTypes> religions;
for (iI = 0; iI < NUM_RELIGIONS; iI++)
{
eReligion = (ReligionTypes)iI;
if (eReligion != eNewReligion)
{
if (isHasReligion(eReligion) && GET_PLAYER(getOwnerINLINE()).getSpreadType(plot(), eReligion) == RELIGION_SPREAD_NONE)
{
religions.push_back(eReligion);
}
}
}
if (religions.size() > 0)
{
return religions[GC.getGame().getSorenRandNum(religions.size(), "Disappearing religion")];
}
int iMaxReligions = std::max(2, 1 + getPopulation() / 5);
ReligionSpreadTypes eCurrentSpread;
ReligionSpreadTypes eNewReligionSpread = GET_PLAYER(getOwnerINLINE()).getSpreadType(plot(), eReligion);
ReligionSpreadTypes eWorstSpread = RELIGION_SPREAD_FAST;
religions.clear();
if (getReligionCount() > iMaxReligions)
{
for (iI = 0; iI < NUM_RELIGIONS; iI++)
{
eReligion = (ReligionTypes)iI;
if (eReligion != eNewReligion && isHasReligion(eReligion))
{
eCurrentSpread = GET_PLAYER(getOwnerINLINE()).getSpreadType(plot(), eReligion);
if (eCurrentSpread <= eNewReligionSpread)
{
if (eCurrentSpread < eWorstSpread)
{
eWorstSpread = eCurrentSpread;
religions.clear();
religions.push_back(eReligion);
}
else if (eCurrentSpread == eWorstSpread)
{
religions.push_back(eReligion);
}
}
}
}
if (religions.size() > 0)
{
return religions[GC.getGame().getSorenRandNum(religions.size(), "Disappearing religion")];
}
}
return NO_RELIGION;
}