Logikraft/items.lua
2024-05-20 19:06:14 +02:00

159 lines
7.1 KiB
Lua
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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)
if selectedx == pos.x and selectedy == pos.y and selectedz == pos.z
then
if(selectednb ~= thisnb)
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
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
minetest.chat_send_all("Les cables sont trop loins l'un de l'autre :/")
end
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
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)
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
end
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
})