From 99b000129bd163d444dcd10192a7c43ffea7ea2c Mon Sep 17 00:00:00 2001 From: Glenn Maynard Date: Fri, 9 Jan 2004 04:43:27 +0000 Subject: [PATCH] cleanup "smnavigation" flag fix left/right act as up/down on options menu never play change line sound when the option didn't change --- stepmania/src/ScreenOptions.cpp | 47 +++++++++++++++------------ stepmania/src/ScreenOptions.h | 3 ++ stepmania/src/ScreenOptionsMaster.cpp | 15 +-------- stepmania/src/ScreenOptionsMaster.h | 2 -- 4 files changed, 30 insertions(+), 37 deletions(-) diff --git a/stepmania/src/ScreenOptions.cpp b/stepmania/src/ScreenOptions.cpp index a0f4f6c327..9cf5960e46 100644 --- a/stepmania/src/ScreenOptions.cpp +++ b/stepmania/src/ScreenOptions.cpp @@ -59,6 +59,8 @@ ScreenOptions::ScreenOptions( CString sClassName ) : Screen(sClassName) { LOG->Trace( "ScreenOptions::ScreenOptions()" ); + m_SMOptionsNavigation = PREFSMAN->m_bArcadeOptionsNavigation; + m_SoundChangeCol.Load( THEME->GetPathToS("ScreenOptions change"), true ); m_SoundNextRow.Load( THEME->GetPathToS("ScreenOptions next"), true ); m_SoundPrevRow.Load( THEME->GetPathToS("ScreenOptions prev"), true ); @@ -694,7 +696,7 @@ void ScreenOptions::Input( const DeviceInput& DeviceI, const InputEventType type // if we are in dedicated menubutton input and arcade navigation // check to see if MENU_BUTTON_LEFT and MENU_BUTTON_RIGHT are being held const bool bHoldingLeftOrRight = MenuI.IsValid() && MenuI.button == MENU_BUTTON_START && - PREFSMAN->m_bArcadeOptionsNavigation && + !m_SMOptionsNavigation && (INPUTMAPPER->IsButtonDown( MenuInput(MenuI.player, MENU_BUTTON_RIGHT) ) || INPUTMAPPER->IsButtonDown( MenuInput(MenuI.player, MENU_BUTTON_LEFT) ) ); @@ -900,7 +902,7 @@ void ScreenOptions::MenuStart( PlayerNumber pn, const InputEventType type ) if( type == IET_RELEASE ) return; - if( PREFSMAN->m_bArcadeOptionsNavigation ) + if( !m_SMOptionsNavigation ) { bool bAllOnExit = true; for( int p=0; pm_bArcadeOptionsNavigation ) - { - /* If START is being pressed, and arcade nav is on, then we're holding left/right - * and start to move backwards. Don't move left and right, too. */ - if( PREFSMAN->m_bArcadeOptionsNavigation && - INPUTMAPPER->IsButtonDown( MenuInput(pn, MENU_BUTTON_START) ) ) - return; + /* If START is being pressed, and arcade nav is on, then we're holding left/right + * and start to move backwards. Don't move left and right, too. */ + if( !m_SMOptionsNavigation && INPUTMAPPER->IsButtonDown( MenuInput(pn, MENU_BUTTON_START) ) ) + return; - if( iNumOptions <= 1 ) // 1 or 0 - { - Move( pn, iDelta, Repeat ); - return; - } + const int iNumOptions = (row.Type == Row::ROW_EXIT)? 1: optrow.choices.size(); + if( iNumOptions <= 1 ) // 1 or 0 + { + /* There are no other options on the row; move up or down instead of left and right. + * This allows navigating the options menu with left/right/start. */ + Move( pn, iDelta, Repeat ); + return; } + if( Repeat ) return; if( row.Type == Row::ROW_EXIT ) // EXIT is selected return; // don't allow a move + bool bOneChanged = false; for( int p=0; pTrace("move pn %i, dir %i, rep %i", pn, dir, Repeat); diff --git a/stepmania/src/ScreenOptions.h b/stepmania/src/ScreenOptions.h index 51460715af..4d630e6a12 100644 --- a/stepmania/src/ScreenOptions.h +++ b/stepmania/src/ScreenOptions.h @@ -105,6 +105,7 @@ protected: // derived classes need access to these int m_iNumOptionRows; void LoadOptionIcon( PlayerNumber pn, int iRow, CString sText ); + void SetSMOptionsNavigation( bool on ) { m_SMOptionsNavigation = on; } private: /* Map menu lines to m_OptionRow entries. */ @@ -125,6 +126,8 @@ private: }; vector m_Rows; + bool m_SMOptionsNavigation; + int m_iCurrentRow[NUM_PLAYERS]; InputMode m_InputMode; diff --git a/stepmania/src/ScreenOptionsMaster.cpp b/stepmania/src/ScreenOptionsMaster.cpp index a9e36fae9d..dff98bedc5 100644 --- a/stepmania/src/ScreenOptionsMaster.cpp +++ b/stepmania/src/ScreenOptionsMaster.cpp @@ -180,8 +180,6 @@ ScreenOptionsMaster::ScreenOptionsMaster( CString sClassName ): if( MusicPath != "" ) SOUND->PlayMusic( MusicPath ); - m_ForceSMOptionsNavigation = false; - CStringArray Flags; split( OPTION_MENU_FLAGS, ";", Flags, true ); InputMode im = INPUTMODE_INDIVIDUAL; @@ -206,7 +204,7 @@ ScreenOptionsMaster::ScreenOptionsMaster( CString sClassName ): GAMESTATE->m_MasterPlayerNumber = PlayerNumber(0); } if( Flags[i] == "smnavigation" ) - m_ForceSMOptionsNavigation = true; + SetSMOptionsNavigation( true ); } if( NumRows == -1 ) @@ -550,17 +548,6 @@ void ScreenOptionsMaster::ExportOptions() CHECKPOINT; } -void ScreenOptionsMaster::MenuStart( PlayerNumber pn, const InputEventType type ) -{ - if( m_ForceSMOptionsNavigation ) - { - StartGoToNextState(); - return; - } - - ScreenOptions::MenuStart( pn, type ); -} - void ScreenOptionsMaster::GoToNextState() { if( GAMESTATE->m_bEditing ) diff --git a/stepmania/src/ScreenOptionsMaster.h b/stepmania/src/ScreenOptionsMaster.h index 267708d99c..072abd000e 100644 --- a/stepmania/src/ScreenOptionsMaster.h +++ b/stepmania/src/ScreenOptionsMaster.h @@ -37,7 +37,6 @@ private: }; CString m_NextScreen; - bool m_ForceSMOptionsNavigation; vector OptionRowHandlers; OptionRow *m_OptionRowAlloc; @@ -51,7 +50,6 @@ private: void SetSaveToProfile( OptionRow &row, OptionRowHandler &hand ); protected: - virtual void MenuStart( PlayerNumber pn, const InputEventType type ); virtual void ImportOptions(); virtual void ExportOptions();