aboutsummaryrefslogtreecommitdiff
path: root/overrides
diff options
context:
space:
mode:
authorfluxionary <25628292+fluxionary@users.noreply.github.com>2022-02-13 06:54:41 -0800
committerGitHub <noreply@github.com>2022-02-13 15:54:41 +0100
commit2651262fa3134415f349f63840c89486fabd9063 (patch)
tree3fa7f2ac228e662b4e9bc8071acc2f0650c44e65 /overrides
parent1a41379e1d7ae69347f0e6ee6a997234f7590793 (diff)
downloadmesecons_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.lua49
-rw-r--r--overrides/node_timers.lua69
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