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
- CvCity::GetCityBuildings() const
- CvCityBuildings::GetNumBuilding(BuildingTypes) const
- CvCityCitizens::ChangeNumDefaultSpecialists(int)
- CvCityCitizens::DoAddBestCitizenFromUnassigned()
- CvCityCitizens::DoRemoveSpecialistFromBuilding(BuildingTypes, bool, bool)
- CvCityCitizens::DoRemoveWorstCitizen(bool, SpecialistTypes, int)
- CvCityCitizens::DoValidateForcedWorkingPlots()
- CvCityCitizens::GetCity()
- CvCityCitizens::GetNumCitizensWorkingPlots() const
- CvCityCitizens::GetNumDefaultSpecialists() const
- CvCityCitizens::GetNumForcedDefaultSpecialists() const
- CvCityCitizens::GetNumForcedSpecialistsInBuilding(BuildingTypes) const
- CvCityCitizens::GetNumSpecialistsInBuilding(BuildingTypes) const
- CvCityCitizens::GetNumUnassignedCitizens() const
- CvGlobals::getNumBuildingInfos()
Called by
- CvCity::doTask(TaskTypes, int, int, bool, bool, bool, bool)
- CvCityCitizens::DoAlterWorkingPlot(int)
- CvCityCitizens::DoTurn()
- CvCityCitizens::SetFocusType(CityAIFocusTypes)
- CvCityCitizens::SetForcedAvoidGrowth(bool)
- CvCityCitizens::SetNoAutoAssignSpecialists(bool)
- CvDllNetMessageHandler::ResponseUpdateCityCitizens(PlayerTypes, int)
- CvLuaCity::lDoReallocateCitizens(lua_State *)