]> git.lizzy.rs Git - minetest.git/blobdiff - builtin/vector.lua
Fix lost pause support in singleplayer
[minetest.git] / builtin / vector.lua
index 698309c4ac20055875daeef9d04d85df4c161d46..77944b612111c6019ff057ae869ae65985f4eafb 100644 (file)
@@ -1,41 +1,46 @@
 
 vector = {}
 
+local function assert_vector(v)
+       assert(type(v) == "table" and v.x and v.y and v.z, "Invalid vector")
+end
+
 function vector.new(a, b, c)
-       assert(a)
        if type(a) == "table" then
+               assert(a.x and a.y and a.z, "Invalid vector passed to vector.new()")
                return {x=a.x, y=a.y, z=a.z}
-       else
-               assert(b and c)
+       elseif a then
+               assert(b and c, "Invalid arguments for vector.new()")
                return {x=a, y=b, z=c}
        end
        return {x=0, y=0, z=0}
 end
 
 function vector.equals(a, b)
-       assert(a and b)
+       assert_vector(a)
+       assert_vector(b)
        return a.x == b.x and
               a.y == b.y and
               a.z == b.z
 end
 
 function vector.length(v)
-       assert(v)
+       assert_vector(v)
        return math.hypot(v.x, math.hypot(v.y, v.z))
 end
 
 function vector.normalize(v)
-       assert(v)
+       assert_vector(v)
        local len = vector.length(v)
        if len == 0 then
-               return vector.new()
+               return {x=0, y=0, z=0}
        else
                return vector.divide(v, len)
        end
 end
 
 function vector.round(v)
-       assert(v)
+       assert_vector(v)
        return {
                x = math.floor(v.x + 0.5),
                y = math.floor(v.y + 0.5),
@@ -44,7 +49,8 @@ function vector.round(v)
 end
 
 function vector.distance(a, b)
-       assert(a and b)
+       assert_vector(a)
+       assert_vector(b)
        local x = a.x - b.x
        local y = a.y - b.y
        local z = a.z - b.z
@@ -52,7 +58,8 @@ function vector.distance(a, b)
 end
 
 function vector.direction(pos1, pos2)
-       assert(pos1 and pos2)
+       assert_vector(pos1)
+       assert_vector(pos2)
        local x_raw = pos2.x - pos1.x
        local y_raw = pos2.y - pos1.y
        local z_raw = pos2.z - pos1.z
@@ -82,8 +89,9 @@ end
 
 
 function vector.add(a, b)
-       assert(a and b)
+       assert_vector(a)
        if type(b) == "table" then
+           assert_vector(b)
                return {x = a.x + b.x,
                        y = a.y + b.y,
                        z = a.z + b.z}
@@ -95,8 +103,9 @@ function vector.add(a, b)
 end
 
 function vector.subtract(a, b)
-       assert(a and b)
+       assert_vector(a)
        if type(b) == "table" then
+           assert_vector(b)
                return {x = a.x - b.x,
                        y = a.y - b.y,
                        z = a.z - b.z}
@@ -108,8 +117,9 @@ function vector.subtract(a, b)
 end
 
 function vector.multiply(a, b)
-       assert(a and b)
+       assert_vector(a)
        if type(b) == "table" then
+           assert_vector(b)
                return {x = a.x * b.x,
                        y = a.y * b.y,
                        z = a.z * b.z}
@@ -121,8 +131,9 @@ function vector.multiply(a, b)
 end
 
 function vector.divide(a, b)
-       assert(a and b)
+       assert_vector(a)
        if type(b) == "table" then
+        assert_vector(b)
                return {x = a.x / b.x,
                        y = a.y / b.y,
                        z = a.z / b.z}