Bazaar developer reference

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

Called by