// 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; }
CvTacticalDominanceZone * CvTacticalAnalysisMap::GetZoneByPlot(CvPlot * pPlot) { if (pPlot) { int iPlotIndex = GC.getMap().plotNum(pPlot->getX(), pPlot->getY()); CvTacticalAnalysisCell* pCell = GetCell(iPlotIndex); CvTacticalDominanceZone* pZone = pCell ? GetZoneByID(pCell->GetDominanceZone()) : NULL; return pZone; } return NULL; }
// 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; }
void CvTacticalAnalysisMap::EstablishZoneNeighborhood() { //walk over the map and see which zones are adjacent int iW = GC.getMap().getGridWidth(); int iH = GC.getMap().getGridHeight(); for(unsigned int iI = 0; iI < m_DominanceZones.size(); iI++) { m_DominanceZones[iI].ClearNeighboringZones(); } for (int i=0; i<iW; i++) { for (int j=0; j<iH; j++) { CvPlot* pA = GC.getMap().plot(i,j); CvPlot* pB = GC.getMap().plot(i,j+1); CvPlot* pC = GC.getMap().plot(i+1,j); CvTacticalAnalysisCell* cA = pA ? GetCell( pA->GetPlotIndex() ) : NULL; CvTacticalAnalysisCell* cB = pB ? GetCell( pB->GetPlotIndex() ) : NULL; CvTacticalAnalysisCell* cC = pC ? GetCell( pC->GetPlotIndex() ) : NULL; if (cA && cB) { int iA = cA->GetDominanceZone(); int iB = cB->GetDominanceZone(); if (iA!=-1 && iB!=-1 && GetZoneByID(iA)->GetTerritoryType()!=TACTICAL_TERRITORY_NO_OWNER && GetZoneByID(iB)->GetTerritoryType()!=TACTICAL_TERRITORY_NO_OWNER ) { GetZoneByID(iA)->AddNeighboringZone(iB); GetZoneByID(iB)->AddNeighboringZone(iA); } } if (cA && cC) { int iA = cA->GetDominanceZone(); int iC = cC->GetDominanceZone(); if (iA!=-1 && iC!=-1 && GetZoneByID(iA)->GetTerritoryType()!=TACTICAL_TERRITORY_NO_OWNER && GetZoneByID(iC)->GetTerritoryType()!=TACTICAL_TERRITORY_NO_OWNER ) { GetZoneByID(iA)->AddNeighboringZone(iC); GetZoneByID(iC)->AddNeighboringZone(iA); } } } } }
void CvTacticalAnalysisMap::Dump() { if (m_ePlayer==NO_PLAYER) return; bool bLogging = GC.getLogging() && GC.getAILogging() && (GET_PLAYER(m_ePlayer).isMajorCiv() || GET_PLAYER(m_ePlayer).isBarbarian()) && GET_PLAYER(m_ePlayer).IsAtWar(); if (bLogging) { CvString fname = CvString::format( "TacticalCells_%s_%03d.txt", GET_PLAYER(m_ePlayer).getCivilizationAdjective(), GC.getGame().getGameTurn() ); FILogFile* pLog=LOGFILEMGR.GetLog( fname.c_str(), FILogFile::kDontTimeStamp ); if (pLog) { pLog->Msg( "#x,y,visible,terrain,owner,enemy,targettype,underattack,zoneid,dominance,zonetype,fstrength,estrength,city\n" ); for (int i=0; i<GC.getMap().numPlots(); i++) { CvTacticalAnalysisCell* pCell = GetCell(i); if (!pCell->IsRevealed()) continue; CvTacticalDominanceZone* pZone = GetZoneByID( pCell->GetDominanceZone() ); int iZoneFriendlyStrength = pZone ? pZone->GetFriendlyRangedStrength() + pZone->GetOverallFriendlyStrength() : -1; int iZoneEnemyStrength = pZone ? pZone->GetEnemyRangedStrength() + pZone->GetOverallEnemyStrength() : -1; CvCity* pCity = pZone ? pZone->GetZoneCity() : NULL; CvString dump = CvString::format( "%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%s\n", GC.getMap().plotByIndex(i)->getX(), GC.getMap().plotByIndex(i)->getY(), pCell->IsVisible(), (int)GC.getMap().plotByIndex(i)->getTerrainType(), (int)GC.getMap().plotByIndex(i)->getOwner(), (int)pCell->IsEnemyTerritory(), (int)pCell->GetTargetType(), (int)pCell->IsSubjectToAttack(), pZone ? pZone->GetDominanceZoneID() : -1, pZone ? pZone->GetOverallDominanceFlag() : -1, pZone ? pZone->GetTerritoryType() : -1, iZoneFriendlyStrength, iZoneEnemyStrength, pCity ? pCity->getName().c_str() : "no city" ); pLog->Msg( dump.c_str() ); } pLog->Close(); } } }