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}