本文整理汇总了C++中CvTacticalDominanceZone类的典型用法代码示例。如果您正苦于以下问题:C++ CvTacticalDominanceZone类的具体用法?C++ CvTacticalDominanceZone怎么用?C++ CvTacticalDominanceZone使用的例子?那么, 这里精选的类代码示例或许可以为您提供帮助。
在下文中一共展示了CvTacticalDominanceZone类的12个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: GetCell
// Is this plot in dangerous territory?
bool CvTacticalAnalysisMap::IsInEnemyDominatedZone(CvPlot* pPlot)
{
int iPlotIndex = GC.getMap().plotNum(pPlot->getX(), pPlot->getY());
CvTacticalAnalysisCell* pCell = GetCell(iPlotIndex);
CvTacticalDominanceZone* pZone = GetZoneByID(pCell->GetDominanceZone());
if(pZone && pZone->GetZoneCity()) //city check is to skip the potentially very large ocean zone
return (pZone->GetOverallDominanceFlag() == TACTICAL_DOMINANCE_ENEMY);
return false;
}
示例2: GET_PLAYER
/// Add in any temporary dominance zones from tactical AI
void CvTacticalAnalysisMap::AddTemporaryZones()
{
CvTemporaryZone* pZone;
CvTacticalAI* pTacticalAI = GET_PLAYER(m_ePlayer).GetTacticalAI();
if(pTacticalAI)
{
pTacticalAI->DropObsoleteZones();
pZone = pTacticalAI->GetFirstTemporaryZone();
while(pZone)
{
// Can't be a city zone (which is just used to boost priority but not establish a new zone)
if(pZone->GetTargetType() != AI_TACTICAL_TARGET_CITY)
{
CvPlot* pPlot = GC.getMap().plot(pZone->GetX(), pZone->GetY());
if(pPlot)
{
CvTacticalDominanceZone newZone;
newZone.SetDominanceZoneID(m_DominanceZones.size());
newZone.SetTerritoryType(TACTICAL_TERRITORY_TEMP_ZONE);
newZone.SetOwner(NO_PLAYER);
newZone.SetAreaID(pPlot->getArea());
newZone.SetWater(pPlot->isWater());
newZone.Extend(pPlot);
newZone.SetNavalInvasion(pZone->IsNavalInvasion());
m_DominanceZones.push_back(newZone);
}
}
pZone = pTacticalAI->GetNextTemporaryZone();
}
}
}
示例3: GetZoneByCity
/// Retrieve a dominance zone by closest city
CvTacticalDominanceZone* CvTacticalAnalysisMap::GetZoneByCity(CvCity* pCity, bool bWater)
{
CvTacticalDominanceZone* pZone;
for(int iI = 0; iI < GetNumZones(); iI++)
{
pZone = GetZoneByIndex(iI);
if(pZone->GetZoneCity() == pCity && pZone->IsWater() == bWater)
{
return pZone;
}
}
return NULL;
}
示例4: GetZoneByID
/// Retrieve a dominance zone by ID
CvTacticalDominanceZone* CvTacticalAnalysisMap::GetZoneByID(int iID)
{
CvTacticalDominanceZone* pZone;
for(int iI = 0; iI < GetNumZones(); iI++)
{
pZone = GetZoneByIndex(iI);
if(pZone->GetDominanceZoneID()==iID)
{
return pZone;
}
}
return NULL;
}
示例5: IsInEnemyDominatedZone
// Is this plot in dangerous territory?
bool CvTacticalAnalysisMap::IsInEnemyDominatedZone(CvPlot* pPlot)
{
CvTacticalAnalysisCell* pCell;
int iPlotIndex;
CvTacticalDominanceZone* pZone;
iPlotIndex = GC.getMap().plotNum(pPlot->getX(), pPlot->getY());
pCell = GetCell(iPlotIndex);
for(int iI = 0; iI < GetNumZones(); iI++)
{
pZone = GetZone(iI);
if(pZone->GetDominanceZoneID() == pCell->GetDominanceZone())
{
return (pZone->GetDominanceFlag() == TACTICAL_DOMINANCE_ENEMY);
}
}
return false;
}
示例6: FindExistingZone
/// Can this cell go in an existing dominance zone?
CvTacticalDominanceZone* CvTacticalAnalysisMap::FindExistingZone(CvPlot* pPlot)
{
CvTacticalDominanceZone* pZone;
for(unsigned int iI = 0; iI < m_DominanceZones.size(); iI++)
{
pZone = &m_DominanceZones[iI];
// If this is a temporary zone, matches if unowned and close enough
if((pZone->GetTerritoryType() == TACTICAL_TERRITORY_TEMP_ZONE) &&
(m_TempZone.GetTerritoryType() == TACTICAL_TERRITORY_NO_OWNER || m_TempZone.GetTerritoryType() == TACTICAL_TERRITORY_NEUTRAL) &&
(plotDistance(pPlot->getX(), pPlot->getY(), pZone->GetTempZoneCenter()->getX(), pZone->GetTempZoneCenter()->getY()) <= m_iTacticalRange))
{
return pZone;
}
// If not friendly or enemy, just 1 zone per area
if((pZone->GetTerritoryType() == TACTICAL_TERRITORY_NO_OWNER || pZone->GetTerritoryType() == TACTICAL_TERRITORY_NEUTRAL) &&
(m_TempZone.GetTerritoryType() == TACTICAL_TERRITORY_NO_OWNER || m_TempZone.GetTerritoryType() == TACTICAL_TERRITORY_NEUTRAL))
{
if(pZone->GetAreaID() == m_TempZone.GetAreaID())
{
return pZone;
}
}
// Otherwise everything needs to match
if(pZone->GetTerritoryType() == m_TempZone.GetTerritoryType() &&
pZone->GetOwner() == m_TempZone.GetOwner() &&
pZone->GetAreaID() == m_TempZone.GetAreaID() &&
pZone->GetClosestCity() == m_TempZone.GetClosestCity())
{
return pZone;
}
}
return NULL;
}
示例7: PrioritizeZones
/// Establish order of zone processing for the turn
void CvTacticalAnalysisMap::PrioritizeZones()
{
// Loop through the dominance zones
for(unsigned int iI = 0; iI < m_DominanceZones.size(); iI++)
{
// Find the zone and compute dominance here
CvTacticalDominanceZone* pZone = &m_DominanceZones[iI];
eTacticalDominanceFlags eDominance = ComputeDominance(pZone);
// Establish a base value for the region
int iBaseValue = 1;
int iMultiplier = 1;
// Temporary zone?
if(pZone->GetTerritoryType() == TACTICAL_TERRITORY_TEMP_ZONE)
{
iMultiplier = 1000;
}
else
{
CvCity* pClosestCity = pZone->GetZoneCity();
if(pClosestCity && pClosestCity->isAdjacentToArea(pZone->GetAreaID()))
{
iBaseValue += (1 + (int)sqrt((float)pClosestCity->getPopulation()));
if(GET_PLAYER(m_ePlayer).GetTacticalAI()->IsTemporaryZoneCity(pClosestCity))
{
iBaseValue *= 2;
}
else if (pClosestCity->isVisible( GET_PLAYER(m_ePlayer).getTeam(), false))
{
iBaseValue *= 4;
// How damaged is this visible city?
int iMaxDamageMultiplier = 10;
int iDamage = pClosestCity->getDamage();
if (iDamage > (pClosestCity->GetMaxHitPoints() / iMaxDamageMultiplier))
{
iBaseValue *= (int)((iDamage + 1) * 10 / pClosestCity->GetMaxHitPoints());
}
}
#if defined(MOD_BALANCE_CORE)
if (GET_PLAYER(m_ePlayer).IsCityAlreadyTargeted(pClosestCity) || GET_PLAYER(m_ePlayer).GetMilitaryAI()->IsCurrentAttackTarget(pClosestCity) )
{
iBaseValue *= 2;
}
if (pClosestCity->GetPlayer()->isMinorCiv())
{
//At war with ally of this minor? Greatly reduce priority.
PlayerTypes eAlly = pClosestCity->GetPlayer()->GetMinorCivAI()->GetAlly();
if (eAlly != NO_PLAYER && GET_TEAM(GET_PLAYER(m_ePlayer).getTeam()).isAtWar(GET_PLAYER(eAlly).getTeam()))
{
iBaseValue = 1;
}
}
#endif
}
if(!pZone->IsWater())
{
iBaseValue *= 3;
}
// Now compute a multiplier based on current conditions here
if(eDominance == TACTICAL_DOMINANCE_ENEMY)
{
if(pZone->GetTerritoryType() == TACTICAL_TERRITORY_ENEMY)
{
iMultiplier = 1;
}
else if(pZone->GetTerritoryType() == TACTICAL_TERRITORY_FRIENDLY)
{
iMultiplier = 8;
}
}
else if(eDominance == TACTICAL_DOMINANCE_EVEN)
{
if(pZone->GetTerritoryType() == TACTICAL_TERRITORY_ENEMY)
{
iMultiplier = 4;
}
else if(pZone->GetTerritoryType() == TACTICAL_TERRITORY_FRIENDLY)
{
iMultiplier = 4;
}
}
else if(eDominance == TACTICAL_DOMINANCE_FRIENDLY)
{
if(pZone->GetTerritoryType() == TACTICAL_TERRITORY_ENEMY)
{
iMultiplier = 8;
}
else if(pZone->GetTerritoryType() == TACTICAL_TERRITORY_FRIENDLY)
{
iMultiplier = 1;
}
//.........这里部分代码省略.........
示例8: LogZones
/// Log dominance zone data
void CvTacticalAnalysisMap::LogZones()
{
if(GC.getLogging() && GC.getAILogging())
{
CvString szLogMsg;
CvTacticalDominanceZone* pZone;
for(unsigned int iI = 0; iI < m_DominanceZones.size(); iI++)
{
pZone = &m_DominanceZones[iI];
//don't blow up the logs for empty zones
if ( pZone->GetOverallFriendlyStrength()==0 && pZone->GetOverallEnemyStrength()==0)
continue;
szLogMsg.Format("Zone ID: %d, Size: %d, City: %s, Area ID: %d, Value: %d, FRIENDLY Str: %d (%d), Ranged: %d (naval %d), ENEMY Str: %d (%d), Ranged: %d (naval %d), Closest Enemy: %d",
pZone->GetDominanceZoneID(), pZone->GetNumPlots(), pZone->GetZoneCity() ? pZone->GetZoneCity()->getName().c_str() : "none", pZone->GetAreaID(), pZone->GetDominanceZoneValue(),
pZone->GetOverallFriendlyStrength(), pZone->GetTotalFriendlyUnitCount(), pZone->GetFriendlyRangedStrength(), pZone->GetFriendlyNavalRangedStrength(),
pZone->GetOverallEnemyStrength(), pZone->GetTotalEnemyUnitCount(), pZone->GetEnemyRangedStrength(), pZone->GetEnemyNavalRangedStrength(), pZone->GetRangeClosestEnemyUnit());
if(pZone->GetOverallDominanceFlag() == TACTICAL_DOMINANCE_FRIENDLY)
{
szLogMsg += ", Friendly";
}
else if(pZone->GetOverallDominanceFlag() == TACTICAL_DOMINANCE_ENEMY)
{
szLogMsg += ", Enemy";
}
else if(pZone->GetOverallDominanceFlag() == TACTICAL_DOMINANCE_EVEN)
{
szLogMsg += ", Even";
}
else if(pZone->GetOverallDominanceFlag() == TACTICAL_DOMINANCE_NO_UNITS_VISIBLE)
{
szLogMsg += ", No Units Visible";
}
if(pZone->IsWater())
{
szLogMsg += ", Water";
}
else
{
szLogMsg += ", Land";
}
if(pZone->GetTerritoryType() == TACTICAL_TERRITORY_TEMP_ZONE)
{
szLogMsg += ", Temporary Zone";
}
else if(pZone->GetZoneCity())
{
if (GET_PLAYER(m_ePlayer).GetTacticalAI()->IsTemporaryZoneCity(pZone->GetZoneCity()))
{
szLogMsg += " (Temp)";
}
}
if (pZone->IsNavalInvasion())
{
szLogMsg += ", NAVAL INVASION";
}
GET_PLAYER(m_ePlayer).GetTacticalAI()->LogTacticalMessage(szLogMsg, true /*bSkipLogDominanceZone*/);
}
}
}
示例9: CalculateMilitaryStrengths
/// Calculate military presences in each owned dominance zone
void CvTacticalAnalysisMap::CalculateMilitaryStrengths()
{
// Loop through the dominance zones
CvTacticalDominanceZone* pZone;
CvCity* pClosestCity = NULL;
int iDistance;
int iMultiplier;
int iLoop;
CvUnit* pLoopUnit;
TeamTypes eTeam;
eTeam = m_pPlayer->getTeam();
for(unsigned int iI = 0; iI < m_DominanceZones.size(); iI++)
{
pZone = &m_DominanceZones[iI];
if(pZone->GetTerritoryType() != TACTICAL_TERRITORY_NO_OWNER)
{
pClosestCity = pZone->GetClosestCity();
if(pClosestCity)
{
// Start with strength of the city itself
int iCityHitPoints = pClosestCity->GetMaxHitPoints() - pClosestCity->getDamage();
int iStrength = m_iTacticalRange * pClosestCity->getStrengthValue() * iCityHitPoints / GC.getMAX_CITY_HIT_POINTS();
if(pZone->GetTerritoryType() == TACTICAL_TERRITORY_FRIENDLY)
{
pZone->AddFriendlyStrength(iStrength);
#if defined(MOD_AI_SMART_V3)
pZone->AddFriendlyRangedStrength(pClosestCity->getStrengthValue(MOD_AI_SMART_V3));
#else
pZone->AddFriendlyRangedStrength(pClosestCity->getStrengthValue());
#endif
}
#if defined(MOD_AI_SMART_V3)
else if(!MOD_AI_SMART_V3 || pZone->GetTerritoryType() == TACTICAL_TERRITORY_ENEMY)
#else
else
#endif
{
pZone->AddEnemyStrength(iStrength);
#if defined(MOD_AI_SMART_V3)
pZone->AddEnemyRangedStrength(pClosestCity->getStrengthValue(MOD_AI_SMART_V3));
#else
pZone->AddEnemyRangedStrength(pClosestCity->getStrengthValue());
#endif
}
// Loop through all of OUR units first
for(pLoopUnit = m_pPlayer->firstUnit(&iLoop); pLoopUnit != NULL; pLoopUnit = m_pPlayer->nextUnit(&iLoop))
{
if(pLoopUnit->IsCombatUnit())
{
if(pLoopUnit->getDomainType() == DOMAIN_AIR ||
#if defined(MOD_AI_SMART_V3)
//ranged power is cross-domain!
(MOD_AI_SMART_V3 && pLoopUnit->isRanged()) ||
#endif
(pLoopUnit->getDomainType() == DOMAIN_LAND && !pZone->IsWater()) ||
(pLoopUnit->getDomainType() == DOMAIN_SEA && pZone->IsWater()))
{
iDistance = plotDistance(pLoopUnit->getX(), pLoopUnit->getY(), pClosestCity->getX(), pClosestCity->getY());
if (iDistance <= m_iTacticalRange)
{
#if defined(MOD_AI_SMART_V3)
int iRange = MOD_AI_SMART_V3 ? MIN(4 - iDistance, 0) : 4 - iDistance;
iMultiplier = m_iTacticalRange + iRange;
#else
iMultiplier = (m_iTacticalRange + 4 - iDistance); // "4" so unit strength isn't totally dominated by proximity to city
#endif
if(iMultiplier > 0)
{
int iUnitStrength = pLoopUnit->GetBaseCombatStrengthConsideringDamage();
if(iUnitStrength == 0 && pLoopUnit->isEmbarked() && !pZone->IsWater())
{
iUnitStrength = pLoopUnit->GetBaseCombatStrength(true);
}
pZone->AddFriendlyStrength(iUnitStrength * iMultiplier * m_iUnitStrengthMultiplier);
pZone->AddFriendlyRangedStrength(pLoopUnit->GetMaxRangedCombatStrength(NULL, /*pCity*/ NULL, true, true));
if(pLoopUnit->GetRange() > GetBestFriendlyRange())
{
SetBestFriendlyRange(pLoopUnit->GetRange());
}
if(pLoopUnit->IsRangeAttackIgnoreLOS())
{
SetIgnoreLOS(true);
}
pZone->AddFriendlyUnitCount(1);
if(pLoopUnit->isRanged())
{
pZone->AddFriendlyRangedUnitCount(1);
}
}
}
}
}
}
// Repeat for all visible enemy units (or adjacent to visible)
//.........这里部分代码省略.........
示例10: if
/// Add data for this cell into dominance zone information
void CvTacticalAnalysisMap::AddToDominanceZones(int iIndex, CvTacticalAnalysisCell* pCell)
{
CvPlot* pPlot = GC.getMap().plotByIndex(iIndex);
// Compute zone data for this cell
m_TempZone.SetAreaID(pPlot->getArea());
m_TempZone.SetOwner(pPlot->getOwner());
m_TempZone.SetWater(pPlot->isWater());
if(!pPlot->isOwned())
{
m_TempZone.SetTerritoryType(TACTICAL_TERRITORY_NO_OWNER);
}
else if(pPlot->getTeam() == m_pPlayer->getTeam())
{
m_TempZone.SetTerritoryType(TACTICAL_TERRITORY_FRIENDLY);
}
else if(GET_TEAM(m_pPlayer->getTeam()).isAtWar(pPlot->getTeam()))
{
m_TempZone.SetTerritoryType(TACTICAL_TERRITORY_ENEMY);
}
else
{
m_TempZone.SetTerritoryType(TACTICAL_TERRITORY_NEUTRAL);
}
m_TempZone.SetClosestCity(NULL);
if(m_TempZone.GetTerritoryType() == TACTICAL_TERRITORY_ENEMY ||
m_TempZone.GetTerritoryType() == TACTICAL_TERRITORY_NEUTRAL ||
m_TempZone.GetTerritoryType() == TACTICAL_TERRITORY_FRIENDLY)
{
int iLoop;
int iBestDistance = MAX_INT;
CvCity* pBestCity = NULL;
for(CvCity* pLoopCity = GET_PLAYER(m_TempZone.GetOwner()).firstCity(&iLoop); pLoopCity != NULL; pLoopCity = GET_PLAYER(m_TempZone.GetOwner()).nextCity(&iLoop))
{
int iDistance = plotDistance(pLoopCity->getX(), pLoopCity->getY(), pPlot->getX(), pPlot->getY());
if(iDistance < iBestDistance)
{
iBestDistance = iDistance;
pBestCity = pLoopCity;
}
}
if(pBestCity != NULL)
{
m_TempZone.SetClosestCity(pBestCity);
}
}
// Now see if we already have a matching zone
CvTacticalDominanceZone* pZone = FindExistingZone(pPlot);
if(!pZone)
{
// Data populated, now add to vector
m_TempZone.SetDominanceZoneID(m_DominanceZones.size());
m_DominanceZones.push_back(m_TempZone);
pZone = &m_DominanceZones[m_DominanceZones.size() - 1];
}
// If this isn't owned territory, update zone with military strength info
if(pZone->GetTerritoryType() == TACTICAL_TERRITORY_NO_OWNER ||
pZone->GetTerritoryType() == TACTICAL_TERRITORY_TEMP_ZONE)
{
CvUnit* pFriendlyUnit = pCell->GetFriendlyMilitaryUnit();
if(pFriendlyUnit)
{
if(pFriendlyUnit->getDomainType() == DOMAIN_AIR ||
(pFriendlyUnit->getDomainType() == DOMAIN_LAND && !pZone->IsWater()) ||
(pFriendlyUnit->getDomainType() == DOMAIN_SEA && pZone->IsWater()))
{
int iStrength = pFriendlyUnit->GetBaseCombatStrengthConsideringDamage();
if(iStrength == 0 && pFriendlyUnit->isEmbarked() && !pZone->IsWater())
{
iStrength = pFriendlyUnit->GetBaseCombatStrength(true);
}
pZone->AddFriendlyStrength(iStrength * m_iUnitStrengthMultiplier);
pZone->AddFriendlyRangedStrength(pFriendlyUnit->GetMaxRangedCombatStrength(NULL, /*pCity*/ NULL, true, true));
if(pFriendlyUnit->GetRange() > GetBestFriendlyRange())
{
SetBestFriendlyRange(pFriendlyUnit->GetRange());
}
if(pFriendlyUnit->IsRangeAttackIgnoreLOS())
{
SetIgnoreLOS(true);
}
pZone->AddFriendlyUnitCount(1);
if(pFriendlyUnit->isRanged())
{
pZone->AddFriendlyRangedUnitCount(1);
}
}
}
CvUnit* pEnemyUnit = pCell->GetEnemyMilitaryUnit();
if(pEnemyUnit)
{
if(pEnemyUnit->getDomainType() == DOMAIN_AIR ||
(pEnemyUnit->getDomainType() == DOMAIN_LAND && !pZone->IsWater()) ||
(pEnemyUnit->getDomainType() == DOMAIN_SEA && pZone->IsWater()))
//.........这里部分代码省略.........
示例11: PrioritizeZones
/// Establish order of zone processing for the turn
void CvTacticalAnalysisMap::PrioritizeZones()
{
// Loop through the dominance zones
CvTacticalDominanceZone* pZone;
int iBaseValue;
int iMultiplier;
CvCity* pClosestCity = NULL;
for(unsigned int iI = 0; iI < m_DominanceZones.size(); iI++)
{
// Find the zone and compute dominance here
pZone = &m_DominanceZones[iI];
eTacticalDominanceFlags eDominance = ComputeDominance(pZone);
// Establish a base value for the region
iBaseValue = 1;
// Temporary zone?
if(pZone->GetTerritoryType() == TACTICAL_TERRITORY_TEMP_ZONE)
{
iMultiplier = 1000;
}
else
{
pClosestCity = pZone->GetClosestCity();
if(pClosestCity)
{
iBaseValue += (1 + (int)sqrt((float)pZone->GetClosestCity()->getPopulation()));
if(pClosestCity->isCapital() && !pClosestCity->GetPlayer()->isMinorCiv())
{
iBaseValue *= 2;
}
if(m_pPlayer->GetTacticalAI()->IsTemporaryZoneCity(pClosestCity))
{
iBaseValue *= 20;
}
else if (pZone->GetClosestCity()->isVisible(m_pPlayer->getTeam(), false))
{
iBaseValue *= 4;
// How damaged is this visible city?
int iMaxDamageMultiplier = 10;
int iDamage = pClosestCity->getDamage();
if (iDamage > (pClosestCity->GetMaxHitPoints() / iMaxDamageMultiplier))
{
iBaseValue *= (int)((iDamage + 1) * 10 / pClosestCity->GetMaxHitPoints());
}
}
}
if(!pZone->IsWater())
{
iBaseValue *= 3;
}
// Now compute a multiplier based on current conditions here
iMultiplier = 1;
if(eDominance == TACTICAL_DOMINANCE_ENEMY)
{
if(pZone->GetTerritoryType() == TACTICAL_TERRITORY_ENEMY)
{
iMultiplier = 2;
}
else if(pZone->GetTerritoryType() == TACTICAL_TERRITORY_FRIENDLY)
{
iMultiplier = 6;
}
}
else if(eDominance == TACTICAL_DOMINANCE_EVEN)
{
if(pZone->GetTerritoryType() == TACTICAL_TERRITORY_ENEMY)
{
iMultiplier = 4;
}
else if(pZone->GetTerritoryType() == TACTICAL_TERRITORY_FRIENDLY)
{
iMultiplier = 4;
}
}
else if(eDominance == TACTICAL_DOMINANCE_FRIENDLY)
{
if(pZone->GetTerritoryType() == TACTICAL_TERRITORY_ENEMY)
{
iMultiplier = 8;
}
else if(pZone->GetTerritoryType() == TACTICAL_TERRITORY_FRIENDLY)
{
iMultiplier = 1;
}
}
if(!m_pPlayer->isMinorCiv())
{
if(m_pPlayer->GetDiplomacyAI()->GetStateAllWars() == STATE_ALL_WARS_WINNING)
{
if(pZone->GetTerritoryType() == TACTICAL_TERRITORY_ENEMY)
//.........这里部分代码省略.........
示例12: LogZones
/// Log dominance zone data
void CvTacticalAnalysisMap::LogZones()
{
if(GC.getLogging() && GC.getAILogging())
{
CvString szLogMsg;
CvTacticalDominanceZone* pZone;
for(unsigned int iI = 0; iI < m_DominanceZones.size(); iI++)
{
pZone = &m_DominanceZones[iI];
szLogMsg.Format("Zone ID: %d, Area ID: %d, Value: %d, FRIENDLY Str: %d (%d), Ranged: %d (%d), ENEMY Str: %d (%d), Ranged: %d (%d), Closest Enemy: %d",
pZone->GetDominanceZoneID(), pZone->GetAreaID(), pZone->GetDominanceZoneValue(),
pZone->GetFriendlyStrength(), pZone->GetFriendlyUnitCount(), pZone->GetFriendlyRangedStrength(), pZone->GetFriendlyRangedUnitCount(),
pZone->GetEnemyStrength(), pZone->GetEnemyUnitCount(), pZone->GetEnemyRangedStrength(), pZone->GetEnemyRangedUnitCount(), pZone->GetRangeClosestEnemyUnit());
if(pZone->GetDominanceFlag() == TACTICAL_DOMINANCE_FRIENDLY)
{
szLogMsg += ", Friendly";
}
else if(pZone->GetDominanceFlag() == TACTICAL_DOMINANCE_ENEMY)
{
szLogMsg += ", Enemy";
}
else if(pZone->GetDominanceFlag() == TACTICAL_DOMINANCE_EVEN)
{
szLogMsg += ", Even";
}
else if(pZone->GetDominanceFlag() == TACTICAL_DOMINANCE_NO_UNITS_VISIBLE)
{
szLogMsg += ", No Units Visible";
}
if(pZone->IsWater())
{
szLogMsg += ", Water";
}
else
{
szLogMsg += ", Land";
}
if(pZone->GetTerritoryType() == TACTICAL_TERRITORY_TEMP_ZONE)
{
szLogMsg += ", Temporary Zone";
}
else if(pZone->GetClosestCity())
{
szLogMsg += ", " + pZone->GetClosestCity()->getName();
if (m_pPlayer->GetTacticalAI()->IsTemporaryZoneCity(pZone->GetClosestCity()))
{
szLogMsg += " (Temp)";
}
}
m_pPlayer->GetTacticalAI()->LogTacticalMessage(szLogMsg, true /*bSkipLogDominanceZone*/);
}
}
}