1
0
mirror of https://github.com/ComfyFactory/ComfyFactorio.git synced 2025-01-04 00:15:45 +02:00
ComfyFactorio/utils/remote_chunks.lua
2023-10-21 10:17:52 +02:00

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