1
0
mirror of https://github.com/Refactorio/RedMew.git synced 2024-12-14 10:13:13 +02:00
RedMew/map_gen/maps/danger_ores/modules/container_dump.lua
2020-09-02 15:04:50 +01:00

90 lines
2.2 KiB
Lua

local Event = require 'utils.event'
local Global = require 'utils.global'
local math = require 'utils.math'
local floor = math.floor
local max = math.max
local chest = defines.inventory.chest
local died_entities = {}
Global.register(
died_entities,
function(tbl)
died_entities = tbl
end
)
return function(config)
local entity_name = config.entity_name
Event.add(
defines.events.on_entity_died,
function(event)
local entity = event.entity
if not entity.valid then
return
end
local type = entity.type
if type ~= 'container' and type ~= 'logistic-container' then
return
end
local inventory = entity.get_inventory(chest)
if not inventory or not inventory.valid then
return
end
local count = inventory.get_item_count()
if count == 0 then
return
end
local area = entity.bounding_box
local left_top, right_bottom = area.left_top, area.right_bottom
local x1, y1 = floor(left_top.x), floor(left_top.y)
local x2, y2 = floor(right_bottom.x), floor(right_bottom.y)
local size_x = x2 - x1 + 1
local size_y = y2 - y1 + 1
local amount = floor(count / (size_x * size_y))
amount = max(amount, 1)
local create_entity = entity.surface.create_entity
for x = x1, x2 do
for y = y1, y2 do
create_entity({name = entity_name, position = {x, y}, amount = amount})
end
end
died_entities[entity.unit_number] = true
end
)
Event.add(
defines.events.on_post_entity_died,
function(event)
local unit_number = event.unit_number
if not unit_number then
return
end
if not died_entities[unit_number] then
return
end
died_entities[unit_number] = nil
local ghost = event.ghost
if not ghost or not ghost.valid then
return
end
ghost.destroy()
end
)
end