Fix ObjectRef:punch()
authorPerttu Ahola <celeron55@gmail.com>
Sun, 9 Sep 2012 09:05:38 +0000 (12:05 +0300)
committerPerttu Ahola <celeron55@gmail.com>
Sun, 9 Sep 2012 09:05:38 +0000 (12:05 +0300)
doc/lua_api.txt
src/scriptapi.cpp

index b71b6d62c0516b8a2cc970a863e1bacfd8366a00..782378c1f00fe31095d0b6747f97d04e89a2db1b 100644 (file)
@@ -1087,6 +1087,7 @@ methods:
 - punch(puncher, time_from_last_punch, tool_capabilities, direction)
   ^ puncher = an another ObjectRef,
   ^ time_from_last_punch = time since last punch action of the puncher
+  ^ direction: can be nil
 - right_click(clicker); clicker = an another ObjectRef
 - get_hp(): returns number of hitpoints (2 * number of hearts)
 - set_hp(hp): set number of hitpoints (2 * number of hearts)
index 81e96aec64c2a3879fccc237af357e11b7e14edf..39e2a46e4f520b3c3aac23078ecfe359b40af6b4 100644 (file)
@@ -2542,7 +2542,7 @@ private:
                return 0;
        }
 
-       // punch(self, puncher, tool_capabilities, direction, time_from_last_punch)
+       // punch(self, puncher, time_from_last_punch, tool_capabilities, dir)
        static int l_punch(lua_State *L)
        {
                ObjectRef *ref = checkobject(L, 1);
@@ -2551,13 +2551,18 @@ private:
                ServerActiveObject *puncher = getobject(puncher_ref);
                if(co == NULL) return 0;
                if(puncher == NULL) return 0;
-               ToolCapabilities toolcap = read_tool_capabilities(L, 3);
-               v3f dir = read_v3f(L, 4);
+               v3f dir;
+               if(lua_type(L, 5) != LUA_TTABLE)
+                       dir = co->getBasePosition() - puncher->getBasePosition();
+               else
+                       dir = read_v3f(L, 5);
                float time_from_last_punch = 1000000;
-               if(lua_isnumber(L, 5))
-                       time_from_last_punch = lua_tonumber(L, 5);
+               if(lua_isnumber(L, 3))
+                       time_from_last_punch = lua_tonumber(L, 3);
+               ToolCapabilities toolcap = read_tool_capabilities(L, 4);
+               dir.normalize();
                // Do it
-               puncher->punch(dir, &toolcap, puncher, time_from_last_punch);
+               co->punch(dir, &toolcap, puncher, time_from_last_punch);
                return 0;
        }