Hooks
static bool BeforeCvGame_cycleUnits(CvGame* self, bool bClear, bool bForward, bool bWorkers);static void AfterCvGame_cycleUnits(CvGame* self, bool bClear, bool bForward, bool bWorkers);static void ReplaceCvGame_cycleUnits(void (*original)(CvGame*, bool, bool, bool), CvGame* self, bool bClear, bool bForward, bool bWorkers);CivRegisterBefore<CivHooks::CvGame_cycleUnits>(host, &BeforeCvGame_cycleUnits);CivRegisterAfter<CivHooks::CvGame_cycleUnits>(host, &AfterCvGame_cycleUnits);CivRegisterReplace<CivHooks::CvGame_cycleUnits>(host, &ReplaceCvGame_cycleUnits);
Code
2363void CvGame::cycleUnits(bool bClear, bool bForward, bool bWorkers)2364{2365 CvUnit* pNextUnit;2366 CvCity* pCycleCity = NULL;2367 bool bWrap = false;2368 bool bProcessed = false;2369 PlayerTypes eActivePlayer = getActivePlayer();2370 ICvUserInterface2* pUI = GC.GetEngineUserInterface();2371 CvPlayerAI& theActivePlayer = GET_PLAYER(eActivePlayer);23722373 auto_ptr<ICvUnit1> pDllSelectedUnit(pUI->GetHeadSelectedUnit());2374 CvUnit* pCycleUnit = GC.UnwrapUnitPointer(pDllSelectedUnit.get());23752376 if(pCycleUnit != NULL)2377 {2378 if(pCycleUnit->getOwner() != eActivePlayer)2379 {2380 pCycleUnit = NULL;2381 }23822383 pNextUnit = theActivePlayer.GetUnitCycler().Cycle(pCycleUnit, bForward, bWorkers, &bWrap);23842385 if(bWrap)2386 {2387 if(theActivePlayer.hasAutoUnit())2388 {2389 gDLL->sendAutoMoves();2390 }2391 }2392 }2393 else2394 {2395 pNextUnit = GC.getMap().findUnit(0, 0, eActivePlayer, true, bWorkers);2396 }23972398 if(pNextUnit != NULL && !bWrap)2399 {2400 CvAssert(pNextUnit->getOwner() == eActivePlayer);2401 selectUnit(pNextUnit, bClear);2402 bProcessed = true;2403 }24042405 if(pNextUnit != NULL /*&& bWrap */&& !pCycleCity && !bProcessed)2406 {2407 CvAssert(pNextUnit->getOwner() == eActivePlayer);2408 selectUnit(pNextUnit, bClear);2409 }24102411 if(pNextUnit == NULL && pCycleUnit != NULL && pCycleUnit->getOwner() == eActivePlayer)2412 {2413 pUI->ClearSelectionList();2414 pCycleUnit->plot()->updateCenterUnit();2415 }24162417 pDllSelectedUnit.reset(pUI->GetHeadSelectedUnit());2418 CvUnit* pCurrentSelectedUnit = GC.UnwrapUnitPointer(pDllSelectedUnit.get());2419 if((pCycleUnit != pCurrentSelectedUnit) || ((pCycleUnit != NULL) && pCycleUnit->ReadyToSelect()) || pCycleCity)2420 {2421 pUI->lookAtSelectionPlot();2422 }2423}