]> git.lizzy.rs Git - dragonfireclient.git/blobdiff - src/script/lua_api/l_clientobject.cpp
Merge pull request #10 from corarona/master
[dragonfireclient.git] / src / script / lua_api / l_clientobject.cpp
index db3563cc4083ecd0d534b6ca072d346c0eb27178..05b3e28503001f736b4cc3814d7959ba4f1e2ebf 100644 (file)
@@ -22,9 +22,7 @@ with this program; if not, write to the Free Software Foundation, Inc.,
 #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)
 {
@@ -32,7 +30,7 @@ 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)
@@ -89,6 +87,14 @@ int ClientObjectRef::l_is_player(lua_State *L)
        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);
@@ -136,8 +142,25 @@ int ClientObjectRef::l_get_max_hp(lua_State *L)
        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)
 {
 }
 
@@ -151,7 +174,13 @@ void ClientObjectRef::create(lua_State *L, ClientActiveObject *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;
@@ -180,20 +209,19 @@ void ClientObjectRef::Register(lua_State *L)
        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}};