Bazaar developer reference

CvMilitaryAI::EvaluateMilitaryApproaches(CvCity *, bool, bool)

Defined in
CvMilitaryAI.cpp, line 1403
Class
CvMilitaryAI
Hook name
CivHooks::CvMilitaryAI_EvaluateMilitaryApproaches

Hooks

static bool BeforeCvMilitaryAI_EvaluateMilitaryApproaches(CvMilitaryAI* self, CvCity* pCity, bool bAttackByLand, bool bAttackBySea, CityAttackApproaches& result);static void AfterCvMilitaryAI_EvaluateMilitaryApproaches(CvMilitaryAI* self, CvCity* pCity, bool bAttackByLand, bool bAttackBySea, CityAttackApproaches& result);static CityAttackApproaches ReplaceCvMilitaryAI_EvaluateMilitaryApproaches(CityAttackApproaches (*original)(CvMilitaryAI*, CvCity*, bool, bool), CvMilitaryAI* self, CvCity* pCity, bool bAttackByLand, bool bAttackBySea);// CivHooks.h gives this hook point no types, so nothing checks these hooks' parameters.host->RegisterHook(host->pluginIndex, CivHooks::CvMilitaryAI_EvaluateMilitaryApproaches::ID, CIV_HOOK_BEFORE, (void*)&BeforeCvMilitaryAI_EvaluateMilitaryApproaches);host->RegisterHook(host->pluginIndex, CivHooks::CvMilitaryAI_EvaluateMilitaryApproaches::ID, CIV_HOOK_AFTER, (void*)&AfterCvMilitaryAI_EvaluateMilitaryApproaches);host->RegisterHook(host->pluginIndex, CivHooks::CvMilitaryAI_EvaluateMilitaryApproaches::ID, CIV_HOOK_REPLACE, (void*)&ReplaceCvMilitaryAI_EvaluateMilitaryApproaches);

Code

1402/// How open an approach do we have to this city if we want to attack it?1403CityAttackApproaches CvMilitaryAI::EvaluateMilitaryApproaches(CvCity* pCity, bool bAttackByLand, bool bAttackBySea)1404{1405	CvPlot* pLoopPlot;1406	CityAttackApproaches eRtnValue = ATTACK_APPROACH_UNRESTRICTED;1407	int iNumBlocked = 0;14081409	// Look at each of the six plots around the city1410	for(int iI = 0; iI < NUM_DIRECTION_TYPES; iI++)1411	{1412		pLoopPlot = plotDirection(pCity->getX(), pCity->getY(), ((DirectionTypes)iI));14131414		// Blocked if edge of map1415		if(pLoopPlot == NULL)1416		{1417			iNumBlocked++;1418		}1419		else1420		{1421			// For now, assume no one coming in over a lake1422			if(pLoopPlot->isLake())1423			{1424				iNumBlocked++;1425			}1426			// Coast but attack is not by sea?1427			else if(pLoopPlot->isWater() && !bAttackBySea)1428			{1429				iNumBlocked++;1430			}1431			// Land1432			else if(!pLoopPlot->isWater())1433			{1434				if(!bAttackByLand)1435				{1436					iNumBlocked++;1437				}1438				else1439				{1440					if(pLoopPlot->isImpassable() || pLoopPlot->isMountain())1441					{1442						iNumBlocked++;1443					}1444				}1445			}1446		}1447	}14481449	switch(iNumBlocked)1450	{1451	case 0:1452		eRtnValue = ATTACK_APPROACH_UNRESTRICTED;1453		break;1454	case 1:1455	case 2:1456		eRtnValue = ATTACK_APPROACH_OPEN;1457		break;1458	case 3:1459		eRtnValue = ATTACK_APPROACH_NEUTRAL;1460		break;1461	case 4:1462		eRtnValue = ATTACK_APPROACH_LIMITED;1463		break;1464	case 5:1465		eRtnValue = ATTACK_APPROACH_RESTRICTED;1466		break;1467	case 6:1468		eRtnValue = ATTACK_APPROACH_NONE;1469		break;1470	}14711472	return eRtnValue;1473}

Calls

Called by