mirror of
https://github.com/ComfyFactory/ComfyFactorio.git
synced 2025-01-04 00:15:45 +02:00
84 lines
1.9 KiB
Lua
84 lines
1.9 KiB
Lua
local Global = require 'utils.global'
|
|
local Event = require 'utils.event'
|
|
local this = {
|
|
chunks = {}
|
|
}
|
|
|
|
Global.register(
|
|
this,
|
|
function(tbl)
|
|
this = tbl
|
|
end
|
|
)
|
|
|
|
local Public = {}
|
|
|
|
function Public.get_chunk_and_remove()
|
|
local chunk
|
|
this.current_index, chunk = next(this.chunks, this.current_index)
|
|
|
|
if this.current_index and this.chunks[this.current_index] then
|
|
this.chunks[this.current_index] = nil
|
|
return chunk
|
|
end
|
|
end
|
|
|
|
function Public.apply_tiles(tiles)
|
|
if tiles and next(tiles) then
|
|
local surface = game.get_surface(this.map_name)
|
|
surface.set_tiles(tiles, true)
|
|
end
|
|
end
|
|
|
|
function Public.apply_entities(entities)
|
|
if entities and next(entities) then
|
|
local surface = game.get_surface(this.map_name)
|
|
for _, e in ipairs(entities) do
|
|
if e then
|
|
surface.create_entity(e)
|
|
end
|
|
end
|
|
end
|
|
end
|
|
|
|
function Public.apply_decoratives(decoratives)
|
|
if decoratives and next(decoratives) then
|
|
local surface = game.get_surface(this.map_name)
|
|
surface.create_decoratives({check_collision = true, decoratives = decoratives})
|
|
end
|
|
end
|
|
|
|
function Public.apply_map_name(map_name)
|
|
this.map_name = map_name or nil
|
|
end
|
|
|
|
Event.add(
|
|
defines.events.on_chunk_generated,
|
|
function(event)
|
|
local left_top = event.area.left_top
|
|
local surface = event.surface
|
|
local map_name = this.map_name
|
|
|
|
if not map_name then
|
|
return
|
|
end
|
|
|
|
if string.sub(surface.name, 0, #map_name) ~= map_name then
|
|
return
|
|
end
|
|
|
|
local seed = surface.map_gen_settings.seed
|
|
|
|
if not surface.generate_with_lab_tiles then
|
|
surface.generate_with_lab_tiles = true
|
|
end
|
|
|
|
this.chunks[#this.chunks + 1] = {
|
|
seed = seed,
|
|
left_top = left_top
|
|
}
|
|
end
|
|
)
|
|
|
|
return Public
|