DifficultyList tweening fixes

This commit is contained in:
Glenn Maynard
2004-02-18 23:58:33 +00:00
parent 6a78f96258
commit aca9ba5ceb
3 changed files with 72 additions and 51 deletions
+47 -43
View File
@@ -13,7 +13,6 @@
#define ITEMS_SPACING_Y THEME->GetMetricF(m_sName,"ItemsSpacingY") #define ITEMS_SPACING_Y THEME->GetMetricF(m_sName,"ItemsSpacingY")
#define DESCRIPTION_MAX_WIDTH THEME->GetMetricF(m_sName,"DescriptionMaxWidth") #define DESCRIPTION_MAX_WIDTH THEME->GetMetricF(m_sName,"DescriptionMaxWidth")
#define NUM_SHOWN_ITEMS THEME->GetMetricI(m_sName,"NumShownItems") #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") #define MOVE_COMMAND THEME->GetMetric (m_sName,"MoveCommand")
DifficultyList::DifficultyList() DifficultyList::DifficultyList()
@@ -87,10 +86,10 @@ void DifficultyList::Load()
} }
UpdatePositions(); 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 ) 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 ) for( int i = 0; i < MAX_METERS; ++i )
{ {
@@ -209,27 +208,34 @@ void DifficultyList::PositionItems( bool TweenOn )
m_Number[i].SetHidden( bUnused ); 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]; 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 || if( m_Number[m].GetDestY() != row.m_fY ||
m_Number[m].DestTweenState().diffuse[0][3] != DiffuseAlpha ) m_Number[m].DestTweenState().diffuse[0][3] != DiffuseAlpha )
{ {
const CString cmd = TweenOn? TWEEN_ON_COMMAND:MOVE_COMMAND; m_Descriptions[m].Command( MOVE_COMMAND );
m_Descriptions[m].Command( cmd ); m_Meters[m].Command( MOVE_COMMAND );
m_Meters[m].Command( cmd ); m_Meters[m].RunCommandOnChildren( MOVE_COMMAND );
m_Meters[m].RunCommandOnChildren( cmd ); m_Number[m].Command( MOVE_COMMAND );
m_Number[m].Command( cmd );
} }
m_Descriptions[m].SetY( fY ); m_Descriptions[m].SetY( row.m_fY );
m_Meters[m].SetY( fY ); m_Meters[m].SetY( row.m_fY );
m_Number[m].SetY( 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 ); const CString cmd = ssprintf( "diffusealpha,%f", bHidden? 0.0f:1.0f );
m_Descriptions[m].Command( cmd ); m_Descriptions[m].Command( cmd );
@@ -261,10 +267,6 @@ DifficultyList::Row::Row()
void DifficultyList::SetFromGameState() void DifficultyList::SetFromGameState()
{ {
/* If Hide() was called, doing this would un-hide. */
if( !m_bShown )
return;
Song *song = GAMESTATE->m_pCurSong; Song *song = GAMESTATE->m_pCurSong;
const bool bSongChanged = (song != m_CurSong); const bool bSongChanged = (song != m_CurSong);
@@ -322,7 +324,7 @@ void DifficultyList::SetFromGameState()
} }
UpdatePositions(); UpdatePositions();
PositionItems( false ); PositionItems();
if( bSongChanged ) 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() void DifficultyList::TweenOnScreen()
{ {
this->SetHibernate( 0.5f );
m_bShown = true; m_bShown = true;
for( unsigned m = 0; m < m_Rows.size(); ++m ) for( unsigned m = 0; m < m_Rows.size(); ++m )
{ {
m_Descriptions[m].Command( "finishtweening;y,0" ); m_Descriptions[m].Command( "finishtweening" );
m_Meters[m].Command( "finishtweening;y,0" ); m_Meters[m].RunCommandOnChildren( "finishtweening" );
m_Number[m].Command( "finishtweening;y,0" ); m_Number[m].Command( "finishtweening" );
m_Descriptions[m].Command( "diffusealpha,0" );
m_Meters[m].RunCommandOnChildren( "diffusealpha,0" );
m_Number[m].Command( "diffusealpha,0" );
} }
PositionItems( true ); // PositionItems();
HideRows();
PositionItems();
for( int pn = 0; pn < NUM_PLAYERS; ++pn ) for( int pn = 0; pn < NUM_PLAYERS; ++pn )
{ {
@@ -368,12 +380,10 @@ void DifficultyList::Show()
{ {
m_bShown = true; m_bShown = true;
for( int m = 0; m < MAX_METERS; ++m ) SetFromGameState();
{
COMMAND( m_Descriptions[m], "Show" ); HideRows();
COMMAND( m_Meters[m], "Show" ); PositionItems();
COMMAND( m_Number[m], "Show" );
}
for( int pn = 0; pn < NUM_PLAYERS; ++pn ) for( int pn = 0; pn < NUM_PLAYERS; ++pn )
{ {
@@ -386,13 +396,7 @@ void DifficultyList::Show()
void DifficultyList::Hide() void DifficultyList::Hide()
{ {
m_bShown = false; m_bShown = false;
PositionItems();
for( int m = 0; m < MAX_METERS; ++m )
{
COMMAND( m_Descriptions[m], "Hide" );
COMMAND( m_Meters[m], "Hide" );
COMMAND( m_Number[m], "Hide" );
}
for( int pn = 0; pn < NUM_PLAYERS; ++pn ) for( int pn = 0; pn < NUM_PLAYERS; ++pn )
{ {
+3 -2
View File
@@ -27,8 +27,9 @@ public:
private: private:
void UpdatePositions(); void UpdatePositions();
void PositionItems( bool TweenOn ); void PositionItems();
void GetCurrentRows( int iCurrentRow[NUM_PLAYERS] ); void GetCurrentRows( int iCurrentRow[NUM_PLAYERS] ) const;
void HideRows();
DifficultyMeter *m_Meters; DifficultyMeter *m_Meters;
AutoActor m_Cursors[NUM_PLAYERS]; AutoActor m_Cursors[NUM_PLAYERS];
+22 -6
View File
@@ -372,8 +372,8 @@ void ScreenSelectMusic::TweenSongPartsOnScreen( bool Initial )
ON_COMMAND( m_DifficultyList ); ON_COMMAND( m_DifficultyList );
m_DifficultyList.TweenOnScreen(); m_DifficultyList.TweenOnScreen();
} }
else // else // do this after SM_SortOrderChanged
m_DifficultyList.Show(); // m_DifficultyList.Show();
} }
int p; int p;
@@ -993,13 +993,13 @@ void ScreenSelectMusic::HandleScreenMessage( const ScreenMessage SM )
case SM_SongChanged: case SM_SongChanged:
AfterMusicChange(); AfterMusicChange();
break; break;
case SM_SortOrderChanged: case SM_SortOrderChanging: /* happens immediately */
SortOrderChanged();
break;
case SM_SortOrderChanging:
// m_MusicSortDisplay.FadeOff( 0, "fade", TWEEN_TIME ); // m_MusicSortDisplay.FadeOff( 0, "fade", TWEEN_TIME );
TweenScoreOnAndOffAfterChangeSort(); TweenScoreOnAndOffAfterChangeSort();
break; 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 ); 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 // tween music sort on screen
// m_MusicSortDisplay.FadeOn( 0, "fade", TWEEN_TIME ); // m_MusicSortDisplay.FadeOn( 0, "fade", TWEEN_TIME );
} }