From: Perttu Ahola Date: Sun, 27 Nov 2011 23:11:17 +0000 (+0200) Subject: Implement callback registration in Lua instead of C X-Git-Url: http://81.2.79.47:8989/gitweb/?a=commitdiff_plain;h=30648d1cc987b25ccd2e09e18ee483a6b92e5ec1;p=zefram%2Fminetest%2Fminetest_engine.git Implement callback registration in Lua instead of C --- diff --git a/data/builtin.lua b/data/builtin.lua index b1abeb36..a3276192 100644 --- a/data/builtin.lua +++ b/data/builtin.lua @@ -151,11 +151,24 @@ minetest.register_node("ignore", { -- Chat message processing -- -minetest.registered_on_chat_messages = {} +function make_registration() + local t = {} + local registerfunc = function(func) table.insert(t, func) end + return t, registerfunc +end + +minetest.registered_on_chat_messages, minetest.register_on_chat_message = make_registration() +minetest.registered_globalsteps, minetest.register_globalstep = make_registration() +minetest.registered_on_placenodes, minetest.register_on_placenode = make_registration() +minetest.registered_on_dignodes, minetest.register_on_dignode = make_registration() +minetest.registered_on_punchnodes, minetest.register_on_punchnode = make_registration() +minetest.registered_on_generateds, minetest.register_on_generated = make_registration() +minetest.registered_on_newplayers, minetest.register_on_newplayer = make_registration() +minetest.registered_on_respawnplayers, minetest.register_on_respawnplayer = make_registration() minetest.on_chat_message = function(name, message) for i,func in ipairs(minetest.registered_on_chat_messages) do - ate = func(name, message) + local ate = func(name, message) if ate then return true end @@ -163,8 +176,4 @@ minetest.on_chat_message = function(name, message) return false end -minetest.register_on_chat_message = function(func) - table.insert(minetest.registered_on_chat_messages, func) -end - -- END diff --git a/src/scriptapi.cpp b/src/scriptapi.cpp index 1872085d..fb1b58f5 100644 --- a/src/scriptapi.cpp +++ b/src/scriptapi.cpp @@ -837,79 +837,6 @@ static int l_register_craft(lua_State *L) return 0; /* number of results */ } -static int register_lua_callback(lua_State *L, const char *tablename) -{ - luaL_checktype(L, 1, LUA_TFUNCTION); - - lua_getglobal(L, "table"); - lua_getfield(L, -1, "insert"); - int table_insert = lua_gettop(L); - // Get minetest.registered_globalsteps - lua_getglobal(L, "minetest"); - lua_getfield(L, -1, tablename); - luaL_checktype(L, -1, LUA_TTABLE); - int registered = lua_gettop(L); - // table.insert(registered_globalsteps, func) - lua_pushvalue(L, table_insert); - lua_pushvalue(L, registered); - lua_pushvalue(L, 1); // push function from argument 1 - // Call insert - if(lua_pcall(L, 2, 0, 0)) - script_error(L, "error: %s\n", lua_tostring(L, -1)); - - return 0; /* number of results */ -} - -// Register a global step function -// register_globalstep(function) -static int l_register_globalstep(lua_State *L) -{ - infostream<<"register_globalstep"<