Skip to content

Commit

Permalink
Remove vector metatable setting
Browse files Browse the repository at this point in the history
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 12504a1
Show file tree
Hide file tree
Showing 2 changed files with 28 additions and 56 deletions.
72 changes: 27 additions & 45 deletions builtin/vector.lua
Expand Up @@ -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)
Expand Down Expand Up @@ -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

12 changes: 1 addition & 11 deletions doc/lua_api.txt
Expand Up @@ -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={})
Expand Down

0 comments on commit 12504a1

Please sign in to comment.