Hooks
static bool BeforeCvPlayerCulture_GetClosestAvailableGreatWorkSlot(const CvPlayerCulture* self, int iX, int iY, GreatWorkSlotType eGreatWorkSlot, BuildingClassTypes * eBuildingClass, int * iSlot, CvCity *& result);static void AfterCvPlayerCulture_GetClosestAvailableGreatWorkSlot(const CvPlayerCulture* self, int iX, int iY, GreatWorkSlotType eGreatWorkSlot, BuildingClassTypes * eBuildingClass, int * iSlot, CvCity *& result);static CvCity * ReplaceCvPlayerCulture_GetClosestAvailableGreatWorkSlot(CvCity * (*original)(const CvPlayerCulture*, int, int, GreatWorkSlotType, BuildingClassTypes *, int *), const CvPlayerCulture* self, int iX, int iY, GreatWorkSlotType eGreatWorkSlot, BuildingClassTypes * eBuildingClass, int * iSlot);CivRegisterBefore<CivHooks::CvPlayerCulture_GetClosestAvailableGreatWorkSlot>(host, &BeforeCvPlayerCulture_GetClosestAvailableGreatWorkSlot);CivRegisterAfter<CivHooks::CvPlayerCulture_GetClosestAvailableGreatWorkSlot>(host, &AfterCvPlayerCulture_GetClosestAvailableGreatWorkSlot);CivRegisterReplace<CivHooks::CvPlayerCulture_GetClosestAvailableGreatWorkSlot>(host, &ReplaceCvPlayerCulture_GetClosestAvailableGreatWorkSlot);
Code
918/// Return the city (and building/slot) of the city that can provide the closest Great Work slot)919CvCity *CvPlayerCulture::GetClosestAvailableGreatWorkSlot(int iX, int iY, GreatWorkSlotType eGreatWorkSlot, BuildingClassTypes *eBuildingClass, int *iSlot) const920{921 int iLoop;922 int iBestDistance = MAX_INT;923 CvCity *pBestCity = NULL;924 BuildingClassTypes eBuildingClassReturned = NO_BUILDINGCLASS; // Passed by reference below925 int iSlotReturned = -1; // Passed by reference below926927 for (CvCity* pCity = m_pPlayer->firstCity(&iLoop); pCity != NULL; pCity = m_pPlayer->nextCity(&iLoop))928 {929 int iDistance = plotDistance (iX, iY, pCity->getX(), pCity->getY());930931 if (iDistance < iBestDistance)932 {933 if (pCity->GetCityBuildings()->GetNextAvailableGreatWorkSlot(eGreatWorkSlot, &eBuildingClassReturned, &iSlotReturned))934 {935 iBestDistance = iDistance;936 pBestCity = pCity;937 *eBuildingClass = eBuildingClassReturned;938 *iSlot = iSlotReturned;939 }940 }941 }942943 return pBestCity;944}