Skip to content
Permalink
Browse files

Remove vector metatable setting

This not only makes the vector functions faster, but also makes them more
consistent with other functions.
  • Loading branch information
ShadowNinja authored and celeron55 committed Oct 17, 2013
1 parent b359101 commit 12504a18ec5b76df037482ea2cf435d8c320efbc
Showing with 28 additions and 56 deletions.
  1. +27 −45 builtin/vector.lua
  2. +1 −11 doc/lua_api.txt
@@ -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

@@ -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={})

0 comments on commit 12504a1

Please sign in to comment.