mirror of
https://gitlab.com/gaelysam/mapgen_rivers.git
synced 2025-02-22 15:00:31 +01:00
Generate grid directly in pregenerate.lua, not in a function
This commit is contained in:
parent
4697f9c948
commit
2cf3b19167
@ -69,25 +69,6 @@ function mapgen_rivers.try_load_grid(grid)
|
|||||||
return true
|
return true
|
||||||
end
|
end
|
||||||
|
|
||||||
function mapgen_rivers.generate_grid()
|
|
||||||
minetest.log("action", '[mapgen_rivers] Generating grid, this may take a while...')
|
|
||||||
local grid = {}
|
|
||||||
|
|
||||||
local blocksize = mapgen_rivers.settings.blocksize
|
|
||||||
local xsize = math.floor(mapgen_rivers.settings.map_x_size / blocksize)
|
|
||||||
local zsize = math.floor(mapgen_rivers.settings.map_z_size / blocksize)
|
|
||||||
grid.size = {x=xsize, y=zsize}
|
|
||||||
|
|
||||||
if not mapgen_rivers.pregenerate then
|
|
||||||
minetest.log("error", "[mapgen_rivers] Pre-generation function is not available.")
|
|
||||||
return false
|
|
||||||
end
|
|
||||||
|
|
||||||
mapgen_rivers.pregenerate(grid)
|
|
||||||
|
|
||||||
return grid
|
|
||||||
end
|
|
||||||
|
|
||||||
function mapgen_rivers.write_grid(grid)
|
function mapgen_rivers.write_grid(grid)
|
||||||
minetest.mkdir(world_data)
|
minetest.mkdir(world_data)
|
||||||
|
|
||||||
|
4
init.lua
4
init.lua
@ -17,9 +17,7 @@ minetest.register_on_mods_loaded(function()
|
|||||||
local exist = mapgen_rivers.try_load_grid()
|
local exist = mapgen_rivers.try_load_grid()
|
||||||
|
|
||||||
if not exist then -- If grid does not exist yet, generate it
|
if not exist then -- If grid does not exist yet, generate it
|
||||||
dofile(modpath .. 'pregenerate.lua')
|
local grid = dofile(modpath .. 'pregenerate.lua')
|
||||||
|
|
||||||
local grid = mapgen_rivers.generate_grid()
|
|
||||||
mapgen_rivers.write_grid(grid)
|
mapgen_rivers.write_grid(grid)
|
||||||
mapgen_rivers.try_load_grid() -- Reload if needed
|
mapgen_rivers.try_load_grid() -- Reload if needed
|
||||||
end
|
end
|
||||||
|
@ -21,6 +21,9 @@ local use_margin = mapgen_rivers.settings.margin
|
|||||||
local margin_width = mapgen_rivers.settings.margin_width / blocksize
|
local margin_width = mapgen_rivers.settings.margin_width / blocksize
|
||||||
local margin_elev = mapgen_rivers.settings.margin_elev
|
local margin_elev = mapgen_rivers.settings.margin_elev
|
||||||
|
|
||||||
|
local X = math.floor(mapgen_rivers.settings.map_x_size / blocksize)
|
||||||
|
local Y = math.floor(mapgen_rivers.settings.map_z_size / blocksize)
|
||||||
|
|
||||||
local function margin(dem, width, elev)
|
local function margin(dem, width, elev)
|
||||||
local X, Y = dem.X, dem.Y
|
local X, Y = dem.X, dem.Y
|
||||||
for i=1, width do
|
for i=1, width do
|
||||||
@ -49,33 +52,36 @@ local function margin(dem, width, elev)
|
|||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
function mapgen_rivers.pregenerate(grid)
|
-- Generate the grid
|
||||||
local size = grid.size
|
|
||||||
|
|
||||||
if size.x * size.y > 4e6 then
|
minetest.log("action", '[mapgen_rivers] Generating grid, this may take a while...')
|
||||||
|
|
||||||
|
local grid = {size={x=X, y=Y}}
|
||||||
|
|
||||||
|
if X*Y > 4e6 then
|
||||||
minetest.log("warning", "[mapgen_rivers] You are going to generate a very large grid (>4M nodes). If you experience problems, you should increase blocksize or reduce map size.")
|
minetest.log("warning", "[mapgen_rivers] You are going to generate a very large grid (>4M nodes). If you experience problems, you should increase blocksize or reduce map size.")
|
||||||
end
|
end
|
||||||
|
|
||||||
local seed = tonumber(minetest.get_mapgen_setting("seed"):sub(-10))
|
local seed = tonumber(minetest.get_mapgen_setting("seed"):sub(-10))
|
||||||
np_base.seed = (np_base.seed or 0) + seed
|
np_base.seed = (np_base.seed or 0) + seed
|
||||||
|
|
||||||
local nobj_base = PerlinNoiseMap(np_base, {x=size.x, y=1, z=size.y})
|
local nobj_base = PerlinNoiseMap(np_base, {x=X, y=1, z=Y})
|
||||||
|
|
||||||
local dem = nobj_base:get_3d_map_flat({x=0, y=0, z=0})
|
local dem = nobj_base:get_3d_map_flat({x=0, y=0, z=0})
|
||||||
dem.X = size.x
|
dem.X = X
|
||||||
dem.Y = size.y
|
dem.Y = Y
|
||||||
|
|
||||||
if use_margin then
|
if use_margin then
|
||||||
margin(dem, margin_width, margin_elev)
|
margin(dem, margin_width, margin_elev)
|
||||||
end
|
end
|
||||||
|
|
||||||
local model = EvolutionModel(evol_params)
|
local model = EvolutionModel(evol_params)
|
||||||
model.dem = dem
|
model.dem = dem
|
||||||
local ref_dem = model:define_isostasy(dem)
|
local ref_dem = model:define_isostasy(dem)
|
||||||
|
|
||||||
local tectonic_step = tectonic_speed * time_step
|
local tectonic_step = tectonic_speed * time_step
|
||||||
collectgarbage()
|
collectgarbage()
|
||||||
for i=1, niter do
|
for i=1, niter do
|
||||||
minetest.log("info", "[mapgen_rivers] Iteration " .. i .. " of " .. niter)
|
minetest.log("info", "[mapgen_rivers] Iteration " .. i .. " of " .. niter)
|
||||||
|
|
||||||
model:diffuse(time_step)
|
model:diffuse(time_step)
|
||||||
@ -92,23 +98,24 @@ function mapgen_rivers.pregenerate(grid)
|
|||||||
end
|
end
|
||||||
|
|
||||||
collectgarbage()
|
collectgarbage()
|
||||||
end
|
end
|
||||||
model:flow()
|
model:flow()
|
||||||
|
|
||||||
local mfloor = math.floor
|
local mfloor = math.floor
|
||||||
local mmin, mmax = math.min, math.max
|
local mmin, mmax = math.min, math.max
|
||||||
local offset_x, offset_y = twist(model.dirs, model.rivers, 5)
|
local offset_x, offset_y = twist(model.dirs, model.rivers, 5)
|
||||||
for i=1, size.x*size.y do
|
for i=1, X*Y do
|
||||||
offset_x[i] = mmin(mmax(offset_x[i]*256, -128), 127)
|
offset_x[i] = mmin(mmax(offset_x[i]*256, -128), 127)
|
||||||
offset_y[i] = mmin(mmax(offset_y[i]*256, -128), 127)
|
offset_y[i] = mmin(mmax(offset_y[i]*256, -128), 127)
|
||||||
end
|
|
||||||
|
|
||||||
grid.dem = model.dem
|
|
||||||
grid.lakes = model.lakes
|
|
||||||
grid.dirs = model.dirs
|
|
||||||
grid.rivers = model.rivers
|
|
||||||
grid.offset_x = offset_x
|
|
||||||
grid.offset_y = offset_y
|
|
||||||
|
|
||||||
collectgarbage()
|
|
||||||
end
|
end
|
||||||
|
|
||||||
|
grid.dem = model.dem
|
||||||
|
grid.lakes = model.lakes
|
||||||
|
grid.dirs = model.dirs
|
||||||
|
grid.rivers = model.rivers
|
||||||
|
grid.offset_x = offset_x
|
||||||
|
grid.offset_y = offset_y
|
||||||
|
|
||||||
|
collectgarbage()
|
||||||
|
|
||||||
|
return grid
|
||||||
|
Loading…
x
Reference in New Issue
Block a user