run profile's CustomLoadFunction when changing theme or assigning a local profile to a player

This should make the custom load functions a lot more useful.
This commit is contained in:
sigatrev
2014-04-30 21:30:30 -05:00
parent bea5f1cef9
commit f1fc291989
4 changed files with 40 additions and 22 deletions
+24 -19
View File
@@ -789,6 +789,29 @@ void Profile::IncrementCategoryPlayCount( StepsType st, RankingCategory rc )
if( X==NULL ) LOG->Warn("Failed to read section " #X); \
else Load##X##FromNode(X); }
void Profile::LoadCustomFunction( RString sDir )
{
/* Get the theme's custom load function:
* [Profile]
* CustomLoadFunction=function(profile, profileDir) ... end
*/
Lua *L = LUA->Get();
LuaReference customLoadFunc = THEME->GetMetricR("Profile", "CustomLoadFunction");
customLoadFunc.PushSelf(L);
ASSERT_M(!lua_isnil(L, -1), "CustomLoadFunction not defined");
// Pass profile and profile directory as arguments
this->PushSelf(L);
LuaHelpers::Push(L, sDir);
// Run it
RString sError;
if (!LuaHelpers::RunScriptOnStack(L, sError, 2, 0))
LOG->Warn("Error running CustomLoadFunction: %s", sError.c_str());
LUA->Release(L);
}
ProfileLoadResult Profile::LoadAllFromDir( RString sDir, bool bRequireSignature )
{
CHECKPOINT;
@@ -881,25 +904,7 @@ ProfileLoadResult Profile::LoadAllFromDir( RString sDir, bool bRequireSignature
if (ret != ProfileLoadResult_Success)
return ret;
/* Get the theme's custom load function:
* [Profile]
* CustomLoadFunction=function(profile, profileDir) ... end
*/
Lua *L = LUA->Get();
LuaReference customLoadFunc = THEME->GetMetricR("Profile", "CustomLoadFunction");
customLoadFunc.PushSelf(L);
ASSERT_M(!lua_isnil(L, -1), "CustomLoadFunction not defined");
// Pass profile and profile directory as arguments
this->PushSelf(L);
LuaHelpers::Push(L, sDir);
// Run it
RString sError;
if (!LuaHelpers::RunScriptOnStack(L, sError, 2, 0))
LOG->Warn("Error running CustomLoadFunction: %s", sError.c_str());
LUA->Release(L);
LoadCustomFunction( sDir );
return ProfileLoadResult_Success;
}