Bazaar developer reference

CvUnit::canEmbark(const CvPlot *) const

Defined in
CvUnit.cpp, line 4820
Class
CvUnit
Hook name
CivHooks::CvUnit_canEmbark

Hooks

static bool BeforeCvUnit_canEmbark(const CvUnit* self, const CvPlot* pPlot, bool& result);static void AfterCvUnit_canEmbark(const CvUnit* self, const CvPlot* pPlot, bool& result);static bool ReplaceCvUnit_canEmbark(bool (*original)(const CvUnit*, const CvPlot*), const CvUnit* self, const CvPlot* pPlot);CivRegisterBefore<CivHooks::CvUnit_canEmbark>(host, &BeforeCvUnit_canEmbark);CivRegisterAfter<CivHooks::CvUnit_canEmbark>(host, &AfterCvUnit_canEmbark);CivRegisterReplace<CivHooks::CvUnit_canEmbark>(host, &ReplaceCvUnit_canEmbark);

Code

4820bool CvUnit::canEmbark(const CvPlot* pPlot) const4821{4822	VALIDATE_OBJECT4823	if(getDomainType() != DOMAIN_LAND)4824	{4825		return false;4826	}48274828	if(isEmbarked())4829	{4830		return false;4831	}48324833	if(movesLeft() <= 0)4834	{4835		return false;4836	}48374838#if defined(MOD_PATHFINDER_TERRAFIRMA)4839	// Can we embark from this plot?4840	// Only if it's coastal land4841	bool bCanEmbark = pPlot->isCoastalLand();4842#if defined(MOD_PATHFINDER_CROSS_ICE)4843	// ... or an ice-floe4844	bCanEmbark = bCanEmbark || (canCrossIce() && pPlot->isIce());4845#endif4846#if defined(MOD_PATHFINDER_DEEP_WATER_EMBARKATION)4847	// ... or shallow water4848	bCanEmbark = bCanEmbark || (IsHoveringUnit() && pPlot->isShallowWater());4849#endif4850	if(!bCanEmbark)4851#else4852	if(!pPlot->isCoastalLand())4853#endif4854	{4855		return false;4856	}48574858#if defined(MOD_PATHFINDER_DEEP_WATER_EMBARKATION)4859	if(!IsHasEmbarkAbility() && !IsEmbarkDeepWater())4860#else4861	if(!IsHasEmbarkAbility())4862#endif4863	{4864		return false;4865	}48664867	// search the water plots around this plot to see if any are vacant4868	int iRange = 1;4869	bool bOpenPlot = false;4870	for(int iX = -iRange; iX <= iRange; iX++)4871	{4872		for(int iY = -iRange; iY <= iRange; iY++)4873		{4874			CvPlot* pEvalPlot = plotXYWithRangeCheck(pPlot->getX(), pPlot->getY(), iX, iY, iRange);4875			if(!pEvalPlot)4876			{4877				continue;4878			}48794880			if(pEvalPlot->getX() == pPlot->getX() && pEvalPlot->getY() == pPlot->getY())4881			{4882				continue;4883			}48844885			CvPlot* p = plot();4886			if(p && canEmbarkOnto(*p, *pEvalPlot))4887			{4888				bOpenPlot = true;48894890				// get out of the loop4891				iX = iRange + 1;4892				iY = iRange + 1;4893			}4894		}4895	}48964897	return bOpenPlot;4898}

Calls

Called by