luacontroller.lua 1.1 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546
  1. local function override_node_timer(node_name)
  2. local def = minetest.registered_nodes[node_name]
  3. local old_node_timer = def.on_timer
  4. def.on_timer = function(pos)
  5. local ctx = mesecons_debug.get_context(pos)
  6. if ctx.penalty > 0 then
  7. -- defer
  8. local timer = minetest.get_node_timer(pos)
  9. local meta = minetest.get_meta(pos)
  10. local is_defered = meta:get_int("_defered") == 1
  11. if is_defered then
  12. -- already delayed
  13. meta:set_int("_defered", 0)
  14. return old_node_timer(pos)
  15. else
  16. -- start timer
  17. meta:set_int("_defered", 1)
  18. timer:start(ctx.penalty)
  19. end
  20. else
  21. -- immediate
  22. return old_node_timer(pos)
  23. end
  24. end
  25. end
  26. -- luaC
  27. local BASENAME = "mesecons_luacontroller:luacontroller"
  28. for a = 0, 1 do -- 0 = off 1 = on
  29. for b = 0, 1 do
  30. for c = 0, 1 do
  31. for d = 0, 1 do
  32. local cid = tostring(d)..tostring(c)..tostring(b)..tostring(a)
  33. local node_name = BASENAME..cid
  34. override_node_timer(node_name)
  35. end
  36. end
  37. end
  38. end
  39. -- blinky
  40. override_node_timer("mesecons_blinkyplant:blinky_plant_off")
  41. override_node_timer("mesecons_blinkyplant:blinky_plant_on")