1
0
mirror of https://github.com/Refactorio/RedMew.git synced 2025-02-07 13:31:54 +02:00
RedMew/features/biter_corpse_remover.lua

45 lines
1.2 KiB
Lua
Raw Normal View History

2019-06-09 22:34:13 -06:00
-- dependencies
2019-06-04 13:07:43 -06:00
local Event = require 'utils.event'
2019-06-09 22:34:13 -06:00
local Global = require 'utils.global'
local Queue = require 'utils.queue'
2019-06-04 13:07:43 -06:00
local queue_push = Queue.push
local queue_pop = Queue.pop
local queue_size = Queue.size
2019-06-04 13:07:43 -06:00
-- config table for the max queue size
-- Change at runtime with /sc global.config.biter_corpse_remover.max_queue_size = 100
local biter_corpse_remover = global.config.biter_corpse_remover
2019-06-13 22:25:42 +01:00
local corpse_queue = Queue.new()
2019-06-04 13:07:43 -06:00
Global.register(corpse_queue, function(tbl)
corpse_queue = tbl
biter_corpse_remover = global.config.biter_corpse_remover
end)
2019-06-04 14:25:34 -06:00
local function entity_died(event)
local prototype_type = event.prototype.type
if prototype_type ~= 'unit' and prototype_type ~= 'turret' then
2019-06-04 15:28:08 -06:00
return
end
local corpses = event.corpses
for i = 1, #corpses do
local corpse = corpses[i]
if corpse.valid then
queue_push(corpse_queue, corpse)
end
2019-06-13 22:25:42 +01:00
end
local to_remove = queue_size(corpse_queue) - biter_corpse_remover.max_queue_size
for _ = 1, to_remove do
local corpse = queue_pop(corpse_queue)
if corpse.valid then
corpse.destroy()
2019-06-13 22:25:42 +01:00
end
2019-06-04 13:07:43 -06:00
end
end
Event.add(defines.events.on_post_entity_died, entity_died)