diff options
Diffstat (limited to 'src/script/lua_api/l_nodetimer.cpp')
-rw-r--r-- | src/script/lua_api/l_nodetimer.cpp | 46 |
1 files changed, 11 insertions, 35 deletions
diff --git a/src/script/lua_api/l_nodetimer.cpp b/src/script/lua_api/l_nodetimer.cpp index 8a302149f..c93574144 100644 --- a/src/script/lua_api/l_nodetimer.cpp +++ b/src/script/lua_api/l_nodetimer.cpp @@ -29,18 +29,10 @@ int NodeTimerRef::gc_object(lua_State *L) { return 0; } -NodeTimerRef* NodeTimerRef::checkobject(lua_State *L, int narg) -{ - luaL_checktype(L, narg, LUA_TUSERDATA); - void *ud = luaL_checkudata(L, narg, className); - if(!ud) luaL_typerror(L, narg, className); - return *(NodeTimerRef**)ud; // unbox pointer -} - int NodeTimerRef::l_set(lua_State *L) { MAP_LOCK_REQUIRED; - NodeTimerRef *o = checkobject(L, 1); + NodeTimerRef *o = checkObject<NodeTimerRef>(L, 1); f32 t = readParam<float>(L,2); f32 e = readParam<float>(L,3); o->m_map->setNodeTimer(NodeTimer(t, e, o->m_p)); @@ -50,7 +42,7 @@ int NodeTimerRef::l_set(lua_State *L) int NodeTimerRef::l_start(lua_State *L) { MAP_LOCK_REQUIRED; - NodeTimerRef *o = checkobject(L, 1); + NodeTimerRef *o = checkObject<NodeTimerRef>(L, 1); f32 t = readParam<float>(L,2); o->m_map->setNodeTimer(NodeTimer(t, 0, o->m_p)); return 0; @@ -59,7 +51,7 @@ int NodeTimerRef::l_start(lua_State *L) int NodeTimerRef::l_stop(lua_State *L) { MAP_LOCK_REQUIRED; - NodeTimerRef *o = checkobject(L, 1); + NodeTimerRef *o = checkObject<NodeTimerRef>(L, 1); o->m_map->removeNodeTimer(o->m_p); return 0; } @@ -67,7 +59,7 @@ int NodeTimerRef::l_stop(lua_State *L) int NodeTimerRef::l_is_started(lua_State *L) { MAP_LOCK_REQUIRED; - NodeTimerRef *o = checkobject(L, 1); + NodeTimerRef *o = checkObject<NodeTimerRef>(L, 1); NodeTimer t = o->m_map->getNodeTimer(o->m_p); lua_pushboolean(L,(t.timeout != 0)); return 1; @@ -76,7 +68,7 @@ int NodeTimerRef::l_is_started(lua_State *L) int NodeTimerRef::l_get_timeout(lua_State *L) { MAP_LOCK_REQUIRED; - NodeTimerRef *o = checkobject(L, 1); + NodeTimerRef *o = checkObject<NodeTimerRef>(L, 1); NodeTimer t = o->m_map->getNodeTimer(o->m_p); lua_pushnumber(L,t.timeout); return 1; @@ -85,7 +77,7 @@ int NodeTimerRef::l_get_timeout(lua_State *L) int NodeTimerRef::l_get_elapsed(lua_State *L) { MAP_LOCK_REQUIRED; - NodeTimerRef *o = checkobject(L, 1); + NodeTimerRef *o = checkObject<NodeTimerRef>(L, 1); NodeTimer t = o->m_map->getNodeTimer(o->m_p); lua_pushnumber(L,t.elapsed); return 1; @@ -103,27 +95,11 @@ void NodeTimerRef::create(lua_State *L, v3s16 p, ServerMap *map) void NodeTimerRef::Register(lua_State *L) { - lua_newtable(L); - int methodtable = lua_gettop(L); - luaL_newmetatable(L, className); - int metatable = lua_gettop(L); - - lua_pushliteral(L, "__metatable"); - lua_pushvalue(L, methodtable); - lua_settable(L, metatable); // hide metatable from Lua getmetatable() - - lua_pushliteral(L, "__index"); - lua_pushvalue(L, methodtable); - lua_settable(L, metatable); - - lua_pushliteral(L, "__gc"); - lua_pushcfunction(L, gc_object); - lua_settable(L, metatable); - - lua_pop(L, 1); // drop metatable - - luaL_register(L, nullptr, methods); // fill methodtable - lua_pop(L, 1); // drop methodtable + static const luaL_Reg metamethods[] = { + {"__gc", gc_object}, + {0, 0} + }; + registerClass(L, className, methods, metamethods); // Cannot be created from Lua //lua_register(L, className, create_object); |