本文整理汇总了C++中CvPlot::getX方法的典型用法代码示例。如果您正苦于以下问题:C++ CvPlot::getX方法的具体用法?C++ CvPlot::getX怎么用?C++ CvPlot::getX使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类CvPlot
的用法示例。
在下文中一共展示了CvPlot::getX方法的15个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: SetTargetBombardCells
// Mark cells we can use to bomb a specific target
void CvTacticalAnalysisMap::SetTargetBombardCells(CvPlot* pTarget, int iRange, bool bIgnoreLOS)
{
int iDX, iDY;
CvPlot* pLoopPlot;
int iPlotIndex;
int iPlotDistance;
for(iDX = -(iRange); iDX <= iRange; iDX++)
{
for(iDY = -(iRange); iDY <= iRange; iDY++)
{
pLoopPlot = plotXY(pTarget->getX(), pTarget->getY(), iDX, iDY);
if(pLoopPlot != NULL)
{
iPlotDistance = plotDistance(pLoopPlot->getX(), pLoopPlot->getY(), pTarget->getX(), pTarget->getY());
if(iPlotDistance > 0 && iPlotDistance <= iRange)
{
iPlotIndex = GC.getMap().plotNum(pLoopPlot->getX(), pLoopPlot->getY());
if(m_pPlots[iPlotIndex].IsRevealed() && !m_pPlots[iPlotIndex].IsImpassableTerrain() && !m_pPlots[iPlotIndex].IsImpassableTerritory())
{
if(!m_pPlots[iPlotIndex].IsEnemyCity() && !m_pPlots[iPlotIndex].IsNeutralCity())
{
if(bIgnoreLOS || pLoopPlot->canSeePlot(pTarget, m_pPlayer->getTeam(), iRange, NO_DIRECTION))
{
m_pPlots[iPlotIndex].SetWithinRangeOfTarget(true);
}
}
}
}
}
}
}
}
示例2: ResponseCityBuyPlot
//------------------------------------------------------------------------------
void CvDllNetMessageHandler::ResponseCityBuyPlot(PlayerTypes ePlayer, int iCityID, int iX, int iY)
{
CvPlayerAI& kPlayer = GET_PLAYER(ePlayer);
CvCity* pkCity = kPlayer.getCity(iCityID);
if(pkCity != NULL)
{
CvPlot* pkPlot = NULL;
// (-1,-1) means pick a random plot to buy
if(iX == -1 && iY == -1)
{
#if defined(MOD_BALANCE_CORE)
pkPlot = pkCity->GetNextBuyablePlot(false);
#else
pkPlot = pkCity->GetNextBuyablePlot();
#endif
}
else
{
pkPlot = GC.getMap().plot(iX, iY);
}
if(pkPlot != NULL)
{
if(pkCity->CanBuyPlot(pkPlot->getX(), pkPlot->getY()))
{
pkCity->BuyPlot(pkPlot->getX(), pkPlot->getY());
if(ePlayer == GC.getGame().getActivePlayer() && GC.GetEngineUserInterface()->isCityScreenUp())
{
GC.GetEngineUserInterface()->setDirty(CityScreen_DIRTY_BIT, true);
}
}
}
}
}
示例3: Update
/// Updates the danger plots values to reflect threats across the map
void CvDistanceMap::Update()
{
const CvMap& map = GC.getMap();
int nPlots = map.numPlots();
m_vDistance = std::vector<int>(nPlots,INT_MAX);
m_vClosestFeature = std::vector<int>(nPlots,0);
m_bArrayAllocated = true;
// since we know there are very few cities compared to the number of plots,
// we don't need to do the full distance transform
for (int i = 0; i < MAX_PLAYERS; i++)
{
if (m_ePlayer!=NO_PLAYER && m_ePlayer!=i)
continue;
// for each city
CvPlayer& thisPlayer = GET_PLAYER((PlayerTypes)i);
int iCityIndex = 0;
for(CvCity* pLoopCity = thisPlayer.firstCity(&iCityIndex); pLoopCity != NULL; pLoopCity = thisPlayer.nextCity(&iCityIndex))
{
CvPlot* pCityPlot = pLoopCity->plot();
for (int iPlotIndex=0; iPlotIndex<nPlots; iPlotIndex++)
{
CvPlot* pPlot = map.plotByIndexUnchecked(iPlotIndex);
if (pPlot)
{
int iDistance = plotDistance( pCityPlot->getX(),pCityPlot->getY(),pPlot->getX(),pPlot->getY() );
bool bUpdate = (iDistance < m_vDistance[iPlotIndex]);
//in case of equal distance, take care not to prefer the player with the lower ID
if (iDistance == m_vDistance[iPlotIndex])
{
PlayerTypes currentOwner = (PlayerTypes) UNPACK_OWNER(m_vClosestFeature[iPlotIndex]);
CvCity* pCurrentCity = GET_PLAYER(currentOwner).getCity( UNPACK_ID(m_vClosestFeature[iPlotIndex]) );
bUpdate = (pCurrentCity->getGameTurnFounded() > pLoopCity->getGameTurnFounded());
}
if (bUpdate)
{
m_vDistance[iPlotIndex] = iDistance;
m_vClosestFeature[iPlotIndex] = PACK(pLoopCity->getOwner(), pLoopCity->GetID());
}
}
}
}
}
m_bDirty = false;
}
示例4: AI_plotTargetMissionAIs
int CvPlayerAI::AI_plotTargetMissionAIs(CvPlot* pPlot, MissionAITypes eMissionAI, int iRange)
{
int iCount = 0;
int iLoop;
for(CvUnit* pLoopUnit = firstUnit(&iLoop); pLoopUnit; pLoopUnit = nextUnit(&iLoop))
{
CvPlot* pMissionPlot = pLoopUnit->GetMissionAIPlot();
if(!pMissionPlot)
{
continue;
}
MissionAITypes eGroupMissionAI = pLoopUnit->GetMissionAIType();
if(eGroupMissionAI != eMissionAI)
{
continue;
}
int iDistance = plotDistance(pPlot->getX(), pPlot->getY(), pMissionPlot->getX(), pMissionPlot->getY());
if(iDistance == iRange)
{
iCount++;
}
}
return iCount;
}
示例5: ResponseSwapUnits
//------------------------------------------------------------------------------
void CvDllNetMessageHandler::ResponseSwapUnits(PlayerTypes ePlayer, int iUnitID, MissionTypes eMission, int iData1, int iData2, int iFlags, bool bShift)
{
CvUnit::dispatchingNetMessage(true);
CvPlayerAI& kPlayer = GET_PLAYER(ePlayer);
CvUnit* pkUnit = kPlayer.getUnit(iUnitID);
if(pkUnit != NULL)
{
// Get target plot
CvMap& kMap = GC.getMap();
CvPlot* pkTargetPlot = kMap.plot(iData1, iData2);
if(pkTargetPlot != NULL)
{
CvPlot* pkOriginationPlot = pkUnit->plot();
// Find unit to move out
for(int iI = 0; iI < pkTargetPlot->getNumUnits(); iI++)
{
CvUnit* pkUnit2 = pkTargetPlot->getUnitByIndex(iI);
if(pkUnit2 && pkUnit2->AreUnitsOfSameType(*pkUnit))
{
// Start the swap
pkUnit->PushMission(CvTypes::getMISSION_MOVE_TO(), iData1, iData2, CvUnit::MOVEFLAG_IGNORE_STACKING, bShift, true);
// Move the other unit back out, again splitting if necessary
pkUnit2->PushMission(CvTypes::getMISSION_MOVE_TO(), pkOriginationPlot->getX(), pkOriginationPlot->getY());
}
}
}
}
CvUnit::dispatchingNetMessage(false);
}
示例6: GetCityDanger
/// Sums the danger values of the plots around the city to determine the danger value of the city
int CvDangerPlots::GetCityDanger (CvCity* pCity)
{
CvAssertMsg(pCity, "pCity is null");
if(!pCity) return 0;
CvAssertMsg(pCity->getOwner() == m_ePlayer, "City does not belong to us");
CvPlot* pPlot = pCity->plot();
int iEvalRange = GC.getAI_DIPLO_PLOT_RANGE_FROM_CITY_HOME_FRONT();
int iDangerValue = 0;
for (int iX = -iEvalRange; iX <= iEvalRange; iX++)
{
for (int iY = -iEvalRange; iY <= iEvalRange; iY++)
{
CvPlot* pEvalPlot = plotXYWithRangeCheck(pPlot->getX(), pPlot->getY(), iX, iY, iEvalRange);
if (!pEvalPlot)
{
continue;
}
iDangerValue += GetDanger(*pEvalPlot);
}
}
return iDangerValue;
}
示例7: SetTargetFlankBonusCells
// Mark cells we can use to bomb a specific target
void CvTacticalAnalysisMap::SetTargetFlankBonusCells(CvPlot* pTarget)
{
CvPlot* pLoopPlot;
int iPlotIndex;
// No flank attacks on units at sea (where all combat is bombards)
if(pTarget->isWater())
{
return;
}
for(int iI = 0; iI < NUM_DIRECTION_TYPES; iI++)
{
pLoopPlot = plotDirection(pTarget->getX(), pTarget->getY(), ((DirectionTypes)iI));
if(pLoopPlot != NULL)
{
iPlotIndex = GC.getMap().plotNum(pLoopPlot->getX(), pLoopPlot->getY());
if(m_pPlots[iPlotIndex].IsRevealed() && !m_pPlots[iPlotIndex].IsImpassableTerrain() && !m_pPlots[iPlotIndex].IsImpassableTerritory())
{
if(!m_pPlots[iPlotIndex].IsFriendlyCity() && !m_pPlots[iPlotIndex].IsEnemyCity() && !m_pPlots[iPlotIndex].IsNeutralCity())
{
if(!m_pPlots[iPlotIndex].IsFriendlyTurnEndTile() && m_pPlots[iPlotIndex].GetEnemyMilitaryUnit() == NULL)
{
m_pPlots[iPlotIndex].SetHelpsProvidesFlankBonus(true);
}
}
}
}
}
}
示例8: GetDanger
/// Return the maximum amount of damage that could be dealt to a non-specific unit at this plot
int CvDangerPlots::GetDanger(const CvPlot& pPlot, PlayerTypes ePlayer)
{
if(!m_bArrayAllocated)
return 0;
const int idx = pPlot.getX() + pPlot.getY() * GC.getMap().getGridWidth();
return m_DangerPlots[idx].GetDanger(ePlayer);
}
示例9: IsUnderImmediateThreat
/// Returns if the tile is in danger
bool CvDangerPlots::IsUnderImmediateThreat(const CvPlot& pPlot, PlayerTypes ePlayer)
{
if(!m_bArrayAllocated)
return 0;
const int idx = pPlot.getX() + pPlot.getY() * GC.getMap().getGridWidth();
return m_DangerPlots[idx].IsUnderImmediateThreat(ePlayer);
}
示例10:
std::vector<CvUnit*> CvDangerPlots::GetPossibleAttackers(const CvPlot& Plot) const
{
if(!m_bArrayAllocated)
return std::vector<CvUnit*>();
const int idx = Plot.getX() + Plot.getY() * GC.getMap().getGridWidth();
return m_DangerPlots[idx].GetPossibleAttackers();
}
示例11: FindBestMerchantTargetPlot
CvPlot* CvPlayerAI::FindBestMerchantTargetPlot(CvUnit* pGreatMerchant, bool bOnlySafePaths)
{
CvAssertMsg(pGreatMerchant, "pGreatMerchant is null");
if(!pGreatMerchant)
{
return NULL;
}
int iBestTurnsToReach = MAX_INT;
CvPlot* pBestTargetPlot = NULL;
int iPathTurns;
UnitHandle pMerchant = UnitHandle(pGreatMerchant);
CvTeam& kTeam = GET_TEAM(getTeam());
// Loop through each city state
for(int iI = 0; iI < MAX_PLAYERS; iI++)
{
CvPlayer& kPlayer = GET_PLAYER((PlayerTypes)iI);
if(kPlayer.isMinorCiv())
{
CvPlot* pCSPlot = kPlayer.getStartingPlot();
if(pCSPlot)
{
if(pCSPlot->isRevealed(getTeam()))
{
// Is this a minor we are friendly with?
if(GetDiplomacyAI()->GetMinorCivApproach(kPlayer.GetID()) != MINOR_CIV_APPROACH_CONQUEST &&
!kTeam.isAtWar(kPlayer.getTeam()) && GetDiplomacyAI()->GetWarGoal(kPlayer.GetID()) == NO_WAR_GOAL_TYPE)
{
// Search all the plots adjacent to this city (since can't enter the minor city plot itself)
for(int jJ = 0; jJ < NUM_DIRECTION_TYPES; jJ++)
{
CvPlot* pAdjacentPlot = plotDirection(pCSPlot->getX(), pCSPlot->getY(), ((DirectionTypes)jJ));
if(pAdjacentPlot != NULL)
{
// Make sure this is still owned by the city state and is revealed to us and isn't a water tile
if(pAdjacentPlot->getOwner() == (PlayerTypes)iI && pAdjacentPlot->isRevealed(getTeam())
&& !pAdjacentPlot->isWater())
{
iPathTurns = TurnsToReachTarget(pMerchant, pAdjacentPlot, true /*bReusePaths*/, !bOnlySafePaths/*bIgnoreUnits*/);
if(iPathTurns < iBestTurnsToReach)
{
iBestTurnsToReach = iPathTurns;
pBestTargetPlot = pAdjacentPlot;
}
}
}
}
}
}
}
}
}
return pBestTargetPlot;
}
示例12: GetClosestFeatureDistance
// -----------------------------------------------------------------------------------------------
int CvDistanceMap::GetClosestFeatureDistance(const CvPlot& plot)
{
if (m_bDirty)
Update();
if (m_bArrayAllocated)
return m_vDistance[ GC.getMap().plotNum( plot.getX(), plot.getY() ) ];
return INT_MAX;
}
示例13: Dump
void CvDistanceMap::Dump(const char* filename)
{
ofstream out(filename);
if (out)
{
out << "#x,y,hx,hz,water,distance,id,owner\n";
for (int i=0; i<GC.getMap().numPlots(); i++)
{
CvPlot* pPlot = GC.getMap().plotByIndexUnchecked(i);
int xHex = xToHexspaceX(pPlot->getX(),pPlot->getY());
int zHex = -xHex-pPlot->getY();
out << pPlot->getX() << "," << pPlot->getY() << "," << xHex << "," << zHex << "," << (pPlot->isWater() ? 1 : 0) << ","
<< GetClosestFeatureDistance(*pPlot) << "," << GetClosestFeatureID(*pPlot) << "," << GetClosestFeatureOwner(*pPlot) << "\n";
}
}
out.close();
}
示例14: GetClosestFeatureOwner
// -----------------------------------------------------------------------------------------------
int CvDistanceMap::GetClosestFeatureOwner(const CvPlot& plot)
{
if (m_bDirty)
Update();
if (m_bArrayAllocated)
return UNPACK_OWNER( m_vClosestFeature[ GC.getMap().plotNum( plot.getX(), plot.getY() ) ] );
return -1;
}
示例15: reportKbdEvent
bool CvDllPythonEvents::reportKbdEvent(int evt, int key, int iCursorX, int iCursorY)
{
if (preEvent())
{
NiPoint3 pt3Location;
CvPlot* pPlot = gDLL->getEngineIFace()->pickPlot(iCursorX, iCursorY, pt3Location);
CyArgsList eventData;
eventData.add("kbdEvent");
eventData.add(evt);
eventData.add(key);
eventData.add(iCursorX);
eventData.add(iCursorY);
eventData.add(pPlot ? pPlot->getX() : -1);
eventData.add(pPlot ? pPlot->getY() : -1);
return postEvent(eventData);
}
return false;
}