44 changes: 8 additions & 36 deletions src/script/lua_api/l_nodetimer.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -41,43 +41,34 @@ int NodeTimerRef::l_set(lua_State *L)
{
MAP_LOCK_REQUIRED;
NodeTimerRef *o = checkobject(L, 1);
ServerEnvironment *env = o->m_env;
if(env == NULL) return 0;
f32 t = readParam<float>(L,2);
f32 e = readParam<float>(L,3);
env->getMap().setNodeTimer(NodeTimer(t, e, o->m_p));
o->m_map->setNodeTimer(NodeTimer(t, e, o->m_p));
return 0;
}

int NodeTimerRef::l_start(lua_State *L)
{
MAP_LOCK_REQUIRED;
NodeTimerRef *o = checkobject(L, 1);
ServerEnvironment *env = o->m_env;
if(env == NULL) return 0;
f32 t = readParam<float>(L,2);
env->getMap().setNodeTimer(NodeTimer(t, 0, o->m_p));
o->m_map->setNodeTimer(NodeTimer(t, 0, o->m_p));
return 0;
}

int NodeTimerRef::l_stop(lua_State *L)
{
MAP_LOCK_REQUIRED;
NodeTimerRef *o = checkobject(L, 1);
ServerEnvironment *env = o->m_env;
if(env == NULL) return 0;
env->getMap().removeNodeTimer(o->m_p);
o->m_map->removeNodeTimer(o->m_p);
return 0;
}

int NodeTimerRef::l_is_started(lua_State *L)
{
MAP_LOCK_REQUIRED;
NodeTimerRef *o = checkobject(L, 1);
ServerEnvironment *env = o->m_env;
if(env == NULL) return 0;

NodeTimer t = env->getMap().getNodeTimer(o->m_p);
NodeTimer t = o->m_map->getNodeTimer(o->m_p);
lua_pushboolean(L,(t.timeout != 0));
return 1;
}
Expand All @@ -86,10 +77,7 @@ int NodeTimerRef::l_get_timeout(lua_State *L)
{
MAP_LOCK_REQUIRED;
NodeTimerRef *o = checkobject(L, 1);
ServerEnvironment *env = o->m_env;
if(env == NULL) return 0;

NodeTimer t = env->getMap().getNodeTimer(o->m_p);
NodeTimer t = o->m_map->getNodeTimer(o->m_p);
lua_pushnumber(L,t.timeout);
return 1;
}
Expand All @@ -98,37 +86,21 @@ int NodeTimerRef::l_get_elapsed(lua_State *L)
{
MAP_LOCK_REQUIRED;
NodeTimerRef *o = checkobject(L, 1);
ServerEnvironment *env = o->m_env;
if(env == NULL) return 0;

NodeTimer t = env->getMap().getNodeTimer(o->m_p);
NodeTimer t = o->m_map->getNodeTimer(o->m_p);
lua_pushnumber(L,t.elapsed);
return 1;
}


NodeTimerRef::NodeTimerRef(v3s16 p, ServerEnvironment *env):
m_p(p),
m_env(env)
{
}

// Creates an NodeTimerRef and leaves it on top of stack
// Not callable from Lua; all references are created on the C side.
void NodeTimerRef::create(lua_State *L, v3s16 p, ServerEnvironment *env)
void NodeTimerRef::create(lua_State *L, v3s16 p, ServerMap *map)
{
NodeTimerRef *o = new NodeTimerRef(p, env);
NodeTimerRef *o = new NodeTimerRef(p, map);
*(void **)(lua_newuserdata(L, sizeof(void *))) = o;
luaL_getmetatable(L, className);
lua_setmetatable(L, -2);
}

void NodeTimerRef::set_null(lua_State *L)
{
NodeTimerRef *o = checkobject(L, -1);
o->m_env = NULL;
}

void NodeTimerRef::Register(lua_State *L)
{
lua_newtable(L);
Expand Down
10 changes: 4 additions & 6 deletions src/script/lua_api/l_nodetimer.h
Original file line number Diff line number Diff line change
Expand Up @@ -22,13 +22,13 @@ with this program; if not, write to the Free Software Foundation, Inc.,
#include "irr_v3d.h"
#include "lua_api/l_base.h"

class ServerEnvironment;
class ServerMap;

class NodeTimerRef : public ModApiBase
{
private:
v3s16 m_p;
ServerEnvironment *m_env = nullptr;
ServerMap *m_map;

static const char className[];
static const luaL_Reg methods[];
Expand All @@ -50,14 +50,12 @@ class NodeTimerRef : public ModApiBase
static int l_get_elapsed(lua_State *L);

public:
NodeTimerRef(v3s16 p, ServerEnvironment *env);
NodeTimerRef(v3s16 p, ServerMap *map) : m_p(p), m_map(map) {}
~NodeTimerRef() = default;

// Creates an NodeTimerRef and leaves it on top of stack
// Not callable from Lua; all references are created on the C side.
static void create(lua_State *L, v3s16 p, ServerEnvironment *env);

static void set_null(lua_State *L);
static void create(lua_State *L, v3s16 p, ServerMap *map);

static void Register(lua_State *L);
};