diff options
author | fluxionary <25628292+fluxionary@users.noreply.github.com> | 2022-02-13 06:54:41 -0800 |
---|---|---|
committer | GitHub <noreply@github.com> | 2022-02-13 15:54:41 +0100 |
commit | 2651262fa3134415f349f63840c89486fabd9063 (patch) | |
tree | 3fa7f2ac228e662b4e9bc8071acc2f0650c44e65 /overrides | |
parent | 1a41379e1d7ae69347f0e6ee6a997234f7590793 (diff) | |
download | mesecons_debug-2651262fa3134415f349f63840c89486fabd9063.tar.gz mesecons_debug-2651262fa3134415f349f63840c89486fabd9063.zip |
rework mesecons debug to be more flexible (#7)
* add proper settings (untested)
* more constants -> settings
* normalize whitespace between code files
* refactor globalsteps in order to simplify logic
* minor refactoring
* rename file
* use mod_storage for persistent data; optimize context initialization
* refactoring (moving files around)
* rewrite penalty
* add settings; document; allow changing while game is running
* add command to update settings
* update init after splitting commands into files
* fix bugs; add debugging tools; too much for one commit...
* fix whitelist conversion
* add adjustable blinky plant to timer overrides
* add some more mesecons nodes with repeating timers
* resolve luacheck warnings
* tweak hud
* Update documentation; parameterize more things; refactor some logic for readability
Diffstat (limited to 'overrides')
-rw-r--r-- | overrides/mesecons_queue.lua | 49 | ||||
-rw-r--r-- | overrides/node_timers.lua | 69 |
2 files changed, 118 insertions, 0 deletions
diff --git a/overrides/mesecons_queue.lua b/overrides/mesecons_queue.lua new file mode 100644 index 0000000..4375d7d --- /dev/null +++ b/overrides/mesecons_queue.lua @@ -0,0 +1,49 @@ +local penalty_mapblock_disabled = mesecons_debug.settings.penalty_mapblock_disabled +mesecons_debug.settings._subscribe_for_modification("penalty_mapblock_disabled", + function(value) penalty_mapblock_disabled = value end) + +-- execute() +local old_execute = mesecon.queue.execute +mesecon.queue.execute = function(self, action) + if not mesecons_debug.enabled then + return old_execute(self, action) + elseif not mesecons_debug.mesecons_enabled then + return + end + + local ctx = mesecons_debug.get_context(action.pos) + if ctx.whitelisted then + return old_execute(self, action) + end + + local t0 = minetest.get_us_time() + local rv = old_execute(self, action) + local micros = minetest.get_us_time() - t0 + + mesecons_debug.total_micros = mesecons_debug.total_micros + micros + ctx.micros = ctx.micros + micros + ctx.mtime = t0 -- modification time + + return rv +end + + +-- add_action() +local old_add_action = mesecon.queue.add_action +mesecon.queue.add_action = function(self, pos, func, params, time, overwritecheck, priority) + if not mesecons_debug.enabled then + return old_add_action(self, pos, func, params, time, overwritecheck, priority) + + elseif not mesecons_debug.mesecons_enabled then + return + end + + local ctx = mesecons_debug.get_context(pos) + + if not ctx.whitelisted and ctx.penalty > penalty_mapblock_disabled then + -- penalty exceeded disable-threshold, don't even add the action + return + end + + return old_add_action(self, pos, func, params, (time or 0) + ctx.penalty, overwritecheck, priority) +end diff --git a/overrides/node_timers.lua b/overrides/node_timers.lua new file mode 100644 index 0000000..ea37d6a --- /dev/null +++ b/overrides/node_timers.lua @@ -0,0 +1,69 @@ +local function override_node_timer(node_name) + local old_node_timer = minetest.registered_nodes[node_name].on_timer + minetest.override_item(node_name, { + on_timer = function(pos, elapsed) + if not mesecons_debug.enabled then + return old_node_timer(pos, elapsed) + + elseif not mesecons_debug.mesecons_enabled then + return true + end + + local ctx = mesecons_debug.get_context(pos) + + if ctx.whitelisted or elapsed > ctx.penalty then + return old_node_timer(pos, elapsed) + else + -- defer + return true + end + end, + }) +end + +if minetest.get_modpath("digistuff") then + override_node_timer("digistuff:timer") +end + +if minetest.get_modpath("mesecons_luacontroller") then + for a = 0, 1 do + for b = 0, 1 do + for c = 0, 1 do + for d = 0, 1 do + override_node_timer(("mesecons_luacontroller:luacontroller%i%i%i%i"):format(a, b, c, d)) + end + end + end + end +end + +if minetest.get_modpath("mesecons_blinkyplant") then + override_node_timer("mesecons_blinkyplant:blinky_plant_off") + override_node_timer("mesecons_blinkyplant:blinky_plant_on") +end + +if minetest.get_modpath("moremesecons_adjustable_blinkyplant") then + override_node_timer("moremesecons_adjustable_blinkyplant:adjustable_blinky_plant_off") + override_node_timer("moremesecons_adjustable_blinkyplant:adjustable_blinky_plant_on") +end + +if minetest.get_modpath("moremesecons_injector_controller") then + override_node_timer("moremesecons_injector_controller:injector_controller_on") + override_node_timer("moremesecons_injector_controller:injector_controller_off") +end + +if minetest.get_modpath("pipeworks") then + for a = 0, 1 do + for b = 0, 1 do + for c = 0, 1 do + for d = 0, 1 do + for e = 0, 1 do + for f = 0, 1 do + override_node_timer(("pipeworks:lua_tube%i%i%i%i%i%i"):format(a, b, c, d, e, f)) + end + end + end + end + end + end +end |