refactor lua_engine

This commit is contained in:
MihailRis 2024-10-05 17:32:03 +03:00
parent 736fdbf964
commit 756de7b0b1
2 changed files with 38 additions and 24 deletions

View File

@ -28,49 +28,44 @@ static void remove_lib_funcs(
} }
} }
static void create_libs(lua::State* L) { static void create_libs(lua::State* L, StateType stateType) {
openlib(L, "audio", audiolib);
openlib(L, "block", blocklib); openlib(L, "block", blocklib);
openlib(L, "console", consolelib);
openlib(L, "core", corelib); openlib(L, "core", corelib);
openlib(L, "file", filelib); openlib(L, "file", filelib);
openlib(L, "gui", guilib);
openlib(L, "input", inputlib);
openlib(L, "inventory", inventorylib);
openlib(L, "generation", generationlib); openlib(L, "generation", generationlib);
openlib(L, "item", itemlib); openlib(L, "item", itemlib);
openlib(L, "json", jsonlib); openlib(L, "json", jsonlib);
openlib(L, "mat4", mat4lib); openlib(L, "mat4", mat4lib);
openlib(L, "pack", packlib); openlib(L, "pack", packlib);
openlib(L, "player", playerlib);
openlib(L, "quat", quatlib); openlib(L, "quat", quatlib);
openlib(L, "time", timelib); openlib(L, "time", timelib);
openlib(L, "toml", tomllib); openlib(L, "toml", tomllib);
openlib(L, "vec2", vec2lib); openlib(L, "vec2", vec2lib);
openlib(L, "vec3", vec3lib); openlib(L, "vec3", vec3lib);
openlib(L, "vec4", vec4lib); openlib(L, "vec4", vec4lib);
openlib(L, "world", worldlib);
openlib(L, "entities", entitylib); if (stateType == StateType::BASE) {
openlib(L, "cameras", cameralib); openlib(L, "gui", guilib);
openlib(L, "input", inputlib);
openlib(L, "inventory", inventorylib);
openlib(L, "world", worldlib);
openlib(L, "audio", audiolib);
openlib(L, "console", consolelib);
openlib(L, "player", playerlib);
// components openlib(L, "entities", entitylib);
openlib(L, "__skeleton", skeletonlib); openlib(L, "cameras", cameralib);
openlib(L, "__rigidbody", rigidbodylib);
openlib(L, "__transform", transformlib); // components
openlib(L, "__skeleton", skeletonlib);
openlib(L, "__rigidbody", rigidbodylib);
openlib(L, "__transform", transformlib);
}
addfunc(L, "print", lua::wrap<l_print>); addfunc(L, "print", lua::wrap<l_print>);
} }
void lua::initialize() { void lua::init_state(lua::State* L, StateType stateType) {
logger.info() << LUA_VERSION;
logger.info() << LUAJIT_VERSION;
auto L = luaL_newstate();
if (L == nullptr) {
throw luaerror("could not to initialize Lua");
}
main_thread = L;
// Allowed standard libraries // Allowed standard libraries
pop(L, luaopen_base(L)); pop(L, luaopen_base(L));
pop(L, luaopen_math(L)); pop(L, luaopen_math(L));
@ -83,7 +78,7 @@ void lua::initialize() {
const char* removed_os[] { const char* removed_os[] {
"execute", "exit", "remove", "rename", "setlocale", "tmpname", nullptr}; "execute", "exit", "remove", "rename", "setlocale", "tmpname", nullptr};
remove_lib_funcs(L, "os", removed_os); remove_lib_funcs(L, "os", removed_os);
create_libs(L); create_libs(L, stateType);
pushglobals(L); pushglobals(L);
setglobal(L, env_name(0)); setglobal(L, env_name(0));
@ -101,6 +96,18 @@ void lua::initialize() {
newusertype<LuaVoxelStructure>(L); newusertype<LuaVoxelStructure>(L);
} }
void lua::initialize() {
logger.info() << LUA_VERSION;
logger.info() << LUAJIT_VERSION;
auto L = luaL_newstate();
if (L == nullptr) {
throw luaerror("could not to initialize Lua");
}
main_thread = L;
init_state(L, StateType::BASE);
}
void lua::finalize() { void lua::finalize() {
lua_close(main_thread); lua_close(main_thread);
} }

View File

@ -8,6 +8,11 @@
#include "lua_util.hpp" #include "lua_util.hpp"
namespace lua { namespace lua {
enum class StateType {
BASE,
GENERATOR,
};
void initialize(); void initialize();
void finalize(); void finalize();
@ -17,4 +22,6 @@ namespace lua {
std::function<int(lua::State*)> args = [](auto*) { return 0; } std::function<int(lua::State*)> args = [](auto*) { return 0; }
); );
lua::State* get_main_thread(); lua::State* get_main_thread();
void init_state(lua::State* L, StateType stateType);
} }