12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667 |
- local metric_mapgen_events_count
- if minetest.get_modpath("monitoring") then
- metric_mapgen_events_count = monitoring.gauge(
- "jumpdrive_mapgen_events_count",
- "number of events in the mapgen cache"
- )
- end
- local events = {} -- list of {minp, maxp, time}
- jumpdrive.mapgen = {}
- jumpdrive.mapgen.reset = function()
- events = {}
- end
- -- update last mapgen event time
- minetest.register_on_generated(function(minp, maxp, seed)
- table.insert(events, {
- minp = minp,
- maxp = maxp,
- time = minetest.get_us_time()
- })
- end)
- -- cleanup
- local timer = 0
- minetest.register_globalstep(function(dtime)
- timer = timer + dtime
- if timer < 5 then return end
- timer=0
- local time = minetest.get_us_time()
- local delay_seconds = 20
- local copied_events = events
- events = {}
- local count = 0
- for _, event in ipairs(copied_events) do
- if event.time > (time - (delay_seconds * 1000000)) then
- -- still recent
- table.insert(events, event)
- count = count + 1
- end
- end
- if metric_mapgen_events_count then
- metric_mapgen_events_count.set(count)
- end
- end)
- -- true = mapgen recently active in that area
- jumpdrive.check_mapgen = function(pos)
- for _, event in ipairs(events) do
- if vector.distance(pos, event.minp) < 200 then
- return true
- end
- end
- return false
- end
|