Factorio-Paranoidal_mod/rso-mod/libs/straight_world.lua

69 lines
1.9 KiB
Lua

local blocksize=8
local blocksizem1=blocksize-1
local blocksized2=math.floor(blocksize/2)
local ti=table.insert
local function fill(surface, x0,y0,name,amount,step,shift)
step=step or 1
shift=shift or 0
for y=y0+shift,y0+blocksize-1,step do
for x=x0+shift,x0+blocksize-1,step do
surface.create_entity{name=name,position={x,y},amount=amount}
end
end
end
function straightWorld(surface, leftTop, rightBottom)
local lt = leftTop
local rb = rightBottom
for y0=lt.y,rb.y-1,blocksize do
for x0=lt.x,rb.x-1,blocksize do
local tile=surface.get_tile(x0,y0).name
local tiles={}
for y=y0,y0+blocksizem1 do
for x=x0,x0+blocksizem1 do
ti(tiles,{name=tile,position={x,y}})
end
end
surface.set_tiles(tiles)
local ent=surface.find_entities{{x0,y0},{x0+blocksize,y0+blocksize}}
local haveTree=false
local amount=0
local haveResource=false
local haveDecor=false
for _,e in ipairs(ent) do
if e.position.x>=x0 and e.position.y>=y0 then
if e.type=="resource" then
haveResource=e.name
amount=e.amount
e.destroy()
elseif e.type=="tree" then
haveTree=e.name
e.destroy()
elseif e.type=="decorative" then
haveDecor=e.name
e.destroy()
elseif e.type=="simple-entity" then
e.destroy()
end
end
end
if haveResource then
if haveResource=="crude-oil" or string.sub(haveResource,1,4) == "lava" then
surface.create_entity{name=haveResource,amount=amount,position={x0+blocksized2,y0+blocksized2}}
else
fill(surface, x0,y0,haveResource,amount)
end
end
if not haveResource and haveTree then
fill(surface, x0,y0,haveTree,nil,4)
end
if haveDecor then
fill(surface, x0,y0,haveDecor,nil,2,1)
end
end
end
end