CvHomelandAI::EstablishHomelandPriorities()
- Defined in
- CvHomelandAI.cpp, line 246
- Class
- CvHomelandAI
- Hook name
CivHooks::CvHomelandAI_EstablishHomelandPriorities
Hooks
static bool BeforeCvHomelandAI_EstablishHomelandPriorities(CvHomelandAI* self);static void AfterCvHomelandAI_EstablishHomelandPriorities(CvHomelandAI* self);static void ReplaceCvHomelandAI_EstablishHomelandPriorities(void (*original)(CvHomelandAI*), CvHomelandAI* self);CivRegisterBefore<CivHooks::CvHomelandAI_EstablishHomelandPriorities>(host, &BeforeCvHomelandAI_EstablishHomelandPriorities);CivRegisterAfter<CivHooks::CvHomelandAI_EstablishHomelandPriorities>(host, &AfterCvHomelandAI_EstablishHomelandPriorities);CivRegisterReplace<CivHooks::CvHomelandAI_EstablishHomelandPriorities>(host, &ReplaceCvHomelandAI_EstablishHomelandPriorities);
Code
245/// Choose which moves to emphasize this turn246void CvHomelandAI::EstablishHomelandPriorities()247{248 int iPriority = 0;249 int iFlavorDefense = 0;250 int iFlavorOffense = 0;251 int iFlavorExpand = 0;252 int iFlavorImprove = 0;253 int iFlavorNavalImprove = 0;254 int iFlavorExplore = 0;255 int iFlavorGold = 0;256 int iFlavorScience = 0;257 int iFlavorWonder = 0;258 int iFlavorMilitaryTraining = 0;259 int iFlavorCulture = 0;260261 m_MovePriorityList.clear();262 m_MovePriorityTurn = GC.getGame().getGameTurn();263264#if defined(MOD_AI_SMART_V3)265 // On even turns upgrades acquire more priority in order to be able to upgrade air units.266 int iTurnUpgradePriority = MOD_AI_SMART_V3 ? (m_MovePriorityTurn % 2) * 50 : 0;267#endif268269 // Find required flavor values270 for(int iFlavorLoop = 0; iFlavorLoop < GC.getNumFlavorTypes(); iFlavorLoop++)271 {272 if(GC.getFlavorTypes((FlavorTypes)iFlavorLoop) == "FLAVOR_DEFENSE")273 {274 iFlavorDefense = m_pPlayer->GetFlavorManager()->GetIndividualFlavor((FlavorTypes)iFlavorLoop);275 iFlavorDefense = (int)((double)iFlavorDefense * m_fFlavorDampening);276 }277 if(GC.getFlavorTypes((FlavorTypes)iFlavorLoop) == "FLAVOR_OFFENSE")278 {279 iFlavorOffense = m_pPlayer->GetFlavorManager()->GetIndividualFlavor((FlavorTypes)iFlavorLoop);280 iFlavorOffense = (int)((double)iFlavorOffense * m_fFlavorDampening);281 }282 else if(GC.getFlavorTypes((FlavorTypes)iFlavorLoop) == "FLAVOR_EXPANSION")283 {284 iFlavorExpand = m_pPlayer->GetFlavorManager()->GetIndividualFlavor((FlavorTypes)iFlavorLoop);285 }286 else if(GC.getFlavorTypes((FlavorTypes)iFlavorLoop) == "FLAVOR_RECON")287 {288 iFlavorExplore = m_pPlayer->GetFlavorManager()->GetIndividualFlavor((FlavorTypes)iFlavorLoop);289 iFlavorExplore = (int)((double)iFlavorExplore * m_fFlavorDampening);290 }291 else if(GC.getFlavorTypes((FlavorTypes)iFlavorLoop) == "FLAVOR_GOLD")292 {293 iFlavorGold = m_pPlayer->GetFlavorManager()->GetIndividualFlavor((FlavorTypes)iFlavorLoop);294 }295 else if(GC.getFlavorTypes((FlavorTypes)iFlavorLoop) == "FLAVOR_SCIENCE")296 {297 iFlavorScience = m_pPlayer->GetFlavorManager()->GetIndividualFlavor((FlavorTypes)iFlavorLoop);298 }299 else if(GC.getFlavorTypes((FlavorTypes)iFlavorLoop) == "FLAVOR_WONDER")300 {301 iFlavorWonder = m_pPlayer->GetFlavorManager()->GetIndividualFlavor((FlavorTypes)iFlavorLoop);302 }303 else if(GC.getFlavorTypes((FlavorTypes)iFlavorLoop) == "FLAVOR_MILITARY_TRAINING")304 {305 iFlavorMilitaryTraining = m_pPlayer->GetFlavorManager()->GetIndividualFlavor((FlavorTypes)iFlavorLoop);306 }307 else if(GC.getFlavorTypes((FlavorTypes)iFlavorLoop) == "FLAVOR_CULTURE")308 {309 iFlavorCulture = m_pPlayer->GetFlavorManager()->GetIndividualFlavor((FlavorTypes)iFlavorLoop);310 }311 }312313 // Loop through each possible homeland move (other than "none" or "unassigned")314 for(int iI = AI_HOMELAND_MOVE_UNASSIGNED + 1; iI < NUM_AI_HOMELAND_MOVES; iI++)315 {316 // Set base value317 switch((AIHomelandMove)iI)318 {319 case AI_HOMELAND_MOVE_EXPLORE:320 iPriority = GC.getAI_HOMELAND_MOVE_PRIORITY_EXPLORE();321 break;322 case AI_HOMELAND_MOVE_EXPLORE_SEA:323 iPriority = GC.getAI_HOMELAND_MOVE_PRIORITY_EXPLORE_SEA();324 break;325 case AI_HOMELAND_MOVE_SETTLE:326 iPriority = GC.getAI_HOMELAND_MOVE_PRIORITY_SETTLE();327 break;328 case AI_HOMELAND_MOVE_GARRISON:329 // Garrisons must beat out sentries if policies encourage garrisoning330 if(m_pPlayer->GetPlayerPolicies()->HasPolicyEncouragingGarrisons())331 {332 iPriority = GC.getAI_HOMELAND_MOVE_PRIORITY_SENTRY() + 1;333 }334 else335 {336 iPriority = GC.getAI_HOMELAND_MOVE_PRIORITY_GARRISON();337 }338 break;339 case AI_HOMELAND_MOVE_HEAL:340 iPriority = GC.getAI_HOMELAND_MOVE_PRIORITY_HEAL();341 break;342 case AI_HOMELAND_MOVE_TO_SAFETY:343 iPriority = GC.getAI_HOMELAND_MOVE_PRIORITY_TO_SAFETY();344 break;345 case AI_HOMELAND_MOVE_MOBILE_RESERVE:346 iPriority = GC.getAI_HOMELAND_MOVE_PRIORITY_MOBILE_RESERVE();347 break;348 case AI_HOMELAND_MOVE_SENTRY:349 iPriority = GC.getAI_HOMELAND_MOVE_PRIORITY_SENTRY();350 break;351 case AI_HOMELAND_MOVE_WORKER:352 iPriority = GC.getAI_HOMELAND_MOVE_PRIORITY_WORKER();353 break;354 case AI_HOMELAND_MOVE_WORKER_SEA:355 iPriority = GC.getAI_HOMELAND_MOVE_PRIORITY_WORKER_SEA();356 break;357 case AI_HOMELAND_MOVE_PATROL:358 iPriority = GC.getAI_HOMELAND_MOVE_PRIORITY_PATROL();359 break;360 case AI_HOMELAND_MOVE_UPGRADE:361 iPriority = GC.getAI_HOMELAND_MOVE_PRIORITY_UPGRADE();362 break;363 case AI_HOMELAND_MOVE_ANCIENT_RUINS:364 iPriority = GC.getAI_HOMELAND_MOVE_PRIORITY_ANCIENT_RUINS();365 break;366 case AI_HOMELAND_MOVE_GARRISON_CITY_STATE:367 iPriority = GC.getAI_HOMELAND_MOVE_PRIORITY_GARRISON_CITY_STATE();368 break;369 case AI_HOMELAND_MOVE_WRITER:370 iPriority = GC.getAI_HOMELAND_MOVE_PRIORITY_WRITER();371 break;372 case AI_HOMELAND_MOVE_ARTIST_GOLDEN_AGE:373 iPriority = GC.getAI_HOMELAND_MOVE_PRIORITY_ARTIST();374 break;375 case AI_HOMELAND_MOVE_MUSICIAN:376 iPriority = GC.getAI_HOMELAND_MOVE_PRIORITY_MUSICIAN();377 break;378 case AI_HOMELAND_MOVE_SCIENTIST_FREE_TECH:379 iPriority = GC.getAI_HOMELAND_MOVE_PRIORITY_SCIENTIST_FREE_TECH();380 break;381 case AI_HOMELAND_MOVE_ENGINEER_HURRY:382 iPriority = GC.getAI_HOMELAND_MOVE_PRIORITY_ENGINEER_HURRY();383 break;384 case AI_HOMELAND_MOVE_GENERAL_GARRISON:385 iPriority = GC.getAI_HOMELAND_MOVE_PRIORITY_GENERAL_GARRISON();386 break;387 case AI_HOMELAND_MOVE_ADMIRAL_GARRISON:388 iPriority = GC.getAI_HOMELAND_MOVE_PRIORITY_ADMIRAL_GARRISON();389 break;390 case AI_HOMELAND_MOVE_PROPHET_RELIGION:391 iPriority = GC.getAI_HOMELAND_MOVE_PRIORITY_PROPHET_RELIGION();392 break;393 case AI_HOMELAND_MOVE_MISSIONARY:394 iPriority = GC.getAI_HOMELAND_MOVE_PRIORITY_MISSIONARY();395 break;396 case AI_HOMELAND_MOVE_INQUISITOR:397 iPriority = GC.getAI_HOMELAND_MOVE_PRIORITY_INQUISITOR();398 break;399 case AI_HOMELAND_MOVE_SPACESHIP_PART:400 iPriority = GC.getAI_HOMELAND_MOVE_PRIORITY_SPACESHIP_PART();401 break;402 case AI_HOMELAND_MOVE_ADD_SPACESHIP_PART:403 iPriority = GC.getAI_HOMELAND_MOVE_PRIORITY_ADD_SPACESHIP_PART();404 break;405 case AI_HOMELAND_MOVE_AIRCRAFT_TO_THE_FRONT:406 iPriority = GC.getAI_HOMELAND_MOVE_PRIORITY_AIRCRAFT_TO_THE_FRONT();407 break;408 case AI_HOMELAND_MOVE_TREASURE:409 iPriority = GC.getAI_HOMELAND_MOVE_PRIORITY_TREASURE();410 break;411 case AI_HOMELAND_MOVE_TRADE_UNIT:412 iPriority = GC.getAI_HOMELAND_MOVE_PRIORITY_TRADE_UNIT();413 break;414 case AI_HOMELAND_MOVE_ARCHAEOLOGIST:415 iPriority = GC.getAI_HOMELAND_MOVE_PRIORITY_ARCHAEOLOGIST();416 break;417 case AI_HOMELAND_MOVE_AIRLIFT:418 iPriority = GC.getAI_HOMELAND_MOVE_PRIORITY_AIRLIFT();419 break;420 }421422 // Make sure base priority is not negative423 if(iPriority >= 0)424 {425 // Now add in the appropriate flavor value426 switch((AIHomelandMove)iI)427 {428 // Defensive moves429 case AI_HOMELAND_MOVE_GARRISON:430 case AI_HOMELAND_MOVE_HEAL:431 case AI_HOMELAND_MOVE_TO_SAFETY:432 case AI_HOMELAND_MOVE_MOBILE_RESERVE:433 case AI_HOMELAND_MOVE_SENTRY:434 case AI_HOMELAND_MOVE_GARRISON_CITY_STATE:435 case AI_HOMELAND_MOVE_GENERAL_GARRISON:436 case AI_HOMELAND_MOVE_ADMIRAL_GARRISON:437 case AI_HOMELAND_MOVE_AIRCRAFT_TO_THE_FRONT:438 case AI_HOMELAND_MOVE_TREASURE:439440 // Here so they remain same priority relative to AI_HOMELAND_MOVE_TO_SAFETY441 case AI_HOMELAND_MOVE_MISSIONARY:442 case AI_HOMELAND_MOVE_INQUISITOR:443 case AI_HOMELAND_MOVE_PROPHET_RELIGION:444 case AI_HOMELAND_MOVE_SPACESHIP_PART:445 case AI_HOMELAND_MOVE_ADD_SPACESHIP_PART:446 iPriority += iFlavorDefense;447 break;448449 // Other miscellaneous types450 case AI_HOMELAND_MOVE_EXPLORE:451 case AI_HOMELAND_MOVE_EXPLORE_SEA:452 iPriority += iFlavorExplore;453 break;454455 case AI_HOMELAND_MOVE_SETTLE:456 iPriority += iFlavorExpand;457 break;458459 case AI_HOMELAND_MOVE_WORKER:460 iPriority += iFlavorImprove;461 break;462463 case AI_HOMELAND_MOVE_WORKER_SEA:464 iPriority += iFlavorNavalImprove;465 break;466467 case AI_HOMELAND_MOVE_UPGRADE:468#if defined(MOD_AI_SMART_V3)469 iPriority += (iFlavorMilitaryTraining + iTurnUpgradePriority);470#else471 iPriority += iFlavorMilitaryTraining;472#endif473 break;474475 case AI_HOMELAND_MOVE_WRITER:476 iPriority += iFlavorCulture;477 break;478479 case AI_HOMELAND_MOVE_ARTIST_GOLDEN_AGE:480 iPriority += iFlavorCulture;481 break;482483 case AI_HOMELAND_MOVE_MUSICIAN:484 iPriority += iFlavorCulture;485 break;486487 case AI_HOMELAND_MOVE_ANCIENT_RUINS:488 iPriority += iFlavorExplore;489 break;490491 case AI_HOMELAND_MOVE_SCIENTIST_FREE_TECH:492 iPriority += iFlavorScience;493 break;494495 case AI_HOMELAND_MOVE_ENGINEER_HURRY:496 iPriority += iFlavorWonder;497 break;498499 case AI_HOMELAND_MOVE_TRADE_UNIT:500 iPriority += iFlavorGold;501 break;502503 }504505 // Store off this move and priority506 CvHomelandMove move;507 move.m_eMoveType = (AIHomelandMove)iI;508 move.m_iPriority = iPriority;509 m_MovePriorityList.push_back(move);510 }511 }512513 // Now sort the moves in priority order514 std::stable_sort(m_MovePriorityList.begin(), m_MovePriorityList.end());515}
Calls
BaseVector::beginBaseVector::clearBaseVector::end- CustomMods::isAI_SMART_V3()
- CvFlavorManager::GetIndividualFlavor(FlavorTypes)
- CvGame::getGameTurn()
- CvGlobals::getAI_HOMELAND_MOVE_PRIORITY_ADD_SPACESHIP_PART()
- CvGlobals::getAI_HOMELAND_MOVE_PRIORITY_ADMIRAL_GARRISON()
- CvGlobals::getAI_HOMELAND_MOVE_PRIORITY_AIRCRAFT_TO_THE_FRONT()
- CvGlobals::getAI_HOMELAND_MOVE_PRIORITY_AIRLIFT()
- CvGlobals::getAI_HOMELAND_MOVE_PRIORITY_ANCIENT_RUINS()
- CvGlobals::getAI_HOMELAND_MOVE_PRIORITY_ARCHAEOLOGIST()
- CvGlobals::getAI_HOMELAND_MOVE_PRIORITY_ARTIST()
- CvGlobals::getAI_HOMELAND_MOVE_PRIORITY_ENGINEER_HURRY()
- CvGlobals::getAI_HOMELAND_MOVE_PRIORITY_EXPLORE()
- CvGlobals::getAI_HOMELAND_MOVE_PRIORITY_EXPLORE_SEA()
- CvGlobals::getAI_HOMELAND_MOVE_PRIORITY_GARRISON()
- CvGlobals::getAI_HOMELAND_MOVE_PRIORITY_GARRISON_CITY_STATE()
- CvGlobals::getAI_HOMELAND_MOVE_PRIORITY_GENERAL_GARRISON()
- CvGlobals::getAI_HOMELAND_MOVE_PRIORITY_HEAL()
- CvGlobals::getAI_HOMELAND_MOVE_PRIORITY_INQUISITOR()
- CvGlobals::getAI_HOMELAND_MOVE_PRIORITY_MISSIONARY()
- CvGlobals::getAI_HOMELAND_MOVE_PRIORITY_MOBILE_RESERVE()
- CvGlobals::getAI_HOMELAND_MOVE_PRIORITY_MUSICIAN()
- CvGlobals::getAI_HOMELAND_MOVE_PRIORITY_PATROL()
- CvGlobals::getAI_HOMELAND_MOVE_PRIORITY_PROPHET_RELIGION()
- CvGlobals::getAI_HOMELAND_MOVE_PRIORITY_SCIENTIST_FREE_TECH()
- CvGlobals::getAI_HOMELAND_MOVE_PRIORITY_SENTRY()
- CvGlobals::getAI_HOMELAND_MOVE_PRIORITY_SETTLE()
- CvGlobals::getAI_HOMELAND_MOVE_PRIORITY_SPACESHIP_PART()
- CvGlobals::getAI_HOMELAND_MOVE_PRIORITY_TO_SAFETY()
- CvGlobals::getAI_HOMELAND_MOVE_PRIORITY_TRADE_UNIT()
- CvGlobals::getAI_HOMELAND_MOVE_PRIORITY_TREASURE()
- CvGlobals::getAI_HOMELAND_MOVE_PRIORITY_UPGRADE()
- CvGlobals::getAI_HOMELAND_MOVE_PRIORITY_WORKER()
- CvGlobals::getAI_HOMELAND_MOVE_PRIORITY_WORKER_SEA()
- CvGlobals::getAI_HOMELAND_MOVE_PRIORITY_WRITER()
- CvGlobals::getFlavorTypes(FlavorTypes)
- CvGlobals::getGame()
- CvGlobals::getNumFlavorTypes()
- CvHomelandMove::CvHomelandMove()
- CvPlayer::GetFlavorManager() const
- CvPlayer::GetPlayerPolicies() const
- CvPlayerPolicies::HasPolicyEncouragingGarrisons() const
FStaticVector::push_backstd::operator==std::stable_sort