int CvPlayer::calculateResearchModifier(TechTypes eTech) const
{
int iModifier = 100;
if (NO_TECH == eTech)
{
return iModifier;
}
int iKnownCount = 0;
int iPossibleKnownCount = 0;
for (int iI = 0; iI < MAX_CIV_TEAMS; iI++)
{
if (GET_TEAM((TeamTypes)iI).isAlive())
{
if (GET_TEAM(getTeam()).isHasMet((TeamTypes)iI))
{
if (GET_TEAM((TeamTypes)iI).isHasTech(eTech))
{
iKnownCount++;
}
}
iPossibleKnownCount++;
}
}
if (iPossibleKnownCount > 0)
{
iModifier += (GC.getDefineINT("TECH_COST_TOTAL_KNOWN_TEAM_MODIFIER") * iKnownCount) / iPossibleKnownCount;
}
int iPossiblePaths = 0;
int iUnknownPaths = 0;
for (int iI = 0; iI < GC.getNUM_OR_TECH_PREREQS(); iI++)
{
if (GC.getTechInfo(eTech).getPrereqOrTechs(iI) != NO_TECH)
{
if (!(GET_TEAM(getTeam()).isHasTech((TechTypes)(GC.getTechInfo(eTech).getPrereqOrTechs(iI)))))
{
iUnknownPaths++;
}
iPossiblePaths++;
}
}
FAssertMsg(iPossiblePaths >= iUnknownPaths, "The number of possible paths is expected to match or exceed the number of unknown ones");
iModifier += (iPossiblePaths - iUnknownPaths) * GC.getDefineINT("TECH_COST_KNOWN_PREREQ_MODIFIER");
return iModifier;
}