Bazaar developer reference

CvPlayerCulture::GetClosestAvailableGreatWorkSlot(int, int, GreatWorkSlotType, BuildingClassTypes *, int *) const

Defined in
CvCultureClasses.cpp, line 919
Class
CvPlayerCulture
Hook name
CivHooks::CvPlayerCulture_GetClosestAvailableGreatWorkSlot

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}

Calls

Called by