Bazaar developer reference

CvTacticalAnalysisMap::PrioritizeZones()

Defined in
CvTacticalAnalysisMap.cpp, line 955
Class
CvTacticalAnalysisMap
Hook name
CivHooks::CvTacticalAnalysisMap_PrioritizeZones

Hooks

static bool BeforeCvTacticalAnalysisMap_PrioritizeZones(CvTacticalAnalysisMap* self);static void AfterCvTacticalAnalysisMap_PrioritizeZones(CvTacticalAnalysisMap* self);static void ReplaceCvTacticalAnalysisMap_PrioritizeZones(void (*original)(CvTacticalAnalysisMap*), CvTacticalAnalysisMap* self);CivRegisterBefore<CivHooks::CvTacticalAnalysisMap_PrioritizeZones>(host, &BeforeCvTacticalAnalysisMap_PrioritizeZones);CivRegisterAfter<CivHooks::CvTacticalAnalysisMap_PrioritizeZones>(host, &AfterCvTacticalAnalysisMap_PrioritizeZones);CivRegisterReplace<CivHooks::CvTacticalAnalysisMap_PrioritizeZones>(host, &ReplaceCvTacticalAnalysisMap_PrioritizeZones);

Code

954/// Establish order of zone processing for the turn955void CvTacticalAnalysisMap::PrioritizeZones()956{957	// Loop through the dominance zones958	CvTacticalDominanceZone* pZone;959	int iBaseValue;960	int iMultiplier;961	CvCity* pClosestCity = NULL;962963	for(unsigned int iI = 0; iI < m_DominanceZones.size(); iI++)964	{965		// Find the zone and compute dominance here966		pZone = &m_DominanceZones[iI];967		eTacticalDominanceFlags eDominance = ComputeDominance(pZone);968969		// Establish a base value for the region970		iBaseValue = 1;971972		// Temporary zone?973		if(pZone->GetTerritoryType() == TACTICAL_TERRITORY_TEMP_ZONE)974		{975			iMultiplier = 1000;976		}977		else978		{979			pClosestCity = pZone->GetClosestCity();980981			if(pClosestCity)982			{983				iBaseValue += (1 + (int)sqrt((float)pZone->GetClosestCity()->getPopulation()));984985				if(pClosestCity->isCapital() && !pClosestCity->GetPlayer()->isMinorCiv())986				{987					iBaseValue *= 2;988				}989990				if(m_pPlayer->GetTacticalAI()->IsTemporaryZoneCity(pClosestCity))991				{992					iBaseValue *= 20;993				}994995				else if (pZone->GetClosestCity()->isVisible(m_pPlayer->getTeam(), false))996				{997					iBaseValue *= 4;998999					// How damaged is this visible city?1000					int iMaxDamageMultiplier = 10;1001					int iDamage = pClosestCity->getDamage();1002					if (iDamage > (pClosestCity->GetMaxHitPoints() / iMaxDamageMultiplier))1003					{1004						iBaseValue *= (int)((iDamage + 1) * 10 / pClosestCity->GetMaxHitPoints());1005					}1006				}1007			}10081009			if(!pZone->IsWater())1010			{1011				iBaseValue *= 3;1012			}10131014			// Now compute a multiplier based on current conditions here1015			iMultiplier = 1;1016			if(eDominance == TACTICAL_DOMINANCE_ENEMY)1017			{1018				if(pZone->GetTerritoryType() == TACTICAL_TERRITORY_ENEMY)1019				{1020					iMultiplier = 2;1021				}1022				else if(pZone->GetTerritoryType() == TACTICAL_TERRITORY_FRIENDLY)1023				{1024					iMultiplier = 6;1025				}1026			}1027			else if(eDominance == TACTICAL_DOMINANCE_EVEN)1028			{1029				if(pZone->GetTerritoryType() == TACTICAL_TERRITORY_ENEMY)1030				{1031					iMultiplier = 4;1032				}1033				else if(pZone->GetTerritoryType() == TACTICAL_TERRITORY_FRIENDLY)1034				{1035					iMultiplier = 4;1036				}1037			}1038			else if(eDominance == TACTICAL_DOMINANCE_FRIENDLY)1039			{1040				if(pZone->GetTerritoryType() == TACTICAL_TERRITORY_ENEMY)1041				{1042					iMultiplier = 8;1043				}1044				else if(pZone->GetTerritoryType() == TACTICAL_TERRITORY_FRIENDLY)1045				{1046					iMultiplier = 1;1047				}1048			}1049			if(!m_pPlayer->isMinorCiv())1050			{1051				if(m_pPlayer->GetDiplomacyAI()->GetStateAllWars() == STATE_ALL_WARS_WINNING)1052				{1053					if(pZone->GetTerritoryType() == TACTICAL_TERRITORY_ENEMY)1054					{1055						iMultiplier *= 2;1056					}1057				}1058				else if(m_pPlayer->GetDiplomacyAI()->GetStateAllWars() == STATE_ALL_WARS_LOSING)1059				{1060					if(pZone->GetTerritoryType() == TACTICAL_TERRITORY_FRIENDLY)1061					{1062						iMultiplier *= 4;1063					}1064				}1065			}1066		}10671068		// Save off the value for this zone1069		if((iBaseValue * iMultiplier) <= 0)1070		{1071			FAssertMsg((iBaseValue * iMultiplier) > 0, "Invalid Dominance Zone Value");1072		}1073		pZone->SetDominanceZoneValue(iBaseValue * iMultiplier);1074	}10751076	std::stable_sort(m_DominanceZones.begin(), m_DominanceZones.end());1077}

Calls

Called by