summaryrefslogtreecommitdiff
path: root/mesecons_luacontroller
diff options
context:
space:
mode:
authorCiaran Gultnieks <ciaran@ciarang.com>2014-03-11 22:42:59 +0000
committerCiaran Gultnieks <ciaran@ciarang.com>2014-03-11 22:50:48 +0000
commit9eda62df7b45659ff704db9a63a633a6bc4f70a7 (patch)
treebd686fcb12838c1fd95d7c3fe3be0585cc4c82e1 /mesecons_luacontroller
parenta59f53d71aa580e03adce238158d7852866f922c (diff)
downloadmesecons-9eda62df7b45659ff704db9a63a633a6bc4f70a7.tar
mesecons-9eda62df7b45659ff704db9a63a633a6bc4f70a7.tar.gz
mesecons-9eda62df7b45659ff704db9a63a633a6bc4f70a7.tar.bz2
mesecons-9eda62df7b45659ff704db9a63a633a6bc4f70a7.tar.xz
mesecons-9eda62df7b45659ff704db9a63a633a6bc4f70a7.zip
Add timer() function/event (node timer based) to luacontroller
This adds a timer(<seconds>) function, which causes an event of type "timer" to be fired after that many seconds has elapsed. Because it's node timer based, it works properly across server restarts and block unloading. Thus, simplest example, a blinky plant replacement with a 10 second period: if event.type == "program" then timer(10) elseif event.type == "timer" then port.a = not port.a timer(10) end
Diffstat (limited to 'mesecons_luacontroller')
-rw-r--r--mesecons_luacontroller/init.lua25
1 files changed, 18 insertions, 7 deletions
diff --git a/mesecons_luacontroller/init.lua b/mesecons_luacontroller/init.lua
index 263a66a..20f2ec1 100644
--- a/mesecons_luacontroller/init.lua
+++ b/mesecons_luacontroller/init.lua
@@ -219,13 +219,19 @@ local getinterrupt = function(pos)
return interrupt
end
-local getdigiline_send = function (pos)
- local digiline_send = function (channel, msg)
- if digiline then
- digiline:receptor_send(pos, digiline.rules.default, channel, msg)
- end
+local handle_timer = function(pos, elapsed)
+ local err = lc_update(pos, {type="timer"})
+ if err then print(err) end
+ return false
+end
+
+local gettimer = function(pos)
+ local timer = function (time)
+ if type(time) ~= "number" then return end
+ local nodetimer = minetest.get_node_timer(pos)
+ nodetimer:start(time)
end
- return digiline_send
+ return timer
end
local create_environment = function(pos, mem, event)
@@ -239,7 +245,11 @@ local create_environment = function(pos, mem, event)
pin = merge_portstates(vports, rports),
port = vports,
interrupt = getinterrupt(pos),
- digiline_send = getdigiline_send(pos),
+ timer = gettimer(pos),
+ digiline_msgs = {},
+ digiline_send = function(channel, msg)
+ table.insert(lc_digiline_msgs, {["channel"]=channel, ["msg"]=msg})
+ end,
mem = mem,
tostring = tostring,
tonumber = tonumber,
@@ -527,6 +537,7 @@ minetest.register_node(nodename, {
if err then print(err) end
reset_meta(pos, fields.code, err)
end,
+ on_timer = handle_timer,
sounds = default.node_sound_stone_defaults(),
mesecons = mesecons,
digiline = digiline,