From 23daae6a25eb05a4ba1a5f176750b01b97d4c88e Mon Sep 17 00:00:00 2001 From: Glenn Maynard Date: Tue, 26 Apr 2005 06:41:57 +0000 Subject: [PATCH] add select menu --- stepmania/src/ScreenSelectMusic.cpp | 59 +++++++++++++++++++++++++++-- stepmania/src/ScreenSelectMusic.h | 3 ++ 2 files changed, 58 insertions(+), 4 deletions(-) diff --git a/stepmania/src/ScreenSelectMusic.cpp b/stepmania/src/ScreenSelectMusic.cpp index a14d8f2e85..de335b5407 100644 --- a/stepmania/src/ScreenSelectMusic.cpp +++ b/stepmania/src/ScreenSelectMusic.cpp @@ -68,7 +68,8 @@ ScreenSelectMusic::ScreenSelectMusic( CString sClassName ) : ScreenWithMenuEleme ALIGN_MUSIC_BEATS( m_sName, "AlignMusicBeat" ), CODES( m_sName, "Codes" ), MUSIC_WHEEL_TYPE( m_sName, "MusicWheelType" ), - OPTIONS_MENU_AVAILABLE( m_sName, "OptionsMenuAvailable" ) + OPTIONS_MENU_AVAILABLE( m_sName, "OptionsMenuAvailable" ), + SELECT_MENU_AVAILABLE( m_sName, "SelectMenuAvailable" ) { LOG->Trace( "ScreenSelectMusic::ScreenSelectMusic()" ); @@ -90,6 +91,8 @@ ScreenSelectMusic::ScreenSelectMusic( CString sClassName ) : ScreenWithMenuEleme void ScreenSelectMusic::Init() { + m_bSelectIsDown = false; // used by LoadHelpText which is called by ScreenWithMenuElements::Init() + ScreenWithMenuElements::Init(); m_DisplayMode = GAMESTATE->IsCourseMode() ? DISPLAY_COURSES : DISPLAY_SONGS; @@ -831,6 +834,29 @@ void ScreenSelectMusic::Input( const DeviceInput& DeviceI, InputEventType type, if( m_bMadeChoice ) return; // ignore + LoadHelpText(); + + bool bSelectIsPressed = + SELECT_MENU_AVAILABLE && INPUTMAPPER->IsButtonDown( MenuInput(pn, MENU_BUTTON_SELECT) ); + if( bSelectIsPressed ) + { + if( type == IET_FIRST_PRESS ) + { + switch( MenuI.button ) + { + case MENU_BUTTON_LEFT: + ChangeDifficulty( pn, -1 ); + break; + case MENU_BUTTON_RIGHT: + ChangeDifficulty( pn, +1 ); + break; + case MENU_BUTTON_START: + m_MusicWheel.ChangeSort( SORT_MODE_MENU ); + break; + } + } + } + if( MenuI.button == MENU_BUTTON_RIGHT || MenuI.button == MENU_BUTTON_LEFT ) { /* If we're rouletting, hands off. */ @@ -841,8 +867,11 @@ void ScreenSelectMusic::Input( const DeviceInput& DeviceI, InputEventType type, bool bRightIsDown = false; FOREACH_EnabledPlayer( p ) { - bLeftIsDown |= INPUTMAPPER->IsButtonDown( MenuInput(p, MENU_BUTTON_LEFT) ); - bRightIsDown |= INPUTMAPPER->IsButtonDown( MenuInput(p, MENU_BUTTON_RIGHT) ); + if( !bSelectIsPressed ) + { + bLeftIsDown |= INPUTMAPPER->IsButtonDown( MenuInput(p, MENU_BUTTON_LEFT) ); + bRightIsDown |= INPUTMAPPER->IsButtonDown( MenuInput(p, MENU_BUTTON_RIGHT) ); + } } bool bBothDown = bLeftIsDown && bRightIsDown; @@ -872,6 +901,8 @@ void ScreenSelectMusic::Input( const DeviceInput& DeviceI, InputEventType type, } + if( bSelectIsPressed ) + return; // TRICKY: Do default processing of MenuLeft and MenuRight before detecting // codes. Do default processing of Start AFTER detecting codes. This gives us a @@ -944,6 +975,26 @@ void ScreenSelectMusic::Input( const DeviceInput& DeviceI, InputEventType type, } } +void ScreenSelectMusic::LoadHelpText() +{ + ScreenWithMenuElements::LoadHelpText(); + + bool bSelectIsDown = false; + FOREACH_EnabledPlayer( p ) + bSelectIsDown |= INPUTMAPPER->IsButtonDown( MenuInput(p, MENU_BUTTON_SELECT) ); + if( !SELECT_MENU_AVAILABLE ) + bSelectIsDown = false; + + if( m_bSelectIsDown != bSelectIsDown ) + { + m_bSelectIsDown = bSelectIsDown; + if( bSelectIsDown ) + MESSAGEMAN->Broadcast( "SelectMenuOn" ); + else + MESSAGEMAN->Broadcast( "SelectMenuOff" ); + } +} + void ScreenSelectMusic::ChangeDifficulty( PlayerNumber pn, int dir ) { LOG->Trace( "ScreenSelectMusic::ChangeDifficulty( %d, %d )", pn, dir ); @@ -1484,7 +1535,7 @@ void ScreenSelectMusic::AfterMusicChange() if( m_MusicWheel.GetSortOrder() != s_lastSortOrder ) { // Reload to let Lua metrics have a chance to change the help text. - ScreenWithMenuElements::LoadHelpText(); + LoadHelpText(); s_lastSortOrder = m_MusicWheel.GetSortOrder(); } diff --git a/stepmania/src/ScreenSelectMusic.h b/stepmania/src/ScreenSelectMusic.h index 61e9145ee6..e14ad64e62 100644 --- a/stepmania/src/ScreenSelectMusic.h +++ b/stepmania/src/ScreenSelectMusic.h @@ -54,6 +54,7 @@ protected: void TweenCoursePartsOffScreen( bool Final ); void SkipSongPartTweens(); void SkipCoursePartTweens(); + virtual void LoadHelpText(); void ChangeDifficulty( PlayerNumber pn, int dir ); @@ -87,6 +88,7 @@ protected: ThemeMetric CODES; ThemeMetric MUSIC_WHEEL_TYPE; ThemeMetric OPTIONS_MENU_AVAILABLE; + DynamicThemeMetric SELECT_MENU_AVAILABLE; CString m_sSectionMusicPath; CString m_sSortMusicPath; @@ -137,6 +139,7 @@ protected: TimingData *m_pSampleMusicTimingData; float m_fSampleStartSeconds, m_fSampleLengthSeconds; bool m_bAllowOptionsMenu, m_bAllowOptionsMenuRepeat; + bool m_bSelectIsDown; Transition m_bgOptionsOut; Transition m_bgNoOptionsOut;