diff options
author | Vanessa Dannenberg <vanessa.e.dannenberg@gmail.com> | 2020-06-30 10:39:52 +0000 |
---|---|---|
committer | Vanessa Dannenberg <vanessa.e.dannenberg@gmail.com> | 2020-06-30 10:39:52 +0000 |
commit | 366d57f4da4daa169f82a6ea59b028bb96cbf51a (patch) | |
tree | ecba5c01de2135a46e97b2b8dfe968ab176f3007 | |
parent | 9338c109a6aa5c8c160b18f2ebd7da773bfb7a66 (diff) | |
parent | c79e68a80c2aec939143af99b15173c05d067d2b (diff) | |
download | pipeworks-366d57f4da4daa169f82a6ea59b028bb96cbf51a.tar pipeworks-366d57f4da4daa169f82a6ea59b028bb96cbf51a.tar.gz pipeworks-366d57f4da4daa169f82a6ea59b028bb96cbf51a.tar.bz2 pipeworks-366d57f4da4daa169f82a6ea59b028bb96cbf51a.tar.xz pipeworks-366d57f4da4daa169f82a6ea59b028bb96cbf51a.zip |
Merge branch 'fix_connect_sides' into 'master'
Consider connect_sides for item transport
See merge request VanessaE/pipeworks!21
-rw-r--r-- | autoplace_tubes.lua | 17 | ||||
-rw-r--r-- | item_transport.lua | 5 |
2 files changed, 13 insertions, 9 deletions
diff --git a/autoplace_tubes.lua b/autoplace_tubes.lua index 40a041f..51ee383 100644 --- a/autoplace_tubes.lua +++ b/autoplace_tubes.lua @@ -53,27 +53,28 @@ local function tube_autoroute(pos) } -- xm = 1, xp = 2, ym = 3, yp = 4, zm = 5, zp = 6 - local positions = {} - local nodes = {} + local adjlist = {} -- this will be used in item_transport + for i, adj in ipairs(adjustments) do - positions[i] = vector.add(pos, adj) - nodes[i] = minetest.get_node(positions[i]) - end + local position = vector.add(pos, adj) + local node = minetest.get_node(position) - for i, node in ipairs(nodes) do local idef = minetest.registered_nodes[node.name] -- handle the tubes themselves if is_tube(node.name) then active[i] = 1 + table.insert(adjlist, adj) -- handle new style connectors elseif idef and idef.tube and idef.tube.connect_sides then - local dir = adjustments[i] - if idef.tube.connect_sides[nodeside(node, vector.multiply(dir, -1))] then + if idef.tube.connect_sides[nodeside(node, vector.multiply(adj, -1))] then active[i] = 1 + table.insert(adjlist, adj) end end end + minetest.get_meta(pos):set_string("adjlist", minetest.serialize(adjlist)) + -- all sides checked, now figure which tube to use. local nodedef = minetest.registered_nodes[nctr.name] diff --git a/item_transport.lua b/item_transport.lua index 7f9e241..f4067d8 100644 --- a/item_transport.lua +++ b/item_transport.lua @@ -25,7 +25,7 @@ end -- both optional w/ sensible defaults and fallback to normal allow_* function -- XXX: possibly change insert_object to insert_item -local adjlist={{x=0,y=0,z=1},{x=0,y=0,z=-1},{x=0,y=1,z=0},{x=0,y=-1,z=0},{x=1,y=0,z=0},{x=-1,y=0,z=0}} +local default_adjlist={{x=0,y=0,z=1},{x=0,y=0,z=-1},{x=0,y=1,z=0},{x=0,y=-1,z=0},{x=1,y=0,z=0},{x=-1,y=0,z=0}} function pipeworks.notvel(tbl, vel) local tbl2={} @@ -80,6 +80,9 @@ local function go_next_compat(pos, cnode, cmeta, cycledir, vel, stack, owner) if minetest.registered_nodes[cnode.name] and minetest.registered_nodes[cnode.name].tube and minetest.registered_nodes[cnode.name].tube.can_go then can_go = minetest.registered_nodes[cnode.name].tube.can_go(pos, cnode, vel, stack) else + local adjlist_string = minetest.get_meta(pos):get_string("adjlist") + local adjlist = minetest.deserialize(adjlist_string) or default_adjlist -- backward compat: if not found, use old behavior: all directions + can_go = pipeworks.notvel(adjlist, vel) end -- can_go() is expected to return an array-like table of candidate offsets. |