diff --git a/stepmania/src/DifficultyList.cpp b/stepmania/src/DifficultyList.cpp index d716439d90..238248aa67 100644 --- a/stepmania/src/DifficultyList.cpp +++ b/stepmania/src/DifficultyList.cpp @@ -13,7 +13,6 @@ #define ITEMS_SPACING_Y THEME->GetMetricF(m_sName,"ItemsSpacingY") #define DESCRIPTION_MAX_WIDTH THEME->GetMetricF(m_sName,"DescriptionMaxWidth") #define NUM_SHOWN_ITEMS THEME->GetMetricI(m_sName,"NumShownItems") -#define TWEEN_ON_COMMAND THEME->GetMetric (m_sName,"TweenOnCommand") #define MOVE_COMMAND THEME->GetMetric (m_sName,"MoveCommand") DifficultyList::DifficultyList() @@ -87,10 +86,10 @@ void DifficultyList::Load() } UpdatePositions(); - PositionItems( false ); + PositionItems(); } -void DifficultyList::GetCurrentRows( int iCurrentRow[NUM_PLAYERS] ) +void DifficultyList::GetCurrentRows( int iCurrentRow[NUM_PLAYERS] ) const { for( int pn = 0;pn < NUM_PLAYERS; ++pn ) { @@ -199,7 +198,7 @@ void DifficultyList::UpdatePositions() } -void DifficultyList::PositionItems( bool TweenOn ) +void DifficultyList::PositionItems() { for( int i = 0; i < MAX_METERS; ++i ) { @@ -209,27 +208,34 @@ void DifficultyList::PositionItems( bool TweenOn ) m_Number[i].SetHidden( bUnused ); } - for( int m = 0; m < (int)m_Rows.size(); ++m ) + int m; + for( m = 0; m < (int)m_Rows.size(); ++m ) { - const bool bHidden = m_Rows[m]->m_bHidden; - const float fY = m_Rows[m]->m_fY; - Row &row = *m_Rows[m]; + bool bHidden = row.m_bHidden; + if( !m_bShown ) + bHidden = true; - const float DiffuseAlpha = row.m_bHidden? 0.0f:1.0f; + const float DiffuseAlpha = bHidden? 0.0f:1.0f; if( m_Number[m].GetDestY() != row.m_fY || m_Number[m].DestTweenState().diffuse[0][3] != DiffuseAlpha ) { - const CString cmd = TweenOn? TWEEN_ON_COMMAND:MOVE_COMMAND; - m_Descriptions[m].Command( cmd ); - m_Meters[m].Command( cmd ); - m_Meters[m].RunCommandOnChildren( cmd ); - m_Number[m].Command( cmd ); + m_Descriptions[m].Command( MOVE_COMMAND ); + m_Meters[m].Command( MOVE_COMMAND ); + m_Meters[m].RunCommandOnChildren( MOVE_COMMAND ); + m_Number[m].Command( MOVE_COMMAND ); } - m_Descriptions[m].SetY( fY ); - m_Meters[m].SetY( fY ); - m_Number[m].SetY( fY ); + m_Descriptions[m].SetY( row.m_fY ); + m_Meters[m].SetY( row.m_fY ); + m_Number[m].SetY( row.m_fY ); + } + + for( m=0; m < MAX_METERS; ++m ) + { + bool bHidden = true; + if( m_bShown && m < (int)m_Rows.size() ) + bHidden = m_Rows[m]->m_bHidden; const CString cmd = ssprintf( "diffusealpha,%f", bHidden? 0.0f:1.0f ); m_Descriptions[m].Command( cmd ); @@ -261,10 +267,6 @@ DifficultyList::Row::Row() void DifficultyList::SetFromGameState() { - /* If Hide() was called, doing this would un-hide. */ - if( !m_bShown ) - return; - Song *song = GAMESTATE->m_pCurSong; const bool bSongChanged = (song != m_CurSong); @@ -322,7 +324,7 @@ void DifficultyList::SetFromGameState() } UpdatePositions(); - PositionItems( false ); + PositionItems(); if( bSongChanged ) { @@ -335,21 +337,31 @@ void DifficultyList::SetFromGameState() } } +void DifficultyList::HideRows() +{ + for( unsigned m = 0; m < m_Rows.size(); ++m ) + { + m_Descriptions[m].Command( "finishtweening;diffusealpha,0" ); + m_Meters[m].RunCommandOnChildren( "finishtweening;diffusealpha,0" ); + m_Number[m].Command( "finishtweening;diffusealpha,0" ); + } +} + void DifficultyList::TweenOnScreen() { + this->SetHibernate( 0.5f ); m_bShown = true; for( unsigned m = 0; m < m_Rows.size(); ++m ) { - m_Descriptions[m].Command( "finishtweening;y,0" ); - m_Meters[m].Command( "finishtweening;y,0" ); - m_Number[m].Command( "finishtweening;y,0" ); - - m_Descriptions[m].Command( "diffusealpha,0" ); - m_Meters[m].RunCommandOnChildren( "diffusealpha,0" ); - m_Number[m].Command( "diffusealpha,0" ); + m_Descriptions[m].Command( "finishtweening" ); + m_Meters[m].RunCommandOnChildren( "finishtweening" ); + m_Number[m].Command( "finishtweening" ); } - PositionItems( true ); +// PositionItems(); + HideRows(); + + PositionItems(); for( int pn = 0; pn < NUM_PLAYERS; ++pn ) { @@ -368,12 +380,10 @@ void DifficultyList::Show() { m_bShown = true; - for( int m = 0; m < MAX_METERS; ++m ) - { - COMMAND( m_Descriptions[m], "Show" ); - COMMAND( m_Meters[m], "Show" ); - COMMAND( m_Number[m], "Show" ); - } + SetFromGameState(); + + HideRows(); + PositionItems(); for( int pn = 0; pn < NUM_PLAYERS; ++pn ) { @@ -386,13 +396,7 @@ void DifficultyList::Show() void DifficultyList::Hide() { m_bShown = false; - - for( int m = 0; m < MAX_METERS; ++m ) - { - COMMAND( m_Descriptions[m], "Hide" ); - COMMAND( m_Meters[m], "Hide" ); - COMMAND( m_Number[m], "Hide" ); - } + PositionItems(); for( int pn = 0; pn < NUM_PLAYERS; ++pn ) { diff --git a/stepmania/src/DifficultyList.h b/stepmania/src/DifficultyList.h index dcd5b45823..e1d2c93fd7 100644 --- a/stepmania/src/DifficultyList.h +++ b/stepmania/src/DifficultyList.h @@ -27,8 +27,9 @@ public: private: void UpdatePositions(); - void PositionItems( bool TweenOn ); - void GetCurrentRows( int iCurrentRow[NUM_PLAYERS] ); + void PositionItems(); + void GetCurrentRows( int iCurrentRow[NUM_PLAYERS] ) const; + void HideRows(); DifficultyMeter *m_Meters; AutoActor m_Cursors[NUM_PLAYERS]; diff --git a/stepmania/src/ScreenSelectMusic.cpp b/stepmania/src/ScreenSelectMusic.cpp index 91748b5332..38ff0601de 100644 --- a/stepmania/src/ScreenSelectMusic.cpp +++ b/stepmania/src/ScreenSelectMusic.cpp @@ -372,8 +372,8 @@ void ScreenSelectMusic::TweenSongPartsOnScreen( bool Initial ) ON_COMMAND( m_DifficultyList ); m_DifficultyList.TweenOnScreen(); } - else - m_DifficultyList.Show(); +// else // do this after SM_SortOrderChanged +// m_DifficultyList.Show(); } int p; @@ -993,13 +993,13 @@ void ScreenSelectMusic::HandleScreenMessage( const ScreenMessage SM ) case SM_SongChanged: AfterMusicChange(); break; - case SM_SortOrderChanged: - SortOrderChanged(); - break; - case SM_SortOrderChanging: + case SM_SortOrderChanging: /* happens immediately */ // m_MusicSortDisplay.FadeOff( 0, "fade", TWEEN_TIME ); TweenScoreOnAndOffAfterChangeSort(); break; + case SM_SortOrderChanged: /* happens after the wheel is off and the new song is selected */ + SortOrderChanged(); + break; } } @@ -1483,6 +1483,22 @@ void ScreenSelectMusic::SortOrderChanged() { m_MusicSortDisplay.Set( GAMESTATE->m_SongSortOrder ); + switch( GAMESTATE->m_SongSortOrder ) + { + case SORT_ALL_COURSES: + case SORT_NONSTOP_COURSES: + case SORT_ONI_COURSES: + case SORT_ENDLESS_COURSES: + case SORT_SORT_MENU: + case SORT_MODE_MENU: + // do nothing + break; + default: + if( SHOW_DIFFICULTY_LIST ) + m_DifficultyList.Show(); + break; + } + // tween music sort on screen // m_MusicSortDisplay.FadeOn( 0, "fade", TWEEN_TIME ); }