Bazaar developer reference

CvPlayer::doResearch()

Defined in
CvPlayer.cpp, line 22238
Class
CvPlayer
Hook name
CivHooks::CvPlayer_doResearch

Hooks

static bool BeforeCvPlayer_doResearch(CvPlayer* self);static void AfterCvPlayer_doResearch(CvPlayer* self);static void ReplaceCvPlayer_doResearch(void (*original)(CvPlayer*), CvPlayer* self);CivRegisterBefore<CivHooks::CvPlayer_doResearch>(host, &BeforeCvPlayer_doResearch);CivRegisterAfter<CivHooks::CvPlayer_doResearch>(host, &AfterCvPlayer_doResearch);CivRegisterReplace<CivHooks::CvPlayer_doResearch>(host, &ReplaceCvPlayer_doResearch);

Code

22238void CvPlayer::doResearch()22239{22240	if(GC.getGame().isOption(GAMEOPTION_NO_SCIENCE))22241	{22242		return;22243	}2224422245	AI_PERF_FORMAT("AI-perf.csv", ("CvPlayer::doResearch, Turn %03d, %s", GC.getGame().getElapsedGameTurns(), getCivilizationShortDescription()) );22246	bool bForceResearchChoice;22247	int iOverflowResearch;2224822249	if(GetPlayerTechs()->IsResearch())22250	{22251		bForceResearchChoice = false;2225222253		// Force player to pick Research if he doesn't have anything assigned22254		if(GetPlayerTechs()->GetCurrentResearch() == NO_TECH)22255		{22256			if(GetID() == GC.getGame().getActivePlayer() && GetScienceTimes100() > 0)22257			{22258				chooseTech();22259			}2226022261			if(GC.getGame().getElapsedGameTurns() > 4)22262			{22263				AI_chooseResearch();2226422265				bForceResearchChoice = true;22266			}22267		}2226822269		TechTypes eCurrentTech = GetPlayerTechs()->GetCurrentResearch();22270		if(eCurrentTech == NO_TECH)22271		{22272			int iOverflow = (GetScienceTimes100()) / std::max(1, calculateResearchModifier(eCurrentTech));22273			changeOverflowResearchTimes100(iOverflow);22274		}22275		else22276		{22277			iOverflowResearch = (getOverflowResearchTimes100() * calculateResearchModifier(eCurrentTech)) / 100;22278			setOverflowResearch(0);22279			if(GET_TEAM(getTeam()).GetTeamTechs())22280			{22281				int iBeakersTowardsTechTimes100 = GetScienceTimes100() + iOverflowResearch;22282#if defined(MOD_BUGFIX_RESEARCH_OVERFLOW)22283				GET_TEAM(getTeam()).GetTeamTechs()->ChangeResearchProgressTimes100(eCurrentTech, iBeakersTowardsTechTimes100, GetID(), iOverflowResearch, calculateResearchModifier(eCurrentTech));22284#else22285				GET_TEAM(getTeam()).GetTeamTechs()->ChangeResearchProgressTimes100(eCurrentTech, iBeakersTowardsTechTimes100, GetID());22286#endif22287				UpdateResearchAgreements(GetScienceTimes100() / 100);22288			}22289		}2229022291		if(bForceResearchChoice)22292		{22293			clearResearchQueue();22294		}22295	}22296	GetPlayerTechs()->CheckForTechAchievement();2229722298}

Calls

Called by