diff --git a/stepmania/src/LuaManager.cpp b/stepmania/src/LuaManager.cpp index d33e8ccf69..756c582cd9 100644 --- a/stepmania/src/LuaManager.cpp +++ b/stepmania/src/LuaManager.cpp @@ -504,6 +504,26 @@ bool LuaHelpers::RunScriptFile( const RString &sFile ) return true; } +bool LuaHelpers::Call( Lua *L, const RString &sFunction, int iArgs, int iResults ) +{ + LuaHelpers::Push( sFunction, L ); + lua_gettable( L, LUA_GLOBALSINDEX ); + + if( lua_isnil(L, -1) ) + { + lua_pop( L, 1 ); + Dialog::OK( ssprintf("Unknown Lua function \"%s\".", sFunction.c_str()), "LUA_ERROR" ); + return false; + } + if( !lua_pcall(L, iArgs, iResults, 0) ) + return true; + + RString sError; + LuaHelpers::PopStack( sError, L ); + Dialog::OK( ssprintf("Lua runtime error calling functin \"%s\": %s", sFunction.c_str(), sError.c_str()), "LUA_ERROR" ); + return false; +} + bool LuaHelpers::RunScript( Lua *L, const RString &sScript, const RString &sName, RString &sError, int iReturnValues ) { // load string diff --git a/stepmania/src/LuaManager.h b/stepmania/src/LuaManager.h index ebe3490f9e..1625a568ee 100644 --- a/stepmania/src/LuaManager.h +++ b/stepmania/src/LuaManager.h @@ -51,6 +51,10 @@ private: namespace LuaHelpers { + /* Call a Lua function with args on the stack and the results will left on the stack. + * Returns false on error. */ + bool Call( Lua *L, const RString &sFunction, int iArgs = 0, int iResults = 0 ); + /* Run a script with the given name. Return values are left on the Lua stack. * Returns false on error, with sError set. */ bool RunScript( Lua *L, const RString &sScript, const RString &sName, RString &sError, int iReturnValues = 0 );