void CUIGameData::Invite_Confirm() { // Activate game ui CBaseModPanel &ui = CBaseModPanel::GetSingleton(); if ( !ui.IsVisible() ) { // Activate game ui to see the dialog engine->ExecuteClientCmd( "gameui_activate" ); } // Get current window CBaseModFrame *pFrame = NULL; WINDOW_TYPE wt = ui.GetActiveWindowType(); if ( wt != WT_NONE && wt != WT_GENERICCONFIRMATION ) pFrame = ui.GetWindow( wt ); // Show a prompt GenericConfirmation* confirmation = static_cast<GenericConfirmation*>( ui. OpenWindow( WT_GENERICCONFIRMATION, pFrame, false ) ); GenericConfirmation::Data_t data; data.pWindowTitle = "#L4D360UI_LeaveInviteConf"; data.pMessageText = "#L4D360UI_LeaveInviteConfTxt"; data.bOkButtonEnabled = true; data.bCancelButtonEnabled = true; data.pfnOkCallback = Invite_Approved; data.pfnCancelCallback = Invite_Declined; s_nInviteApprovalConf = confirmation->SetUsageData(data); Invite_MapUserForUiInput( INVITE_USER_ALLOW_INPUT ); }
void Audio::OnKeyCodePressed(KeyCode code) { int joystick = GetJoystickForCode( code ); int userId = CBaseModPanel::GetSingleton().GetLastActiveUserId(); if ( joystick != userId || joystick < 0 ) { return; } switch ( GetBaseButtonCode( code ) ) { case KEY_XBUTTON_B: if ( m_nSelectedAudioLanguage != m_nCurrentAudioLanguage && m_drpLanguage && m_drpLanguage->IsVisible() ) { UseSelectedLanguage(); // Pop up a dialog to confirm changing the language CBaseModPanel::GetSingleton().PlayUISound( UISOUND_ACCEPT ); GenericConfirmation* confirmation = static_cast< GenericConfirmation* >( CBaseModPanel::GetSingleton().OpenWindow( WT_GENERICCONFIRMATION, this, false ) ); GenericConfirmation::Data_t data; data.pWindowTitle = "#GameUI_ChangeLanguageRestart_Title"; data.pMessageText = "#GameUI_ChangeLanguageRestart_Info"; data.bOkButtonEnabled = true; data.pfnOkCallback = &AcceptLanguageChangeCallback; data.bCancelButtonEnabled = true; data.pfnCancelCallback = &CancelLanguageChangeCallback; // WARNING! WARNING! WARNING! // The nature of Generic Confirmation is that it will be silently replaced // with another Generic Confirmation if a system event occurs // e.g. user unplugs controller, user changes storage device, etc. // If that happens neither OK nor CANCEL callbacks WILL NOT BE CALLED // The state machine cannot depend on either callback advancing the // state because in some situations neither callback can fire and the // confirmation dismissed/closed/replaced. // State machine must implement OnThink and check if the required // confirmation box is still present! // This code implements no fallback - it will result in minor UI // bug that the language box will be changed, but the title not restarted. // Vitaliy -- 9/26/2009 // confirmation->SetUsageData(data); } else { // Ready to write that data... go ahead and nav back BaseClass::OnKeyCodePressed(code); } break; default: BaseClass::OnKeyCodePressed(code); break; } }
void PagedPoolMemOpenned( DropDownMenu *pDropDownMenu, FlyoutMenu *pFlyoutMenu ) { GenericConfirmation* confirmation = static_cast< GenericConfirmation* >( CBaseModPanel::GetSingleton().OpenWindow( WT_GENERICCONFIRMATION, CBaseModPanel::GetSingleton().GetWindow( WT_VIDEO ), false ) ); GenericConfirmation::Data_t data; data.pWindowTitle = "#L4D360UI_VideoOptions_Paged_Pool_Mem"; data.pMessageText = "#L4D360UI_VideoOptions_Paged_Pool_Mem_Info"; data.bOkButtonEnabled = true; data.pfnOkCallback = AcceptPagedPoolMemWarningCallback; confirmation->SetUsageData(data); }
void CUIGameData::RunFrame_Invite() { if ( s_nInviteApprovalConf ) { // Check that the confirmation wasn't dismissed without notifying the invite system GenericConfirmation* confirmation = static_cast<GenericConfirmation*>( CBaseModPanel::GetSingleton().GetWindow( WT_GENERICCONFIRMATION ) ); if ( !confirmation || confirmation->GetUsageId() != s_nInviteApprovalConf ) { // Well, pretend like user declined the prompt Invite_Declined(); } } if ( s_pPendingInviteStorageSelector && !IsXUIOpen() ) { SelectStorageDevice( s_pPendingInviteStorageSelector ); s_pPendingInviteStorageSelector = NULL; } }
//============================================================================= // If on PC and not logged into Steam, displays an error and returns true. // Returns false if everything is OK. bool CBaseModFrame::CheckAndDisplayErrorIfNotLoggedIn() { // only check if PC if ( !IsPC() ) return false; #ifndef _X360 #ifndef SWDS // if we have Steam interfaces and user is logged on, everything is OK if ( steamapicontext && steamapicontext->SteamUser() && steamapicontext->SteamMatchmaking() ) { /* // Try starting to log on if ( !steamapicontext->SteamUser()->BLoggedOn() ) { steamapicontext->SteamUser()->LogOn(); } */ return false; } #endif #endif // Steam is not running or user not logged on, display error GenericConfirmation* confirmation = static_cast<GenericConfirmation*>( CBaseModPanel::GetSingleton().OpenWindow( WT_GENERICCONFIRMATION, CBaseModPanel::GetSingleton().GetWindow( WT_GAMELOBBY ), false ) ); GenericConfirmation::Data_t data; data.pWindowTitle = "#L4D360UI_MsgBx_LoginRequired"; data.pMessageText = "#L4D360UI_MsgBx_SteamRequired"; data.bOkButtonEnabled = true; confirmation->SetUsageData(data); return true; }
//============================================================================= void MainMenu::OnCommand( const char *command ) { int iUserSlot = CBaseModPanel::GetSingleton().GetLastActiveUserId(); if ( UI_IsDebug() ) { Msg("[GAMEUI] Handling main menu command %s from user%d ctrlr%d\n", command, iUserSlot, XBX_GetUserId( iUserSlot ) ); } bool bOpeningFlyout = false; if ( char const *szQuickMatch = StringAfterPrefix( command, "QuickMatch_" ) ) { if ( CheckAndDisplayErrorIfNotLoggedIn() || CUIGameData::Get()->CheckAndDisplayErrorIfNotSignedInToLive( this ) ) return; KeyValues *pSettings = KeyValues::FromString( "settings", " system { " " network LIVE " " } " " game { " " mode = " " } " " options { " " action quickmatch " " } " ); KeyValues::AutoDelete autodelete( pSettings ); pSettings->SetString( "game/mode", szQuickMatch ); // TCR: We need to respect the default difficulty if ( GameModeHasDifficulty( szQuickMatch ) ) pSettings->SetString( "game/difficulty", GameModeGetDefaultDifficulty( szQuickMatch ) ); g_pMatchFramework->MatchSession( pSettings ); } else if ( char const *szCustomMatch = StringAfterPrefix( command, "CustomMatch_" ) ) { if ( CheckAndDisplayErrorIfNotLoggedIn() || CUIGameData::Get()->CheckAndDisplayErrorIfNotSignedInToLive( this ) ) return; KeyValues *pSettings = KeyValues::FromString( "settings", " system { " " network LIVE " " } " " game { " " mode = " " } " " options { " " action custommatch " " } " ); KeyValues::AutoDelete autodelete( pSettings ); pSettings->SetString( "game/mode", szCustomMatch ); CBaseModPanel::GetSingleton().OpenWindow( ui_play_online_browser.GetBool() ? WT_FOUNDPUBLICGAMES : WT_GAMESETTINGS, this, true, pSettings ); } else if ( char const *szFriendsMatch = StringAfterPrefix( command, "FriendsMatch_" ) ) { if ( CheckAndDisplayErrorIfNotLoggedIn() ) return; if ( StringHasPrefix( szFriendsMatch, "team" ) && CUIGameData::Get()->CheckAndDisplayErrorIfNotSignedInToLive( this ) ) // Team games require to be signed in to LIVE return; KeyValues *pSettings = KeyValues::FromString( "settings", " game { " " mode = " " } " ); KeyValues::AutoDelete autodelete( pSettings ); pSettings->SetString( "game/mode", szFriendsMatch ); if ( m_ActiveControl ) { m_ActiveControl->NavigateFrom( ); } CBaseModPanel::GetSingleton().OpenWindow( WT_ALLGAMESEARCHRESULTS, this, true, pSettings ); } else if ( char const *szGroupServer = StringAfterPrefix( command, "GroupServer_" ) ) { if ( CheckAndDisplayErrorIfNotLoggedIn() ) return; KeyValues *pSettings = KeyValues::FromString( "settings", " game { " // " mode = " " } " " options { " " action groupserver " " } " ); KeyValues::AutoDelete autodelete( pSettings ); if ( *szGroupServer ) pSettings->SetString( "game/mode", szGroupServer ); if ( m_ActiveControl ) { m_ActiveControl->NavigateFrom( ); } CBaseModPanel::GetSingleton().OpenWindow( WT_STEAMGROUPSERVERS, this, true, pSettings ); } else if ( char const *szLeaderboards = StringAfterPrefix( command, "Leaderboards_" ) ) { if ( CheckAndDisplayErrorIfNotLoggedIn() || CUIGameData::Get()->CheckAndDisplayErrorIfOffline( this, "#L4D360UI_MainMenu_SurvivalLeaderboards_Tip_Disabled" ) ) return; KeyValues *pSettings = KeyValues::FromString( "settings", " game { " " mode = " " } " ); KeyValues::AutoDelete autodelete( pSettings ); pSettings->SetString( "game/mode", szLeaderboards ); if ( m_ActiveControl ) { m_ActiveControl->NavigateFrom( ); } CBaseModPanel::GetSingleton().OpenWindow( WT_LEADERBOARD, this, true, pSettings ); } else if( !Q_strcmp( command, "VersusSoftLock" ) ) { OnCommand( "FlmVersusFlyout" ); return; } else if ( !Q_strcmp( command, "SurvivalCheck" ) ) { OnCommand( "FlmSurvivalFlyout" ); return; } else if ( !Q_strcmp( command, "ScavengeCheck" ) ) { OnCommand( "FlmScavengeFlyout" ); return; } else if ( !Q_strcmp( command, "SoloPlay" ) ) { if ( !asw_show_all_singleplayer_maps.GetBool() ) { KeyValues *pSettings = KeyValues::FromString( "settings", " system { " " network offline " " } " " game { " " mode sdk " " mission sdk_teams_hdr " " } " ); KeyValues::AutoDelete autodelete( pSettings ); pSettings->SetString( "Game/difficulty", GameModeGetDefaultDifficulty( pSettings->GetString( "Game/mode" ) ) ); g_pMatchFramework->CreateSession( pSettings ); // Automatically start the credits session, no configuration required if ( IMatchSession *pMatchSession = g_pMatchFramework->GetMatchSession() ) { pMatchSession->Command( KeyValues::AutoDeleteInline( new KeyValues( "Start" ) ) ); } } else { KeyValues *pSettings = KeyValues::FromString( "Settings", " System { " " network offline " " } " " Game { " " mode sdk " " mission sdk_teams_hdr " " } " ); KeyValues::AutoDelete autodelete( pSettings ); // TCR: We need to respect the default difficulty pSettings->SetString( "Game/difficulty", GameModeGetDefaultDifficulty( pSettings->GetString( "Game/mode" ) ) ); g_pMatchFramework->CreateSession( pSettings ); } } else if ( !Q_strcmp( command, "DeveloperCommentary" ) ) { // Explain the rules of commentary GenericConfirmation* confirmation = static_cast< GenericConfirmation* >( CBaseModPanel::GetSingleton().OpenWindow( WT_GENERICCONFIRMATION, this, false ) ); GenericConfirmation::Data_t data; data.pWindowTitle = "#GAMEUI_CommentaryDialogTitle"; data.pMessageText = "#L4D360UI_Commentary_Explanation"; data.bOkButtonEnabled = true; data.pfnOkCallback = &AcceptCommentaryRulesCallback; data.bCancelButtonEnabled = true; confirmation->SetUsageData(data); NavigateFrom(); } else if ( !Q_strcmp( command, "StatsAndAchievements" ) ) { // If PC make sure that the Steam user is logged in if ( CheckAndDisplayErrorIfNotLoggedIn() ) return; if ( m_ActiveControl ) { m_ActiveControl->NavigateFrom( ); } CBaseModPanel::GetSingleton().OpenWindow( WT_ACHIEVEMENTS, this, true ); } else if ( !Q_strcmp( command, "FlmExtrasFlyoutCheck" ) ) { if ( IsX360() && CUIGameData::Get()->SignedInToLive() ) OnCommand( "FlmExtrasFlyout_Live" ); else OnCommand( "FlmExtrasFlyout_Simple" ); return; } else if ( char const *szInviteType = StringAfterPrefix( command, "InviteUI_" ) ) { if ( IsX360() ) { CUIGameData::Get()->OpenInviteUI( szInviteType ); } else { CUIGameData::Get()->ExecuteOverlayCommand( "LobbyInvite" ); } } else if (!Q_strcmp(command, "Game")) { if ( m_ActiveControl ) { m_ActiveControl->NavigateFrom( ); } CBaseModPanel::GetSingleton().OpenWindow(WT_GAMEOPTIONS, this, true ); } else if (!Q_strcmp(command, "AudioVideo")) { if ( m_ActiveControl ) { m_ActiveControl->NavigateFrom( ); } CBaseModPanel::GetSingleton().OpenWindow(WT_AUDIOVIDEO, this, true ); } else if (!Q_strcmp(command, "Controller")) { if ( m_ActiveControl ) { m_ActiveControl->NavigateFrom( ); } CBaseModPanel::GetSingleton().OpenWindow(WT_CONTROLLER, this, true ); } else if (!Q_strcmp(command, "Storage")) { if ( m_ActiveControl ) { m_ActiveControl->NavigateFrom( ); } // Trigger storage device selector CUIGameData::Get()->SelectStorageDevice( new CChangeStorageDevice( XBX_GetUserId( iUserSlot ) ) ); } else if (!Q_strcmp(command, "Credits")) { KeyValues *pSettings = KeyValues::FromString( "settings", " system { " " network offline " " } " " game { " " mode single_mission " " } " " options { " " play credits " " } " ); KeyValues::AutoDelete autodelete( pSettings ); g_pMatchFramework->CreateSession( pSettings ); // Automatically start the credits session, no configuration required if ( IMatchSession *pMatchSession = g_pMatchFramework->GetMatchSession() ) { pMatchSession->Command( KeyValues::AutoDeleteInline( new KeyValues( "Start" ) ) ); } } else if (!Q_strcmp(command, "QuitGame")) { if ( IsPC() ) { GenericConfirmation* confirmation = static_cast< GenericConfirmation* >( CBaseModPanel::GetSingleton().OpenWindow( WT_GENERICCONFIRMATION, this, false ) ); GenericConfirmation::Data_t data; data.pWindowTitle = "#L4D360UI_MainMenu_Quit_Confirm"; data.pMessageText = "#L4D360UI_MainMenu_Quit_ConfirmMsg"; data.bOkButtonEnabled = true; data.pfnOkCallback = &AcceptQuitGameCallback; data.bCancelButtonEnabled = true; confirmation->SetUsageData(data); NavigateFrom(); } } else if ( !Q_stricmp( command, "QuitGame_NoConfirm" ) ) { if ( IsPC() ) { engine->ClientCmd( "quit" ); } } else if ( !Q_strcmp( command, "EnableSplitscreen" ) ) { Msg( "Enabling splitscreen from main menu...\n" ); CBaseModPanel::GetSingleton().CloseAllWindows(); CAttractScreen::SetAttractMode( CAttractScreen::ATTRACT_GOSPLITSCREEN ); CBaseModPanel::GetSingleton().OpenWindow( WT_ATTRACTSCREEN, NULL, true ); } else if ( !Q_strcmp( command, "DisableSplitscreen" ) ) { GenericConfirmation* confirmation = static_cast< GenericConfirmation* >( CBaseModPanel::GetSingleton().OpenWindow( WT_GENERICCONFIRMATION, this, false ) ); GenericConfirmation::Data_t data; data.pWindowTitle = "#L4D360UI_MainMenu_SplitscreenDisableConf"; data.pMessageText = "#L4D360UI_MainMenu_SplitscreenDisableConfMsg"; data.bOkButtonEnabled = true; data.pfnOkCallback = &AcceptSplitscreenDisableCallback; data.bCancelButtonEnabled = true; confirmation->SetUsageData(data); } else if ( !Q_strcmp( command, "DisableSplitscreen_NoConfirm" ) ) { Msg( "Disabling splitscreen from main menu...\n" ); CAttractScreen::SetAttractMode( CAttractScreen::ATTRACT_GAMESTART ); OnCommand( "ActivateAttractScreen" ); } else if (!Q_strcmp(command, "Audio")) { if ( ui_old_options_menu.GetBool() ) { CBaseModPanel::GetSingleton().OpenOptionsDialog( this ); } else { // audio options dialog, PC only if ( m_ActiveControl ) { m_ActiveControl->NavigateFrom( ); } CBaseModPanel::GetSingleton().OpenWindow(WT_AUDIO, this, true ); } } else if (!Q_strcmp(command, "Video")) { if ( ui_old_options_menu.GetBool() ) { CBaseModPanel::GetSingleton().OpenOptionsDialog( this ); } else { // video options dialog, PC only if ( m_ActiveControl ) { m_ActiveControl->NavigateFrom( ); } CBaseModPanel::GetSingleton().OpenWindow(WT_VIDEO, this, true ); } } else if (!Q_strcmp(command, "Brightness")) { if ( ui_old_options_menu.GetBool() ) { CBaseModPanel::GetSingleton().OpenOptionsDialog( this ); } else { // brightness options dialog, PC only OpenGammaDialog( GetVParent() ); } } else if (!Q_strcmp(command, "KeyboardMouse")) { if ( ui_old_options_menu.GetBool() ) { CBaseModPanel::GetSingleton().OpenOptionsDialog( this ); } else { // standalone keyboard/mouse dialog, PC only if ( m_ActiveControl ) { m_ActiveControl->NavigateFrom( ); } CBaseModPanel::GetSingleton().OpenWindow(WT_KEYBOARDMOUSE, this, true ); } } else if( Q_stricmp( "#L4D360UI_Controller_Edit_Keys_Buttons", command ) == 0 ) { FlyoutMenu::CloseActiveMenu(); CBaseModPanel::GetSingleton().OpenKeyBindingsDialog( this ); } else if (!Q_strcmp(command, "MultiplayerSettings")) { if ( ui_old_options_menu.GetBool() ) { CBaseModPanel::GetSingleton().OpenOptionsDialog( this ); } else { // standalone multiplayer settings dialog, PC only if ( m_ActiveControl ) { m_ActiveControl->NavigateFrom( ); } CBaseModPanel::GetSingleton().OpenWindow(WT_MULTIPLAYER, this, true ); } } else if (!Q_strcmp(command, "CloudSettings")) { // standalone cloud settings dialog, PC only if ( m_ActiveControl ) { m_ActiveControl->NavigateFrom( ); } CBaseModPanel::GetSingleton().OpenWindow(WT_CLOUD, this, true ); } else if (!Q_strcmp(command, "SeeAll")) { if ( CheckAndDisplayErrorIfNotLoggedIn() ) return; KeyValues *pSettings = KeyValues::FromString( "settings", " game { " // passing empty game settings to indicate no preference " } " ); KeyValues::AutoDelete autodelete( pSettings ); if ( m_ActiveControl ) { m_ActiveControl->NavigateFrom( ); } CBaseModPanel::GetSingleton().OpenWindow( WT_ALLGAMESEARCHRESULTS, this, true, pSettings ); CBaseModPanel::GetSingleton().PlayUISound( UISOUND_ACCEPT ); } else if ( !Q_strcmp( command, "OpenServerBrowser" ) ) { if ( CheckAndDisplayErrorIfNotLoggedIn() ) return; // on PC, bring up the server browser and switch it to the LAN tab (tab #5) engine->ClientCmd( "openserverbrowser" ); } else if ( !Q_strcmp( command, "DemoConnect" ) ) { g_pMatchFramework->GetMatchTitle()->PrepareClientForConnect( NULL ); engine->ClientCmd( CFmtStr( "connect %s", demo_connect_string.GetString() ) ); } else if (command && command[0] == '#') { // Pass it straight to the engine as a command engine->ClientCmd( command+1 ); } else if( !Q_strcmp( command, "Addons" ) ) { CBaseModPanel::GetSingleton().OpenWindow( WT_ADDONS, this, true ); } else if( !Q_strcmp( command, "CreateGame" ) ) { KeyValues *pSettings = KeyValues::FromString( "settings", " system { " " network LIVE " " access public " " } " " game { " " mode = " " sdk = " " mission = " " } " " options { " " action create " " } " ); KeyValues::AutoDelete autodelete( pSettings ); char const *szGameMode = "sdk"; pSettings->SetString( "game/mode", szGameMode ); pSettings->SetString( "game/campaign", "jacob" ); pSettings->SetString( "game/mission", "sdk_teams_hdr" ); if ( !CUIGameData::Get()->SignedInToLive() ) { pSettings->SetString( "system/network", "lan" ); pSettings->SetString( "system/access", "public" ); } if ( StringHasPrefix( szGameMode, "team" ) ) { pSettings->SetString( "system/netflag", "teamlobby" ); } // else if ( !Q_stricmp( "custommatch", m_pDataSettings->GetString( "options/action", "" ) ) ) // { // pSettings->SetString( "system/access", "public" ); // } // TCR: We need to respect the default difficulty pSettings->SetString( "game/difficulty", GameModeGetDefaultDifficulty( szGameMode ) ); CBaseModPanel::GetSingleton().PlayUISound( UISOUND_ACCEPT ); CBaseModPanel::GetSingleton().CloseAllWindows(); CBaseModPanel::GetSingleton().OpenWindow( WT_GAMESETTINGS, NULL, true, pSettings ); } else { const char *pchCommand = command; if ( !Q_strcmp(command, "FlmOptionsFlyout") ) { #ifdef _X360 if ( XBX_GetPrimaryUserIsGuest() ) { pchCommand = "FlmOptionsGuestFlyout"; } #endif } else if ( !Q_strcmp(command, "FlmVersusFlyout") ) { command = "VersusSoftLock"; } else if ( !Q_strcmp( command, "FlmSurvivalFlyout" ) ) { command = "SurvivalCheck"; } else if ( !Q_strcmp( command, "FlmScavengeFlyout" ) ) { command = "ScavengeCheck"; } else if ( StringHasPrefix( command, "FlmExtrasFlyout_" ) ) { command = "FlmExtrasFlyoutCheck"; } // does this command match a flyout menu? BaseModUI::FlyoutMenu *flyout = dynamic_cast< FlyoutMenu* >( FindChildByName( pchCommand ) ); if ( flyout ) { bOpeningFlyout = true; // If so, enumerate the buttons on the menu and find the button that issues this command. // (No other way to determine which button got pressed; no notion of "current" button on PC.) for ( int iChild = 0; iChild < GetChildCount(); iChild++ ) { bool bFound = false; GameModes *pGameModes = dynamic_cast< GameModes *>( GetChild( iChild ) ); if ( pGameModes ) { for ( int iGameMode = 0; iGameMode < pGameModes->GetNumGameInfos(); iGameMode++ ) { BaseModHybridButton *pHybrid = pGameModes->GetHybridButton( iGameMode ); if ( pHybrid && pHybrid->GetCommand() && !Q_strcmp( pHybrid->GetCommand()->GetString( "command"), command ) ) { pHybrid->NavigateFrom(); // open the menu next to the button that got clicked flyout->OpenMenu( pHybrid ); flyout->SetListener( this ); bFound = true; break; } } } if ( !bFound ) { BaseModHybridButton *hybrid = dynamic_cast<BaseModHybridButton *>( GetChild( iChild ) ); if ( hybrid && hybrid->GetCommand() && !Q_strcmp( hybrid->GetCommand()->GetString( "command"), command ) ) { hybrid->NavigateFrom(); // open the menu next to the button that got clicked flyout->OpenMenu( hybrid ); flyout->SetListener( this ); break; } } } } else { BaseClass::OnCommand( command ); } } if( !bOpeningFlyout ) { FlyoutMenu::CloseActiveMenu(); //due to unpredictability of mouse navigation over keyboard, we should just close any flyouts that may still be open anywhere. } }
//============================================================================= void ControllerOptions::OnCommand(const char *command) { if ( !Q_strcmp( command, "EditButtons" ) ) { CBaseModPanel::GetSingleton().OpenWindow(WT_CONTROLLER_BUTTONS, this, true); m_bDirty = true; } else if ( !Q_strcmp( command, "EditSticks" ) ) { CBaseModPanel::GetSingleton().OpenWindow(WT_CONTROLLER_STICKS, this, true); m_bDirty = true; } else if( !Q_strcmp( command, pszDuckModes[DUCK_MODE_HOLD] ) ) { CGameUIConVarRef option_duck_method("option_duck_method"); if ( option_duck_method.IsValid() ) { option_duck_method.SetValue( DUCK_MODE_HOLD ); m_bDirty = true; } } else if( !Q_strcmp( command, pszDuckModes[DUCK_MODE_TOGGLE] ) ) { CGameUIConVarRef option_duck_method("option_duck_method"); if ( option_duck_method.IsValid() ) { option_duck_method.SetValue( DUCK_MODE_TOGGLE ); m_bDirty = true; } } else if( !Q_strcmp( command, pszLookTypes[CONTROLLER_LOOK_TYPE_NORMAL] ) ) { CGameUIConVarRef joy_inverty("joy_inverty"); if ( joy_inverty.IsValid() ) { joy_inverty.SetValue( CONTROLLER_LOOK_TYPE_NORMAL ); m_bDirty = true; } } else if( !Q_strcmp( command, pszLookTypes[CONTROLLER_LOOK_TYPE_INVERTED] ) ) { CGameUIConVarRef joy_inverty("joy_inverty"); if ( joy_inverty.IsValid() ) { joy_inverty.SetValue( CONTROLLER_LOOK_TYPE_INVERTED ); m_bDirty = true; } } else if ( !Q_strcmp( command, "Defaults" ) ) { GenericConfirmation* confirmation = static_cast<GenericConfirmation*>( CBaseModPanel::GetSingleton(). OpenWindow( WT_GENERICCONFIRMATION, this, false ) ); if ( confirmation ) { GenericConfirmation::Data_t data; data.pWindowTitle = "#L4D360UI_Controller_Default"; data.pMessageText = "#L4D360UI_Controller_Default_Details"; data.bOkButtonEnabled = true; data.bCancelButtonEnabled = true; s_pControllerOptions = this; data.pfnOkCallback = ControllerOptionsResetDefaults_Confirm; data.pfnCancelCallback = NULL; confirmation->SetUsageData(data); } } else { BaseClass::OnCommand( command ); } }
//============================================================================= void InGameMainMenu::OnCommand( const char *command ) { int iUserSlot = CBaseModPanel::GetSingleton().GetLastActiveUserId(); if ( UI_IsDebug() ) { Msg("[GAMEUI] Handling ingame menu command %s from user%d ctrlr%d\n", command, iUserSlot, XBX_GetUserId( iUserSlot ) ); } int iOldSlot = GetGameUIActiveSplitScreenPlayerSlot(); SetGameUIActiveSplitScreenPlayerSlot( iUserSlot ); GAMEUI_ACTIVE_SPLITSCREEN_PLAYER_GUARD( iUserSlot ); if ( !Q_strcmp( command, "ReturnToGame" ) ) { engine->ClientCmd("gameui_hide"); } // -- // SINGLEPLAYER else if ( !Q_strcmp( command, "StartNewGame" ) ) { #ifdef UI_USING_OLDDIALOGS CBaseModPanel::GetSingleton().OpenOptionsDialog( this ); #else m_ActiveControl->NavigateFrom( ); CBaseModPanel::GetSingleton().OpenWindow( WT_NEWGAME, this, true ); #endif } else if ( !Q_strcmp( command, "SaveGame" ) ) { m_ActiveControl->NavigateFrom( ); CBaseModPanel::GetSingleton().OpenWindow( WT_SAVEGAME, this, true ); } else if ( !Q_strcmp( command, "LoadGame" ) ) { m_ActiveControl->NavigateFrom( ); CBaseModPanel::GetSingleton().OpenWindow( WT_LOADGAME, this, true ); } else if (!Q_strcmp(command, "Gameplay")) { m_ActiveControl->NavigateFrom( ); CBaseModPanel::GetSingleton().OpenWindow(WT_GAMEPLAYSETTINGS, this, true ); } else if ( !Q_strcmp( command, "StatsAndAchievements" ) ) { if ( CheckAndDisplayErrorIfNotLoggedIn() ) return; m_ActiveControl->NavigateFrom( ); CBaseModPanel::GetSingleton().OpenWindow( WT_ACHIEVEMENTS, this, true ); } else if (!Q_strcmp(command, "Controller")) { CBaseModPanel::GetSingleton().OpenWindow(WT_CONTROLLER, this, true ); } else if (!Q_strcmp(command, "Audio")) { // audio options dialog, PC only m_ActiveControl->NavigateFrom( ); CBaseModPanel::GetSingleton().OpenWindow(WT_AUDIO, this, true ); } else if (!Q_strcmp(command, "Video")) { // video options dialog, PC only m_ActiveControl->NavigateFrom( ); CBaseModPanel::GetSingleton().OpenWindow(WT_VIDEO, this, true ); } else if (!Q_strcmp(command, "Brightness")) { // brightness options dialog, PC only OpenGammaDialog( GetVParent() ); } else if (!Q_strcmp(command, "KeyboardMouse")) { // standalone keyboard/mouse dialog, PC only m_ActiveControl->NavigateFrom( ); CBaseModPanel::GetSingleton().OpenWindow(WT_KEYBOARDMOUSE, this, true ); } else if( Q_stricmp( "#L4D360UI_Controller_Edit_Keys_Buttons", command ) == 0 ) { FlyoutMenu::CloseActiveMenu(); CBaseModPanel::GetSingleton().OpenKeyBindingsDialog( this ); } else if ( !Q_strcmp( command, "EnableSplitscreen" ) || !Q_strcmp( command, "DisableSplitscreen" ) ) { GenericConfirmation* confirmation = static_cast< GenericConfirmation* >( CBaseModPanel::GetSingleton().OpenWindow( WT_GENERICCONFIRMATION, this, true ) ); GenericConfirmation::Data_t data; data.pWindowTitle = "#L4D360UI_LeaveMultiplayerConf"; data.pMessageText = "#L4D360UI_MainMenu_SplitscreenChangeConfMsg"; data.bOkButtonEnabled = true; data.pfnOkCallback = &LeaveGameOkCallback; data.bCancelButtonEnabled = true; confirmation->SetUsageData(data); } else if( !Q_strcmp( command, "ExitToMainMenu" ) ) { GenericConfirmation* confirmation = static_cast< GenericConfirmation* >( CBaseModPanel::GetSingleton().OpenWindow( WT_GENERICCONFIRMATION, this, true ) ); GenericConfirmation::Data_t data; data.pWindowTitle = "#L4D360UI_LeaveMultiplayerConf"; data.pMessageText = "#L4D360UI_LeaveMultiplayerConfMsg"; data.bOkButtonEnabled = true; data.pfnOkCallback = &LeaveGameOkCallback; data.bCancelButtonEnabled = true; confirmation->SetUsageData(data); } else { const char *pchCommand = command; // does this command match a flyout menu? BaseModUI::FlyoutMenu *flyout = dynamic_cast< FlyoutMenu* >( FindChildByName( pchCommand ) ); if ( flyout ) { // If so, enumerate the buttons on the menu and find the button that issues this command. // (No other way to determine which button got pressed; no notion of "current" button on PC.) for ( int iChild = 0; iChild < GetChildCount(); iChild++ ) { BaseModHybridButton *hybrid = dynamic_cast<BaseModHybridButton *>( GetChild( iChild ) ); if ( hybrid && hybrid->GetCommand() && !Q_strcmp( hybrid->GetCommand()->GetString( "command"), command ) ) { #ifdef _X360 hybrid->NavigateFrom( ); #endif //_X360 // open the menu next to the button that got clicked flyout->OpenMenu( hybrid ); break; } } } } SetGameUIActiveSplitScreenPlayerSlot( iOldSlot ); }
void CChangeStorageDevice::OnDeviceFail( FailReason_t eReason ) { // Depending if the user had storage device by this moment // or not we will take different actions: DWORD dwDevice = XBX_GetStorageDeviceId( GetCtrlrIndex() ); switch ( eReason ) { case FAIL_ERROR: case FAIL_NOT_SELECTED: if ( XBX_DescribeStorageDevice( dwDevice ) ) { // That's fine user has a valid storage device, didn't want to change DeviceChangeCompleted( false ); delete this; return; } // otherwise, proceed with the ui msg } XBX_SetStorageDeviceId( GetCtrlrIndex(), XBX_STORAGE_DECLINED ); // We don't want to fire notification because there might be unsaved // preferences changes that were done without a storage device // no: g_pMatchFramework->GetEventsSubscription()->BroadcastEvent( new KeyValues( "OnProfileStorageAvailable", "iController", GetCtrlrIndex() ) ); m_bAllowDeclined = false; GenericConfirmation* confirmation = static_cast<GenericConfirmation*>( CBaseModPanel::GetSingleton(). OpenWindow( WT_GENERICCONFIRMATION, CUIGameData::Get()->GetParentWindowForSystemMessageBox(), false ) ); GenericConfirmation::Data_t data; switch ( eReason ) { case FAIL_ERROR: case FAIL_NOT_SELECTED: data.pWindowTitle = "#L4D360UI_MsgBx_AttractDeviceNoneC"; data.pMessageText = "#L4D360UI_MsgBx_AttractDeviceNoneTxt"; break; case FAIL_FULL: data.pWindowTitle = "#L4D360UI_MsgBx_AttractDeviceFullC"; data.pMessageText = "#L4D360UI_MsgBx_AttractDeviceFullTxt"; break; case FAIL_CORRUPT: default: data.pWindowTitle = "#L4D360UI_MsgBx_AttractDeviceCorruptC"; data.pMessageText = "#L4D360UI_MsgBx_AttractDeviceCorruptTxt"; break; } data.bOkButtonEnabled = true; data.bCancelButtonEnabled = true; s_pChangeStorageDeviceCallback = this; data.pfnOkCallback = CChangeStorageDevice_Continue; data.pfnCancelCallback = CChangeStorageDevice_SelectAgain; // WARNING! WARNING! WARNING! // The nature of Generic Confirmation is that it will be silently replaced // with another Generic Confirmation if a system event occurs // e.g. user unplugs controller, user changes storage device, etc. // If that happens neither OK nor CANCEL callbacks WILL NOT BE CALLED // The state machine cannot depend on either callback advancing the // state because in some situations neither callback can fire and the // confirmation dismissed/closed/replaced. // State machine must implement OnThink and check if the required // confirmation box is still present! // This code implements some sort of fallback - it deletes the static // confirmation data when a new storage device change is requested. // Vitaliy -- 9/26/2009 // m_nConfirmationData = confirmation->SetUsageData(data); }