Bazaar developer reference

CvPlot::getBuildTurnsLeft(BuildTypes, PlayerTypes, int, int) const

Defined in
CvPlot.cpp, line 2786
Class
CvPlot
Hook name
CivHooks::CvPlot_getBuildTurnsLeft

Hooks

static bool BeforeCvPlot_getBuildTurnsLeft(const CvPlot* self, BuildTypes eBuild, PlayerTypes ePlayer, int iNowExtra, int iThenExtra, int& result);static void AfterCvPlot_getBuildTurnsLeft(const CvPlot* self, BuildTypes eBuild, PlayerTypes ePlayer, int iNowExtra, int iThenExtra, int& result);static int ReplaceCvPlot_getBuildTurnsLeft(int (*original)(const CvPlot*, BuildTypes, PlayerTypes, int, int), const CvPlot* self, BuildTypes eBuild, PlayerTypes ePlayer, int iNowExtra, int iThenExtra);CivRegisterBefore<CivHooks::CvPlot_getBuildTurnsLeft>(host, &BeforeCvPlot_getBuildTurnsLeft);CivRegisterAfter<CivHooks::CvPlot_getBuildTurnsLeft>(host, &AfterCvPlot_getBuildTurnsLeft);CivRegisterReplace<CivHooks::CvPlot_getBuildTurnsLeft>(host, &ReplaceCvPlot_getBuildTurnsLeft);

Code

2786int CvPlot::getBuildTurnsLeft(BuildTypes eBuild, PlayerTypes ePlayer, int iNowExtra, int iThenExtra) const2787{2788	int iBuildLeft = getBuildTime(eBuild, ePlayer);27892790	if(iBuildLeft == 0)2791		return 0;27922793	const IDInfo* pUnitNode;2794	const CvUnit* pLoopUnit;2795	int iNowBuildRate;2796	int iThenBuildRate;2797	int iTurnsLeft;27982799	iNowBuildRate = iNowExtra;2800	iThenBuildRate = iThenExtra;28012802	pUnitNode = headUnitNode();28032804	while(pUnitNode != NULL)2805	{2806		pLoopUnit = GetPlayerUnit(*pUnitNode);2807		pUnitNode = nextUnitNode(pUnitNode);28082809		if(pLoopUnit && pLoopUnit->getBuildType() == eBuild)2810		{2811			if(pLoopUnit->canMove())2812			{2813				iNowBuildRate += pLoopUnit->workRate(false);2814			}2815			iThenBuildRate += pLoopUnit->workRate(true);2816		}2817	}28182819	if(iThenBuildRate == 0)2820	{2821		//this means it will take forever under current circumstances2822		return INT_MAX;2823	}28242825	iBuildLeft -= getBuildProgress(eBuild);2826	iBuildLeft -= iNowBuildRate;28272828	iBuildLeft = std::max(0, iBuildLeft);28292830	iTurnsLeft = (iBuildLeft / iThenBuildRate);28312832	if((iTurnsLeft * iThenBuildRate) < iBuildLeft)2833	{2834		iTurnsLeft++;2835	}28362837	//iTurnsLeft++;28382839	//return std::max(1, iTurnsLeft);2840	return iTurnsLeft;2841}

Calls

Called by