#include "common/c_converter.h"
#include "client/client.h"
#include "object_properties.h"
-
-// should prob do some more NULL checking
-
+#include "util/pointedthing.h"
ClientObjectRef *ClientObjectRef::checkobject(lua_State *L, int narg)
{
void *userdata = luaL_checkudata(L, narg, className);
if (!userdata)
luaL_typerror(L, narg, className);
- return *(ClientObjectRef**)userdata;
+ return *(ClientObjectRef **)userdata;
}
ClientActiveObject *ClientObjectRef::get_cao(ClientObjectRef *ref)
return 1;
}
+int ClientObjectRef::l_is_local_player(lua_State *L)
+{
+ ClientObjectRef *ref = checkobject(L, 1);
+ GenericCAO *gcao = get_generic_cao(ref, L);
+ lua_pushboolean(L, gcao->isLocalPlayer());
+ return 1;
+}
+
int ClientObjectRef::l_get_name(lua_State *L)
{
ClientObjectRef *ref = checkobject(L, 1);
return 1;
}
-ClientObjectRef::ClientObjectRef(ClientActiveObject *object):
- m_object(object)
+int ClientObjectRef::l_punch(lua_State *L)
+{
+ ClientObjectRef *ref = checkobject(L, 1);
+ GenericCAO *gcao = get_generic_cao(ref, L);
+ PointedThing pointed(gcao->getId(), v3f(0, 0, 0), v3s16(0, 0, 0), 0);
+ getClient(L)->interact(INTERACT_START_DIGGING, pointed);
+ return 0;
+}
+
+int ClientObjectRef::l_rightclick(lua_State *L)
+{
+ ClientObjectRef *ref = checkobject(L, 1);
+ GenericCAO *gcao = get_generic_cao(ref, L);
+ PointedThing pointed(gcao->getId(), v3f(0, 0, 0), v3s16(0, 0, 0), 0);
+ getClient(L)->interact(INTERACT_PLACE, pointed);
+ return 0;
+}
+
+ClientObjectRef::ClientObjectRef(ClientActiveObject *object) : m_object(object)
{
}
}
}
-int ClientObjectRef::gc_object(lua_State *L) {
+void ClientObjectRef::create(lua_State *L, s16 id)
+{
+ create(L, ((ClientEnvironment *)getEnv(L))->getActiveObject(id));
+}
+
+int ClientObjectRef::gc_object(lua_State *L)
+{
ClientObjectRef *obj = *(ClientObjectRef **)(lua_touserdata(L, 1));
delete obj;
return 0;
lua_pop(L, 1); // Drop metatable
luaL_openlib(L, 0, methods, 0); // fill methodtable
- lua_pop(L, 1); // Drop methodtable
+ lua_pop(L, 1); // Drop methodtable
}
const char ClientObjectRef::className[] = "ClientObjectRef";
-luaL_Reg ClientObjectRef::methods[] = {
- luamethod(ClientObjectRef, get_pos),
- luamethod(ClientObjectRef, get_velocity),
- luamethod(ClientObjectRef, get_acceleration),
- luamethod(ClientObjectRef, get_rotation),
- luamethod(ClientObjectRef, is_player),
- luamethod(ClientObjectRef, get_name),
- luamethod(ClientObjectRef, get_attach),
- luamethod(ClientObjectRef, get_nametag),
- luamethod(ClientObjectRef, get_item_textures),
- luamethod(ClientObjectRef, get_max_hp),
- {0, 0}
-};
+luaL_Reg ClientObjectRef::methods[] = {luamethod(ClientObjectRef, get_pos),
+ luamethod(ClientObjectRef, get_velocity),
+ luamethod(ClientObjectRef, get_acceleration),
+ luamethod(ClientObjectRef, get_rotation),
+ luamethod(ClientObjectRef, is_player),
+ luamethod(ClientObjectRef, is_local_player),
+ luamethod(ClientObjectRef, get_name),
+ luamethod(ClientObjectRef, get_attach),
+ luamethod(ClientObjectRef, get_nametag),
+ luamethod(ClientObjectRef, get_item_textures),
+ luamethod(ClientObjectRef, get_max_hp), luamethod(ClientObjectRef, punch),
+ luamethod(ClientObjectRef, rightclick), {0, 0}};