Scripting WIP: Add global environment step function on_step

This commit is contained in:
Perttu Ahola 2011-11-12 17:46:06 +02:00
parent 1320d07068
commit 73bb3bc595
4 changed files with 35 additions and 2 deletions

@ -138,7 +138,10 @@ end
print("omg lol") print("omg lol")
print("minetest dump: "..dump(minetest)) print("minetest dump: "..dump(minetest))
--local TNT = minetest.new_entity { -- Global environment step function
function on_step(dtime)
end
local TNT = { local TNT = {
-- Maybe handle gravity and collision this way? dunno -- Maybe handle gravity and collision this way? dunno
physical = true, physical = true,

@ -1141,6 +1141,11 @@ void ServerEnvironment::step(float dtime)
} }
} }
/*
Step script environment (run global on_step())
*/
scriptapi_environment_step(m_lua, dtime);
/* /*
Step active objects Step active objects
*/ */

@ -40,7 +40,9 @@ extern "C" {
TODO: TODO:
- Global environment step function - Global environment step function
- Random node triggers - 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 - Named node types and dynamic id allocation
- LuaNodeMetadata - LuaNodeMetadata
blockdef.has_metadata = true/false blockdef.has_metadata = true/false
@ -669,6 +671,25 @@ void scriptapi_rm_object_reference(lua_State *L, ServerActiveObject *cobj)
lua_settable(L, objectstable); lua_settable(L, objectstable);
} }
/*
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 luaentity
*/ */

@ -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_add_object_reference(lua_State *L, ServerActiveObject *cobj);
void scriptapi_rm_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, void scriptapi_luaentity_add(lua_State *L, u16 id, const char *name,
const char *init_state); const char *init_state);
void scriptapi_luaentity_rm(lua_State *L, u16 id); void scriptapi_luaentity_rm(lua_State *L, u16 id);