Bazaar developer reference

CvGameCulture::GetGreatWorkController(int) const

Defined in
CvCultureClasses.cpp, line 334
Class
CvGameCulture
Hook name
CivHooks::CvGameCulture_GetGreatWorkController

Hooks

static bool BeforeCvGameCulture_GetGreatWorkController(const CvGameCulture* self, int iIndex, PlayerTypes& result);static void AfterCvGameCulture_GetGreatWorkController(const CvGameCulture* self, int iIndex, PlayerTypes& result);static PlayerTypes ReplaceCvGameCulture_GetGreatWorkController(PlayerTypes (*original)(const CvGameCulture*, int), const CvGameCulture* self, int iIndex);CivRegisterBefore<CivHooks::CvGameCulture_GetGreatWorkController>(host, &BeforeCvGameCulture_GetGreatWorkController);CivRegisterAfter<CivHooks::CvGameCulture_GetGreatWorkController>(host, &AfterCvGameCulture_GetGreatWorkController);CivRegisterReplace<CivHooks::CvGameCulture_GetGreatWorkController>(host, &ReplaceCvGameCulture_GetGreatWorkController);

Code

334PlayerTypes CvGameCulture::GetGreatWorkController(int iIndex) const335{336	CvAssertMsg (iIndex < GetNumGreatWorks(), "Bad Great Work index");337	338	// for each player339	//   for each building340	//     for each slot341	//       check to see if it holds this work342343	for (uint uiPlayer = 0; uiPlayer < MAX_MAJOR_CIVS; uiPlayer++)344	{345		PlayerTypes ePlayer = (PlayerTypes)uiPlayer;346347		int iCityLoop;348		CvCity* pCity = NULL;349		for (pCity = GET_PLAYER(ePlayer).firstCity(&iCityLoop); pCity != NULL; pCity = GET_PLAYER(ePlayer).nextCity(&iCityLoop))350		{351			for(int iBuildingClassLoop = 0; iBuildingClassLoop < GC.getNumBuildingClassInfos(); iBuildingClassLoop++)352			{353				CvCivilizationInfo& playerCivilizationInfo = GET_PLAYER(ePlayer).getCivilizationInfo();354				BuildingTypes eBuilding = (BuildingTypes)playerCivilizationInfo.getCivilizationBuildings((BuildingClassTypes)iBuildingClassLoop);355				if (eBuilding != NO_BUILDING)356				{357					CvBuildingEntry *pkBuilding = GC.getBuildingInfo(eBuilding);358					if (pkBuilding)359					{360						if (pCity->GetCityBuildings()->GetNumBuilding(eBuilding) > 0)361						{362							int iNumSlots = pkBuilding->GetGreatWorkCount();363							for (int iI = 0; iI < iNumSlots; iI++)364							{365								int iGreatWorkIndex = pCity->GetCityBuildings()->GetBuildingGreatWork((BuildingClassTypes)iBuildingClassLoop, iI);366								if (iGreatWorkIndex == iIndex)367								{368									return ePlayer;369								}370							}371						}372					}373				}374			}375		}376	}377378	return NO_PLAYER;379}

Calls

Called by