Bazaar developer reference

CvCity::CanRangeStrikeNow() const

Defined in
CvCity.cpp, line 16001
Class
CvCity
Hook name
CivHooks::CvCity_CanRangeStrikeNow

Hooks

static bool BeforeCvCity_CanRangeStrikeNow(const CvCity* self, bool& result);static void AfterCvCity_CanRangeStrikeNow(const CvCity* self, bool& result);static bool ReplaceCvCity_CanRangeStrikeNow(bool (*original)(const CvCity*), const CvCity* self);CivRegisterBefore<CivHooks::CvCity_CanRangeStrikeNow>(host, &BeforeCvCity_CanRangeStrikeNow);CivRegisterAfter<CivHooks::CvCity_CanRangeStrikeNow>(host, &AfterCvCity_CanRangeStrikeNow);CivRegisterReplace<CivHooks::CvCity_CanRangeStrikeNow>(host, &ReplaceCvCity_CanRangeStrikeNow);

Code

16001bool CvCity::CanRangeStrikeNow() const16002{16003	if(!canRangeStrike())16004	{16005		return false;16006	}1600716008#if defined(MOD_EVENTS_CITY_BOMBARD)16009	bool bIndirectFireAllowed; // By reference, yuck!!!16010	int iRange = getBombardRange(bIndirectFireAllowed);16011	16012	if (iRange == 0) return false;16013#else16014	int iRange = GC.getCITY_ATTACK_RANGE();16015	bool bIndirectFireAllowed = GC.getCAN_CITY_USE_INDIRECT_FIRE();16016#endif16017	CvPlot* pPlot = plot();16018	int iX = getX();16019	int iY = getY();16020	TeamTypes eTeam = getTeam();16021	PlayerTypes eActivePlayer = GC.getGame().getActivePlayer();16022	int iGameTurn = GC.getGame().getGameTurn();1602316024	for(int iDX = -iRange; iDX <= iRange; iDX++)16025	{16026		for(int iDY = -iRange; iDY <= iRange; iDY++)16027		{16028			CvPlot* pTargetPlot = plotXY(iX, iY, iDX, iDY);16029			bool bCanRangeStrike = true;1603016031			if(!pTargetPlot)16032			{16033				continue;16034			}1603516036			if(!bIndirectFireAllowed)16037			{16038#if defined MOD_BUGFIX_NAVAL_TARGETING16039				if (!pPlot->canSeePlot(pTargetPlot, eTeam, iRange, NO_DIRECTION, DOMAIN_LAND))16040#else16041				if (!pPlot->canSeePlot(pTargetPlot, eTeam, iRange, NO_DIRECTION))16042#endif16043				{16044					bCanRangeStrike = false;16045				}16046			}160471604816049			if(bCanRangeStrike)16050			{16051				if(pTargetPlot->isVisible(eTeam))16052				{16053					int iTargetPlotX = pTargetPlot->getX();16054					int iTargetPlotY = pTargetPlot->getY();16055					int iPlotDistance = plotDistance(iX, iY, iTargetPlotX, iTargetPlotY);16056					if(iPlotDistance <= iRange)16057					{16058						if(canRangeStrikeAt(iTargetPlotX, iTargetPlotY))16059						{16060							if(m_eOwner == eActivePlayer)16061							{16062								if(iGameTurn != m_bombardCheckTurn)16063								{16064									m_bombardCheckTurn = iGameTurn;16065								}16066							}1606716068							return true;16069						}16070					}16071				}16072			}16073		}16074	}1607516076	return false;16077}

Calls

Called by