mirror of
https://github.com/ComfyFactory/ComfyFactorio.git
synced 2025-01-10 00:43:27 +02:00
66 lines
2.3 KiB
Lua
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 |