Bazaar developer reference

CvPlot::getBuildTurnsTotal(BuildTypes, PlayerTypes) const

Defined in
CvPlot.cpp, line 2845
Class
CvPlot
Hook name
CivHooks::CvPlot_getBuildTurnsTotal

Hooks

static bool BeforeCvPlot_getBuildTurnsTotal(const CvPlot* self, BuildTypes eBuild, PlayerTypes ePlayer, int& result);static void AfterCvPlot_getBuildTurnsTotal(const CvPlot* self, BuildTypes eBuild, PlayerTypes ePlayer, int& result);static int ReplaceCvPlot_getBuildTurnsTotal(int (*original)(const CvPlot*, BuildTypes, PlayerTypes), const CvPlot* self, BuildTypes eBuild, PlayerTypes ePlayer);CivRegisterBefore<CivHooks::CvPlot_getBuildTurnsTotal>(host, &BeforeCvPlot_getBuildTurnsTotal);CivRegisterAfter<CivHooks::CvPlot_getBuildTurnsTotal>(host, &AfterCvPlot_getBuildTurnsTotal);CivRegisterReplace<CivHooks::CvPlot_getBuildTurnsTotal>(host, &ReplaceCvPlot_getBuildTurnsTotal);

Code

2845int CvPlot::getBuildTurnsTotal(BuildTypes eBuild, PlayerTypes ePlayer) const2846{2847	const IDInfo* pUnitNode;2848	const CvUnit* pLoopUnit;2849	int iNowBuildRate = 0;2850	int iThenBuildRate = 0;2851	int iBuildLeft = 0;2852	int iTurnsLeft = 0;28532854	pUnitNode = headUnitNode();28552856	while(pUnitNode != NULL)2857	{2858		pLoopUnit = GetPlayerUnit(*pUnitNode);2859		pUnitNode = nextUnitNode(pUnitNode);28602861		if(pLoopUnit && pLoopUnit->getBuildType() == eBuild)2862		{2863			if(pLoopUnit->canMove())2864			{2865				iNowBuildRate += pLoopUnit->workRate(false);2866			}2867			iThenBuildRate += pLoopUnit->workRate(true);2868		}2869	}28702871	if(iThenBuildRate == 0)2872	{2873		//this means it will take forever under current circumstances2874		return INT_MAX;2875	}28762877	iBuildLeft = getBuildTime(eBuild, ePlayer);28782879	iBuildLeft = std::max(0, iBuildLeft);28802881	iTurnsLeft = (iBuildLeft / iThenBuildRate);28822883	iTurnsLeft--;28842885	return std::max(1, iTurnsLeft);2886}

Calls

Called by