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}