Upgraded the linker

This commit is contained in:
MysaaJava 2024-05-20 19:06:14 +02:00
parent 6a2c44da91
commit 2c8f51f8ba
Signed by: Mysaa
GPG Key ID: DBA23608F23F5A10
3 changed files with 91 additions and 47 deletions

View File

@ -63,7 +63,7 @@ function logikraft.rotateCable(name,r)
local newconn = {}
for i,v in ipairs(conn)
do
newconn[i] = rotate4dir(v,r)
newconn[i] = logikraft.rotate4dir(v,r)
end
table.sort(newconn)
return logikraft.cableFromConns(newconn)
@ -101,8 +101,11 @@ end
--[[
Returns {newcablea,newcableb} if the two cables are contiguous
Returns nil otherwise
If namea or nameb is nil, no cable is present, and we create a single pin, or we connect to the conn in the direction
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))
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
@ -112,21 +115,63 @@ function logikraft.connectContiguousCable(namea,posa,a,nameb,posb,b)
if dira == nil
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)})
a = 1 -- There is only one nodebox
end
if not nameb
then
nameb = logikraft.cableFromConns({logikraft.rotate4dir(4,4-dira)})
b = 1 -- There is only one nodebox
end
local cia
if not a
then
cia = logikraft.connFromDir(namea,dira)
if not cia
then
-- We need to add a tip to a
local connsa = table.copy(logikraft.cables[namea].conns)
table.insert(connsa,logikraft.rotate4dir(4,6-dira))
table.sort(connsa)
namea = logikraft.cableFromConns(connsa)
cia = logikraft.connFromDir(namea,dira)
end
else
cia = logikraft.cables[namea].nbToConn[a]
end
local cib
if not b
then
cib = logikraft.connFromDir(nameb,math.fmod(dira+2,4))
if not cib
then
-- We need to add a tip to b
local connsb = table.copy(logikraft.cables[nameb].conns)
table.insert(connsb,logikraft.rotate4dir(4,4-dira))
table.sort(connsb)
nameb = logikraft.cableFromConns(connsb)
cib = logikraft.connFromDir(nameb,math.fmod(dira+2,4))
end
else
cib = logikraft.cables[nameb].nbToConn[b]
end
print(namea)
print(nameb)
local connsa = table.copy(logikraft.cables[namea].conns)
local connsb = table.copy(logikraft.cables[nameb].conns)
print(dump(connsa))
print(dump(connsb))
local cia = logikraft.cables[namea].nbToConn[a]
local cib = logikraft.cables[nameb].nbToConn[b]
--print(dump(connsa))
--print(dump(connsb))
local cia2 = logikraft.connFromDir(namea,dira)
local cib2 = logikraft.connFromDir(nameb,math.fmod(dira+2,4))
print(dira)
print(cia)
print(cia2)
print(cib)
print(cib2)
-- (nba == nil) -> Need to add dira to the a
-- (a == nba) -> Already connected

View File

@ -9,7 +9,6 @@ dofile(minetest.get_modpath("logikraft") .. "/blocks/component.lua")
dofile(minetest.get_modpath("logikraft") .. "/blocks/components_register.lua")
dofile(minetest.get_modpath("logikraft") .. "/blocks/cable.lua")
dofile(minetest.get_modpath("logikraft") .. "/blocks/cables_register.lua")
dofile(minetest.get_modpath("logikraft") .. "/blocks/iocomponent.lua")
dofile(minetest.get_modpath("logikraft") .. "/items.lua")
minetest.register_on_joinplayer(function(player)

View File

@ -17,7 +17,6 @@ minetest.register_craftitem("logikraft:linker", {
inventory_image = "linker.png",
on_place = function(itemstack, user, pointed_thing)
local meta = itemstack:get_meta()
local node = minetest.get_node(pointed_thing.under)
if meta:get_int("logikraft:selected_nb") ~= 0
then
local selectednb = meta:get_int("logikraft:selected_nb")
@ -25,44 +24,39 @@ minetest.register_craftitem("logikraft:linker", {
local selectedy = meta:get_int("logikraft:selected_y")
local selectedz = meta:get_int("logikraft:selected_z")
local selectedpos = {x = selectedx, y = selectedy, z = selectedz}
if logikraft.cablenodes[node.name]
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 selectedx == pos.x and selectedy == pos.y and selectedz == pos.z
then
if selectedx == pointed_thing.under.x and selectedy == pointed_thing.under.y and selectedz == pointed_thing.under.z
if(selectednb ~= thisnb)
then
local thisnb = logikraft.lookingAtNbIndex(user,pointed_thing.under)
if(selectednb ~= thisnb)
then
local new = logikraft.connectInCable(logikraft.cablenodes[node.name],selectednb,thisnb)
minetest.swap_node(pointed_thing.under, {name = "logikraft:cable_" .. new})
end
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
meta:set_int("logikraft:selected_nb",0)
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)
if new
then
minetest.swap_node(selectedpos, {name = "logikraft:cable_" .. new[1]})
minetest.swap_node(pos, {name = "logikraft:cable_" .. new[2]})
meta:set_int("logikraft:selected_nb",0)
meta:set_string("inventory_image","linker.png")
else
local thisnb = logikraft.lookingAtNbIndex(user,pointed_thing.under)
local new = logikraft.connectContiguousCable(
logikraft.cablenodes[minetest.get_node(selectedpos).name],selectedpos,selectednb,
logikraft.cablenodes[node.name],pointed_thing.under,thisnb)
if new
then
minetest.swap_node(selectedpos, {name = "logikraft:cable_" .. new[1]})
minetest.swap_node(pointed_thing.under, {name = "logikraft:cable_" .. new[2]})
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 :/")
end
minetest.chat_send_all("Les cables sont trop loins l'un de l'autre :/")
end
else
local node_def = minetest.registered_nodes[minetest.get_node(pointed_thing.above).name]
if not node_def or not node_def.buildable_to then
-- Then we cannot build here
return itemstack
end
minetest.add_node(pointed_thing.above, {name = "logikraft:cable_NSEW1"})
meta:set_int("logikraft:selected_nb",0)
meta:set_string("inventory_image","linker.png")
return itemstack
end
else
local node = minetest.get_node(pointed_thing.under)
if logikraft.cablenodes[node.name]
then
-- If we are looking at a cable we activate and store data
@ -73,12 +67,18 @@ minetest.register_craftitem("logikraft:linker", {
meta:set_string("inventory_image","linker_activated.png")
else
-- Else we place a cable
local node_def = minetest.registered_nodes[minetest.get_node(pointed_thing.above).name]
if not node_def or not node_def.buildable_to then
-- Then we cannot build here
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
end
minetest.add_node(pointed_thing.above, {name = "logikraft:cable_NSEW1"})
end
end