CvBuilderTaskingAI::UpdateRoutePlots()
- Defined in
- CvBuilderTaskingAI.cpp, line 527
- Class
- CvBuilderTaskingAI
- Hook name
CivHooks::CvBuilderTaskingAI_UpdateRoutePlots
Hooks
static bool BeforeCvBuilderTaskingAI_UpdateRoutePlots(CvBuilderTaskingAI* self);static void AfterCvBuilderTaskingAI_UpdateRoutePlots(CvBuilderTaskingAI* self);static void ReplaceCvBuilderTaskingAI_UpdateRoutePlots(void (*original)(CvBuilderTaskingAI*), CvBuilderTaskingAI* self);CivRegisterBefore<CivHooks::CvBuilderTaskingAI_UpdateRoutePlots>(host, &BeforeCvBuilderTaskingAI_UpdateRoutePlots);CivRegisterAfter<CivHooks::CvBuilderTaskingAI_UpdateRoutePlots>(host, &AfterCvBuilderTaskingAI_UpdateRoutePlots);CivRegisterReplace<CivHooks::CvBuilderTaskingAI_UpdateRoutePlots>(host, &ReplaceCvBuilderTaskingAI_UpdateRoutePlots);
Code
526/// Looks at city connections and marks plots that can be added as routes by EvaluateBuilder527void CvBuilderTaskingAI::UpdateRoutePlots(void)528{529 m_aiNonTerritoryPlots.clear();530531 // if there are fewer than 2 cities, we don't need to run this function532 if(m_pPlayer->GetCityConnections()->GetNumConnectableCities() < 2)533 {534 return;535 }536537 RouteTypes eBestRoute = m_pPlayer->getBestRoute();538 if(eBestRoute == NO_ROUTE)539 {540 return;541 }542543 // find a builder, if I don't have a builder, bail!544 CvUnit* pBuilder = NULL;545 CvUnit* pLoopUnit;546 int iLoopUnit;547 for(pLoopUnit = m_pPlayer->firstUnit(&iLoopUnit); pLoopUnit != NULL; pLoopUnit = m_pPlayer->nextUnit(&iLoopUnit))548 {549 if(pLoopUnit->AI_getUnitAIType() == UNITAI_WORKER)550 {551 pBuilder = pLoopUnit;552 break;553 }554 }555556 // If there's no builder, bail!557 if(!pBuilder)558 {559 return;560 }561562 // updating plots that are part of the road network563 CvCityConnections* pCityConnections = m_pPlayer->GetCityConnections();564565 for(int i = 0; i < GC.getNumBuildInfos(); i++)566 {567 BuildTypes eBuild = (BuildTypes)i;568 CvBuildInfo* pkBuild = GC.getBuildInfo(eBuild);569 if(!pkBuild)570 {571 continue;572 }573574 RouteTypes eRoute = (RouteTypes)pkBuild->getRoute();575 if(eRoute == NO_ROUTE)576 {577 continue;578 }579580 if(GC.getBuildInfo(eBuild)->getTechPrereq() != NO_TECH)581 {582 bool bHasTech = GET_TEAM(m_pPlayer->getTeam()).GetTeamTechs()->HasTech((TechTypes)GC.getBuildInfo(eBuild)->getTechPrereq());583 if(!bHasTech)584 {585 continue;586 }587 }588589 for(uint uiFirstCityIndex = 0; uiFirstCityIndex < pCityConnections->m_aiCityPlotIDs.size(); uiFirstCityIndex++)590 {591 for(uint uiSecondCityIndex = uiFirstCityIndex + 1; uiSecondCityIndex < pCityConnections->m_aiCityPlotIDs.size(); uiSecondCityIndex++)592 {593 // get the two cities594 CvCity* pFirstCity = pCityConnections->GetCityFromIndex(uiFirstCityIndex);595 CvCity* pSecondCity = pCityConnections->GetCityFromIndex(uiSecondCityIndex);596 CvCity* pPlayerCapitalCity = NULL;597 CvCity* pTargetCity = NULL;598599 if(!pFirstCity || !pSecondCity)600 {601 continue;602 }603604 bool bConnectOnlyCapitals = (bool)GC.getCITY_CONNECTIONS_CONNECT_TO_CAPITAL();605 if (bConnectOnlyCapitals)606 {607 // only need to build roads to the capital608 if(!pFirstCity->isCapital() && !pSecondCity->isCapital())609 {610 continue;611 }612613 if(pFirstCity->isCapital() && pFirstCity->getOwner() == m_pPlayer->GetID())614 {615 pPlayerCapitalCity = pFirstCity;616 pTargetCity = pSecondCity;617 }618 else619 {620 pPlayerCapitalCity = pSecondCity;621 pTargetCity = pFirstCity;622 }623 ConnectCitiesToCapital(pPlayerCapitalCity, pTargetCity, eRoute);624 }625 else626 {627 ConnectCitiesForScenario(pFirstCity, pSecondCity, eBestRoute);628 }629 }630 }631 }632}
Calls
BaseVector::clearBaseVector::size- CvBuilderTaskingAI::ConnectCitiesForScenario(CvCity *, CvCity *, RouteTypes)
- CvBuilderTaskingAI::ConnectCitiesToCapital(CvCity *, CvCity *, RouteTypes)
- CvBuildInfo::getRoute() const
- CvBuildInfo::getTechPrereq() const
- CvCity::getOwner() const
- CvCity::isCapital() const
- CvCityConnections::GetCityFromIndex(int)
- CvCityConnections::GetNumConnectableCities()
- CvGlobals::getBuildInfo(BuildTypes)
- CvGlobals::getCITY_CONNECTIONS_CONNECT_TO_CAPITAL()
- CvGlobals::getNumBuildInfos()
- CvPlayer::firstUnit(int *, bool)
- CvPlayer::getBestRoute(CvPlot *) const
- CvPlayer::GetCityConnections() const
- CvPlayer::GetID() const
- CvPlayer::getTeam() const
- CvPlayer::nextUnit(int *, bool)
- CvTeam::getTeam(TeamTypes)
- CvTeam::GetTeamTechs() const
- CvTeamTechs::HasTech(TechTypes) const
- CvUnit::AI_getUnitAIType() const