Bazaar developer reference

CvCityCitizens::DoReallocateCitizens()

Defined in
CvCityCitizens.cpp, line 1565
Class
CvCityCitizens
Hook name
CivHooks::CvCityCitizens_DoReallocateCitizens

Hooks

static bool BeforeCvCityCitizens_DoReallocateCitizens(CvCityCitizens* self);static void AfterCvCityCitizens_DoReallocateCitizens(CvCityCitizens* self);static void ReplaceCvCityCitizens_DoReallocateCitizens(void (*original)(CvCityCitizens*), CvCityCitizens* self);CivRegisterBefore<CivHooks::CvCityCitizens_DoReallocateCitizens>(host, &BeforeCvCityCitizens_DoReallocateCitizens);CivRegisterAfter<CivHooks::CvCityCitizens_DoReallocateCitizens>(host, &AfterCvCityCitizens_DoReallocateCitizens);CivRegisterReplace<CivHooks::CvCityCitizens_DoReallocateCitizens>(host, &ReplaceCvCityCitizens_DoReallocateCitizens);

Code

1564/// Optimize our Citizen Placement1565void CvCityCitizens::DoReallocateCitizens()1566{1567	// Make sure we don't have more forced working plots than we have citizens working.  If so, clean it up before reallocating1568	DoValidateForcedWorkingPlots();15691570	// Remove all of the allocated guys1571	int iNumCitizensToRemove = GetNumCitizensWorkingPlots();1572	for(int iWorkerLoop = 0; iWorkerLoop < iNumCitizensToRemove; iWorkerLoop++)1573	{1574		DoRemoveWorstCitizen();1575	}15761577	int iSpecialistLoop;15781579	// Remove Non-Forced Specialists in Buildings1580	int iNumSpecialistsToRemove;1581	BuildingTypes eBuilding;1582	for(int iBuildingLoop = 0; iBuildingLoop < GC.getNumBuildingInfos(); iBuildingLoop++)1583	{1584		eBuilding = (BuildingTypes) iBuildingLoop;15851586		// Have this Building in the City?1587		if(GetCity()->GetCityBuildings()->GetNumBuilding(eBuilding) > 0)1588		{1589			iNumSpecialistsToRemove = GetNumSpecialistsInBuilding(eBuilding) - GetNumForcedSpecialistsInBuilding(eBuilding);	// Don't include Forced guys15901591			// Loop through guys to remove (if there are any)1592			for(iSpecialistLoop = 0; iSpecialistLoop < iNumSpecialistsToRemove; iSpecialistLoop++)1593			{1594				DoRemoveSpecialistFromBuilding(eBuilding, /*bForced*/ false);1595			}1596		}1597	}15981599	// Remove Default Specialists1600	int iNumDefaultsToRemove = GetNumDefaultSpecialists() - GetNumForcedDefaultSpecialists();1601	for(iSpecialistLoop = 0; iSpecialistLoop < iNumDefaultsToRemove; iSpecialistLoop++)1602	{1603		ChangeNumDefaultSpecialists(-1);1604	}16051606	// Now put all of the unallocated guys back1607	int iNumToAllocate = GetNumUnassignedCitizens();1608	for(int iUnallocatedLoop = 0; iUnallocatedLoop < iNumToAllocate; iUnallocatedLoop++)1609	{1610		DoAddBestCitizenFromUnassigned();1611	}1612}

Calls

Called by