mirror of
https://github.com/ComfyFactory/ComfyFactorio.git
synced 2025-01-06 00:23:49 +02:00
56 lines
1.7 KiB
Lua
56 lines
1.7 KiB
Lua
local function shuffle(tbl)
|
|
local size = #tbl
|
|
for i = size, 1, -1 do
|
|
local rand = math.random(size)
|
|
tbl[i], tbl[rand] = tbl[rand], tbl[i]
|
|
end
|
|
return tbl
|
|
end
|
|
|
|
local function create_entity_chain(surface, entity, count, straightness)
|
|
if not surface then return end
|
|
if not entity then return end
|
|
if not count then return end
|
|
|
|
local position = {x = entity.position.x, y = entity.position.y}
|
|
|
|
local modifiers = {{x = 0, y = -1},{x = -1, y = 0},{x = 1, y = 0},{x = 0, y = 1}}
|
|
local modifiers_d = {{x = -1, y = 1},{x = 1, y = -1},{x = 1, y = 1},{x = -1, y = -1}}
|
|
|
|
modifiers = shuffle(modifiers)
|
|
modifiers_d = shuffle(modifiers_d)
|
|
|
|
for a = 1, count, 1 do
|
|
local entity_placed = false
|
|
|
|
if math.random(0, 100) > straightness then modifiers = shuffle(modifiers) end
|
|
for b = 1, 4, 1 do
|
|
local pos = {x = position.x + modifiers[b].x, y = position.y + modifiers[b].y}
|
|
if surface.can_place_entity({name = entity.name, position = pos}) then
|
|
surface.create_entity({name = entity.name, position = pos, force = entity.force})
|
|
position = {x = pos.x, y = pos.y}
|
|
entity_placed = true
|
|
break
|
|
end
|
|
end
|
|
|
|
if not entity_placed then
|
|
if math.random(0, 100) > straightness then modifiers_d = shuffle(modifiers_d) end
|
|
for b = 1, 4, 1 do
|
|
local pos = {x = position.x + modifiers_d[b].x, y = position.y + modifiers_d[b].y}
|
|
if surface.can_place_entity({name = entity.name, position = pos}) then
|
|
surface.create_entity({name = entity.name, position = pos, force = entity.force})
|
|
position = {x = pos.x, y = pos.y}
|
|
entity_placed = true
|
|
break
|
|
end
|
|
end
|
|
end
|
|
|
|
if not entity_placed then
|
|
position = {x = position.x + modifiers[1].x, y = position.y + modifiers[1].y}
|
|
end
|
|
end
|
|
end
|
|
|
|
return create_entity_chain |