From a064cc06a5a1d0a7df224b71a6a2ad7df87c693d Mon Sep 17 00:00:00 2001 From: minermoder27 Date: Fri, 21 Mar 2014 07:43:00 +1300 Subject: [PATCH] Fix cart stopping bug --- functions.lua | 6 ++++++ voxelgetter.lua | 16 ++++++++++++++++ 2 files changed, 22 insertions(+) create mode 100644 voxelgetter.lua diff --git a/functions.lua b/functions.lua index 8a7da47..73df96b 100644 --- a/functions.lua +++ b/functions.lua @@ -5,6 +5,8 @@ cart_func = {} +dofile(minetest.get_modpath("carts").."/voxelgetter.lua") + function cart_func:get_sign(z) if z == 0 then return 0 @@ -25,6 +27,10 @@ end function cart_func:is_rail(p) local nn = minetest.env:get_node(p).name + if nn=="ignore" then + print("oops") + nn=cart_func:get_content_voxel(p) + end return minetest.get_item_group(nn, "rail") ~= 0 end diff --git a/voxelgetter.lua b/voxelgetter.lua new file mode 100644 index 0000000..df7c7f8 --- /dev/null +++ b/voxelgetter.lua @@ -0,0 +1,16 @@ +function cart_func:get_content_voxel(pos) + local t1 = os.clock() + local vm = minetest.get_voxel_manip() + local pos1, pos2 = vm:read_from_map(vector.add(pos, {x=-1,y=-1,z=-1}),vector.add(pos, {x=1,y=1,z=1})) + local a = VoxelArea:new{ + MinEdge=pos1, + MaxEdge=pos2, + } + + local data = vm:get_data() + local vi = a:indexp(pos) + local railid = data[vi] + local real_name = minetest.get_name_from_content_id(railid) + print(string.format("voxel-ing rail: elapsed time: %.2fms", (os.clock() - t1) * 1000)) + return real_name +end