diff --git a/blocks/cable.lua b/blocks/cable.lua index f3bbb6d..e4f7500 100644 --- a/blocks/cable.lua +++ b/blocks/cable.lua @@ -105,7 +105,7 @@ end If a or b is nil, we consider that --]] function logikraft.connectContiguousCable(namea,posa,a,nameb,posb,b) - print("Connecting "..tostring(namea).." with "..tostring(nameb)) + print("Connecting "..tostring(namea).."("..tostring(a)..") with "..tostring(nameb).."("..tostring(b)..")") local dira = (posa.y == posb.y) and ( (posa.z + 1 == posb.z and posa.x == posb.x and 3) or (posa.x + 1 == posb.x and posa.z == posb.z and 2) or @@ -116,8 +116,6 @@ function logikraft.connectContiguousCable(namea,posa,a,nameb,posb,b) then return nil end - print(dira) - print(logikraft.rotate4dir(4,math.fmod(dira,4))) if not namea then namea = logikraft.cableFromConns({logikraft.rotate4dir(4,6-dira)}) @@ -163,8 +161,11 @@ function logikraft.connectContiguousCable(namea,posa,a,nameb,posb,b) cib = logikraft.cables[nameb].nbToConn[b] end + print(dira) print(namea) + print(cia) print(nameb) + print(cib) local connsa = table.copy(logikraft.cables[namea].conns) local connsb = table.copy(logikraft.cables[nameb].conns) diff --git a/formspecs.lua b/formspecs.lua index 4ec367c..5d9062b 100644 --- a/formspecs.lua +++ b/formspecs.lua @@ -107,7 +107,6 @@ minetest.register_on_player_receive_fields(function(player, formname, fields) do if string.startsWith(f,"input_") then - print("ploup") local v = (x == "OFF") and 1 or 0 _contexts[cn][string.without(f,"input_")] = v end diff --git a/items.lua b/items.lua index e6a3823..47f8f99 100644 --- a/items.lua +++ b/items.lua @@ -27,11 +27,11 @@ minetest.register_craftitem("logikraft:linker", { local pos = logikraft.cablenodes[minetest.get_node(pointed_thing.under).name] and pointed_thing.under or pointed_thing.above local node = minetest.get_node(pos) + local thisnb = logikraft.cablenodes[minetest.get_node(pointed_thing.under).name] and logikraft.lookingAtNbIndex(user,pointed_thing.under) or -1 if selectedx == pos.x and selectedy == pos.y and selectedz == pos.z then - if(selectednb ~= thisnb) + if(selectednb ~= thisnb and thisnb ~= -1 and selectednb ~= -1) then - local thisnb = logikraft.cablenodes[minetest.get_node(pointed_thing.under).name] and logikraft.lookingAtNbIndex(user,pointed_thing.under) or nil local new = logikraft.connectInCable(logikraft.cablenodes[node.name],selectednb,thisnb) minetest.swap_node(pos, {name = "logikraft:cable_" .. new}) end @@ -39,10 +39,9 @@ minetest.register_craftitem("logikraft:linker", { meta:set_string("inventory_image","linker.png") return itemstack else - local thisnb = logikraft.cablenodes[minetest.get_node(pointed_thing.under).name] and logikraft.lookingAtNbIndex(user,pointed_thing.under) or nil local new = logikraft.connectContiguousCable( - logikraft.cablenodes[minetest.get_node(selectedpos).name],selectedpos,selectednb, - logikraft.cablenodes[node.name],pos,thisnb) + logikraft.cablenodes[minetest.get_node(selectedpos).name],selectedpos,(selectednb ~= -1 and selectednb) or nil, + logikraft.cablenodes[node.name],pos,(thisnb ~= -1 and thisnb) or nil) if new then minetest.swap_node(selectedpos, {name = "logikraft:cable_" .. new[1]}) @@ -50,35 +49,48 @@ minetest.register_craftitem("logikraft:linker", { meta:set_int("logikraft:selected_nb",0) meta:set_string("inventory_image","linker.png") else - minetest.chat_send_all("Les cables sont trop loins l'un de l'autre :/") + minetest.chat_send_player(user:get_player_name(),"Les cables sont trop loins l'un de l'autre :/") end return itemstack end else - local node = minetest.get_node(pointed_thing.under) - + + local pos = logikraft.cablenodes[minetest.get_node(pointed_thing.under).name] and pointed_thing.under or pointed_thing.above + local node = minetest.get_node(pos) + if logikraft.cablenodes[node.name] then -- If we are looking at a cable we activate and store data - meta:set_int("logikraft:selected_nb",logikraft.lookingAtNbIndex(user,pointed_thing.under)) - meta:set_int("logikraft:selected_x",pointed_thing.under.x) - meta:set_int("logikraft:selected_y",pointed_thing.under.y) - meta:set_int("logikraft:selected_z",pointed_thing.under.z) + local thisnb = logikraft.cablenodes[minetest.get_node(pointed_thing.under).name] and logikraft.lookingAtNbIndex(user,pointed_thing.under) or -1 + + meta:set_int("logikraft:selected_nb",thisnb) + meta:set_int("logikraft:selected_x",pos.x) + meta:set_int("logikraft:selected_y",pos.y) + meta:set_int("logikraft:selected_z",pos.z) meta:set_string("inventory_image","linker_activated.png") else -- Else we place a cable - local anode = minetest.get_node(pointed_thing.above) - local anode_def = minetest.registered_nodes[anode.name] - if logikraft.cablenodes[anode.name] - then - -- We add single pin to target direction, and we connect source - minetest.add_node(pointed_thing.above, {name = "logikraft:cable_NSEW1"}) - elseif node_def and node_def.buildable_to then - -- We create a single pin to target direction, and we connect source - minetest.add_node(pointed_thing.above, {name = "logikraft:cable_NSEW1"}) - else - return itemstack + local node_def = minetest.registered_nodes[node.name] + if not (node_def and node_def.buildable_to) + then return itemstack end + local new = nil + local poz = { + {x = pos.x+1, y = pos.y, z = pos.z}, + {x = pos.x, y = pos.y, z = pos.z+1}, + {x = pos.x-1, y = pos.y, z = pos.z}, + {x = pos.x, y = pos.y, z = pos.z-1} + } + for k,pos2 in pairs(poz) + do + local cable2 = minetest.get_node(pos2) + if logikraft.cablenodes[cable2.name] + then + local contiguous = logikraft.connectContiguousCable(new, pos, 1, logikraft.cablenodes[cable2.name], pos2, nil) + new = contiguous[1] + minetest.swap_node(pos2, {name = "logikraft:cable_" .. contiguous[2]}) + end end + minetest.add_node(pos, {name = "logikraft:cable_" .. (new or "NSEW1")}) end end