summaryrefslogtreecommitdiff
path: root/carts/functions.lua
diff options
context:
space:
mode:
Diffstat (limited to 'carts/functions.lua')
-rw-r--r--carts/functions.lua56
1 files changed, 56 insertions, 0 deletions
diff --git a/carts/functions.lua b/carts/functions.lua
new file mode 100644
index 0000000..8a7da47
--- /dev/null
+++ b/carts/functions.lua
@@ -0,0 +1,56 @@
+
+--
+-- Helper functions
+--
+
+cart_func = {}
+
+function cart_func:get_sign(z)
+ if z == 0 then
+ return 0
+ else
+ return z/math.abs(z)
+ end
+end
+
+-- Returns the velocity as a unit vector
+-- The smaller part of the vector will be turned to 0
+function cart_func:velocity_to_dir(v)
+ if math.abs(v.x) > math.abs(v.z) then
+ return {x=cart_func:get_sign(v.x), y=cart_func:get_sign(v.y), z=0}
+ else
+ return {x=0, y=cart_func:get_sign(v.y), z=cart_func:get_sign(v.z)}
+ end
+end
+
+function cart_func:is_rail(p)
+ local nn = minetest.env:get_node(p).name
+ return minetest.get_item_group(nn, "rail") ~= 0
+end
+
+function cart_func:is_int(z)
+ z = math.abs(z)
+ return math.abs(math.floor(z+0.5)-z) <= 0.1
+end
+
+cart_func.v3 = {}
+
+function cart_func.v3:add(v1, v2)
+ return {x=v1.x+v2.x, y=v1.y+v2.y, z=v1.z+v2.z}
+end
+
+function cart_func.v3:copy(v)
+ return {x=v.x, y=v.y, z=v.z}
+end
+
+function cart_func.v3:round(v)
+ return {
+ x = math.floor(v.x+0.5),
+ y = math.floor(v.y+0.5),
+ z = math.floor(v.z+0.5),
+ }
+end
+
+function cart_func.v3:equal(v1, v2)
+ return v1.x == v2.x and v1.y == v2.y and v1.z == v2.z
+end