119 lines
3.5 KiB
Lua

local modpath = minetest.get_modpath("pyutest_electricity")
PyuTest.ELECTRICITY_TICK = 1 / 1000
PyuTest.make_button = function(id, desc, groups, tiles)
PyuTest.make_node(id, desc, PyuTest.util.tableconcat(groups, {
electric = 1
}), tiles, {
is_ground_content = false,
on_rightclick = function(pos, node, clicker)
minetest.sound_play("button", {
pos = pos,
gain = 1
})
for _, v in pairs(PyuTest.get_neighbours(pos)) do
local n = minetest.get_node(v)
local def = minetest.registered_nodes[n.name]
minetest.after(PyuTest.ELECTRICITY_TICK, function()
if def.__on_electricity_activated then
def.__on_electricity_activated(v, n, clicker, pos)
end
end)
end
end
})
end
PyuTest.make_wire = function(id, desc, groups, color, opts, efn, texture)
local fn = efn or function(def, pos, node, clicker, sender_pos)
def.__on_electricity_activated(pos, node, clicker, sender_pos)
end
PyuTest.make_node(id, desc, PyuTest.util.tableconcat(groups, {
electric = 1
}), {
texture or "pyutest-wire.png",
texture or "pyutest-wire.png",
texture or "pyutest-wire.png",
texture or "pyutest-wire.png"
}, PyuTest.util.tableconcat(opts or {}, {
drawtype = "raillike",
color = color,
paramtype = "light",
sunlight_propagates = true,
walkable = false,
inventory_image = "pyutest-wire.png",
__on_electricity_activated = function(pos, node, clicker, sender_pos)
for _, v in pairs(PyuTest.get_neighbours(pos)) do
local n = minetest.get_node(v)
local def = minetest.registered_nodes[n.name]
-- To prevent infinite loops
if v == sender_pos then
goto continue
end
minetest.after(PyuTest.ELECTRICITY_TICK, function()
if def.__on_electricity_activated then
fn(def, v, n, clicker, pos)
end
end)
::continue::
end
end
}))
end
PyuTest.make_electricity_device = function(id, desc, groups, tiles, craftitem, opts, eafn)
PyuTest.make_node(id, desc, PyuTest.util.tableconcat(groups, {
electric = 1
}), tiles, PyuTest.util.tableconcat(opts or {}, {
__on_electricity_activated = eafn
}))
-- Dont create a recipe if it is nil
if craftitem ~= nil then
minetest.register_craft({
output = id,
recipe = {
{ "pyutest_blocks:stone_block", "pyutest_blocks:stone_block", "pyutest_blocks:stone_block" },
{ "pyutest_blocks:stone_block", craftitem, "pyutest_blocks:stone_block" },
{ "pyutest_blocks:stone_block", "pyutest_blocks:stone_block", "pyutest_blocks:stone_block" }
},
})
end
end
PyuTest.make_button("pyutest_electricity:button", "Button", {
cracky = PyuTest.BLOCK_NORMAL,
}, { "pyutest-button.png" })
PyuTest.make_wire("pyutest_electricity:copper_wire", "Copper Wire", {
snappy = PyuTest.BLOCK_NORMAL
}, "darkgoldenrod")
minetest.register_craft({
output = "pyutest_electricity:copper_wire 4",
recipe = {
"pyutest_ores:copper_ingot"
},
type = "shapeless"
})
minetest.register_craft({
output = "pyutest_electricity:button",
recipe = {
{ "pyutest_blocks:stone_block", "pyutest_blocks:stone_block", "pyutest_blocks:stone_block" },
{ "pyutest_blocks:stone_block", "pyutest_ores:copper_ingot", "pyutest_blocks:stone_block" },
{ "pyutest_blocks:stone_block", "pyutest_blocks:stone_block", "pyutest_blocks:stone_block" }
},
})
dofile(modpath.."/devices.lua")
dofile(modpath.."/delayer.lua")