Second Linker Upgrade

This commit is contained in:
MysaaJava 2024-05-20 19:56:30 +02:00
parent 2c8f51f8ba
commit dbb30f0634
Signed by: Mysaa
GPG Key ID: DBA23608F23F5A10
3 changed files with 39 additions and 27 deletions

View File

@ -105,7 +105,7 @@ end
If a or b is nil, we consider that If a or b is nil, we consider that
--]] --]]
function logikraft.connectContiguousCable(namea,posa,a,nameb,posb,b) 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 ( local dira = (posa.y == posb.y) and (
(posa.z + 1 == posb.z and posa.x == posb.x and 3) or (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 (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 then return nil
end end
print(dira)
print(logikraft.rotate4dir(4,math.fmod(dira,4)))
if not namea if not namea
then then
namea = logikraft.cableFromConns({logikraft.rotate4dir(4,6-dira)}) 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] cib = logikraft.cables[nameb].nbToConn[b]
end end
print(dira)
print(namea) print(namea)
print(cia)
print(nameb) print(nameb)
print(cib)
local connsa = table.copy(logikraft.cables[namea].conns) local connsa = table.copy(logikraft.cables[namea].conns)
local connsb = table.copy(logikraft.cables[nameb].conns) local connsb = table.copy(logikraft.cables[nameb].conns)

View File

@ -107,7 +107,6 @@ minetest.register_on_player_receive_fields(function(player, formname, fields)
do do
if string.startsWith(f,"input_") if string.startsWith(f,"input_")
then then
print("ploup")
local v = (x == "OFF") and 1 or 0 local v = (x == "OFF") and 1 or 0
_contexts[cn][string.without(f,"input_")] = v _contexts[cn][string.without(f,"input_")] = v
end end

View File

@ -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 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 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 if selectedx == pos.x and selectedy == pos.y and selectedz == pos.z
then then
if(selectednb ~= thisnb) if(selectednb ~= thisnb and thisnb ~= -1 and selectednb ~= -1)
then 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) local new = logikraft.connectInCable(logikraft.cablenodes[node.name],selectednb,thisnb)
minetest.swap_node(pos, {name = "logikraft:cable_" .. new}) minetest.swap_node(pos, {name = "logikraft:cable_" .. new})
end end
@ -39,10 +39,9 @@ minetest.register_craftitem("logikraft:linker", {
meta:set_string("inventory_image","linker.png") meta:set_string("inventory_image","linker.png")
return itemstack return itemstack
else 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( local new = logikraft.connectContiguousCable(
logikraft.cablenodes[minetest.get_node(selectedpos).name],selectedpos,selectednb, logikraft.cablenodes[minetest.get_node(selectedpos).name],selectedpos,(selectednb ~= -1 and selectednb) or nil,
logikraft.cablenodes[node.name],pos,thisnb) logikraft.cablenodes[node.name],pos,(thisnb ~= -1 and thisnb) or nil)
if new if new
then then
minetest.swap_node(selectedpos, {name = "logikraft:cable_" .. new[1]}) 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_int("logikraft:selected_nb",0)
meta:set_string("inventory_image","linker.png") meta:set_string("inventory_image","linker.png")
else 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 end
return itemstack return itemstack
end end
else 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] if logikraft.cablenodes[node.name]
then then
-- If we are looking at a cable we activate and store data -- If we are looking at a cable we activate and store data
meta:set_int("logikraft:selected_nb",logikraft.lookingAtNbIndex(user,pointed_thing.under)) 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_x",pointed_thing.under.x)
meta:set_int("logikraft:selected_y",pointed_thing.under.y) meta:set_int("logikraft:selected_nb",thisnb)
meta:set_int("logikraft:selected_z",pointed_thing.under.z) 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") meta:set_string("inventory_image","linker_activated.png")
else else
-- Else we place a cable -- Else we place a cable
local anode = minetest.get_node(pointed_thing.above) local node_def = minetest.registered_nodes[node.name]
local anode_def = minetest.registered_nodes[anode.name] if not (node_def and node_def.buildable_to)
if logikraft.cablenodes[anode.name] then return itemstack end
then local new = nil
-- We add single pin to target direction, and we connect source local poz = {
minetest.add_node(pointed_thing.above, {name = "logikraft:cable_NSEW1"}) {x = pos.x+1, y = pos.y, z = pos.z},
elseif node_def and node_def.buildable_to then {x = pos.x, y = pos.y, z = pos.z+1},
-- We create a single pin to target direction, and we connect source {x = pos.x-1, y = pos.y, z = pos.z},
minetest.add_node(pointed_thing.above, {name = "logikraft:cable_NSEW1"}) {x = pos.x, y = pos.y, z = pos.z-1}
else }
return itemstack 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 end
minetest.add_node(pos, {name = "logikraft:cable_" .. (new or "NSEW1")})
end end
end end