Bazaar developer reference

CvPlayer::GetScienceYieldFromPreviousTurns(int, int)

Defined in
CvPlayer.cpp, line 18909
Class
CvPlayer
Hook name
CivHooks::CvPlayer_GetScienceYieldFromPreviousTurns

Hooks

static bool BeforeCvPlayer_GetScienceYieldFromPreviousTurns(CvPlayer* self, int iGameTurn, int iNumPreviousTurnsToCount, int& result);static void AfterCvPlayer_GetScienceYieldFromPreviousTurns(CvPlayer* self, int iGameTurn, int iNumPreviousTurnsToCount, int& result);static int ReplaceCvPlayer_GetScienceYieldFromPreviousTurns(int (*original)(CvPlayer*, int, int), CvPlayer* self, int iGameTurn, int iNumPreviousTurnsToCount);CivRegisterBefore<CivHooks::CvPlayer_GetScienceYieldFromPreviousTurns>(host, &BeforeCvPlayer_GetScienceYieldFromPreviousTurns);CivRegisterAfter<CivHooks::CvPlayer_GetScienceYieldFromPreviousTurns>(host, &AfterCvPlayer_GetScienceYieldFromPreviousTurns);CivRegisterReplace<CivHooks::CvPlayer_GetScienceYieldFromPreviousTurns>(host, &ReplaceCvPlayer_GetScienceYieldFromPreviousTurns);

Code

18907/// What is the sum of science yield (not counting Research Agreements or Great Scientist bonuses) from the previous N turns?18908/// NOTE: This uses the data tracked in recording a replay, so if replays are disabled in the future then this must change!18909int CvPlayer::GetScienceYieldFromPreviousTurns(int iGameTurn, int iNumPreviousTurnsToCount)18910{18911	// Beakers per turn yield is tracked in replay data, so use that18912	int iSum = 0;18913	for (int iI = 0; iI < iNumPreviousTurnsToCount; iI++)18914	{18915		int iTurn = iGameTurn - iI;18916		if (iTurn < 0)18917		{18918			break;18919		}1892018921		int iTurnScience = getReplayDataValue(getReplayDataSetIndex("REPLAYDATASET_SCIENCEPERTURN"), iTurn);18922		if (iTurnScience >= 0)18923		{18924			iSum += iTurnScience;18925		}18926		else if (iTurnScience == -1) // No data for this turn (ex. late era start)18927		{18928			iSum += (3 * GetScience());18929		}18930	}1893118932	return iSum;18933}

Calls

Called by