aboutsummaryrefslogtreecommitdiff
path: root/luacontroller.lua
blob: c143bdcd3ac3d073fb798e1c62b2e5f66817ef14 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45

local function override_node_timer(node_name)
  local def = minetest.registered_nodes[node_name]
  local old_node_timer = def.on_timer
  def.on_timer = function(pos)
    local ctx = mesecons_debug.get_context(pos)
    if ctx.penalty > 0 then
      -- defer
      local timer = minetest.get_node_timer(pos)
      local meta = minetest.get_meta(pos)
      local is_defered = meta:get_int("_defered") == 1

      if is_defered then
        -- already delayed
        meta:set_int("_defered", 0)
        return old_node_timer(pos)
      else
        -- start timer
        meta:set_int("_defered", 1)
        timer:start(ctx.penalty)
      end
    else
      -- immediate
      return old_node_timer(pos)
    end
  end
end

-- luaC
local BASENAME = "mesecons_luacontroller:luacontroller"
for a = 0, 1 do -- 0 = off  1 = on
  for b = 0, 1 do
    for c = 0, 1 do
      for d = 0, 1 do
        local cid = tostring(d)..tostring(c)..tostring(b)..tostring(a)
        local node_name = BASENAME..cid
        override_node_timer(node_name)
      end
    end
  end
end

-- blinky
override_node_timer("mesecons_blinkyplant:blinky_plant_off")
override_node_timer("mesecons_blinkyplant:blinky_plant_on")