mirror of
https://github.com/MaSzyna-EU07/maszyna.git
synced 2026-07-19 02:09:17 +02:00
Refactor Lua bindings to not use FFI anymore
- Lua bindings are no longer using FFI in favor of the "classic" Lua C API. - This makes it work properly on native Linux builds. - Changed the Lua API slightly: - Removed the `api.event_preparefunc()` function because it is no longer necessary. Instead, you can pass any function you want without preparing it first. - Added an `api.event_exists()` function. Takes a single `name` argument. - Any `api.find_*()` functions return `nil` instead of an userdata representing a null pointer when the requested object is not found.
This commit is contained in:
@@ -2110,44 +2110,44 @@ friction_event::export_as_text_( std::ostream &Output ) const {
|
||||
}
|
||||
|
||||
#ifdef WITH_LUA
|
||||
lua_event::lua_event(lua::eventhandler_t func) {
|
||||
lua_func = func;
|
||||
lua_event::lua_event(lua_State *L, const int ref) {
|
||||
lua_state = L;
|
||||
lua_func = ref;
|
||||
}
|
||||
|
||||
lua_event::~lua_event() {
|
||||
lua::unref(lua_state, lua_func);
|
||||
}
|
||||
|
||||
// prepares event for use
|
||||
void
|
||||
lua_event::init() {
|
||||
// nothing to do here
|
||||
void lua_event::init() {
|
||||
// nothing to do here
|
||||
}
|
||||
|
||||
// event type string
|
||||
std::string
|
||||
lua_event::type() const {
|
||||
return "lua";
|
||||
std::string lua_event::type() const {
|
||||
return "lua";
|
||||
}
|
||||
|
||||
// deserialize() subclass details
|
||||
void
|
||||
lua_event::deserialize_( cParser &Input, scene::scratch_data &Scratchpad ) {
|
||||
// preload next token
|
||||
Input.getTokens();
|
||||
void lua_event::deserialize_( cParser &Input, scene::scratch_data &Scratchpad ) {
|
||||
// preload next token
|
||||
Input.getTokens();
|
||||
}
|
||||
|
||||
// run() subclass details
|
||||
void
|
||||
lua_event::run_() {
|
||||
void lua_event::run_() {
|
||||
try {
|
||||
if (lua_func)
|
||||
lua_func(this, m_activator);
|
||||
if (lua_func != LUA_NOREF)
|
||||
lua::dispatch_event(lua_state, lua_func, this, m_activator);
|
||||
} catch (...) {
|
||||
ErrorLog(simulation::Lua.get_error());
|
||||
}
|
||||
}
|
||||
|
||||
// export_as_text() subclass details
|
||||
void
|
||||
lua_event::export_as_text_( std::ostream &Output ) const {
|
||||
// nothing to do here
|
||||
void lua_event::export_as_text_( std::ostream &Output ) const {
|
||||
// nothing to do here
|
||||
}
|
||||
|
||||
bool lua_event::is_instant() const {
|
||||
|
||||
Reference in New Issue
Block a user