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 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 )
{
+3 -2
View File
@@ -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];
+22 -6
View File
@@ -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 );
}