Remove vector metatable setting
authorShadowNinja <noreply@gmail.com>
Mon, 16 Sep 2013 20:13:39 +0000 (16:13 -0400)
committerPerttu Ahola <celeron55@gmail.com>
Thu, 17 Oct 2013 06:41:01 +0000 (09:41 +0300)
This not only makes the vector functions faster, but also makes them more
consistent with other functions.

builtin/vector.lua
doc/lua_api.txt

index 839f139ca25a018314b0ca0224150974b9369b0e..7faa2c17dc922cbbb7078a58b0fbd02c1ad45c0b 100644 (file)
@@ -2,22 +2,12 @@
 vector = {}
 
 function vector.new(a, b, c)
-       v = {x=0, y=0, z=0}
        if type(a) == "table" then
-               v = {x=a.x, y=a.y, z=a.z}
+               return {x=a.x, y=a.y, z=a.z}
        elseif a and b and c then
-               v = {x=a, y=b, z=c}
+               return {x=a, y=b, z=c}
        end
-       setmetatable(v, {
-               __add = vector.add,
-               __sub = vector.subtract,
-               __mul = vector.multiply,
-               __div = vector.divide,
-               __umn = function(v) return vector.multiply(v, -1) end,
-               __len = vector.length,
-               __eq  = vector.equals,
-       })
-       return v
+       return {x=0, y=0, z=0}
 end
 
 function vector.equals(a, b)
@@ -85,57 +75,49 @@ end
 
 function vector.add(a, b)
        if type(b) == "table" then
-                return vector.new(
-                       a.x + b.x,
-                       a.y + b.y,
-                       a.z + b.z)
+               return {x = a.x + b.x,
+                       y = a.y + b.y,
+                       z = a.z + b.z}
        else
-               return vector.new(
-                       a.x + b,
-                       a.y + b,
-                       a.z + b)
+               return {x = a.x + b,
+                       y = a.y + b,
+                       z = a.z + b}
        end
 end
 
 function vector.subtract(a, b)
        if type(b) == "table" then
-               return vector.new(
-                       a.x - b.x,
-                       a.y - b.y,
-                       a.z - b.z)
+               return {x = a.x - b.x,
+                       y = a.y - b.y,
+                       z = a.z - b.z}
        else
-               return vector.new(
-                       a.x - b,
-                       a.y - b,
-                       a.z - b)
+               return {x = a.x - b,
+                       y = a.y - b,
+                       z = a.z - b}
        end
 end
 
 function vector.multiply(a, b)
        if type(b) == "table" then
-               return vector.new(
-                       a.x * b.x,
-                       a.y * b.y,
-                       a.z * b.z)
+               return {x = a.x * b.x,
+                       y = a.y * b.y,
+                       z = a.z * b.z}
        else
-               return vector.new(
-                       a.x * b,
-                       a.y * b,
-                       a.z * b)
+               return {x = a.x * b,
+                       y = a.y * b,
+                       z = a.z * b}
        end
 end
 
 function vector.divide(a, b)
        if type(b) == "table" then
-               return vector.new(
-                       a.x / b.x,
-                       a.y / b.y,
-                       a.z / b.z)
+               return {x = a.x / b.x,
+                       y = a.y / b.y,
+                       z = a.z / b.z}
        else
-               return vector.new(
-                       a.x / b,
-                       a.y / b,
-                       a.z / b)
+               return {x = a.x / b,
+                       y = a.y / b,
+                       z = a.z / b}
        end
 end
 
index cfea3b5c15eea441e6bf4402aab707c335d63898..5a0d5817f284ad51359dc1bd740a982953e8a230 100644 (file)
@@ -1037,22 +1037,12 @@ vector.length(v) -> number
 vector.normalize(v) -> vector
 vector.round(v) -> vector
 vector.equal(v1, v2) -> bool
+For the folowing x can be either a vector or a number.
 vector.add(v, x) -> vector
- ^ x can be annother vector or a number
 vector.subtract(v, x) -> vector
 vector.multiply(v, x) -> vector
 vector.divide(v, x) -> vector
 
-You can also use Lua operators on vectors.
-For example:
-       v1 = vector.new()
-       v1 = v1 + 5
-       v2 = vector.new(v1)
-       v1 = v1 * v2
-       if v1 == v2 then
-               error("Math broke")
-       end
-
 Helper functions
 -----------------
 dump2(obj, name="_", dumped={})