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
BaseVector::beginBaseVector::endBaseVector::operator[]BaseVector::size- CvCity::getDamage() const
- CvCity::GetMaxHitPoints() const
- CvCity::GetPlayer()
- CvCity::getPopulation(bool) const
- CvCity::isCapital() const
- CvCity::isVisible(TeamTypes, bool) const
- CvDiplomacyAI::GetStateAllWars() const
- CvPlayer::GetDiplomacyAI() const
- CvPlayer::GetTacticalAI() const
- CvPlayer::getTeam() const
- CvPlayer::isMinorCiv() const
- CvTacticalAI::IsTemporaryZoneCity(CvCity *)
- CvTacticalAnalysisMap::ComputeDominance(CvTacticalDominanceZone *)
- CvTacticalDominanceZone::GetClosestCity() const
- CvTacticalDominanceZone::GetTerritoryType() const
- CvTacticalDominanceZone::IsWater() const
- CvTacticalDominanceZone::SetDominanceZoneValue(int)
sqrtstd::stable_sort