From: ShadowNinja Date: Mon, 16 Sep 2013 20:13:39 +0000 (-0400) Subject: Remove vector metatable setting X-Git-Tag: 0.4.8~97 X-Git-Url: https://git.librecmc.org/?a=commitdiff_plain;h=12504a18ec5b76df037482ea2cf435d8c320efbc;p=oweals%2Fminetest.git Remove vector metatable setting This not only makes the vector functions faster, but also makes them more consistent with other functions. --- diff --git a/builtin/vector.lua b/builtin/vector.lua index 839f139ca..7faa2c17d 100644 --- a/builtin/vector.lua +++ b/builtin/vector.lua @@ -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 diff --git a/doc/lua_api.txt b/doc/lua_api.txt index cfea3b5c1..5a0d5817f 100644 --- a/doc/lua_api.txt +++ b/doc/lua_api.txt @@ -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={})