diff options
author | sapier <Sapier at GMX dot net> | 2013-05-25 00:51:02 +0200 |
---|---|---|
committer | Kahrl <kahrl@gmx.net> | 2013-05-25 00:51:02 +0200 |
commit | ab433775777c4f5055bcf4d2a1cffc506c4f9961 (patch) | |
tree | 9f80c74c95cbb1efa15c0c36df8d5e35235e5554 /src/scriptapi_entity.cpp | |
parent | 865f380c91ced850d1a499c91aa2ab5489624802 (diff) | |
download | minetest-ab433775777c4f5055bcf4d2a1cffc506c4f9961.tar.gz minetest-ab433775777c4f5055bcf4d2a1cffc506c4f9961.tar.bz2 minetest-ab433775777c4f5055bcf4d2a1cffc506c4f9961.zip |
Move scriptapi to separate folder (by sapier)
On the lua side, notably minetest.env:<function>(<args>) should now
be replaced by minetest.<function>(<args>).
The old way is and will stay supported for a long time.
Also:
Update and clean up lua_api.txt (by celeron55)
Move EnvRef to lua and remove add_rat and add_firefly (by kahrl)
Add separate src/util/CMakeLists.txt, other minor fixes (by kahrl)
Diffstat (limited to 'src/scriptapi_entity.cpp')
-rw-r--r-- | src/scriptapi_entity.cpp | 293 |
1 files changed, 0 insertions, 293 deletions
diff --git a/src/scriptapi_entity.cpp b/src/scriptapi_entity.cpp deleted file mode 100644 index c15f801a6..000000000 --- a/src/scriptapi_entity.cpp +++ /dev/null @@ -1,293 +0,0 @@ -/* -Minetest -Copyright (C) 2013 celeron55, Perttu Ahola <celeron55@gmail.com> - -This program is free software; you can redistribute it and/or modify -it under the terms of the GNU Lesser General Public License as published by -the Free Software Foundation; either version 2.1 of the License, or -(at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU Lesser General Public License for more details. - -You should have received a copy of the GNU Lesser General Public License along -with this program; if not, write to the Free Software Foundation, Inc., -51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. -*/ - -#include "scriptapi.h" -#include "scriptapi_entity.h" - -extern "C" { -#include <lauxlib.h> -} - -#include "log.h" -#include "script.h" -#include "scriptapi_types.h" -#include "scriptapi_object.h" -#include "scriptapi_common.h" - - -void luaentity_get(lua_State *L, u16 id) -{ - // Get minetest.luaentities[i] - lua_getglobal(L, "minetest"); - lua_getfield(L, -1, "luaentities"); - luaL_checktype(L, -1, LUA_TTABLE); - lua_pushnumber(L, id); - lua_gettable(L, -2); - lua_remove(L, -2); // luaentities - lua_remove(L, -2); // minetest -} - -/* - luaentity -*/ - -bool scriptapi_luaentity_add(lua_State *L, u16 id, const char *name) -{ - realitycheck(L); - assert(lua_checkstack(L, 20)); - verbosestream<<"scriptapi_luaentity_add: id="<<id<<" name=\"" - <<name<<"\""<<std::endl; - StackUnroller stack_unroller(L); - - // Get minetest.registered_entities[name] - lua_getglobal(L, "minetest"); - lua_getfield(L, -1, "registered_entities"); - luaL_checktype(L, -1, LUA_TTABLE); - lua_pushstring(L, name); - lua_gettable(L, -2); - // Should be a table, which we will use as a prototype - //luaL_checktype(L, -1, LUA_TTABLE); - if(lua_type(L, -1) != LUA_TTABLE){ - errorstream<<"LuaEntity name \""<<name<<"\" not defined"<<std::endl; - return false; - } - int prototype_table = lua_gettop(L); - //dump2(L, "prototype_table"); - - // Create entity object - lua_newtable(L); - int object = lua_gettop(L); - - // Set object metatable - lua_pushvalue(L, prototype_table); - lua_setmetatable(L, -2); - - // Add object reference - // This should be userdata with metatable ObjectRef - objectref_get(L, id); - luaL_checktype(L, -1, LUA_TUSERDATA); - if(!luaL_checkudata(L, -1, "ObjectRef")) - luaL_typerror(L, -1, "ObjectRef"); - lua_setfield(L, -2, "object"); - - // minetest.luaentities[id] = object - lua_getglobal(L, "minetest"); - lua_getfield(L, -1, "luaentities"); - luaL_checktype(L, -1, LUA_TTABLE); - lua_pushnumber(L, id); // Push id - lua_pushvalue(L, object); // Copy object to top of stack - lua_settable(L, -3); - - return true; -} - -void scriptapi_luaentity_activate(lua_State *L, u16 id, - const std::string &staticdata, u32 dtime_s) -{ - realitycheck(L); - assert(lua_checkstack(L, 20)); - verbosestream<<"scriptapi_luaentity_activate: id="<<id<<std::endl; - StackUnroller stack_unroller(L); - - // Get minetest.luaentities[id] - luaentity_get(L, id); - int object = lua_gettop(L); - - // Get on_activate function - lua_pushvalue(L, object); - lua_getfield(L, -1, "on_activate"); - if(!lua_isnil(L, -1)){ - luaL_checktype(L, -1, LUA_TFUNCTION); - lua_pushvalue(L, object); // self - lua_pushlstring(L, staticdata.c_str(), staticdata.size()); - lua_pushinteger(L, dtime_s); - // Call with 3 arguments, 0 results - if(lua_pcall(L, 3, 0, 0)) - script_error(L, "error running function on_activate: %s\n", - lua_tostring(L, -1)); - } -} - -void scriptapi_luaentity_rm(lua_State *L, u16 id) -{ - realitycheck(L); - assert(lua_checkstack(L, 20)); - verbosestream<<"scriptapi_luaentity_rm: id="<<id<<std::endl; - - // Get minetest.luaentities table - lua_getglobal(L, "minetest"); - lua_getfield(L, -1, "luaentities"); - luaL_checktype(L, -1, LUA_TTABLE); - int objectstable = lua_gettop(L); - - // Set luaentities[id] = nil - lua_pushnumber(L, id); // Push id - lua_pushnil(L); - lua_settable(L, objectstable); - - lua_pop(L, 2); // pop luaentities, minetest -} - -std::string scriptapi_luaentity_get_staticdata(lua_State *L, u16 id) -{ - realitycheck(L); - assert(lua_checkstack(L, 20)); - //infostream<<"scriptapi_luaentity_get_staticdata: id="<<id<<std::endl; - StackUnroller stack_unroller(L); - - // Get minetest.luaentities[id] - luaentity_get(L, id); - int object = lua_gettop(L); - - // Get get_staticdata function - lua_pushvalue(L, object); - lua_getfield(L, -1, "get_staticdata"); - if(lua_isnil(L, -1)) - return ""; - - luaL_checktype(L, -1, LUA_TFUNCTION); - lua_pushvalue(L, object); // self - // Call with 1 arguments, 1 results - if(lua_pcall(L, 1, 1, 0)) - script_error(L, "error running function get_staticdata: %s\n", - lua_tostring(L, -1)); - - size_t len=0; - const char *s = lua_tolstring(L, -1, &len); - return std::string(s, len); -} - -void scriptapi_luaentity_get_properties(lua_State *L, u16 id, - ObjectProperties *prop) -{ - realitycheck(L); - assert(lua_checkstack(L, 20)); - //infostream<<"scriptapi_luaentity_get_properties: id="<<id<<std::endl; - StackUnroller stack_unroller(L); - - // Get minetest.luaentities[id] - luaentity_get(L, id); - //int object = lua_gettop(L); - - // Set default values that differ from ObjectProperties defaults - prop->hp_max = 10; - - /* Read stuff */ - - prop->hp_max = getintfield_default(L, -1, "hp_max", 10); - - getboolfield(L, -1, "physical", prop->physical); - - getfloatfield(L, -1, "weight", prop->weight); - - lua_getfield(L, -1, "collisionbox"); - if(lua_istable(L, -1)) - prop->collisionbox = read_aabb3f(L, -1, 1.0); - lua_pop(L, 1); - - getstringfield(L, -1, "visual", prop->visual); - - getstringfield(L, -1, "mesh", prop->mesh); - - // Deprecated: read object properties directly - read_object_properties(L, -1, prop); - - // Read initial_properties - lua_getfield(L, -1, "initial_properties"); - read_object_properties(L, -1, prop); - lua_pop(L, 1); -} - -void scriptapi_luaentity_step(lua_State *L, u16 id, float dtime) -{ - realitycheck(L); - assert(lua_checkstack(L, 20)); - //infostream<<"scriptapi_luaentity_step: id="<<id<<std::endl; - StackUnroller stack_unroller(L); - - // Get minetest.luaentities[id] - luaentity_get(L, id); - int object = lua_gettop(L); - // State: object is at top of stack - // Get step function - lua_getfield(L, -1, "on_step"); - if(lua_isnil(L, -1)) - return; - luaL_checktype(L, -1, LUA_TFUNCTION); - lua_pushvalue(L, object); // self - lua_pushnumber(L, dtime); // dtime - // Call with 2 arguments, 0 results - if(lua_pcall(L, 2, 0, 0)) - script_error(L, "error running function 'on_step': %s\n", lua_tostring(L, -1)); -} - -// Calls entity:on_punch(ObjectRef puncher, time_from_last_punch, -// tool_capabilities, direction) -void scriptapi_luaentity_punch(lua_State *L, u16 id, - ServerActiveObject *puncher, float time_from_last_punch, - const ToolCapabilities *toolcap, v3f dir) -{ - realitycheck(L); - assert(lua_checkstack(L, 20)); - //infostream<<"scriptapi_luaentity_step: id="<<id<<std::endl; - StackUnroller stack_unroller(L); - - // Get minetest.luaentities[id] - luaentity_get(L, id); - int object = lua_gettop(L); - // State: object is at top of stack - // Get function - lua_getfield(L, -1, "on_punch"); - if(lua_isnil(L, -1)) - return; - luaL_checktype(L, -1, LUA_TFUNCTION); - lua_pushvalue(L, object); // self - objectref_get_or_create(L, puncher); // Clicker reference - lua_pushnumber(L, time_from_last_punch); - push_tool_capabilities(L, *toolcap); - push_v3f(L, dir); - // Call with 5 arguments, 0 results - if(lua_pcall(L, 5, 0, 0)) - script_error(L, "error running function 'on_punch': %s\n", lua_tostring(L, -1)); -} - -// Calls entity:on_rightclick(ObjectRef clicker) -void scriptapi_luaentity_rightclick(lua_State *L, u16 id, - ServerActiveObject *clicker) -{ - realitycheck(L); - assert(lua_checkstack(L, 20)); - //infostream<<"scriptapi_luaentity_step: id="<<id<<std::endl; - StackUnroller stack_unroller(L); - - // Get minetest.luaentities[id] - luaentity_get(L, id); - int object = lua_gettop(L); - // State: object is at top of stack - // Get function - lua_getfield(L, -1, "on_rightclick"); - if(lua_isnil(L, -1)) - return; - luaL_checktype(L, -1, LUA_TFUNCTION); - lua_pushvalue(L, object); // self - objectref_get_or_create(L, clicker); // Clicker reference - // Call with 2 arguments, 0 results - if(lua_pcall(L, 2, 0, 0)) - script_error(L, "error running function 'on_rightclick': %s\n", lua_tostring(L, -1)); -} |