171 lines
7.7 KiB
Lua
171 lines
7.7 KiB
Lua
minetest.register_craftitem("logikraft:rotator", {
|
||
description = "The rotator",
|
||
inventory_image = "rotator.png",
|
||
on_place = function(itemstack, user, pointed_thing)
|
||
local node = minetest.get_node(pointed_thing.under)
|
||
if not logikraft.cablenodes[node.name]
|
||
then return itemstack
|
||
end
|
||
|
||
local new = logikraft.rotateCable(logikraft.cablenodes[node.name],1)
|
||
minetest.swap_node(pointed_thing.under, {name = "logikraft:cable_" .. new})
|
||
return itemstack
|
||
end
|
||
})
|
||
minetest.register_craftitem("logikraft:linker", {
|
||
description = "The linker",
|
||
inventory_image = "linker.png",
|
||
on_place = function(itemstack, user, pointed_thing)
|
||
local meta = itemstack:get_meta()
|
||
if meta:get_int("logikraft:selected_nb") ~= 0
|
||
then
|
||
local selectednb = meta:get_int("logikraft:selected_nb")
|
||
local selectedx = meta:get_int("logikraft:selected_x")
|
||
local selectedy = meta:get_int("logikraft:selected_y")
|
||
local selectedz = meta:get_int("logikraft:selected_z")
|
||
local selectedpos = {x = selectedx, y = selectedy, z = selectedz}
|
||
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 and thisnb ~= -1 and selectednb ~= -1)
|
||
then
|
||
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 new = logikraft.connectContiguousCable(
|
||
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]})
|
||
minetest.swap_node(pos, {name = "logikraft:cable_" .. new[2]})
|
||
meta:set_int("logikraft:selected_nb",0)
|
||
meta:set_string("inventory_image","linker.png")
|
||
else
|
||
minetest.chat_send_player(user:get_player_name(),"Les cables sont trop loins l'un de l'autre :/")
|
||
end
|
||
return itemstack
|
||
end
|
||
else
|
||
|
||
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
|
||
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 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
|
||
|
||
return itemstack
|
||
end,
|
||
on_secondary_use = function(itemstack, user, pointed_thing)
|
||
-- Looking at nothing -> we dispose of the data
|
||
local meta = itemstack:get_meta()
|
||
meta:set_int("logikraft:selected_nb",0)
|
||
meta:set_string("inventory_image","linker.png")
|
||
return itemstack
|
||
end
|
||
})
|
||
minetest.register_craftitem("logikraft:unlinker", {
|
||
description = "The unlinker",
|
||
inventory_image = "unlinker.png",
|
||
on_place = function(itemstack, user, pointed_thing)
|
||
local node = minetest.get_node(pointed_thing.under)
|
||
if not logikraft.cablenodes[node.name]
|
||
then return itemstack
|
||
end
|
||
|
||
local index = logikraft.lookingAtNbIndex(user,pointed_thing.under)
|
||
print(logikraft.cablenodes[node.name])
|
||
print(dump(logikraft.cables[logikraft.cablenodes[node.name]]))
|
||
local new = logikraft.disconnectInCable(logikraft.cablenodes[node.name],index)
|
||
if new
|
||
then minetest.swap_node(pointed_thing.under, {name = "logikraft:cable_" .. new})
|
||
else minetest.remove_node(pointed_thing.under)
|
||
end
|
||
|
||
return itemstack
|
||
end
|
||
})
|
||
minetest.register_craftitem("logikraft:resizer", {
|
||
description = "The Resizer",
|
||
inventory_image = "resizer.png",
|
||
on_place = function(itemstack, user, pointed_thing)
|
||
local node = minetest.get_node(pointed_thing.under)
|
||
if not logikraft.cablenodes[node.name]
|
||
then return itemstack
|
||
end
|
||
|
||
local index = logikraft.lookingAtNbIndex(user,pointed_thing.under)
|
||
|
||
local new = logikraft.resizeInCable(logikraft.cablenodes[node.name],index)
|
||
minetest.swap_node(pointed_thing.under, {name = "logikraft:cable_" .. new})
|
||
|
||
return itemstack
|
||
end
|
||
})
|
||
|
||
minetest.register_craftitem("logikraft:editor", {
|
||
description = "The Editor",
|
||
inventory_image = "editor.png",
|
||
on_place = function(itemstack, user, pointed_thing)
|
||
local node = minetest.get_node(pointed_thing.under)
|
||
if logikraft.cablenodes[node.name]
|
||
then
|
||
local index = logikraft.lookingAtNbIndex(user,pointed_thing.under)
|
||
minetest.chat_send_all("Looking at nodeblock "..tostring(index))
|
||
elseif node.name == "logikraft:component_input_1_1"
|
||
then
|
||
logikraft.showNameFormspec(user:get_player_name(), pointed_thing.under)
|
||
elseif node.name == "logikraft:component_output_1_1"
|
||
then
|
||
logikraft.showNameFormspec(user:get_player_name(), pointed_thing.under)
|
||
elseif logikraft.componentnodes[node.name]
|
||
then
|
||
minetest.chat_send_all("Looking at component "..logikraft.componentnodes[node.name].name)
|
||
elseif node.name == "logikraft:circuitBlock"
|
||
then
|
||
logikraft.showCircuitFormspec(user:get_player_name(), pointed_thing.under)
|
||
end
|
||
|
||
return itemstack
|
||
end
|
||
}) |