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}