diff options
-rw-r--r-- | data/scripts/default.lua | 5 | ||||
-rw-r--r-- | src/environment.cpp | 5 | ||||
-rw-r--r-- | src/scriptapi.cpp | 23 | ||||
-rw-r--r-- | src/scriptapi.h | 4 |
4 files changed, 35 insertions, 2 deletions
diff --git a/data/scripts/default.lua b/data/scripts/default.lua index dcc58097b..4197cd788 100644 --- a/data/scripts/default.lua +++ b/data/scripts/default.lua @@ -138,7 +138,10 @@ end print("omg lol") print("minetest dump: "..dump(minetest)) ---local TNT = minetest.new_entity { +-- Global environment step function +function on_step(dtime) +end + local TNT = { -- Maybe handle gravity and collision this way? dunno physical = true, diff --git a/src/environment.cpp b/src/environment.cpp index d3e8fa12c..29432bc5e 100644 --- a/src/environment.cpp +++ b/src/environment.cpp @@ -1142,6 +1142,11 @@ void ServerEnvironment::step(float dtime) } /* + Step script environment (run global on_step()) + */ + scriptapi_environment_step(m_lua, dtime); + + /* Step active objects */ { diff --git a/src/scriptapi.cpp b/src/scriptapi.cpp index 530c1719e..381664489 100644 --- a/src/scriptapi.cpp +++ b/src/scriptapi.cpp @@ -40,7 +40,9 @@ extern "C" { TODO: - Global environment step function - Random node triggers -- Object network and client-side stuff +- Object visual client-side stuff + - Blink effect + - Spritesheets and animation - Named node types and dynamic id allocation - LuaNodeMetadata blockdef.has_metadata = true/false @@ -670,6 +672,25 @@ void scriptapi_rm_object_reference(lua_State *L, ServerActiveObject *cobj) } /* + environment +*/ + +void scriptapi_environment_step(lua_State *L, float dtime) +{ + realitycheck(L); + assert(lua_checkstack(L, 20)); + //infostream<<"scriptapi_luaentity_step: id="<<id<<std::endl; + StackUnroller stack_unroller(L); + + lua_getglobal(L, "on_step"); + if(lua_type(L, -1) != LUA_TFUNCTION) + return; // If no on_step function exist, do nothing + lua_pushnumber(L, dtime); + if(lua_pcall(L, 1, 0, 0)) + script_error(L, "error: %s\n", lua_tostring(L, -1)); +} + +/* luaentity */ diff --git a/src/scriptapi.h b/src/scriptapi.h index 458f90acb..c63977fc6 100644 --- a/src/scriptapi.h +++ b/src/scriptapi.h @@ -35,6 +35,10 @@ void scriptapi_add_environment(lua_State *L, ServerEnvironment *env); void scriptapi_add_object_reference(lua_State *L, ServerActiveObject *cobj); void scriptapi_rm_object_reference(lua_State *L, ServerActiveObject *cobj); +/* environment */ +void scriptapi_environment_step(lua_State *L, float dtime); + +/* luaentity */ void scriptapi_luaentity_add(lua_State *L, u16 id, const char *name, const char *init_state); void scriptapi_luaentity_rm(lua_State *L, u16 id); |