diff --git a/stepmania/src/AttackDisplay.cpp b/stepmania/src/AttackDisplay.cpp index c5f1ffd783..f8ac33d770 100644 --- a/stepmania/src/AttackDisplay.cpp +++ b/stepmania/src/AttackDisplay.cpp @@ -14,7 +14,21 @@ #include "ThemeManager.h" #include "GameState.h" #include "ActorUtil.h" +#include "Character.h" +#include "RageLog.h" +#include "RageTextureManager.h" +#include +CString GetAttackPath( const CString &sAttack ) +{ + CString ret = ssprintf( "AttackDisplay attack %s", sAttack.c_str() ); + + /* 1.5x -> 1_5x. If we pass a period to THEME->GetPathTo, it'll think + * we're looking for a specific file and not search. */ + ret.Replace( ".", "_" ); + + return ret; +} AttackDisplay::AttackDisplay() { @@ -22,15 +36,41 @@ AttackDisplay::AttackDisplay() GAMESTATE->m_PlayMode != PLAY_MODE_RAVE ) return; - m_textAttack.SetName( ssprintf("TextP%d",m_PlayerNumber+1) ); - m_textAttack.LoadFromFont( THEME->GetPathToF("AttackDisplay") ); - m_textAttack.SetDiffuseAlpha( 0 ); // invisible - this->AddChild( &m_textAttack ); + m_sprAttack.SetName( ssprintf("TextP%d",m_PlayerNumber+1) ); + m_sprAttack.SetDiffuseAlpha( 0 ); // invisible + this->AddChild( &m_sprAttack ); } void AttackDisplay::Init( PlayerNumber pn ) { m_PlayerNumber = pn; + + if( GAMESTATE->m_PlayMode != PLAY_MODE_BATTLE && + GAMESTATE->m_PlayMode != PLAY_MODE_RAVE ) + return; + + set attacks; + for( int al=0; alm_pCurCharacters[pn]; + ASSERT( ch ); + const CString* asAttacks = ch->m_sAttacks[al]; + for( int att = 0; att < NUM_ATTACKS_PER_LEVEL; ++att ) + attacks.insert( asAttacks[att] ); + } + + for( set::const_iterator it = attacks.begin(); it != attacks.end(); ++it ) + { + const CString ThemePath = GetAttackPath( *it ); + const CString path = THEME->GetPathToG( ThemePath, true ); + if( path == "" ) + { + LOG->Trace( "Couldn't find \"%s\"", ThemePath.c_str() ); + continue; + } + + TEXTUREMAN->CacheTexture( path ); + } } @@ -65,7 +105,12 @@ void AttackDisplay::Update( float fDelta ) void AttackDisplay::SetAttack( const CString &sText ) { - m_textAttack.SetDiffuseAlpha( 1 ); - m_textAttack.SetText( sText ); - UtilOnCommand( m_textAttack, "AttackDisplay" ); + const CString path = THEME->GetPathToG( GetAttackPath( sText ), true ); + if( path == "" ) + return; + + m_sprAttack.SetDiffuseAlpha( 1 ); + m_sprAttack.Load( path ); + const CString sName = ssprintf( "%sP%i", sText.c_str(), m_PlayerNumber+1 ); + m_sprAttack.Command( THEME->GetMetric("AttackDisplay", sName + "OnCommand" ) ); } diff --git a/stepmania/src/AttackDisplay.h b/stepmania/src/AttackDisplay.h index 6510714448..f8c881239c 100644 --- a/stepmania/src/AttackDisplay.h +++ b/stepmania/src/AttackDisplay.h @@ -13,7 +13,6 @@ #include "ActorFrame.h" #include "Sprite.h" -#include "BitmapText.h" #include "PlayerNumber.h" #include "GameConstantsAndTypes.h" // for TapNoteScore @@ -31,7 +30,7 @@ public: protected: PlayerNumber m_PlayerNumber; - BitmapText m_textAttack; + Sprite m_sprAttack; }; #endif