Bazaar developer reference

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

Called by