aboutsummaryrefslogtreecommitdiff
path: root/cleanup.lua
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 /cleanup.lua
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 'cleanup.lua')
-rw-r--r--cleanup.lua29
1 files changed, 29 insertions, 0 deletions
diff --git a/cleanup.lua b/cleanup.lua
new file mode 100644
index 0000000..69bd20c
--- /dev/null
+++ b/cleanup.lua
@@ -0,0 +1,29 @@
+local subscribe_for_modification = mesecons_debug.settings._subscribe_for_modification
+local gc_interval = mesecons_debug.settings.gc_interval
+local cleanup_time_micros = gc_interval * 1000000
+
+subscribe_for_modification("gc_interval", function(value)
+ gc_interval = value
+ cleanup_time_micros = value * 1000000
+end)
+
+local context_store = mesecons_debug.context_store
+
+local cleanup_timer = 0
+minetest.register_globalstep(function(dtime)
+ cleanup_timer = cleanup_timer + dtime
+ if cleanup_timer < gc_interval then
+ return
+ end
+ cleanup_timer = 0
+
+ local now = minetest.get_us_time()
+ for hash, ctx in pairs(context_store) do
+ local time_diff = now - ctx.mtime
+ if time_diff > cleanup_time_micros then
+ -- remove item
+ context_store[hash] = nil
+ mesecons_debug.context_store_size = mesecons_debug.context_store_size - 1
+ end
+ end
+end)