refactor lua_engine
This commit is contained in:
parent
736fdbf964
commit
756de7b0b1
@ -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);
|
||||||
}
|
}
|
||||||
|
|||||||
@ -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);
|
||||||
}
|
}
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user