Line data Source code
1 : /*
2 : Minetest
3 : Copyright (C) 2013 celeron55, Perttu Ahola <celeron55@gmail.com>
4 :
5 : This program is free software; you can redistribute it and/or modify
6 : it under the terms of the GNU Lesser General Public License as published by
7 : the Free Software Foundation; either version 2.1 of the License, or
8 : (at your option) any later version.
9 :
10 : This program is distributed in the hope that it will be useful,
11 : but WITHOUT ANY WARRANTY; without even the implied warranty of
12 : MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 : GNU Lesser General Public License for more details.
14 :
15 : You should have received a copy of the GNU Lesser General Public License along
16 : with this program; if not, write to the Free Software Foundation, Inc.,
17 : 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
18 : */
19 :
20 : #include "lua_api/l_base.h"
21 : #include "lua_api/l_internal.h"
22 : #include "cpp_api/s_base.h"
23 : #include <mods.h>
24 : #include <server.h>
25 :
26 21 : ScriptApiBase *ModApiBase::getScriptApiBase(lua_State *L)
27 : {
28 : // Get server from registry
29 21 : lua_getfield(L, LUA_REGISTRYINDEX, "scriptapi");
30 21 : ScriptApiBase *sapi_ptr = (ScriptApiBase*) lua_touserdata(L, -1);
31 21 : lua_pop(L, 1);
32 21 : return sapi_ptr;
33 : }
34 :
35 0 : Server *ModApiBase::getServer(lua_State *L)
36 : {
37 0 : return getScriptApiBase(L)->getServer();
38 : }
39 :
40 0 : Environment *ModApiBase::getEnv(lua_State *L)
41 : {
42 0 : return getScriptApiBase(L)->getEnv();
43 : }
44 :
45 21 : GUIEngine *ModApiBase::getGuiEngine(lua_State *L)
46 : {
47 21 : return getScriptApiBase(L)->getGuiEngine();
48 : }
49 :
50 0 : std::string ModApiBase::getCurrentModPath(lua_State *L)
51 : {
52 0 : lua_getfield(L, LUA_REGISTRYINDEX, SCRIPT_MOD_NAME_FIELD);
53 0 : const char *current_mod_name = lua_tostring(L, -1);
54 0 : if (!current_mod_name)
55 0 : return ".";
56 :
57 0 : const ModSpec *mod = getServer(L)->getModSpec(current_mod_name);
58 0 : if (!mod)
59 0 : return ".";
60 :
61 0 : return mod->path;
62 : }
63 :
64 :
65 58 : bool ModApiBase::registerFunction(
66 : lua_State *L,
67 : const char *name,
68 : lua_CFunction fct,
69 : int top)
70 : {
71 : //TODO check presence first!
72 :
73 58 : lua_pushstring(L,name);
74 58 : lua_pushcfunction(L,fct);
75 58 : lua_settable(L, top);
76 :
77 58 : return true;
78 3 : }
|