parent
0d44ea5a99
commit
3b4244e69e
|
@ -0,0 +1,274 @@
|
|||
--[[
|
||||
|
||||
Signs Bot
|
||||
=========
|
||||
|
||||
Copyright (C) 2019 Joachim Stolberg
|
||||
|
||||
LGPLv2.1+
|
||||
See LICENSE.txt for more information
|
||||
|
||||
Signal Delayer.
|
||||
Signals are forwarded delayed. Subsequent signals are queued.
|
||||
]]--
|
||||
|
||||
-- for lazy programmers
|
||||
local S = function(pos) if pos then return minetest.pos_to_string(pos) end end
|
||||
local P = minetest.string_to_pos
|
||||
local M = minetest.get_meta
|
||||
|
||||
-- Load support for intllib.
|
||||
local MP = minetest.get_modpath("signs_bot")
|
||||
local I,_ = dofile(MP.."/intllib.lua")
|
||||
|
||||
local CYCLE_TIME = 2
|
||||
|
||||
local lib = signs_bot.lib
|
||||
|
||||
local function update_infotext(pos, dest_pos, cmnd)
|
||||
M(pos):set_string("infotext", I("Signal Delayer: Connected with ")..S(dest_pos).." / "..cmnd)
|
||||
end
|
||||
|
||||
local function infotext(pos)
|
||||
local meta = M(pos)
|
||||
local dest_pos = meta:get_string("signal_pos")
|
||||
local signal = meta:get_string("signal_data")
|
||||
if dest_pos ~= "" and signal ~= "" then
|
||||
update_infotext(pos, P(dest_pos), signal)
|
||||
end
|
||||
end
|
||||
|
||||
local function formspec(meta)
|
||||
local label = minetest.formspec_escape(I("Delay time [sec]:"))
|
||||
local value = minetest.formspec_escape(meta:get_int("time"))
|
||||
return "size[4,3]"..
|
||||
default.gui_bg..
|
||||
default.gui_bg_img..
|
||||
default.gui_slots..
|
||||
"field[0.3,1;4,1;time;"..label..";"..value.."]"..
|
||||
"button_exit[1,2.2;2,1;start;"..I("Start").."]"
|
||||
end
|
||||
|
||||
-- Used by the pairing tool
|
||||
local function signs_bot_get_signal(pos, node)
|
||||
return "do"
|
||||
end
|
||||
|
||||
-- switch to normal or loaded texture
|
||||
local function turn_off(pos)
|
||||
local mem = tubelib2.get_mem(pos)
|
||||
local node = minetest.get_node(pos)
|
||||
if mem.queue > 0 then
|
||||
node.name = "signs_bot:delayer_loaded"
|
||||
else
|
||||
node.name = "signs_bot:delayer"
|
||||
end
|
||||
minetest.swap_node(pos, node)
|
||||
end
|
||||
|
||||
-- switch to loaded texture
|
||||
local function loaded(pos)
|
||||
local node = minetest.get_node(pos)
|
||||
if node.name == "signs_bot:delayer" or node.name == "signs_bot:delayer_on" then
|
||||
node.name = "signs_bot:delayer_loaded"
|
||||
minetest.swap_node(pos, node)
|
||||
end
|
||||
end
|
||||
|
||||
local function send_signal(pos)
|
||||
local meta = M(pos)
|
||||
local mem = tubelib2.get_mem(pos)
|
||||
local node = minetest.get_node(pos)
|
||||
if node.name == "signs_bot:delayer" or node.name == "signs_bot:delayer_loaded" then
|
||||
node.name = "signs_bot:delayer_on"
|
||||
minetest.swap_node(pos, node)
|
||||
minetest.after(2, turn_off, pos)
|
||||
end
|
||||
signs_bot.send_signal(pos)
|
||||
signs_bot.lib.activate_extender_nodes(pos, true)
|
||||
mem.queue = (mem.queue or 1) - 1
|
||||
if mem.queue > 0 then
|
||||
mem.time = meta:get_int("time")
|
||||
end
|
||||
end
|
||||
|
||||
local function node_timer(pos)
|
||||
local meta = M(pos)
|
||||
local mem = tubelib2.get_mem(pos)
|
||||
mem.time = (mem.time or 0) - CYCLE_TIME
|
||||
--print("node_timer time="..mem.time..", queue="..mem.queue)
|
||||
if mem.time <= 0 and mem.queue > 0 then
|
||||
send_signal(pos)
|
||||
end
|
||||
return mem.queue > 0
|
||||
end
|
||||
|
||||
-- To be called from sensors
|
||||
local function signs_bot_on_signal(pos, node, signal)
|
||||
local meta = M(pos)
|
||||
local mem = tubelib2.get_mem(pos)
|
||||
mem.queue = mem.queue or 0
|
||||
|
||||
--print("signs_bot_on_signal", signal, meta:get_int("time"))
|
||||
if signal ~= "do" or meta:get_int("time") == 0 then return end
|
||||
|
||||
if mem.queue <= 0 then
|
||||
mem.queue = 1
|
||||
mem.time = meta:get_int("time")
|
||||
loaded(pos)
|
||||
else
|
||||
mem.queue = mem.queue + 1
|
||||
end
|
||||
minetest.get_node_timer(pos):start(CYCLE_TIME)
|
||||
end
|
||||
|
||||
local function on_receive_fields(pos, formname, fields, player)
|
||||
local mem = tubelib2.get_mem(pos)
|
||||
local meta = M(pos)
|
||||
if minetest.is_protected(pos, player:get_player_name()) then
|
||||
return
|
||||
end
|
||||
if fields.key_enter_field == "time" or fields.start then
|
||||
local time = tonumber(fields.time)
|
||||
if time and time >= 0 and time < 999999 then
|
||||
meta:set_int("time", time)
|
||||
mem.time = 0
|
||||
mem.queue = 0
|
||||
end
|
||||
end
|
||||
meta:set_string("formspec", formspec(meta))
|
||||
turn_off(pos)
|
||||
end
|
||||
|
||||
minetest.register_node("signs_bot:delayer", {
|
||||
description = I("Signal Delayer"),
|
||||
inventory_image = "signs_bot_delayer_inv.png",
|
||||
drawtype = "nodebox",
|
||||
node_box = {
|
||||
type = "fixed",
|
||||
fixed = {
|
||||
{ -11/32, -1/2, -11/32, 11/32, -5/16, 11/32},
|
||||
},
|
||||
},
|
||||
tiles = {
|
||||
-- up, down, right, left, back, front
|
||||
"signs_bot_sensor2.png^signs_bot_delayer.png",
|
||||
"signs_bot_sensor2.png",
|
||||
},
|
||||
|
||||
after_place_node = function(pos, placer)
|
||||
local meta = M(pos)
|
||||
local mem = tubelib2.init_mem(pos)
|
||||
mem.time = 0
|
||||
mem.queue = 0
|
||||
infotext(pos)
|
||||
meta:set_string("formspec", formspec(meta))
|
||||
end,
|
||||
|
||||
signs_bot_get_signal = signs_bot_get_signal,
|
||||
signs_bot_on_signal = signs_bot_on_signal,
|
||||
on_receive_fields = on_receive_fields,
|
||||
on_timer = node_timer,
|
||||
update_infotext = update_infotext,
|
||||
on_rotate = screwdriver.disallow,
|
||||
paramtype = "light",
|
||||
sunlight_propagates = true,
|
||||
paramtype2 = "facedir",
|
||||
is_ground_content = false,
|
||||
groups = {sign_bot_sensor = 1, cracky = 1},
|
||||
sounds = default.node_sound_metal_defaults(),
|
||||
})
|
||||
|
||||
minetest.register_node("signs_bot:delayer_loaded", {
|
||||
description = I("Signal Delayer"),
|
||||
drawtype = "nodebox",
|
||||
node_box = {
|
||||
type = "fixed",
|
||||
fixed = {
|
||||
{ -11/32, -1/2, -11/32, 11/32, -5/16, 11/32},
|
||||
},
|
||||
},
|
||||
tiles = {
|
||||
-- up, down, right, left, back, front
|
||||
"signs_bot_sensor2.png^signs_bot_delayer_loaded.png",
|
||||
"signs_bot_sensor2.png",
|
||||
},
|
||||
|
||||
signs_bot_get_signal = signs_bot_get_signal,
|
||||
signs_bot_on_signal = signs_bot_on_signal,
|
||||
on_receive_fields = on_receive_fields,
|
||||
on_timer = node_timer,
|
||||
update_infotext = update_infotext,
|
||||
on_rotate = screwdriver.disallow,
|
||||
paramtype = "light",
|
||||
sunlight_propagates = true,
|
||||
paramtype2 = "facedir",
|
||||
is_ground_content = false,
|
||||
diggable = false,
|
||||
groups = {sign_bot_sensor = 1, not_in_creative_inventory = 1},
|
||||
sounds = default.node_sound_metal_defaults(),
|
||||
})
|
||||
|
||||
minetest.register_node("signs_bot:delayer_on", {
|
||||
description = I("Signal Delayer"),
|
||||
drawtype = "nodebox",
|
||||
node_box = {
|
||||
type = "fixed",
|
||||
fixed = {
|
||||
{ -11/32, -1/2, -11/32, 11/32, -5/16, 11/32},
|
||||
},
|
||||
},
|
||||
tiles = {
|
||||
-- up, down, right, left, back, front
|
||||
"signs_bot_sensor2.png^signs_bot_delayer_on.png",
|
||||
"signs_bot_sensor2.png",
|
||||
},
|
||||
|
||||
on_timer = node_timer,
|
||||
update_infotext = update_infotext,
|
||||
on_rotate = screwdriver.disallow,
|
||||
paramtype = "light",
|
||||
sunlight_propagates = true,
|
||||
paramtype2 = "facedir",
|
||||
is_ground_content = false,
|
||||
diggable = false,
|
||||
groups = {sign_bot_sensor = 1, not_in_creative_inventory = 1},
|
||||
sounds = default.node_sound_metal_defaults(),
|
||||
})
|
||||
|
||||
minetest.register_craft({
|
||||
output = "signs_bot:delayer",
|
||||
recipe = {
|
||||
{"group:wood", "dye:yellow", ""},
|
||||
{"default:mese_crystal_fragment", "", ""},
|
||||
{"default:steel_ingot", "", ""},
|
||||
}
|
||||
})
|
||||
|
||||
minetest.register_lbm({
|
||||
label = "[signs_bot] Restart delayer",
|
||||
name = "signs_bot:delayer_restart",
|
||||
nodenames = {"signs_bot:delayer", "signs_bot:delayer_loaded", "signs_bot:delayer_on"},
|
||||
run_at_every_load = true,
|
||||
action = function(pos, node)
|
||||
turn_off(pos)
|
||||
local mem = tubelib2.get_mem(pos)
|
||||
if mem.time and mem.time > 0 then
|
||||
minetest.get_node_timer(pos):start(CYCLE_TIME)
|
||||
end
|
||||
end
|
||||
})
|
||||
|
||||
if minetest.get_modpath("doc") then
|
||||
doc.add_entry("signs_bot", "delayer", {
|
||||
name = I("Signal Delayer"),
|
||||
data = {
|
||||
item = "signs_bot:delayer",
|
||||
text = table.concat({
|
||||
I("Signals are forwarded delayed. Subsequent signals are queued."),
|
||||
I("The delay time can be configured."),
|
||||
}, "\n")
|
||||
},
|
||||
})
|
||||
end
|
||||
|
1
init.lua
1
init.lua
|
@ -45,5 +45,6 @@ dofile(MP.."/chest.lua")
|
|||
dofile(MP.."/legacy.lua")
|
||||
dofile(MP.."/techage.lua")
|
||||
dofile(MP.."/timer.lua")
|
||||
dofile(MP.."/delayer.lua")
|
||||
|
||||
dofile(MP.."/tool.lua")
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
#!/bin/bash
|
||||
|
||||
../intllib/tools/xgettext.sh ./basis.lua ./bot_flap.lua ./bot_sensor.lua ./cart_sensor.lua ./changer.lua ./chest.lua ./cmd_farming.lua ./cmd_item.lua ./cmd_move.lua ./cmd_pattern.lua ./cmd_place.lua ./cmd_sign.lua ./commands.lua ./crop_sensor.lua ./doc.lua ./duplicator.lua ./extender.lua ./init.lua ./lib.lua ./node_sensor.lua ./nodes.lua ./robot.lua ./signal.lua ./signs.lua ./tool.lua ./timer.lua
|
||||
../intllib/tools/xgettext.sh ./basis.lua ./bot_flap.lua ./bot_sensor.lua ./cart_sensor.lua ./changer.lua ./chest.lua ./cmd_farming.lua ./cmd_item.lua ./cmd_move.lua ./cmd_pattern.lua ./cmd_place.lua ./cmd_sign.lua ./commands.lua ./crop_sensor.lua ./doc.lua ./duplicator.lua ./extender.lua ./init.lua ./lib.lua ./node_sensor.lua ./nodes.lua ./robot.lua ./signal.lua ./signs.lua ./tool.lua ./timer.lua ./delayer.lua
|
||||
|
||||
|
|
BIN
locale/de.mo
BIN
locale/de.mo
Binary file not shown.
62
locale/de.po
62
locale/de.po
|
@ -7,8 +7,8 @@ msgid ""
|
|||
msgstr ""
|
||||
"Project-Id-Version: \n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2019-06-29 00:01+0200\n"
|
||||
"PO-Revision-Date: 2019-07-06 21:25+0200\n"
|
||||
"POT-Creation-Date: 2019-07-08 23:22+0200\n"
|
||||
"PO-Revision-Date: 2019-07-08 23:25+0200\n"
|
||||
"Last-Translator: \n"
|
||||
"Language-Team: \n"
|
||||
"Language: de\n"
|
||||
|
@ -36,7 +36,7 @@ msgstr "Andere Gegenstände"
|
|||
|
||||
#: basis.lua
|
||||
msgid "Robot Box "
|
||||
msgstr "Roboter Box"
|
||||
msgstr "Roboter Box "
|
||||
|
||||
#: basis.lua
|
||||
msgid "running"
|
||||
|
@ -1218,17 +1218,41 @@ msgstr "mit weiteren Aktoren mit Hilfe des Verbinde-Werkzeuges."
|
|||
msgid "Node Sensor: Connected with "
|
||||
msgstr "Block Sensor: Verbunden mit "
|
||||
|
||||
#: node_sensor.lua
|
||||
msgid "added"
|
||||
msgstr "mehr Blöcken"
|
||||
|
||||
#: node_sensor.lua
|
||||
msgid "removed"
|
||||
msgstr "weniger Blöcken"
|
||||
|
||||
#: node_sensor.lua
|
||||
msgid "added or removed"
|
||||
msgstr "mehr oder weniger"
|
||||
|
||||
#: node_sensor.lua
|
||||
msgid "Send signal if nodes have been:]"
|
||||
msgstr "Sende ein Signal bei"
|
||||
|
||||
#: node_sensor.lua
|
||||
msgid "accept"
|
||||
msgstr "übernehmen"
|
||||
|
||||
#: node_sensor.lua
|
||||
msgid "Node Sensor"
|
||||
msgstr "Block Sensor"
|
||||
|
||||
#: node_sensor.lua
|
||||
msgid ""
|
||||
"The Node Sensor sends a signal when it detects any node change (nodes appear "
|
||||
"or disappear)."
|
||||
"The node sensor can send a signal when it detects that nodes appear or "
|
||||
"disappear,"
|
||||
msgstr ""
|
||||
"Der Block Sensor sendet ein Signal, wenn er eine Veränderung von Blocken vor "
|
||||
"sich entdeckt (ein Block erscheint oder verschwindet)."
|
||||
"Der Block Sensor kann ein Signal senden, wenn er eine Veränderung von "
|
||||
"Blöcken vor sich entdeckt (ein Block erscheint oder verschwindet),"
|
||||
|
||||
#: node_sensor.lua
|
||||
msgid "but has to be configured accordingly."
|
||||
msgstr "aber muss entsprechend konfiguriert werden."
|
||||
|
||||
#: node_sensor.lua
|
||||
msgid "Valid nodes are all kind of blocks and plants."
|
||||
|
@ -1311,7 +1335,7 @@ msgstr "Verbunden mit"
|
|||
msgid "Cycle time [min]:"
|
||||
msgstr "Zykluszeit [min]:"
|
||||
|
||||
#: timer.lua
|
||||
#: timer.lua delayer.lua
|
||||
msgid "Start"
|
||||
msgstr "Start"
|
||||
|
||||
|
@ -1326,6 +1350,28 @@ msgstr ""
|
|||
"Kann mit einer Zeit in Sekunden programmiert werden, um bspw. den Roboter "
|
||||
"zyklisch zu starten."
|
||||
|
||||
#: delayer.lua
|
||||
msgid "Signal Delayer: Connected with "
|
||||
msgstr "Sensor Verzögerer: Verbunden mit "
|
||||
|
||||
#: delayer.lua
|
||||
msgid "Delay time [sec]:"
|
||||
msgstr "Verzögerungszeit [s]:"
|
||||
|
||||
#: delayer.lua
|
||||
msgid "Signal Delayer"
|
||||
msgstr "Signal Verzögerer"
|
||||
|
||||
#: delayer.lua
|
||||
msgid "Signals are forwarded delayed. Subsequent signals are queued."
|
||||
msgstr ""
|
||||
"Signale werden verzögert weitergeleitet. Nachfolgende Signale werden in die "
|
||||
"Warteschlange gestellt."
|
||||
|
||||
#: delayer.lua
|
||||
msgid "The delay time can be configured."
|
||||
msgstr "Die Verzögerungszeit kann eingestellt werden."
|
||||
|
||||
#~ msgid ""
|
||||
#~ "Go to the next sign\n"
|
||||
#~ "to be executed as a sub-process.\n"
|
||||
|
|
|
@ -7,8 +7,8 @@ msgid ""
|
|||
msgstr ""
|
||||
"Project-Id-Version: \n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2019-06-25 23:36+0200\n"
|
||||
"PO-Revision-Date: 2019-06-27 21:14+0200\n"
|
||||
"POT-Creation-Date: 2019-07-08 23:15+0200\n"
|
||||
"PO-Revision-Date: 2019-07-08 23:22+0200\n"
|
||||
"Last-Translator: \n"
|
||||
"Language-Team: \n"
|
||||
"Language: de\n"
|
||||
|
@ -36,7 +36,7 @@ msgstr "Andere Gegenstände"
|
|||
|
||||
#: basis.lua
|
||||
msgid "Robot Box "
|
||||
msgstr "Roboter Box"
|
||||
msgstr "Roboter Box "
|
||||
|
||||
#: basis.lua
|
||||
msgid "running"
|
||||
|
@ -761,15 +761,17 @@ msgstr ""
|
|||
|
||||
#: commands.lua
|
||||
msgid ""
|
||||
"Go to the next sign\n"
|
||||
"to be executed as a sub-process.\n"
|
||||
"After that it will go on with the next command\n"
|
||||
"on this sign."
|
||||
"Walk until a sign or obstacle is\n"
|
||||
"reached. Then continue with the next command.\n"
|
||||
"When a sign has been reached, \n"
|
||||
"it is executed as sub-process."
|
||||
msgstr ""
|
||||
"Gehe bis zum nächsten Zeichen,\n"
|
||||
"das dann als Unterprogramm\n"
|
||||
"bearbeitet wird. Mache danach mit\n"
|
||||
"dem nächsten Kommando weiter."
|
||||
"Gehe bis ein Zeichen oder Hindernis\n"
|
||||
"erreicht wurde. Führe dann das nächste\n"
|
||||
"Kommando aus. \n"
|
||||
"Wurde ein Zeichen erreicht, so arbeite\n"
|
||||
"die Kommandos des Zeichens als\n"
|
||||
"Unter-Prozess ab."
|
||||
|
||||
#: crop_sensor.lua
|
||||
msgid "Crop Sensor: Connected with "
|
||||
|
@ -777,7 +779,7 @@ msgstr "Ernte Sensor: Verbunden mit "
|
|||
|
||||
#: crop_sensor.lua
|
||||
msgid "Crop Sensor"
|
||||
msgstr "Ernte Sesor"
|
||||
msgstr "Ernte Sensor"
|
||||
|
||||
#: crop_sensor.lua
|
||||
msgid "The Crop Sensor sends a signal when, for example wheat is fully grown."
|
||||
|
@ -1216,17 +1218,41 @@ msgstr "mit weiteren Aktoren mit Hilfe des Verbinde-Werkzeuges."
|
|||
msgid "Node Sensor: Connected with "
|
||||
msgstr "Block Sensor: Verbunden mit "
|
||||
|
||||
#: node_sensor.lua
|
||||
msgid "added"
|
||||
msgstr "mehr Blöcken"
|
||||
|
||||
#: node_sensor.lua
|
||||
msgid "removed"
|
||||
msgstr "weniger Blöcken"
|
||||
|
||||
#: node_sensor.lua
|
||||
msgid "added or removed"
|
||||
msgstr "mehr oder weniger"
|
||||
|
||||
#: node_sensor.lua
|
||||
msgid "Send signal if nodes have been:]"
|
||||
msgstr "Sende ein Signal bei"
|
||||
|
||||
#: node_sensor.lua
|
||||
msgid "accept"
|
||||
msgstr "übernehmen"
|
||||
|
||||
#: node_sensor.lua
|
||||
msgid "Node Sensor"
|
||||
msgstr "Block Sensor"
|
||||
|
||||
#: node_sensor.lua
|
||||
msgid ""
|
||||
"The Node Sensor sends a signal when it detects any node change (nodes appear "
|
||||
"or disappear)."
|
||||
"The node sensor can send a signal when it detects that nodes appear or "
|
||||
"disappear,"
|
||||
msgstr ""
|
||||
"Der Block Sensor sendet ein Signal, wenn er eine Veränderung von Blocken vor "
|
||||
"sich entdeckt (ein Block erscheint oder verschwindet)."
|
||||
"Der Block Sensor kann ein Signal senden, wenn er eine Veränderung von "
|
||||
"Blöcken vor sich entdeckt (ein Block erscheint oder verschwindet),"
|
||||
|
||||
#: node_sensor.lua
|
||||
msgid "but has to be configured accordingly."
|
||||
msgstr "aber muss entsprechend konfiguriert werden."
|
||||
|
||||
#: node_sensor.lua
|
||||
msgid "Valid nodes are all kind of blocks and plants."
|
||||
|
@ -1323,3 +1349,14 @@ msgid ""
|
|||
msgstr ""
|
||||
"Kann mit einer Zeit in Sekunden programmiert werden, um bspw. den Roboter "
|
||||
"zyklisch zu starten."
|
||||
|
||||
#~ msgid ""
|
||||
#~ "Go to the next sign\n"
|
||||
#~ "to be executed as a sub-process.\n"
|
||||
#~ "After that it will go on with the next command\n"
|
||||
#~ "on this sign."
|
||||
#~ msgstr ""
|
||||
#~ "Gehe bis zum nächsten Zeichen,\n"
|
||||
#~ "das dann als Unterprogramm\n"
|
||||
#~ "bearbeitet wird. Mache danach mit\n"
|
||||
#~ "dem nächsten Kommando weiter."
|
||||
|
|
|
@ -8,7 +8,7 @@ msgid ""
|
|||
msgstr ""
|
||||
"Project-Id-Version: PACKAGE VERSION\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2019-06-29 00:01+0200\n"
|
||||
"POT-Creation-Date: 2019-07-08 23:22+0200\n"
|
||||
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
|
||||
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
|
||||
"Language-Team: LANGUAGE <LL@li.org>\n"
|
||||
|
@ -978,14 +978,38 @@ msgstr ""
|
|||
msgid "Node Sensor: Connected with "
|
||||
msgstr ""
|
||||
|
||||
#: node_sensor.lua
|
||||
msgid "added"
|
||||
msgstr ""
|
||||
|
||||
#: node_sensor.lua
|
||||
msgid "removed"
|
||||
msgstr ""
|
||||
|
||||
#: node_sensor.lua
|
||||
msgid "added or removed"
|
||||
msgstr ""
|
||||
|
||||
#: node_sensor.lua
|
||||
msgid "Send signal if nodes have been:]"
|
||||
msgstr ""
|
||||
|
||||
#: node_sensor.lua
|
||||
msgid "accept"
|
||||
msgstr ""
|
||||
|
||||
#: node_sensor.lua
|
||||
msgid "Node Sensor"
|
||||
msgstr ""
|
||||
|
||||
#: node_sensor.lua
|
||||
msgid ""
|
||||
"The Node Sensor sends a signal when it detects any node change (nodes appear "
|
||||
"or disappear)."
|
||||
"The node sensor can send a signal when it detects that nodes appear or "
|
||||
"disappear,"
|
||||
msgstr ""
|
||||
|
||||
#: node_sensor.lua
|
||||
msgid "but has to be configured accordingly."
|
||||
msgstr ""
|
||||
|
||||
#: node_sensor.lua
|
||||
|
@ -1064,7 +1088,7 @@ msgstr ""
|
|||
msgid "Cycle time [min]:"
|
||||
msgstr ""
|
||||
|
||||
#: timer.lua
|
||||
#: timer.lua delayer.lua
|
||||
msgid "Start"
|
||||
msgstr ""
|
||||
|
||||
|
@ -1076,3 +1100,23 @@ msgstr ""
|
|||
msgid ""
|
||||
"Can be programmed with a time in seconds, e.g. to start the bot cyclically."
|
||||
msgstr ""
|
||||
|
||||
#: delayer.lua
|
||||
msgid "Signal Delayer: Connected with "
|
||||
msgstr ""
|
||||
|
||||
#: delayer.lua
|
||||
msgid "Delay time [sec]:"
|
||||
msgstr ""
|
||||
|
||||
#: delayer.lua
|
||||
msgid "Signal Delayer"
|
||||
msgstr ""
|
||||
|
||||
#: delayer.lua
|
||||
msgid "Signals are forwarded delayed. Subsequent signals are queued."
|
||||
msgstr ""
|
||||
|
||||
#: delayer.lua
|
||||
msgid "The delay time can be configured."
|
||||
msgstr ""
|
||||
|
|
|
@ -39,6 +39,24 @@ local function swap_node(pos, name)
|
|||
return true
|
||||
end
|
||||
|
||||
|
||||
local DropdownValues = {
|
||||
["added"] = 1,
|
||||
["removed"] = 2,
|
||||
["added or removed"] = 3,
|
||||
}
|
||||
|
||||
local function formspec(mem)
|
||||
local label = I("added")..","..I("removed")..","..I("added or removed")
|
||||
return "size[6,3]"..
|
||||
default.gui_bg..
|
||||
default.gui_bg_img..
|
||||
default.gui_slots..
|
||||
"label[0.2,0.4;"..I("Send signal if nodes have been:]")..
|
||||
"dropdown[0.2,1;6,1;mode;"..label..";"..(mem.mode or 3).."]"..
|
||||
"button_exit[1.5,2.2;3,1;accept;"..I("accept").."]"
|
||||
end
|
||||
|
||||
local function any_node_changed(pos)
|
||||
local mem = tubelib2.get_mem(pos)
|
||||
if not mem.pos1 or not mem.pos2 or not mem.num then
|
||||
|
@ -50,13 +68,35 @@ local function any_node_changed(pos)
|
|||
return false
|
||||
end
|
||||
local num = #minetest.find_nodes_in_area(mem.pos1, mem.pos2, {"air"})
|
||||
|
||||
if mem.num ~= num then
|
||||
if mem.mode == 1 and num < mem.num then
|
||||
mem.num = num
|
||||
return true
|
||||
elseif mem.mode == 2 and num > mem.num then
|
||||
mem.num = num
|
||||
return true
|
||||
elseif mem.mode == 3 then
|
||||
mem.num = num
|
||||
return true
|
||||
end
|
||||
mem.num = num
|
||||
return true
|
||||
end
|
||||
return false
|
||||
end
|
||||
|
||||
local function on_receive_fields(pos, formname, fields, player)
|
||||
local mem = tubelib2.get_mem(pos)
|
||||
local meta = M(pos)
|
||||
if minetest.is_protected(pos, player:get_player_name()) then
|
||||
return
|
||||
end
|
||||
if fields.accept then
|
||||
mem.mode = DropdownValues[fields.mode] or 3
|
||||
end
|
||||
meta:set_string("formspec", formspec(mem))
|
||||
end
|
||||
|
||||
local function node_timer(pos)
|
||||
if any_node_changed(pos)then
|
||||
if swap_node(pos, "signs_bot:node_sensor_on") then
|
||||
|
@ -93,12 +133,15 @@ minetest.register_node("signs_bot:node_sensor", {
|
|||
local meta = M(pos)
|
||||
local mem = tubelib2.init_mem(pos)
|
||||
meta:set_string("infotext", "Node Sensor: Not connected")
|
||||
mem.mode = 3 -- default legacy mode
|
||||
meta:set_string("formspec", formspec(mem))
|
||||
minetest.get_node_timer(pos):start(CYCLE_TIME)
|
||||
any_node_changed(pos)
|
||||
end,
|
||||
|
||||
on_timer = node_timer,
|
||||
update_infotext = update_infotext,
|
||||
on_receive_fields = on_receive_fields,
|
||||
on_rotate = screwdriver.disallow,
|
||||
paramtype = "light",
|
||||
sunlight_propagates = true,
|
||||
|
@ -168,7 +211,8 @@ if minetest.get_modpath("doc") then
|
|||
data = {
|
||||
item = "signs_bot:node_sensor",
|
||||
text = table.concat({
|
||||
I("The Node Sensor sends a signal when it detects any node change (nodes appear or disappear)."),
|
||||
I("The node sensor can send a signal when it detects that nodes appear or disappear,"),
|
||||
I("but has to be configured accordingly."),
|
||||
I("Valid nodes are all kind of blocks and plants."),
|
||||
I("The sensor range is 3 nodes/meters in one direction."),
|
||||
I("The sensor has an active side (red) that must point to the observed area."),
|
||||
|
|
Binary file not shown.
After Width: | Height: | Size: 224 B |
Binary file not shown.
After Width: | Height: | Size: 251 B |
Binary file not shown.
After Width: | Height: | Size: 224 B |
Binary file not shown.
After Width: | Height: | Size: 224 B |
14
tool.lua
14
tool.lua
|
@ -64,15 +64,23 @@ local function use_tool(itemstack, placer, pointed_thing)
|
|||
local pos1,ntype1 = get_stored_data(placer)
|
||||
local pos2,ntype2 = get_current_data(pointed_thing)
|
||||
|
||||
if ntype1 == "actuator" and ntype2 == "sensor" then
|
||||
if ntype1 == "actuator" and (ntype2 == "sensor" or ntype2 == "repeater") then
|
||||
pairing(pos1, pos2)
|
||||
store_data(placer, nil, nil)
|
||||
minetest.sound_play('signs_bot_pong', {to_player = placer:get_player_name()})
|
||||
elseif ntype2 == "actuator" and ntype1 == "sensor" then
|
||||
elseif (ntype1 == "actuator" or ntype1 == "repeater") and ntype2 == "sensor" then
|
||||
pairing(pos1, pos2)
|
||||
store_data(placer, nil, nil)
|
||||
minetest.sound_play('signs_bot_pong', {to_player = placer:get_player_name()})
|
||||
elseif ntype2 == "actuator" and (ntype1 == "sensor" or ntype1 == "repeater") then
|
||||
pairing(pos2, pos1)
|
||||
store_data(placer, nil, nil)
|
||||
minetest.sound_play('signs_bot_pong', {to_player = placer:get_player_name()})
|
||||
elseif ntype2 == "actuator" or ntype2 == "sensor" then
|
||||
elseif (ntype2 == "actuator" or ntype2 == "repeater") and ntype1 == "sensor" then
|
||||
pairing(pos2, pos1)
|
||||
store_data(placer, nil, nil)
|
||||
minetest.sound_play('signs_bot_pong', {to_player = placer:get_player_name()})
|
||||
elseif ntype2 == "actuator" or ntype2 == "sensor" or ntype2 == "repeater" then
|
||||
store_data(placer, pos2, ntype2)
|
||||
minetest.sound_play('signs_bot_ping', {to_player = placer:get_player_name()})
|
||||
else
|
||||
|
|
Loading…
Reference in New Issue