CvCitySpecializationAI::DoTurn()
- Defined in
- CvCitySpecializationAI.cpp, line 317
- Class
- CvCitySpecializationAI
- Hook name
CivHooks::CvCitySpecializationAI_DoTurn
Hooks
static bool BeforeCvCitySpecializationAI_DoTurn(CvCitySpecializationAI* self);static void AfterCvCitySpecializationAI_DoTurn(CvCitySpecializationAI* self);static void ReplaceCvCitySpecializationAI_DoTurn(void (*original)(CvCitySpecializationAI*), CvCitySpecializationAI* self);CivRegisterBefore<CivHooks::CvCitySpecializationAI_DoTurn>(host, &BeforeCvCitySpecializationAI_DoTurn);CivRegisterAfter<CivHooks::CvCitySpecializationAI_DoTurn>(host, &AfterCvCitySpecializationAI_DoTurn);CivRegisterReplace<CivHooks::CvCitySpecializationAI_DoTurn>(host, &ReplaceCvCitySpecializationAI_DoTurn);
Code
316/// Called every turn to see what Strategies this player should using (or not)317void CvCitySpecializationAI::DoTurn()318{319 AI_PERF_FORMAT("AI-perf.csv", ("CvCitySpecializationAI::DoTurn, Turn %03d, %s", GC.getGame().getElapsedGameTurns(), GetPlayer()->getCivilizationShortDescription()) );320321 int iCityLoop = 0;322323 // No city specializations for humans!324 if(m_pPlayer->isHuman())325 {326 return;327 }328329 // No city specializations for minor civs330 if(m_pPlayer->isMinorCiv())331 {332 return;333 }334335 // No city specializations early in the game336 if(GC.getGame().getGameTurn() < GC.getAI_CITY_SPECIALIZATION_EARLIEST_TURN())337 {338 return;339 }340341 // No city specialization if we don't have enough cities342 if(m_pPlayer->getNumCities() < 2)343 {344 return;345 }346347 // See if need to update assignments348 if(m_bSpecializationsDirty || (m_iLastTurnEvaluated + GC.getAI_CITY_SPECIALIZATION_REEVALUATION_INTERVAL() > GC.getGame().getGameTurn()))349 {350 m_eNextWonderDesired = m_pPlayer->GetWonderProductionAI()->ChooseWonder(false /*bUseAsyncRandom*/, true /*bAdjustForOtherPlayers*/, m_iNextWonderWeight);351 WeightSpecializations();352 AssignSpecializations();353 m_bSpecializationsDirty = false;354 m_iLastTurnEvaluated = GC.getGame().getGameTurn();355356 // Do we need to choose production again at all our cities?357 if(m_bInterruptWonders)358 {359 CvCity* pLoopCity = NULL;360 for(pLoopCity = m_pPlayer->firstCity(&iCityLoop); pLoopCity != NULL; pLoopCity = m_pPlayer->nextCity(&iCityLoop))361 {362 if(!pLoopCity->IsBuildingUnitForOperation())363 {364 pLoopCity->AI_chooseProduction(true /*bInterruptWonders*/);365 }366 }367 }368369 // Reset this flag -- need a new high priority event before we'll interrupt again370 m_bInterruptWonders = false;371 }372}
Calls
- CvCity::AI_chooseProduction(bool)
- CvCity::IsBuildingUnitForOperation() const
- CvCitySpecializationAI::AssignSpecializations()
- CvCitySpecializationAI::WeightSpecializations()
- CvGame::getGameTurn()
- CvGlobals::getAI_CITY_SPECIALIZATION_EARLIEST_TURN()
- CvGlobals::getAI_CITY_SPECIALIZATION_REEVALUATION_INTERVAL()
- CvGlobals::getGame()
- CvPlayer::firstCity(int *, bool)
- CvPlayer::getNumCities() const
- CvPlayer::GetWonderProductionAI() const
- CvPlayer::isHuman() const
- CvPlayer::isMinorCiv() const
- CvPlayer::nextCity(int *, bool)
- CvWonderProductionAI::ChooseWonder(bool, bool, int &)