mirror of
https://github.com/ComfyFactory/ComfyFactorio.git
synced 2025-01-06 00:23:49 +02:00
60 lines
1.9 KiB
Lua
60 lines
1.9 KiB
Lua
-- biters will landfill a tile on death within a certain radius
|
|
|
|
local r = 6
|
|
local vectors = {{0,0}, {1,0}, {0,1}, {-1,0}, {0,-1}}
|
|
local math_random = math.random
|
|
|
|
local function create_particles(surface, position)
|
|
local m = math_random(8, 12)
|
|
local m2 = m * 0.005
|
|
for i = 1, 75, 1 do
|
|
surface.create_entity({
|
|
name = "stone-particle",
|
|
position = position,
|
|
frame_speed = 0.1,
|
|
vertical_speed = 0.1,
|
|
height = 0.1,
|
|
movement = {m2 - (math_random(0, m) * 0.01), m2 - (math_random(0, m) * 0.01)}
|
|
})
|
|
end
|
|
end
|
|
|
|
local function coord_string(x, y)
|
|
local str = tostring(x) .. "_"
|
|
str = str .. tostring(y)
|
|
return str
|
|
end
|
|
|
|
local function get_replacement_tile(surface, position)
|
|
for _, vector in pairs(vectors) do
|
|
local tile = surface.get_tile({position.x + vector[1], position.y + vector[2]})
|
|
if not tile.collides_with("resource-layer") then return tile.name end
|
|
end
|
|
return "grass-1"
|
|
end
|
|
|
|
local function landfill(surface, entity)
|
|
local position = {x = math.floor(entity.position.x), y = math.floor(entity.position.y)}
|
|
local pos_str = coord_string(position.x, position.y)
|
|
if global.biters_landfill_on_death[pos_str] then return end
|
|
local tiles = surface.find_tiles_filtered({name = {"water", "deepwater"}, area = {{position.x - r, position.y - r},{position.x + r, position.y + r}}})
|
|
if #tiles == 0 then global.biters_landfill_on_death[pos_str] = true return end
|
|
local p = tiles[math_random(1, #tiles)].position
|
|
surface.set_tiles({{name = get_replacement_tile(surface, position), position = p}})
|
|
create_particles(entity.surface, {p.x + 0.5, p.y + 0.5})
|
|
end
|
|
|
|
local function on_entity_died(event)
|
|
local entity = event.entity
|
|
if not entity.valid then return end
|
|
if entity.type ~= "unit" then return end
|
|
landfill(entity.surface, entity)
|
|
end
|
|
|
|
local function on_init()
|
|
global.biters_landfill_on_death = {}
|
|
end
|
|
|
|
local event = require 'utils.event'
|
|
event.on_init(on_init)
|
|
event.add(defines.events.on_entity_died, on_entity_died) |