diff options
author | Ciaran Gultnieks <ciaran@ciarang.com> | 2014-03-11 22:42:59 +0000 |
---|---|---|
committer | Ciaran Gultnieks <ciaran@ciarang.com> | 2014-03-11 22:50:48 +0000 |
commit | 9eda62df7b45659ff704db9a63a633a6bc4f70a7 (patch) | |
tree | bd686fcb12838c1fd95d7c3fe3be0585cc4c82e1 | |
parent | a59f53d71aa580e03adce238158d7852866f922c (diff) |
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
-rw-r--r-- | mesecons_luacontroller/init.lua | 25 |
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, |