summaryrefslogtreecommitdiff
path: root/mesecons_detector/init.lua
diff options
context:
space:
mode:
Diffstat (limited to 'mesecons_detector/init.lua')
-rw-r--r--mesecons_detector/init.lua47
1 files changed, 34 insertions, 13 deletions
diff --git a/mesecons_detector/init.lua b/mesecons_detector/init.lua
index fc7d4c3..cdc7f92 100644
--- a/mesecons_detector/init.lua
+++ b/mesecons_detector/init.lua
@@ -189,28 +189,49 @@ local function node_detector_scan(pos)
(frontname ~= "air" and frontname ~= "ignore" and scanname == "")
end
+local function node_detector_send_node_name(pos, node, channel, meta)
+ local distance = meta:get_int("distance")
+ local distance_max = mesecon.setting("node_detector_distance_max", 10)
+ if distance < 0 then distance = 0 end
+ if distance > distance_max then distance = distance_max end
+ local nodename = minetest.get_node(
+ vector.subtract(pos, vector.multiply(minetest.facedir_to_dir(node.param2), distance + 1))
+ ).name
+
+ digiline:receptor_send(pos, digiline.rules.default, channel, nodename)
+end
+
-- set player name when receiving a digiline signal on a specific channel
local node_detector_digiline = {
effector = {
action = function(pos, node, channel, msg)
local meta = minetest.get_meta(pos)
- local distance = meta:get_int("distance")
- local distance_max = mesecon.setting("node_detector_distance_max", 10)
- if distance < 0 then distance = 0 end
- if distance > distance_max then distance = distance_max end
-
if channel ~= meta:get_string("digiline_channel") then return end
- if msg == GET_COMMAND then
- local nodename = minetest.get_node(
- vector.subtract(pos, vector.multiply(minetest.facedir_to_dir(node.param2), distance + 1))
- ).name
-
- digiline:receptor_send(pos, digiline.rules.default, channel, nodename)
+ if type(msg) == "table" then
+ if msg.distance or msg.scanname then
+ if msg.distance then
+ meta:set_string("distance", msg.distance)
+ end
+ if msg.scanname then
+ meta:set_string("scanname", msg.scanname)
+ end
+ node_detector_make_formspec(pos)
+ end
+ if msg.command == "get" then
+ node_detector_send_node_name(pos, node, channel, meta)
+ elseif msg.command == "scan" then
+ local result = node_detector_scan(pos)
+ digiline:receptor_send(pos, digiline.rules.default, channel, result)
+ end
else
- meta:set_string("scanname", msg)
- node_detector_make_formspec(pos)
+ if msg == GET_COMMAND then
+ node_detector_send_node_name(pos, node, channel, meta)
+ else
+ meta:set_string("scanname", msg)
+ node_detector_make_formspec(pos)
+ end
end
end,
},