Bazaar developer reference

CvUnitCycler::Cycle(CvUnit *, bool, bool, bool *)

Defined in
CvUnitCycler.cpp, line 147
Class
CvUnitCycler
Hook name
CivHooks::CvUnitCycler_Cycle

Hooks

static bool BeforeCvUnitCycler_Cycle(CvUnitCycler* self, CvUnit* pUnit, bool bForward, bool bWorkers, bool* pbWrap, CvUnit *& result);static void AfterCvUnitCycler_Cycle(CvUnitCycler* self, CvUnit* pUnit, bool bForward, bool bWorkers, bool* pbWrap, CvUnit *& result);static CvUnit * ReplaceCvUnitCycler_Cycle(CvUnit * (*original)(CvUnitCycler*, CvUnit*, bool, bool, bool*), CvUnitCycler* self, CvUnit* pUnit, bool bForward, bool bWorkers, bool* pbWrap);CivRegisterBefore<CivHooks::CvUnitCycler_Cycle>(host, &BeforeCvUnitCycler_Cycle);CivRegisterAfter<CivHooks::CvUnitCycler_Cycle>(host, &AfterCvUnitCycler_Cycle);CivRegisterReplace<CivHooks::CvUnitCycler_Cycle>(host, &ReplaceCvUnitCycler_Cycle);

Code

146// Returns the next unit in the cycle...147CvUnit *CvUnitCycler::Cycle(CvUnit* pUnit, bool bForward, bool bWorkers, bool* pbWrap)148{149	const CLLNode<int>* pUnitNode;150	const CLLNode<int>* pFirstUnitNode;151	UnitHandle pLoopUnit;152153	if (pbWrap != NULL)154	{155		*pbWrap = false;156	}157158	pUnitNode = HeadNode();159160	if (pUnit != NULL)161	{162		while (pUnitNode != NULL)163		{164			if (m_pkPlayer->getUnit(pUnitNode->m_data) == pUnit)165			{166				if (bForward)167				{168					pUnitNode = NextNode(pUnitNode);169				}170				else171				{172					pUnitNode = PreviousNode(pUnitNode);173				}174				break;175			}176177			pUnitNode = NextNode(pUnitNode);178		}179	}180181	if (pUnitNode == NULL)182	{183		if (bForward)184		{185			pUnitNode = HeadNode();186		}187		else188		{189			pUnitNode = TailNode();190		}191192		if (pbWrap != NULL)193		{194			*pbWrap = true;195		}196	}197198	if (pUnitNode != NULL)199	{200		pFirstUnitNode = pUnitNode;201202		while (true)203		{204			pLoopUnit = m_pkPlayer->getUnit(pUnitNode->m_data);205			CvAssertMsg(pLoopUnit, "LoopUnit is not assigned a valid value");206207			if (pLoopUnit && pLoopUnit->ReadyToSelect())208			{209				if (!bWorkers || pLoopUnit->AI_getUnitAIType() == UNITAI_WORKER || pLoopUnit->AI_getUnitAIType() == UNITAI_WORKER_SEA)210				{211					if (pUnit && pLoopUnit== pUnit)212					{213						if (pbWrap != NULL)214						{215							*pbWrap = true;216						}217					}218219					return pLoopUnit.pointer();220				}221			}222223			if (bForward)224			{225				pUnitNode = NextNode(pUnitNode);226227				if (pUnitNode == NULL)228				{229					pUnitNode = HeadNode();230231					if (pbWrap != NULL)232					{233						*pbWrap = true;234					}235				}236			}237			else238			{239				pUnitNode = PreviousNode(pUnitNode);240241				if (pUnitNode == NULL)242				{243					pUnitNode = TailNode();244245					if (pbWrap != NULL)246					{247						*pbWrap = true;248					}249				}250			}251252			if (pUnitNode == pFirstUnitNode)253			{254				break;255			}256		}257	}258259	return NULL;260}

Calls

Called by