From 46257583b6ad56e53b5976d09b6c8c9fdc3356d7 Mon Sep 17 00:00:00 2001 From: Chris Danford Date: Sun, 27 Apr 2008 04:36:59 +0000 Subject: [PATCH] bullet -> RowFrame, separate normal row and exit row graphics, break cursor and underline into per-player graphics (don't hard-code players numbers) --- stepmania/src/OptionRow.cpp | 69 +++++++++++++++++++-------------- stepmania/src/OptionRow.h | 27 ++++++------- stepmania/src/OptionsCursor.cpp | 27 +++++-------- stepmania/src/OptionsCursor.h | 5 +-- stepmania/src/ScreenOptions.cpp | 3 +- 5 files changed, 66 insertions(+), 65 deletions(-) diff --git a/stepmania/src/OptionRow.cpp b/stepmania/src/OptionRow.cpp index 0504969e98..6d4fc5f94c 100644 --- a/stepmania/src/OptionRow.cpp +++ b/stepmania/src/OptionRow.cpp @@ -84,8 +84,8 @@ void OptionRowType::Load( const RString &sType, Actor *pParent ) { m_sType = sType; - BULLET_X .Load(sType,"BulletX"); - BULLET_ON_COMMAND .Load(sType,"BulletOnCommand"); + ROWFRAME_X .Load(sType,"RowFrameX"); + ROWFRAME_ON_COMMAND .Load(sType,"RowFrameOnCommand"); TITLE_X .Load(sType,"TitleX"); TITLE_ON_COMMAND .Load(sType,"TitleOnCommand"); TITLE_GAIN_FOCUS_COMMAND .Load(sType,"TitleGainFocusCommand"); @@ -111,11 +111,15 @@ void OptionRowType::Load( const RString &sType, Actor *pParent ) SHOW_OPTION_ICONS .Load(sType,"ShowOptionIcons"); SHOW_UNDERLINES .Load(sType,"ShowUnderlines"); - m_textItemParent.LoadFromFont( THEME->GetPathF(sType,"item") ); + m_textItem.LoadFromFont( THEME->GetPathF(sType,"item") ); if( SHOW_UNDERLINES ) - m_UnderlineParent.Load( sType, OptionsCursor::underline ); + { + FOREACH_PlayerNumber( p ) + m_Underline[p].Load( sType, OptionsCursor::underline, p ); + } m_textTitle.LoadFromFont( THEME->GetPathF(sType,"title") ); - m_sprBullet.Load( ActorUtil::MakeActor( THEME->GetPathG(sType,"bullet"), pParent ) ); + m_sprRowFrameNormal.Load( ActorUtil::MakeActor( THEME->GetPathG(sType,"RowFrameNormal"), pParent ) ); + m_sprRowFrameExit.Load( ActorUtil::MakeActor( THEME->GetPathG(sType,"RowFrameExit"), pParent ) ); if( SHOW_OPTION_ICONS ) m_OptionIcon.Load( sType ); } @@ -129,7 +133,7 @@ void OptionRow::LoadNormal( OptionRowHandler *pHand, bool bFirstItemGoesDown ) FOREACH_CONST( RString, m_pHand->m_vsReloadRowMessages, m ) MESSAGEMAN->Subscribe( this, *m ); - ChoicesChanged(); + ChoicesChanged( RowType_Normal ); } void OptionRow::LoadExit() @@ -143,10 +147,10 @@ void OptionRow::LoadExit() pHand->m_Def.m_bOneChoiceForAllPlayers = true; m_pHand = pHand; - ChoicesChanged(); + ChoicesChanged( RowType_Exit ); } -void OptionRow::ChoicesChanged() +void OptionRow::ChoicesChanged( RowType type ) { ASSERT( !m_pHand->m_Def.m_vsChoices.empty() ); @@ -177,7 +181,7 @@ void OptionRow::ChoicesChanged() m_vbSelected[p].insert( m_vbSelected[p].begin(), false ); } - InitText(); + InitText( type ); /* When choices change, the old focus position is meaningless; reset it. */ FOREACH_PlayerNumber( p ) @@ -235,7 +239,7 @@ RString OptionRow::GetRowTitle() const /* Set up text, underlines and titles for options. This can be called * as soon as m_pHand->m_Def is available. */ -void OptionRow::InitText() +void OptionRow::InitText( RowType type ) { /* If we have elements already, we're being updated from a new set of options. * Delete the old ones. */ @@ -247,9 +251,18 @@ void OptionRow::InitText() m_textTitle = new BitmapText( m_pParentType->m_textTitle ); m_Frame.AddChild( m_textTitle ); - m_sprBullet = m_pParentType->m_sprBullet->Copy(); - m_sprBullet->SetDrawOrder(-1); // under title - m_Frame.AddChild( m_sprBullet ); + switch( type ) + { + DEFAULT_FAIL( type ); + case RowType_Normal: + m_sprRowFrame = m_pParentType->m_sprRowFrameNormal->Copy(); + break; + case RowType_Exit: + m_sprRowFrame = m_pParentType->m_sprRowFrameExit->Copy(); + break; + } + m_sprRowFrame->SetDrawOrder(-1); // under title + m_Frame.AddChild( m_sprRowFrame ); if( m_pParentType->SHOW_OPTION_ICONS ) { @@ -276,7 +289,7 @@ void OptionRow::InitText() // If the items will go off the edge of the screen, then force LAYOUT_SHOW_ONE_IN_ROW. float fBaseZoom = 1.0f; { - BitmapText bt( m_pParentType->m_textItemParent ); + BitmapText bt( m_pParentType->m_textItem ); bt.RunCommands( m_pParentType->ITEMS_ON_COMMAND ); /* Figure out the width of the row. */ @@ -313,7 +326,7 @@ void OptionRow::InitText() // init text FOREACH_PlayerNumber( p ) { - BitmapText *pText = new BitmapText( m_pParentType->m_textItemParent ); + BitmapText *pText = new BitmapText( m_pParentType->m_textItem ); m_textItems.push_back( pText ); pText->RunCommands( m_pParentType->ITEMS_ON_COMMAND ); @@ -335,10 +348,9 @@ void OptionRow::InitText() // init underlines if( m_pParentType->SHOW_UNDERLINES && GetRowType() != OptionRow::RowType_Exit ) { - OptionsCursor *pCursor = new OptionsCursor( m_pParentType->m_UnderlineParent ); + OptionsCursor *pCursor = new OptionsCursor( m_pParentType->m_Underline[p] ); m_Underline[p].push_back( pCursor ); - pCursor->Set( p ); int iWidth, iX, iY; GetWidthXY( p, 0, iWidth, iX, iY ); pCursor->SetX( float(iX) ); @@ -353,7 +365,7 @@ void OptionRow::InitText() for( unsigned c=0; cm_Def.m_vsChoices.size(); c++ ) { // init text - BitmapText *bt = new BitmapText( m_pParentType->m_textItemParent ); + BitmapText *bt = new BitmapText( m_pParentType->m_textItem ); m_textItems.push_back( bt ); RString sText = GetThemedItemText( c ); bt->SetText( sText ); @@ -371,9 +383,8 @@ void OptionRow::InitText() { FOREACH_PlayerNumber( p ) { - OptionsCursor *ul = new OptionsCursor( m_pParentType->m_UnderlineParent ); + OptionsCursor *ul = new OptionsCursor( m_pParentType->m_Underline[p] ); m_Underline[p].push_back( ul ); - ul->Set( p ); ul->SetX( fX ); ul->SetBarWidth( int(fItemWidth) ); } @@ -403,11 +414,11 @@ void OptionRow::InitText() switch( GetRowType() ) { case OptionRow::RowType_Normal: - m_sprBullet->SetX( m_pParentType->BULLET_X ); - m_sprBullet->RunCommands( m_pParentType->BULLET_ON_COMMAND ); + m_sprRowFrame->SetX( m_pParentType->ROWFRAME_X ); + m_sprRowFrame->RunCommands( m_pParentType->ROWFRAME_ON_COMMAND ); break; case OptionRow::RowType_Exit: - m_sprBullet->SetVisible( false ); + m_sprRowFrame->SetVisible( false ); break; } @@ -579,9 +590,9 @@ void OptionRow::UpdateEnabledDisabled() else if( bRowEnabled ) color = m_pParentType->COLOR_NOT_SELECTED; else color = m_pParentType->COLOR_DISABLED; - if( m_sprBullet != NULL ) - m_sprBullet->SetGlobalDiffuseColor( color ); - m_sprBullet->PlayCommand( bThisRowHasFocusByAny ? "GainFocus" : "LoseFocus" ); + if( m_sprRowFrame != NULL ) + m_sprRowFrame->SetGlobalDiffuseColor( color ); + m_sprRowFrame->PlayCommand( bThisRowHasFocusByAny ? "GainFocus" : "LoseFocus" ); m_textTitle->SetGlobalDiffuseColor( color ); @@ -662,10 +673,10 @@ void OptionRow::Update( float fDeltaTime ) void OptionRow::SetOptionIcon( PlayerNumber pn, const RString &sText, GameCommand &gc ) { - // update bullet + // update row frame Message msg( "Refresh" ); msg.SetParam( "GameCommand", &gc ); - m_sprBullet->HandleMessage( msg ); + m_sprRowFrame->HandleMessage( msg ); if( m_OptionIcons[pn] != NULL ) m_OptionIcons[pn]->Set( sText ); } @@ -839,7 +850,7 @@ void OptionRow::Reload() case OptionRowHandler::RELOAD_CHANGED_ALL: { - ChoicesChanged(); + ChoicesChanged( m_RowType ); vector vpns; FOREACH_HumanPlayer( p ) diff --git a/stepmania/src/OptionRow.h b/stepmania/src/OptionRow.h index c97596fe6e..b17f7efa03 100644 --- a/stepmania/src/OptionRow.h +++ b/stepmania/src/OptionRow.h @@ -22,15 +22,16 @@ public: private: RString m_sType; - BitmapText m_textItemParent; - OptionsCursor m_UnderlineParent; - AutoActor m_sprBullet; + BitmapText m_textItem; + OptionsCursor m_Underline[NUM_PLAYERS]; + AutoActor m_sprRowFrameNormal; + AutoActor m_sprRowFrameExit; BitmapText m_textTitle; OptionIcon m_OptionIcon; // metrics - ThemeMetric BULLET_X; - ThemeMetric BULLET_ON_COMMAND; + ThemeMetric ROWFRAME_X; + ThemeMetric ROWFRAME_ON_COMMAND; ThemeMetric TITLE_X; ThemeMetric TITLE_ON_COMMAND; ThemeMetric TITLE_GAIN_FOCUS_COMMAND; @@ -75,10 +76,15 @@ public: void ImportOptions( const vector &vpns ); int ExportOptions( const vector &vpns, bool bRowHasFocus[NUM_PLAYERS] ); - void InitText(); + enum RowType + { + RowType_Normal, + RowType_Exit + }; + void InitText( RowType type ); void AfterImportOptions( PlayerNumber pn ); - void ChoicesChanged(); + void ChoicesChanged( RowType type ); void PositionUnderlines( PlayerNumber pn ); void PositionIcons( PlayerNumber pn ); void UpdateText( PlayerNumber pn ); @@ -99,11 +105,6 @@ public: bool GetSelected( PlayerNumber pn, int iChoice ) const; void SetSelected( PlayerNumber pn, int iChoice, bool b ); - enum RowType - { - RowType_Normal, - RowType_Exit - }; const OptionRowDefinition &GetRowDef() const; OptionRowDefinition &GetRowDef(); RowType GetRowType() const { return m_RowType; } @@ -139,7 +140,7 @@ protected: vector m_textItems; // size depends on m_bRowIsLong and which players are joined vector m_Underline[NUM_PLAYERS]; // size depends on m_bRowIsLong and which players are joined - Actor *m_sprBullet; + Actor *m_sprRowFrame; BitmapText *m_textTitle; OptionIcon *m_OptionIcons[NUM_PLAYERS]; diff --git a/stepmania/src/OptionsCursor.cpp b/stepmania/src/OptionsCursor.cpp index 3c0b653e55..c91ba7d11b 100644 --- a/stepmania/src/OptionsCursor.cpp +++ b/stepmania/src/OptionsCursor.cpp @@ -37,9 +37,10 @@ OptionsCursorPlus::OptionsCursorPlus( const OptionsCursorPlus &cpy ): this->AddChild( m_sprCanGoRight ); } -void OptionsCursor::Load( const RString &sType, Element elem ) +void OptionsCursor::Load( const RString &sType, Element elem, PlayerNumber pn ) { - RString sPath = THEME->GetPathG( sType, ssprintf("%s 3x2",elem==cursor?"cursor":"underline") ); + RString sElem = ssprintf( "%s %s 3x1", elem==cursor?"cursor":"underline", PlayerNumberToString(pn).c_str() ); + RString sPath = THEME->GetPathG( sType, sElem ); m_sprMiddle.Load( sPath ); m_sprLeft.Load( sPath ); @@ -48,11 +49,15 @@ void OptionsCursor::Load( const RString &sType, Element elem ) m_sprMiddle.StopAnimating(); m_sprLeft.StopAnimating(); m_sprRight.StopAnimating(); + + m_sprLeft.SetState( 0 ); + m_sprMiddle.SetState( 1 ); + m_sprRight.SetState( 2 ); } -void OptionsCursorPlus::Load( const RString &sType, Element elem ) +void OptionsCursorPlus::Load( const RString &sType, Element elem, PlayerNumber pn ) { - OptionsCursor::Load( sType, elem ); + OptionsCursor::Load( sType, elem, pn ); m_sprCanGoLeft.Load( THEME->GetPathG(sType,"CanGoLeft") ); m_sprCanGoRight.Load( THEME->GetPathG(sType,"CanGoRight") ); @@ -63,20 +68,6 @@ void OptionsCursorPlus::Load( const RString &sType, Element elem ) SetCanGo( false, false ); } -void OptionsCursor::Set( PlayerNumber pn ) -{ - int iBaseFrameNo; - switch( pn ) - { - case PLAYER_1: iBaseFrameNo = 0; break; - case PLAYER_2: iBaseFrameNo = 3; break; - default: ASSERT(0); return; - } - m_sprLeft.SetState( iBaseFrameNo+0 ); - m_sprMiddle.SetState( iBaseFrameNo+1 ); - m_sprRight.SetState( iBaseFrameNo+2 ); -} - void OptionsCursorPlus::SetCanGo( bool bCanGoLeft, bool bCanGoRight ) { m_sprCanGoLeft->EnableAnimation( bCanGoLeft ); diff --git a/stepmania/src/OptionsCursor.h b/stepmania/src/OptionsCursor.h index 1bc144108e..e98032a18f 100644 --- a/stepmania/src/OptionsCursor.h +++ b/stepmania/src/OptionsCursor.h @@ -16,8 +16,7 @@ public: OptionsCursor( const OptionsCursor &cpy ); enum Element { cursor, underline }; - void Load( const RString &sType, Element elem ); - void Set( PlayerNumber pn ); + void Load( const RString &sType, Element elem, PlayerNumber pn ); void StopTweening(); void BeginTweening( float fSecs ); @@ -37,7 +36,7 @@ public: OptionsCursorPlus(); OptionsCursorPlus( const OptionsCursorPlus &cpy ); - void Load( const RString &sType, Element elem ); + void Load( const RString &sType, Element elem, PlayerNumber pn ); void StopTweening(); void BeginTweening( float fSecs ); diff --git a/stepmania/src/ScreenOptions.cpp b/stepmania/src/ScreenOptions.cpp index 72f42f8b0a..a0d6ff5586 100644 --- a/stepmania/src/ScreenOptions.cpp +++ b/stepmania/src/ScreenOptions.cpp @@ -133,8 +133,7 @@ void ScreenOptions::Init() // init cursors FOREACH_PlayerNumber( p ) { - m_Cursor[p].Load( m_sName, OptionsCursorPlus::cursor ); - m_Cursor[p].Set( p ); + m_Cursor[p].Load( m_sName, OptionsCursorPlus::cursor, p ); m_Cursor[p].SetName( "Cursor" ); LOAD_ALL_COMMANDS( m_Cursor[p] ); m_framePage.AddChild( &m_Cursor[p] );