Bazaar developer reference

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

Called by