If the fallback for a noteskin doesn't exist, remove it from the list of noteskins to prevent crashing when someone tries to use it.
This commit is contained in:
+14
-6
@@ -88,21 +88,28 @@ void NoteSkinManager::RefreshNoteSkinData( const Game* pGame )
|
||||
{
|
||||
RString sName = asNoteSkinNames[j];
|
||||
sName.MakeLower();
|
||||
LoadNoteSkinData( sName, g_mapNameToData[sName] );
|
||||
// Don't feel like changing the structure of this code to load the skin
|
||||
// into a temp variable and move it, so if the load fails, then just
|
||||
// delete it from the map. -Kyz
|
||||
if(!LoadNoteSkinData(sName, g_mapNameToData[sName]))
|
||||
{
|
||||
map<RString, NoteSkinData>::iterator entry= g_mapNameToData.find(sName);
|
||||
g_mapNameToData.erase(entry);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void NoteSkinManager::LoadNoteSkinData( const RString &sNoteSkinName, NoteSkinData& data_out )
|
||||
bool NoteSkinManager::LoadNoteSkinData( const RString &sNoteSkinName, NoteSkinData& data_out )
|
||||
{
|
||||
data_out.sName = sNoteSkinName;
|
||||
data_out.metrics.Clear();
|
||||
data_out.vsDirSearchOrder.clear();
|
||||
|
||||
// Read the current NoteSkin and all of its fallbacks
|
||||
LoadNoteSkinDataRecursive( sNoteSkinName, data_out );
|
||||
return LoadNoteSkinDataRecursive( sNoteSkinName, data_out );
|
||||
}
|
||||
|
||||
void NoteSkinManager::LoadNoteSkinDataRecursive( const RString &sNoteSkinName_, NoteSkinData& data_out )
|
||||
bool NoteSkinManager::LoadNoteSkinDataRecursive( const RString &sNoteSkinName_, NoteSkinData& data_out )
|
||||
{
|
||||
RString sNoteSkinName(sNoteSkinName_);
|
||||
|
||||
@@ -115,7 +122,7 @@ void NoteSkinManager::LoadNoteSkinDataRecursive( const RString &sNoteSkinName_,
|
||||
if(iDepth >= 20)
|
||||
{
|
||||
LuaHelpers::ReportScriptError("Circular NoteSkin fallback references detected.", "NOTESKIN_ERROR");
|
||||
return;
|
||||
return false;
|
||||
}
|
||||
|
||||
RString sDir = SpecialFiles::NOTESKINS_DIR + m_pCurGame->m_szName + "/" + sNoteSkinName + "/";
|
||||
@@ -127,7 +134,7 @@ void NoteSkinManager::LoadNoteSkinDataRecursive( const RString &sNoteSkinName_,
|
||||
LuaHelpers::ReportScriptError("NoteSkin \"" + data_out.sName +
|
||||
"\" references skin \"" + sNoteSkinName + "\" that is not present",
|
||||
"NOTESKIN_ERROR");
|
||||
return;
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -187,6 +194,7 @@ void NoteSkinManager::LoadNoteSkinDataRecursive( const RString &sNoteSkinName_,
|
||||
LUA->Release( L );
|
||||
}
|
||||
data_out.m_Loader = refScript;
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
|
||||
@@ -48,8 +48,8 @@ protected:
|
||||
RString GetPathFromDirAndFile( const RString &sDir, const RString &sFileName );
|
||||
void GetAllNoteSkinNamesForGame( const Game *pGame, vector<RString> &AddTo );
|
||||
|
||||
void LoadNoteSkinData( const RString &sNoteSkinName, NoteSkinData& data_out );
|
||||
void LoadNoteSkinDataRecursive( const RString &sNoteSkinName, NoteSkinData& data_out );
|
||||
bool LoadNoteSkinData( const RString &sNoteSkinName, NoteSkinData& data_out );
|
||||
bool LoadNoteSkinDataRecursive( const RString &sNoteSkinName, NoteSkinData& data_out );
|
||||
RString m_sCurrentNoteSkin;
|
||||
const Game* m_pCurGame;
|
||||
|
||||
|
||||
Reference in New Issue
Block a user