From 5020c1c9bfbfd46f059a5e97a871a5fcce710b8f Mon Sep 17 00:00:00 2001 From: Chris Danford Date: Sat, 6 Aug 2005 05:43:24 +0000 Subject: [PATCH] add profile swap, add profile change/swap sounds --- stepmania/src/ScreenTitleMenu.cpp | 76 ++++++++++++++++++++++--------- stepmania/src/ScreenTitleMenu.h | 5 ++ 2 files changed, 59 insertions(+), 22 deletions(-) diff --git a/stepmania/src/ScreenTitleMenu.cpp b/stepmania/src/ScreenTitleMenu.cpp index f718f12e23..b4da9df67f 100644 --- a/stepmania/src/ScreenTitleMenu.cpp +++ b/stepmania/src/ScreenTitleMenu.cpp @@ -19,28 +19,6 @@ #define COIN_MODE_CHANGE_SCREEN THEME->GetMetric (m_sName,"CoinModeChangeScreen") -static void ChangeDefaultLocalProfile( PlayerNumber pn, int iDir ) -{ - CString sCurrent = PREFSMAN->GetDefaultLocalProfileID(pn); - vector vsProfileID; - PROFILEMAN->GetLocalProfileIDs( vsProfileID ); - if( vsProfileID.empty() ) - return; - - int iIndex = 0; - vector::const_iterator iter = find( vsProfileID.begin(), vsProfileID.end(), sCurrent ); - if( iter != vsProfileID.end() ) - { - iIndex = iter - vsProfileID.begin(); - iIndex += iDir; - wrap( iIndex, vsProfileID.size() ); - } - - sCurrent = vsProfileID[iIndex]; - PREFSMAN->GetDefaultLocalProfileID(pn).Set( sCurrent ); -} - - REGISTER_SCREEN_CLASS( ScreenTitleMenu ); ScreenTitleMenu::ScreenTitleMenu( CString sScreenName ) : ScreenSelectMaster( sScreenName ) @@ -66,6 +44,8 @@ void ScreenTitleMenu::Init() ScreenSelectMaster::Init(); m_soundSelectPressed.Load( THEME->GetPathS(m_sName,"select down"), true ); + m_soundProfileChange.Load( THEME->GetPathS(m_sName,"profile change"), true ); + m_soundProfileSwap.Load( THEME->GetPathS(m_sName,"profile swap"), true ); this->SortByDrawOrder(); @@ -156,6 +136,9 @@ void ScreenTitleMenu::Input( const DeviceInput& DeviceI, const InputEventType ty ChangeDefaultLocalProfile( pn, +1 ); MESSAGEMAN->Broadcast( ssprintf("MenuRightP%d",pn+1) ); break; + case MENU_BUTTON_DOWN: + SwapDefaultLocalProfiles(); + break; } } return; @@ -201,6 +184,55 @@ void ScreenTitleMenu::LoadHelpText() } } +void ScreenTitleMenu::ChangeDefaultLocalProfile( PlayerNumber pn, int iDir ) +{ + CString sCurrent = PREFSMAN->GetDefaultLocalProfileID(pn); + vector vsProfileID; + PROFILEMAN->GetLocalProfileIDs( vsProfileID ); + if( vsProfileID.empty() ) + return; + + int iIndex = 0; + vector::const_iterator iter = find( vsProfileID.begin(), vsProfileID.end(), sCurrent ); + if( iter != vsProfileID.end() ) + { + iIndex = iter - vsProfileID.begin(); + + for( int i=0; iGetNumLocalProfiles(); i++ ) + { + iIndex += iDir; + wrap( iIndex, vsProfileID.size() ); + sCurrent = vsProfileID[iIndex]; + + bool bAnyOtherIsUsingThisProfile = false; + FOREACH_PlayerNumber( p ) + { + if( p!=pn && PREFSMAN->GetDefaultLocalProfileID(p).Get() == sCurrent ) + { + bAnyOtherIsUsingThisProfile = true; + break; + } + } + if( !bAnyOtherIsUsingThisProfile ) + break; + } + } + + m_soundProfileChange.Play(); + + PREFSMAN->GetDefaultLocalProfileID(pn).Set( sCurrent ); +} + +void ScreenTitleMenu::SwapDefaultLocalProfiles() +{ + CString s1 = PREFSMAN->GetDefaultLocalProfileID(PLAYER_1); + CString s2 = PREFSMAN->GetDefaultLocalProfileID(PLAYER_2); + PREFSMAN->GetDefaultLocalProfileID(PLAYER_1).Set( s2 ); + PREFSMAN->GetDefaultLocalProfileID(PLAYER_2).Set( s1 ); + + m_soundProfileSwap.Play(); +} + /* * (c) 2001-2004 Chris Danford diff --git a/stepmania/src/ScreenTitleMenu.h b/stepmania/src/ScreenTitleMenu.h index 3c7b7e44c1..e7036db953 100644 --- a/stepmania/src/ScreenTitleMenu.h +++ b/stepmania/src/ScreenTitleMenu.h @@ -18,8 +18,13 @@ public: protected: virtual void LoadHelpText(); + + void ChangeDefaultLocalProfile( PlayerNumber pn, int iDir ); + void SwapDefaultLocalProfiles(); RageSound m_soundSelectPressed; + RageSound m_soundProfileChange; + RageSound m_soundProfileSwap; bool m_bSelectIsDown; };