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:
Kyzentun Keeslala
2015-10-20 22:57:07 -06:00
parent de9ae9048b
commit a816de735a
2 changed files with 16 additions and 8 deletions
+14 -6
View File
@@ -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;
}
+2 -2
View File
@@ -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;