diff --git a/include/openspace/engine/moduleengine.h b/include/openspace/engine/moduleengine.h index bb7c86aa15..a15515c4d0 100644 --- a/include/openspace/engine/moduleengine.h +++ b/include/openspace/engine/moduleengine.h @@ -26,6 +26,7 @@ #define __MODULEENGINE_H__ #include +#include #include #include @@ -74,6 +75,12 @@ public: */ std::vector modules() const; + /** + * Returns the Lua library that contains all Lua functions available to affect the + * modules. + */ + static scripting::ScriptEngine::LuaLibrary luaLibrary(); + private: /// The list of all registered OpenSpaceModule%s std::vector> _modules; diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index 8a9992e1af..0f6ad12718 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -28,6 +28,7 @@ set(OPENSPACE_SOURCE ${OPENSPACE_BASE_DIR}/src/engine/downloadmanager.cpp ${OPENSPACE_BASE_DIR}/src/engine/logfactory.cpp ${OPENSPACE_BASE_DIR}/src/engine/moduleengine.cpp + ${OPENSPACE_BASE_DIR}/src/engine/moduleengine_lua.inl ${OPENSPACE_BASE_DIR}/src/engine/openspaceengine.cpp ${OPENSPACE_BASE_DIR}/src/engine/wrapper/sgctwindowwrapper.cpp ${OPENSPACE_BASE_DIR}/src/engine/wrapper/windowwrapper.cpp diff --git a/src/engine/moduleengine.cpp b/src/engine/moduleengine.cpp index f78cdf6314..ed14d9a74e 100644 --- a/src/engine/moduleengine.cpp +++ b/src/engine/moduleengine.cpp @@ -31,6 +31,8 @@ #include +#include "moduleengine_lua.inl" + namespace { const std::string _loggerCat = "ModuleEngine"; } @@ -80,4 +82,19 @@ std::vector ModuleEngine::modules() const { return result; } +scripting::ScriptEngine::LuaLibrary ModuleEngine::luaLibrary() { + return { + "modules", + { + { + "isLoaded", + &luascriptfunctions::isLoaded, + "string", + "Checks whether a specific module is loaded" + } + } + + }; +} + } // namespace openspace diff --git a/src/engine/moduleengine_lua.inl b/src/engine/moduleengine_lua.inl new file mode 100644 index 0000000000..a0524891e0 --- /dev/null +++ b/src/engine/moduleengine_lua.inl @@ -0,0 +1,65 @@ +/***************************************************************************************** + * * + * OpenSpace * + * * + * Copyright (c) 2014-2016 * + * * + * Permission is hereby granted, free of charge, to any person obtaining a copy of this * + * software and associated documentation files (the "Software"), to deal in the Software * + * without restriction, including without limitation the rights to use, copy, modify, * + * merge, publish, distribute, sublicense, and/or sell copies of the Software, and to * + * permit persons to whom the Software is furnished to do so, subject to the following * + * conditions: * + * * + * The above copyright notice and this permission notice shall be included in all copies * + * or substantial portions of the Software. * + * * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, * + * INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A * + * PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT * + * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF * + * CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE * + * OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. * + ****************************************************************************************/ + +#include +#include + +namespace openspace { +namespace luascriptfunctions { + +/** + * \ingroup LuaScripts + * isLoaded(string): + * Checks whether the passed OpenSpaceModule is loaded or not + */ +int isLoaded(lua_State* L) { + int nArguments = lua_gettop(L); + if (nArguments != 1) + return luaL_error(L, "Expected %i arguments, got %i", 1, nArguments); + + const int type = lua_type(L, -1); + if (type != LUA_TSTRING) + return luaL_error(L, "Expected argument of type 'string'"); + std::string moduleName = lua_tostring(L, -1); + + std::vector modules = OsEng.moduleEngine().modules(); + + auto it = std::find_if( + modules.begin(), + modules.end(), + [moduleName](OpenSpaceModule* module) { + return module->name() == moduleName; + } + ); + + if (it != modules.end()) + lua_pushboolean(L, 1); + else + lua_pushboolean(L, 0); + + return 1; +} + +} // namespace luascriptfunctions +} // namespace openspace diff --git a/src/engine/openspaceengine.cpp b/src/engine/openspaceengine.cpp index 29b1a9071c..28b5fb4777 100644 --- a/src/engine/openspaceengine.cpp +++ b/src/engine/openspaceengine.cpp @@ -370,6 +370,7 @@ bool OpenSpaceEngine::initialize() { _scriptEngine->addLibrary(LuaConsole::luaLibrary()); _scriptEngine->addLibrary(gui::GUI::luaLibrary()); _scriptEngine->addLibrary(network::ParallelConnection::luaLibrary()); + _scriptEngine->addLibrary(ModuleEngine::luaLibrary()); #ifdef OPENSPACE_MODULE_ISWA_ENABLED _scriptEngine->addLibrary(IswaManager::luaLibrary()); diff --git a/src/rendering/renderengine_lua.inl b/src/rendering/renderengine_lua.inl index 087df65e83..18fc6235d0 100644 --- a/src/rendering/renderengine_lua.inl +++ b/src/rendering/renderengine_lua.inl @@ -26,18 +26,6 @@ namespace openspace { namespace luascriptfunctions { -/** -int changeCoordinateSystem(lua_State* L) { - int nArguments = lua_gettop(L); - if (nArguments != 1) - return luaL_error(L, "Expected %i arguments, got %i", 1, nArguments); - - std::string newCenter = std::string(lua_tostring(L, -1)); - OsEng.renderEngine()->changeViewPoint(newCenter); - return 1; -} -*/ - /** * \ingroup LuaScripts * takeScreenshot(): @@ -63,7 +51,7 @@ int setRenderer(lua_State* L) { const int type = lua_type(L, -1); if (type != LUA_TSTRING) - return luaL_error(L, "Expected argument of type 'bool'"); + return luaL_error(L, "Expected argument of type 'string'"); std::string r = lua_tostring(L, -1); OsEng.renderEngine().setRendererFromString(r); return 0;