Bazaar developer reference

CvGame::cyclePlotUnits(CvPlot *, bool, bool, int)

Defined in
CvGame.cpp, line 2427
Class
CvGame
Hook name
CivHooks::CvGame_cyclePlotUnits

Hooks

static bool BeforeCvGame_cyclePlotUnits(CvGame* self, CvPlot* pPlot, bool bForward, bool bAuto, int iCount, bool& result);static void AfterCvGame_cyclePlotUnits(CvGame* self, CvPlot* pPlot, bool bForward, bool bAuto, int iCount, bool& result);static bool ReplaceCvGame_cyclePlotUnits(bool (*original)(CvGame*, CvPlot*, bool, bool, int), CvGame* self, CvPlot* pPlot, bool bForward, bool bAuto, int iCount);CivRegisterBefore<CivHooks::CvGame_cyclePlotUnits>(host, &BeforeCvGame_cyclePlotUnits);CivRegisterAfter<CivHooks::CvGame_cyclePlotUnits>(host, &AfterCvGame_cyclePlotUnits);CivRegisterReplace<CivHooks::CvGame_cyclePlotUnits>(host, &ReplaceCvGame_cyclePlotUnits);

Code

2426// Returns true if unit was cycled...2427bool CvGame::cyclePlotUnits(CvPlot* pPlot, bool bForward, bool bAuto, int iCount)2428{2429	IDInfo* pUnitNode;2430	CvUnit* pSelectedUnit;2431	CvUnit* pLoopUnit = NULL;24322433	CvAssertMsg(iCount >= -1, "iCount expected to be >= -1");24342435	if(iCount == -1)2436	{2437		pUnitNode = pPlot->headUnitNode();24382439		while(pUnitNode != NULL)2440		{2441			pLoopUnit = ::getUnit(*pUnitNode);24422443			if(NULL != pLoopUnit && pLoopUnit->IsSelected())2444			{2445				break;2446			}24472448			pUnitNode = pPlot->nextUnitNode(pUnitNode);2449		}2450	}2451	else2452	{2453		pUnitNode = pPlot->headUnitNode();24542455		while(pUnitNode != NULL)2456		{2457			pLoopUnit = ::getUnit(*pUnitNode);24582459			if((iCount - 1) == 0)2460			{2461				break;2462			}24632464			if(iCount > 0)2465			{2466				iCount--;2467			}24682469			pUnitNode = pPlot->nextUnitNode(pUnitNode);2470		}24712472		if(pUnitNode == NULL)2473		{2474			pUnitNode = pPlot->tailUnitNode();24752476			if(pUnitNode != NULL)2477			{2478				pLoopUnit = ::getUnit(*pUnitNode);2479			}2480		}2481	}24822483	if(pUnitNode != NULL)2484	{2485		pSelectedUnit = pLoopUnit;24862487		while(true)2488		{2489			if(bForward)2490			{2491				pUnitNode = pPlot->nextUnitNode(pUnitNode);2492				if(pUnitNode == NULL)2493				{2494					pUnitNode = pPlot->headUnitNode();2495				}2496			}2497			else2498			{2499				pUnitNode = pPlot->prevUnitNode(pUnitNode);2500				if(pUnitNode == NULL)2501				{2502					pUnitNode = pPlot->tailUnitNode();2503				}2504			}25052506			pLoopUnit = ::getUnit(*pUnitNode);25072508			if(iCount == -1)2509			{2510				if(pLoopUnit == pSelectedUnit)2511				{2512					break;2513				}2514			}25152516			if(NULL != pLoopUnit && pLoopUnit->getOwner() == getActivePlayer())2517			{2518				if(bAuto)2519				{2520					if(pLoopUnit->ReadyToSelect())2521					{2522						/*GC.GetEngineUserInterface()->*/selectUnit(pLoopUnit, true);2523						return true;2524					}2525				}2526				else2527				{2528					auto_ptr<ICvUnit1> pDllLoopUnit = GC.WrapUnitPointer(pLoopUnit);2529					GC.GetEngineUserInterface()->InsertIntoSelectionList(pDllLoopUnit.get(), true, false);2530					return true;2531				}2532			}25332534			if(pLoopUnit == pSelectedUnit)2535			{2536				break;2537			}2538		}2539	}25402541	return false;2542}

Calls

Called by