Bazaar developer reference

CvGame::doControl(ControlTypes)

Defined in
CvGame.cpp, line 3318
Class
CvGame
Hook name
CivHooks::CvGame_doControl
Changed in
0.5.0

Hooks

static bool BeforeCvGame_doControl(CvGame* self, ControlTypes eControl);static void AfterCvGame_doControl(CvGame* self, ControlTypes eControl);static void ReplaceCvGame_doControl(void (*original)(CvGame*, ControlTypes), CvGame* self, ControlTypes eControl);CivRegisterBefore<CivHooks::CvGame_doControl>(host, &BeforeCvGame_doControl);CivRegisterAfter<CivHooks::CvGame_doControl>(host, &AfterCvGame_doControl);CivRegisterReplace<CivHooks::CvGame_doControl>(host, &ReplaceCvGame_doControl);

Code

3318void CvGame::doControl(ControlTypes eControl)3319{3320	if(!canDoControl(eControl))3321	{3322		return;3323	}33243325	switch(eControl)3326	{3327	case CONTROL_CENTERONSELECTION:3328		GC.GetEngineUserInterface()->lookAtSelectionPlot();3329		break;33303331	case CONTROL_SELECTYUNITTYPE:3332	{3333		auto_ptr<ICvUnit1> pHeadSelectedUnit(GC.GetEngineUserInterface()->GetHeadSelectedUnit());3334		if(pHeadSelectedUnit.get() != NULL)3335		{3336			GC.GetEngineUserInterface()->selectGroup(pHeadSelectedUnit.get(), false, true, false);3337		}3338	}3339	break;33403341	case CONTROL_SELECTYUNITALL:3342	{3343		auto_ptr<ICvUnit1> pHeadSelectedUnit(GC.GetEngineUserInterface()->GetHeadSelectedUnit());3344		if(pHeadSelectedUnit.get() != NULL)3345		{3346			GC.GetEngineUserInterface()->selectGroup(pHeadSelectedUnit.get(), false, false, true);3347		}3348	}3349	break;33503351	case CONTROL_SELECT_HEALTHY:3352	{3353		auto_ptr<ICvUnit1> pHeadSelectedUnit(GC.GetEngineUserInterface()->GetHeadSelectedUnit());3354		CvUnit* pkHeadSelectedUnit = GC.UnwrapUnitPointer(pHeadSelectedUnit.get());3355		GC.GetEngineUserInterface()->ClearSelectionList();3356		if(pkHeadSelectedUnit != NULL)3357		{3358			CvPlot* pHeadPlot = pkHeadSelectedUnit->plot();3359			std::vector<CvUnit*> plotUnits;3360			getPlotUnits(pHeadPlot, plotUnits);3361			for(int iI = 0; iI < (int) plotUnits.size(); iI++)3362			{3363				CvUnit* pUnit = plotUnits[iI];33643365				if(pUnit->getOwner() == getActivePlayer())3366				{3367					if(!GET_PLAYER(pUnit->getOwner()).isSimultaneousTurns() || getTurnSlice() - pUnit->getLastMoveTurn() > GC.getMIN_TIMER_UNIT_DOUBLE_MOVES())3368					{3369						if(pUnit->IsHurt())3370						{3371							auto_ptr<ICvUnit1> pDllUnit = GC.WrapUnitPointer(pUnit);3372							GC.GetEngineUserInterface()->InsertIntoSelectionList(pDllUnit.get(), true, false, true, true, true);3373						}3374					}3375				}3376			}3377		}3378	}3379	break;33803381	case CONTROL_SELECTCITY:3382		if(GC.GetEngineUserInterface()->isCityScreenUp())3383		{3384			cycleCities();3385		}3386		else3387		{3388			GC.GetEngineUserInterface()->selectLookAtCity();3389		}3390		GC.GetEngineUserInterface()->lookAtSelectionPlot();3391		break;33923393	case CONTROL_SELECTCAPITAL:3394	{3395		CvCity* pCapitalCity = GET_PLAYER(getActivePlayer()).getCapitalCity();3396		if(pCapitalCity != NULL)3397		{3398			auto_ptr<ICvCity1> pDllCapitalCity = GC.WrapCityPointer(pCapitalCity);3399			GC.GetEngineUserInterface()->selectCity(pDllCapitalCity.get());3400		}3401		GC.GetEngineUserInterface()->lookAtSelectionPlot();3402	}3403	break;34043405	case CONTROL_NEXTCITY:3406		if(GC.GetEngineUserInterface()->isCitySelection())3407		{3408			cycleCities(true, !(GC.GetEngineUserInterface()->isCityScreenUp()));3409		}3410		else3411		{3412			GC.GetEngineUserInterface()->selectLookAtCity(true);3413		}3414		GC.GetEngineUserInterface()->lookAtSelectionPlot();3415		break;34163417	case CONTROL_PREVCITY:3418		if(GC.GetEngineUserInterface()->isCitySelection())3419		{3420			cycleCities(false, !(GC.GetEngineUserInterface()->isCityScreenUp()));3421		}3422		else3423		{3424			GC.GetEngineUserInterface()->selectLookAtCity(true);3425		}3426		GC.GetEngineUserInterface()->lookAtSelectionPlot();3427		break;34283429	case CONTROL_NEXTUNIT:3430	{3431		auto_ptr<ICvPlot1> pSelectionPlot(GC.GetEngineUserInterface()->getSelectionPlot());3432		CvPlot* pkSelectionPlot = GC.UnwrapPlotPointer(pSelectionPlot.get());3433		if(pkSelectionPlot != NULL)3434		{3435			cyclePlotUnits(pkSelectionPlot);3436		}3437		break;3438	}34393440	case CONTROL_PREVUNIT:3441	{3442		auto_ptr<ICvPlot1> pSelectionPlot(GC.GetEngineUserInterface()->getSelectionPlot());3443		CvPlot* pkSelectionPlot = GC.UnwrapPlotPointer(pSelectionPlot.get());3444		if(pkSelectionPlot != NULL)3445		{3446			cyclePlotUnits(pkSelectionPlot, false);3447		}3448		break;3449	}34503451	case CONTROL_CYCLEUNIT:3452	case CONTROL_CYCLEUNIT_ALT:3453		cycleUnits(true);3454		break;34553456	case CONTROL_CYCLEWORKER:3457		cycleUnits(true, true, true);3458		break;34593460	case CONTROL_LASTUNIT:3461	{3462		ICvUserInterface2* UI = GC.GetEngineUserInterface();3463		auto_ptr<ICvUnit1> pUnit(UI->getLastSelectedUnit());34643465		if(pUnit.get() != NULL)3466		{3467			UI->selectUnit(pUnit.get(), true);3468			UI->lookAtSelectionPlot();3469		}3470		else3471		{3472			cycleUnits(true, false);3473		}34743475		UI->setLastSelectedUnit(NULL);3476	}3477	break;34783479	case CONTROL_ENDTURN:3480	case CONTROL_ENDTURN_ALT:3481		if(GC.GetEngineUserInterface()->canEndTurn() && gDLL->allAICivsProcessedThisTurn() && allUnitAIProcessed())3482		{3483			CvPlayerAI& kActivePlayer = GET_PLAYER(getActivePlayer());3484			if (!isNetworkMultiPlayer() && kActivePlayer.isHuman() && GC.GetPostTurnAutosaves())3485			{3486#if defined(CIV_HOST_API)3487				if (CivHostSavingAllowed())3488#endif3489				gDLL->AutoSave(false, true);3490			}34913492#if !defined(NO_ACHIEVEMENTS)3493			kActivePlayer.GetPlayerAchievements().EndTurn();3494#endif3495			gDLL->sendTurnComplete();3496#if !defined(NO_ACHIEVEMENTS)3497			CvAchievementUnlocker::EndTurn();3498#endif3499			GC.GetEngineUserInterface()->setInterfaceMode(INTERFACEMODE_SELECTION);3500		}3501		break;35023503	case CONTROL_FORCEENDTURN:3504	{3505		EndTurnBlockingTypes eBlock = GET_PLAYER(getActivePlayer()).GetEndTurnBlockingType();3506		if(gDLL->allAICivsProcessedThisTurn() && allUnitAIProcessed() && (eBlock == NO_ENDTURN_BLOCKING_TYPE || eBlock == ENDTURN_BLOCKING_UNITS))3507		{3508#if !defined(NO_ACHIEVEMENTS)3509			CvPlayerAI& kActivePlayer = GET_PLAYER(getActivePlayer());3510			kActivePlayer.GetPlayerAchievements().EndTurn();3511#endif3512			gDLL->sendTurnComplete();3513#if !defined(NO_ACHIEVEMENTS)3514			CvAchievementUnlocker::EndTurn();3515#endif3516			SetForceEndingTurn(true);3517			GC.GetEngineUserInterface()->setInterfaceMode(INTERFACEMODE_SELECTION);3518		}3519		break;3520	}35213522	case CONTROL_AUTOMOVES:3523		gDLL->sendAutoMoves();3524		break;35253526	case CONTROL_PING:3527		GC.GetEngineUserInterface()->setInterfaceMode(INTERFACEMODE_PING);3528		break;35293530	case CONTROL_YIELDS:3531		GC.GetEngineUserInterface()->toggleYieldVisibleMode();3532		break;35333534	case CONTROL_RESOURCE_ALL:3535		GC.GetEngineUserInterface()->toggleResourceVisibleMode();3536		break;35373538	case CONTROL_UNIT_ICONS:3539		break;35403541	case CONTROL_SCORES:3542		break;35433544	case CONTROL_LOAD_GAME:3545		gDLL->LoadGame();3546		break;35473548	case CONTROL_OPTIONS_SCREEN:3549		gDLL->GameplayOpenOptionsScreen();3550		break;35513552	case CONTROL_RETIRE:3553		if(!isGameMultiPlayer() || countHumanPlayersAlive() == 1)3554		{3555			setGameState(GAMESTATE_OVER);3556			GC.GetEngineUserInterface()->setDirty(Soundtrack_DIRTY_BIT, true);3557		}3558		else3559		{3560			if(isNetworkMultiPlayer())3561			{3562				GC.GetEngineUserInterface()->exitingToMainMenu();3563			}3564		}3565		break;35663567	case CONTROL_SAVE_GROUP:3568#if defined(CIV_HOST_API)3569		if (CivHostSavingAllowed())3570#endif3571		gDLL->SaveGame(SAVEGAME_GROUP);3572		break;35733574	case CONTROL_SAVE_NORMAL:3575#if defined(CIV_HOST_API)3576		if (CivHostSavingAllowed())3577#endif3578		gDLL->SaveGame(SAVEGAME_NORMAL);3579		break;35803581	case CONTROL_QUICK_SAVE:3582		if(!(isNetworkMultiPlayer()))	// SP only!3583		{3584#if defined(CIV_HOST_API)3585			if (CivHostSavingAllowed())3586#endif3587			gDLL->QuickSave();3588		}3589		break;35903591	case CONTROL_QUICK_LOAD:3592		if(!(isNetworkMultiPlayer()))	// SP only!3593		{3594			gDLL->QuickLoad();3595		}3596		break;35973598	case CONTROL_CIVILOPEDIA:3599		gDLL->GameplaySearchForPediaEntry("OPEN_VIA_HOTKEY");3600		break;36013602	case CONTROL_POLICIES_SCREEN:3603	{3604		CvPopupInfo kPopup(BUTTONPOPUP_CHOOSEPOLICY, getActivePlayer());3605		kPopup.iData1 = 1;3606		GC.GetEngineUserInterface()->AddPopup(kPopup);3607	}3608	break;36093610	case CONTROL_FOREIGN_SCREEN:3611	{3612		CvPopupInfo kPopup(BUTTONPOPUP_DIPLOMATIC_OVERVIEW, getActivePlayer());3613		kPopup.iData1 = 1;3614		GC.GetEngineUserInterface()->AddPopup(kPopup);3615	}3616	break;36173618	case CONTROL_MILITARY_SCREEN:3619	{3620		CvPopupInfo kPopup(BUTTONPOPUP_MILITARY_OVERVIEW, getActivePlayer());3621		kPopup.iData1 = 1;3622		GC.GetEngineUserInterface()->AddPopup(kPopup);3623	}3624	break;36253626	case CONTROL_TECH_CHOOSER:3627	{3628		CvPopupInfo kPopup(BUTTONPOPUP_TECH_TREE, getActivePlayer());36293630		// If the popup queue is empty, just show the tech tree, don't queue it up - otherwise, if we, say, go into the Pedia from here, it'll end up BEHIND the tech tree3631		if(!GC.GetEngineUserInterface()->IsPopupQueueEmpty())3632			kPopup.iData1 = 1;36333634		GC.GetEngineUserInterface()->AddPopup(kPopup);3635	}3636	break;36373638	case CONTROL_TURN_LOG:3639	{3640		CvPopupInfo kPopup(BUTTONPOPUP_NOTIFICATION_LOG, getActivePlayer());3641		kPopup.iData1 = 1;3642		GC.GetEngineUserInterface()->AddPopup(kPopup);3643	}3644	break;36453646	case CONTROL_DOMESTIC_SCREEN:3647	{3648		CvPopupInfo kPopup(BUTTONPOPUP_ECONOMIC_OVERVIEW, getActivePlayer());3649		kPopup.iData1 = 1;3650		GC.GetEngineUserInterface()->AddPopup(kPopup);3651	}3652	break;36533654	case CONTROL_VICTORY_SCREEN:3655	{3656		CvPopupInfo kPopup(BUTTONPOPUP_VICTORY_INFO, getActivePlayer());3657		kPopup.iData1 = 1;;3658		GC.GetEngineUserInterface()->AddPopup(kPopup);3659	}3660	break;36613662	case CONTROL_INFO:3663	{3664		CvPopupInfo kPopup(BUTTONPOPUP_DEMOGRAPHICS, getActivePlayer());3665		kPopup.iData1 = 1;3666		GC.GetEngineUserInterface()->AddPopup(kPopup);3667	}3668	break;36693670	case CONTROL_ADVISOR_COUNSEL:3671	{3672		CvPopupInfo kPopup(BUTTONPOPUP_ADVISOR_COUNSEL);3673		kPopup.iData1 = 1;3674		GC.GetEngineUserInterface()->AddPopup(kPopup);3675	}3676	break;36773678	case CONTROL_ESPIONAGE_OVERVIEW:3679	{3680		CvPopupInfo kPopup(BUTTONPOPUP_ESPIONAGE_OVERVIEW, getActivePlayer());3681		kPopup.iData1 = 1;3682		GC.GetEngineUserInterface()->AddPopup(kPopup);3683	}3684	break;36853686	case CONTROL_RELIGION_OVERVIEW:3687	{3688		CvPopupInfo kPopup(BUTTONPOPUP_RELIGION_OVERVIEW, getActivePlayer());3689		kPopup.iData1 = 1;3690		GC.GetEngineUserInterface()->AddPopup(kPopup);3691	}3692	break;36933694	case CONTROL_RESTART_GAME:3695	{3696		gDLL->RestartGame();3697	}3698	break;36993700	default:3701		CvAssertMsg(false, "eControl did not match any valid options");3702		break;3703	}3704}

Calls

Called by