Merge pull request #256 from kyzentun/NoteskinClearFix

Fix crash when "clearall" is used.
This commit is contained in:
AJ Kelly
2014-08-07 21:25:16 -05:00
3 changed files with 40 additions and 5 deletions
+33 -4
View File
@@ -200,14 +200,23 @@ void NoteSkinManager::GetNoteSkinNames( const Game* pGame, vector<RString> &AddT
GetAllNoteSkinNamesForGame( pGame, AddTo ); GetAllNoteSkinNamesForGame( pGame, AddTo );
} }
bool NoteSkinManager::NoteSkinNameInList(const RString name, vector<RString> name_list)
{
for(size_t i= 0; i < name_list.size(); ++i)
{
if(0 == stricmp(name, name_list[i]))
{
return true;
}
}
return false;
}
bool NoteSkinManager::DoesNoteSkinExist( const RString &sSkinName ) bool NoteSkinManager::DoesNoteSkinExist( const RString &sSkinName )
{ {
vector<RString> asSkinNames; vector<RString> asSkinNames;
GetAllNoteSkinNamesForGame( GAMESTATE->m_pCurGame, asSkinNames ); GetAllNoteSkinNamesForGame( GAMESTATE->m_pCurGame, asSkinNames );
for( unsigned i=0; i<asSkinNames.size(); i++ ) return NoteSkinNameInList(sSkinName, asSkinNames);
if( 0==stricmp(sSkinName, asSkinNames[i]) )
return true;
return false;
} }
bool NoteSkinManager::DoNoteSkinsExistForGame( const Game *pGame ) bool NoteSkinManager::DoNoteSkinsExistForGame( const Game *pGame )
@@ -217,6 +226,26 @@ bool NoteSkinManager::DoNoteSkinsExistForGame( const Game *pGame )
return !asSkinNames.empty(); return !asSkinNames.empty();
} }
RString NoteSkinManager::GetDefaultNoteSkinName()
{
RString name= THEME->GetMetric("Common", "DefaultNoteSkinName");
vector<RString> all_names;
GetAllNoteSkinNamesForGame(GAMESTATE->m_pCurGame, all_names);
if(all_names.empty())
{
return "";
}
if(!NoteSkinNameInList(name, all_names))
{
name= "default";
if(!NoteSkinNameInList(name, all_names))
{
name= all_names[1];
}
}
return name;
}
void NoteSkinManager::GetAllNoteSkinNamesForGame( const Game *pGame, vector<RString> &AddTo ) void NoteSkinManager::GetAllNoteSkinNamesForGame( const Game *pGame, vector<RString> &AddTo )
{ {
if( pGame == m_pCurGame ) if( pGame == m_pCurGame )
+2
View File
@@ -20,8 +20,10 @@ public:
void RefreshNoteSkinData( const Game* game ); void RefreshNoteSkinData( const Game* game );
void GetNoteSkinNames( const Game* game, vector<RString> &AddTo ); void GetNoteSkinNames( const Game* game, vector<RString> &AddTo );
void GetNoteSkinNames( vector<RString> &AddTo ); // looks up current const Game* in GAMESTATE void GetNoteSkinNames( vector<RString> &AddTo ); // looks up current const Game* in GAMESTATE
bool NoteSkinNameInList(const RString name, vector<RString> name_list);
bool DoesNoteSkinExist( const RString &sNoteSkin ); // looks up current const Game* in GAMESTATE bool DoesNoteSkinExist( const RString &sNoteSkin ); // looks up current const Game* in GAMESTATE
bool DoNoteSkinsExistForGame( const Game *pGame ); bool DoNoteSkinsExistForGame( const Game *pGame );
RString GetDefaultNoteSkinName(); // looks up current const Game* in GAMESTATE
void SetCurrentNoteSkin( const RString &sNoteSkin ) { m_sCurrentNoteSkin = sNoteSkin; } void SetCurrentNoteSkin( const RString &sNoteSkin ) { m_sCurrentNoteSkin = sNoteSkin; }
const RString &GetCurrentNoteSkin() { return m_sCurrentNoteSkin; } const RString &GetCurrentNoteSkin() { return m_sCurrentNoteSkin; }
+5 -1
View File
@@ -376,7 +376,11 @@ bool PlayerOptions::FromOneModString( const RString &sOneMod, RString &sErrorOut
m_fTimeSpacing = 0; m_fTimeSpacing = 0;
} }
else if( sBit == "clearall" ) Init(); else if( sBit == "clearall" )
{
Init();
m_sNoteSkin= NOTESKIN->GetDefaultNoteSkinName();
}
else if( sBit == "resetspeed" ) else if( sBit == "resetspeed" )
{ {
/* level is set to the values from Init() because all speed related /* level is set to the values from Init() because all speed related