1
0
mirror of https://github.com/ComfyFactory/ComfyFactorio.git synced 2025-01-10 00:43:27 +02:00
ComfyFactorio/tools/lazy_chunk_loader.lua
2019-03-13 17:09:06 +01:00

66 lines
2.3 KiB
Lua

--this tool should provide you with smoother gameplay in heavily modified custom maps--
--tiles will be generated first, entities will be placed, when there are no more tiles left to process--
--by mewmew
local event = require 'utils.event'
local lazy_chunk_loader = {}
local chunk_functions = {}
--cut chunks into pieces and fill them into chunk_pieces tables
local function on_chunk_generated(event)
if not global.chunk_pieces then global.chunk_pieces = {} end
if not global.chunk_pieces_entities then global.chunk_pieces_entities = {} end
if not global.chunk_pieces_load_amount then global.chunk_pieces_load_amount = 128 end
if not global.chunk_pieces_load_speed then global.chunk_pieces_load_speed = 2 end -- how many ticks until one operation happens
if game.tick > 300 then global.chunk_pieces_load_amount = 1 end -- how many pieces are processed per one operation
local index = event.surface.index
for pos_y = 0, 24, 8 do
for pos_x = 0, 24, 8 do
table.insert(global.chunk_pieces, {{x = event.area.left_top.x + pos_x, y = event.area.left_top.y + pos_y}, index})
end
end
end
--process the pieces lazy, calling chunk_functions()
local function on_tick()
if global.chunk_pieces[1] then
if game.tick % global.chunk_pieces_load_speed ~= 0 then return end
local z = global.chunk_pieces_load_amount
for x = #global.chunk_pieces, 1, -1 do
if not global.chunk_pieces[x] then return end
for _, f in pairs(chunk_functions) do
f(global.chunk_pieces[x])
end
global.chunk_pieces[x] = nil
z = z - 1
if z == 0 then break end
end
end
end
--[[
--process the pieces lazy, calling chunk_functions()
local function on_tick()
if #global.chunk_pieces > 0 then
if game.tick % global.chunk_pieces_load_speed ~= 0 then return end
for x = 1, global.chunk_pieces_load_amount, 1 do
local i, z = next(global.chunk_pieces, nil)
if not i then return end
for _, f in pairs(chunk_functions) do
f(global.chunk_pieces[i])
end
global.chunk_pieces[i] = nil
end
end
end
]]--
--add custom terrain functions here
lazy_chunk_loader.add = function(f)
table.insert(chunk_functions, f)
end
event.add(defines.events.on_tick, on_tick)
event.add(defines.events.on_chunk_generated, on_chunk_generated)
return lazy_chunk_loader