diff --git a/stepmania/Themes/default/metrics.ini b/stepmania/Themes/default/metrics.ini index 09a9b0f586..dd63af005b 100644 --- a/stepmania/Themes/default/metrics.ini +++ b/stepmania/Themes/default/metrics.ini @@ -884,6 +884,14 @@ SelOffCommand=linear,0.5;zoomx,0.0;zoomy,0.0 SelTo1Command=linear,0.3;zoomy,1.0;zoomx,1.0;x,480;y,150 SelTo2Command=linear,0.3;zoomy,1.0;zoomx,1.0;x,480;y,350 SelTo3Command=linear,0.3;x,260;y,400;zoomx,0.3;zoomy,2.0 +MeterP1Y=435 +MeterP1X=240 +MeterP1OnCommand=zoomx,0.0;zoomy,0.0;linear,0.5;zoomy,1.0;zoomx,1.0 +MeterP1OffCommand=linear,0.5;zoomx,0.0;zoomy,0.0 +MeterP2Y=455 +MeterP2X=280 +MeterP2OnCommand=zoomx,0.0;zoomy,0.0;linear,0.5;zoomy,1.0;zoomx,1.0 +MeterP2OffCommand=linear,0.5;zoomx,0.0;zoomy,0.0 DifficultyIconP1Y=400 DifficultyIconP1X=230 DifficultyIconP1OnCommand=zoomx,0;zoomy,0;linear,0.5;zoomx,1.0;zoomy,1.0 @@ -4078,7 +4086,7 @@ PrevScreen=ScreenTitleMenu # when using entries that change the screen; otherwise, the only way to # exit the screen when in regular mode is "exit". -LineNames=1,2,3,4,5,6,7,8,9,10,11,12,13,14,15 +LineNames=1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16 OptionMenuFlags=together;forceallplayers;smnavigation # This NextScreen is only used for the "exit" choice. Line1=list,Appearance Options @@ -4096,6 +4104,7 @@ Line12=list,Profile Options Line13=list,Other Options Line14=list,Reload Songs/Courses Line15=list,Test Input +Line16=list,Network Options [TextBanner] TitleX=-90 diff --git a/stepmania/src/ScreenNetSelectMusic.cpp b/stepmania/src/ScreenNetSelectMusic.cpp index baff7b2e43..ceea2ec825 100644 --- a/stepmania/src/ScreenNetSelectMusic.cpp +++ b/stepmania/src/ScreenNetSelectMusic.cpp @@ -169,6 +169,11 @@ ScreenNetSelectMusic::ScreenNetSelectMusic( const CString& sName ) : ScreenWithM ON_COMMAND( m_DifficultyIcon[p] ); m_DC[p] = GAMESTATE->m_PreferredDifficulty[p]; m_DifficultyIcon[p].SetFromDifficulty( p, m_DC[p] ); + + m_DifficultyMeters[p].SetName( "DifficultyMeter", ssprintf("MeterP%d",p+1) ); + m_DifficultyMeters[p].Load(); + SET_XY_AND_ON_COMMAND( m_DifficultyMeters[p] ); + this->AddChild( &m_DifficultyMeters[p] ); } m_SelectMode = SelectGroup; @@ -404,7 +409,7 @@ void ScreenNetSelectMusic::MenuLeft( PlayerNumber pn, const InputEventType type case SelectDifficulty: StepsType st = GAMESTATE->GetCurrentStyle()->m_StepsType; vector MultiSteps; - MultiSteps = m_vSongs[m_iSongNum % m_vSongs.size()]->GetAllSteps( st ); + MultiSteps = GAMESTATE->m_pCurSong->GetAllSteps( st ); if (MultiSteps.size() == 0) m_DC[pn] = NUM_DIFFICULTIES; else @@ -419,7 +424,8 @@ void ScreenNetSelectMusic::MenuLeft( PlayerNumber pn, const InputEventType type if (i > 0) //If we are at the easiest difficulty, do nothign m_DC[pn] = MultiSteps[i-1]->GetDifficulty(); } - m_DifficultyIcon[pn].SetFromDifficulty( pn, m_DC[pn] ); + UpdateDifficulties( pn ); + GAMESTATE->m_PreferredDifficulty[pn] = m_DC[pn]; } } @@ -442,7 +448,7 @@ void ScreenNetSelectMusic::MenuRight( PlayerNumber pn, const InputEventType type case SelectDifficulty: StepsType st = GAMESTATE->GetCurrentStyle()->m_StepsType; vector MultiSteps; - MultiSteps = m_vSongs[m_iSongNum % m_vSongs.size()]->GetAllSteps( st ); + MultiSteps = GAMESTATE->m_pCurSong->GetAllSteps( st ); if (MultiSteps.size() == 0) m_DC[pn] = NUM_DIFFICULTIES; else @@ -457,7 +463,8 @@ void ScreenNetSelectMusic::MenuRight( PlayerNumber pn, const InputEventType type if (i < (int)MultiSteps.size() - 1 ) //If we are at the hardest difficulty, do nothign m_DC[pn] = MultiSteps[i+1]->GetDifficulty(); } - m_DifficultyIcon[pn].SetFromDifficulty( pn, m_DC[pn] ); + UpdateDifficulties( pn ); + GAMESTATE->m_PreferredDifficulty[pn] = m_DC[pn]; } } @@ -521,7 +528,10 @@ void ScreenNetSelectMusic::TweenOffScreen() OFF_COMMAND( m_rectDiff ); FOREACH_EnabledPlayer (pn) + { + OFF_COMMAND( m_DifficultyMeters[pn] ); OFF_COMMAND( m_DifficultyIcon[pn] ); + } } @@ -550,12 +560,21 @@ void ScreenNetSelectMusic::StartSelectedSong() Steps * pSteps = pSong->GetStepsByDifficulty(st,m_DC[pn]); GAMESTATE->m_pCurSteps[pn] = pSteps; } - GAMESTATE->m_pCurSong = pSong; TweenOffScreen(); StartTransitioning( SM_GoToNextScreen ); } +void ScreenNetSelectMusic::UpdateDifficulties( PlayerNumber pn ) +{ + m_DifficultyIcon[pn].SetFromDifficulty( pn, m_DC[pn] ); + StepsType st = GAMESTATE->GetCurrentStyle()->m_StepsType; + if ( m_DC[pn] != NUM_DIFFICULTIES ) + m_DifficultyMeters[pn].SetFromSteps( GAMESTATE->m_pCurSong->GetStepsByDifficulty( st, m_DC[pn] ) ); + else + m_DifficultyMeters[pn].SetFromMeterAndDifficulty( 0, m_DC[pn] ); +} + void ScreenNetSelectMusic::UpdateSongsListPos() { int i,j; @@ -575,11 +594,13 @@ void ScreenNetSelectMusic::UpdateSongsListPos() m_textArtist.SetText( m_vSongs[j]->GetTranslitArtist() ); m_textSubtitle.SetText( m_vSongs[j]->GetTranslitSubTitle() ); + GAMESTATE->m_pCurSong = m_vSongs[j]; //Update the difficulty Icons //Handle difficulty FOREACH_EnabledPlayer (pn) { + m_DC[pn] = GAMESTATE->m_PreferredDifficulty[pn]; StepsType st = GAMESTATE->GetCurrentStyle()->m_StepsType; vector MultiSteps; MultiSteps = m_vSongs[j]->GetAllSteps( st ); @@ -596,10 +617,9 @@ void ScreenNetSelectMusic::UpdateSongsListPos() else m_DC[pn] = MultiSteps[i]->GetDifficulty(); } - m_DifficultyIcon[pn].SetFromDifficulty( pn, m_DC[pn] ); + UpdateDifficulties( pn ); } - //Then handle sound (Copied from MusicBannerWheel) SOUND->StopMusic(); Song* pSong = m_vSongs[j]; diff --git a/stepmania/src/ScreenNetSelectMusic.h b/stepmania/src/ScreenNetSelectMusic.h index 336192c479..b51d427ad9 100644 --- a/stepmania/src/ScreenNetSelectMusic.h +++ b/stepmania/src/ScreenNetSelectMusic.h @@ -12,6 +12,7 @@ #include "ModeSwitcher.h" #include "DifficultyIcon.h" #include "Difficulty.h" +#include "DifficultyMeter.h" class ScreenNetSelectMusic : public ScreenWithMenuElements { @@ -91,8 +92,12 @@ private: DifficultyIcon m_DifficultyIcon[NUM_PLAYERS]; Difficulty m_DC[NUM_PLAYERS]; + void UpdateDifficulties( PlayerNumber pn ); + DifficultyMeter m_DifficultyMeters[NUM_PLAYERS]; + RageSound m_soundChangeOpt; RageSound m_soundChangeSel; + }; #endif