CvPlot::canTrain(UnitTypes, bool, bool) const
- Defined in
- CvPlot.cpp, line 11475
- Class
- CvPlot
- Hook name
CivHooks::CvPlot_canTrain
Hooks
static bool BeforeCvPlot_canTrain(const CvPlot* self, UnitTypes eUnit, bool arg1, bool arg2, bool& result);static void AfterCvPlot_canTrain(const CvPlot* self, UnitTypes eUnit, bool arg1, bool arg2, bool& result);static bool ReplaceCvPlot_canTrain(bool (*original)(const CvPlot*, UnitTypes, bool, bool), const CvPlot* self, UnitTypes eUnit, bool arg1, bool arg2);CivRegisterBefore<CivHooks::CvPlot_canTrain>(host, &BeforeCvPlot_canTrain);CivRegisterAfter<CivHooks::CvPlot_canTrain>(host, &AfterCvPlot_canTrain);CivRegisterReplace<CivHooks::CvPlot_canTrain>(host, &ReplaceCvPlot_canTrain);
Code
11475bool CvPlot::canTrain(UnitTypes eUnit, bool, bool) const11476{11477 CvUnitEntry* pkUnitInfo = GC.getUnitInfo(eUnit);11478 if(pkUnitInfo == NULL)11479 {11480 return false;11481 }1148211483 CvUnitEntry& thisUnitEntry = *pkUnitInfo;11484 DomainTypes thisUnitDomain = (DomainTypes) thisUnitEntry.GetDomainType();1148511486 if(thisUnitEntry.IsPrereqResources())11487 {11488 if(thisUnitDomain == DOMAIN_SEA)11489 {11490 bool bValid = false;1149111492 for(int iI = 0; iI < NUM_DIRECTION_TYPES; ++iI)11493 {11494 CvPlot* pLoopPlot = plotDirection(getX(), getY(), ((DirectionTypes)iI));1149511496 if(pLoopPlot != NULL)11497 {11498 if(pLoopPlot->isWater())11499 {11500 if(pLoopPlot->area()->getNumTotalResources() > 0)11501 {11502 bValid = true;11503 break;11504 }11505 }11506 }11507 }1150811509 if(!bValid)11510 {11511 return false;11512 }11513 }11514 else11515 {11516 if(area()->getNumTotalResources() > 0)11517 {11518 return false;11519 }11520 }11521 }1152211523 if(isCity())11524 {11525 if(thisUnitDomain == DOMAIN_SEA)11526 {11527 if(!isWater() && !isCoastalLand(thisUnitEntry.GetMinAreaSize()))11528 {11529 return false;11530 }11531 }11532 else11533 {11534 if(area()->getNumTiles() < thisUnitEntry.GetMinAreaSize())11535 {11536 return false;11537 }11538 }11539 }11540 else11541 {11542 if(area()->getNumTiles() < thisUnitEntry.GetMinAreaSize())11543 {11544 return false;11545 }1154611547 if(thisUnitDomain == DOMAIN_SEA)11548 {11549 if(!isWater())11550 {11551 return false;11552 }11553 }11554 else if(thisUnitDomain == DOMAIN_LAND)11555 {11556 if(isWater())11557 {11558 return false;11559 }11560 }11561 else11562 {11563 return false;11564 }11565 }1156611567 return true;11568}
Calls
- CvArea::getNumTiles() const
- CvArea::getNumTotalResources() const
- CvGlobals::getUnitInfo(UnitTypes)
- CvPlot::area() const
- CvPlot::getX() const
- CvPlot::getY() const
- CvPlot::isCity() const
- CvPlot::isCoastalLand(int) const
- CvPlot::isWater() const
- CvUnitEntry::GetDomainType() const
- CvUnitEntry::GetMinAreaSize() const
- CvUnitEntry::IsPrereqResources() const
- plotDirection(int, int, DirectionTypes)