1
0
mirror of https://github.com/ComfyFactory/ComfyFactorio.git synced 2024-12-30 23:17:53 +02:00

new tool > lazy_chunk_loader

This commit is contained in:
MewMew 2018-09-20 09:50:56 +02:00
parent 3a2ece5b0c
commit a3d0537971
2 changed files with 66 additions and 41 deletions

View File

@ -2,6 +2,7 @@
local simplex_noise = require 'utils.simplex_noise'
local event = require 'utils.event'
require "maps.tools.lazy_chunk_loader"
local function get_noise(name, pos)
local seed = game.surfaces[1].map_gen_settings.seed
@ -47,7 +48,7 @@ local function get_noise(name, pos)
end
end
local function generate_chunk_tiles(chunk_piece)
function generate_chunk_tiles(chunk_piece)
local area = chunk_piece.area
local surface = chunk_piece.surface
local tiles = {}
@ -76,7 +77,7 @@ local function generate_chunk_tiles(chunk_piece)
surface.set_tiles(tiles,true)
end
local function generate_chunk_entities(chunk_piece)
function generate_chunk_entities(chunk_piece)
local area = chunk_piece.area
local surface = chunk_piece.surface
local enemy_building_positions = {}
@ -96,16 +97,10 @@ local function generate_chunk_entities(chunk_piece)
local pos_y = area.left_top.y + y
local pos = {x = pos_x, y = pos_y}
tile_distance_to_center = pos_x^2 + pos_y^2
if surface.can_place_entity({name="biter-spawner", position=p}) then surface.create_entity {name="biter-spawner", position=p} end
--local noise_3 = get_noise(3, pos)
if tile_to_insert == false then
table.insert(tiles, {name = "sand-3", position = {pos_x,pos_y}})
else
table.insert(tiles, {name = tile_to_insert, position = {pos_x,pos_y}})
end
if surface.can_place_entity({name="tree-04", position=pos}) then surface.create_entity {name="tree-04", position=pos} end
--local noise_3 = get_noise(3, pos)
end
end
surface.set_tiles(tiles,true)
end
@ -122,22 +117,7 @@ function dump(o)
end
end
--cut chunks into 8x8 pieces and fill them into global.chunk_pieces
local function on_chunk_generated(event)
if not global.chunk_pieces then global.chunk_pieces = {} end
if not global.chunk_pieces_tile_index then global.chunk_pieces_tile_index = 1 end
if not global.chunk_pieces_entity_index then global.chunk_pieces_entity_index = 1 end
local a
for pos_y = 0, 24, 8 do
for pos_x = 0, 24, 8 do
a = {
left_top = {x = event.area.left_top.x + pos_x, y = event.area.left_top.y + pos_y},
right_bottom = {x = event.area.left_top.x + pos_x + 8, y = event.area.left_top.y + pos_y + 8}
}
table.insert(global.chunk_pieces, {area = a, surface = event.surface})
end
end
end
local function on_player_joined_game(event)
local player = game.players[event.player_index]
@ -177,18 +157,6 @@ local function on_marked_for_deconstruction(event)
event.entity.cancel_deconstruction(game.players[event.player_index].force.name)
end
end
local function on_tick()
if global.chunk_pieces[global.chunk_pieces_tile_index] then
generate_chunk_tiles(global.chunk_pieces[global.chunk_pieces_tile_index])
global.chunk_pieces_tile_index = global.chunk_pieces_tile_index + 1
else
if global.chunk_pieces[global.chunk_entity_tile_index] then
generate_chunk_entities(global.chunk_pieces[global.chunk_pieces_tile_index])
global.chunk_entity_tile_index = global.chunk_entity_tile_index + 1
end
end
end
function cheat_mode()
local cheat_mode_enabed = true
@ -210,7 +178,5 @@ function cheat_mode()
end
end
event.add(defines.events.on_marked_for_deconstruction, on_marked_for_deconstruction)
event.add(defines.events.on_chunk_generated, on_chunk_generated)
event.add(defines.events.on_tick, on_tick)
event.add(defines.events.on_marked_for_deconstruction, on_marked_for_deconstruction)
event.add(defines.events.on_player_joined_game, on_player_joined_game)

View File

@ -0,0 +1,59 @@
--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'
--cut chunks into 8x8 pieces and fill them into global.chunk_pieces
local function on_chunk_generated(event)
if not global.chunk_pieces then global.chunk_pieces = {} end
if not global.chunk_pieces_tile_index then global.chunk_pieces_tile_index = 1 end
if not global.chunk_pieces_entity_index then global.chunk_pieces_entity_index = 1 end
local a
for pos_y = 0, 24, 8 do
for pos_x = 0, 24, 8 do
a = {
left_top = {x = event.area.left_top.x + pos_x, y = event.area.left_top.y + pos_y},
right_bottom = {x = event.area.left_top.x + pos_x + 8, y = event.area.left_top.y + pos_y + 8}
}
table.insert(global.chunk_pieces, {area = a, surface = event.surface})
end
end
end
--process the pieces lazy, calling generate_chunk_tiles() and generate_chunk_entities()
local function on_tick()
if not generate_chunk_tiles then game.print("no function > generate_chunk_tiles") return end
if not generate_chunk_entities then game.print("no function > generate_chunk_entities") return end
if global.chunk_pieces[global.chunk_pieces_tile_index] then
if global.chunk_pieces_tile_index < 4096 then --4096 for a fast spawn generation
for x = 1, 16, 1 do
if global.chunk_pieces[global.chunk_pieces_tile_index] then
generate_chunk_tiles(global.chunk_pieces[global.chunk_pieces_tile_index])
global.chunk_pieces_tile_index = global.chunk_pieces_tile_index + 1
end
end
else
generate_chunk_tiles(global.chunk_pieces[global.chunk_pieces_tile_index])
global.chunk_pieces_tile_index = global.chunk_pieces_tile_index + 1
end
else
if global.chunk_pieces[global.chunk_pieces_entity_index] then
if global.chunk_pieces_entity_index < 4096 then --4096 for a fast spawn generation
for x = 1, 16, 1 do
if global.chunk_pieces[global.chunk_pieces_entity_index] then
generate_chunk_entities(global.chunk_pieces[global.chunk_pieces_entity_index])
global.chunk_pieces_entity_index = global.chunk_pieces_entity_index + 1
end
end
else
generate_chunk_entities(global.chunk_pieces[global.chunk_pieces_entity_index])
global.chunk_pieces_entity_index = global.chunk_pieces_entity_index + 1
end
end
end
end
event.add(defines.events.on_tick, on_tick)
event.add(defines.events.on_chunk_generated, on_chunk_generated)