mirror of
https://gitlab.com/gaelysam/mapgen_rivers.git
synced 2025-02-21 14:30:32 +01:00
Generate and load map after mod loading
This has needed to globalize map tables
This commit is contained in:
parent
b02387944d
commit
51f3a2719d
11
generate.lua
11
generate.lua
@ -1,7 +1,6 @@
|
|||||||
local EvolutionModel = dofile(mapgen_rivers.modpath .. '/terrainlib_lua/erosion.lua')
|
local EvolutionModel = dofile(mapgen_rivers.modpath .. '/terrainlib_lua/erosion.lua')
|
||||||
local twist = dofile(mapgen_rivers.modpath .. '/terrainlib_lua/twist.lua')
|
local twist = dofile(mapgen_rivers.modpath .. '/terrainlib_lua/twist.lua')
|
||||||
|
|
||||||
local size = {x=1000, y=1000}
|
|
||||||
local blocksize = 12
|
local blocksize = 12
|
||||||
local variation_speed = 70
|
local variation_speed = 70
|
||||||
|
|
||||||
@ -21,6 +20,9 @@ local niter = math.ceil(time/time_step)
|
|||||||
time_step = time / niter
|
time_step = time / niter
|
||||||
|
|
||||||
local function generate()
|
local function generate()
|
||||||
|
local grid = mapgen_rivers.grid
|
||||||
|
local size = grid.size
|
||||||
|
|
||||||
local seed = tonumber(minetest.get_mapgen_setting("seed"))
|
local seed = tonumber(minetest.get_mapgen_setting("seed"))
|
||||||
np_base.seed = (np_base.seed or 0) + seed
|
np_base.seed = (np_base.seed or 0) + seed
|
||||||
|
|
||||||
@ -65,6 +67,13 @@ local function generate()
|
|||||||
local sfile = io.open(mapgen_rivers.world_data_path .. 'size', "w")
|
local sfile = io.open(mapgen_rivers.world_data_path .. 'size', "w")
|
||||||
sfile:write(size.x..'\n'..size.y)
|
sfile:write(size.x..'\n'..size.y)
|
||||||
sfile:close()
|
sfile:close()
|
||||||
|
|
||||||
|
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
|
||||||
end
|
end
|
||||||
|
|
||||||
return generate
|
return generate
|
||||||
|
1
load.lua
1
load.lua
@ -42,6 +42,7 @@ function mapgen_rivers.write_map(filename, data, bytes)
|
|||||||
|
|
||||||
for i=1, size do
|
for i=1, size do
|
||||||
local n = mfloor(data[i])
|
local n = mfloor(data[i])
|
||||||
|
data[i] = n
|
||||||
for j=bytes, 2, -1 do
|
for j=bytes, 2, -1 do
|
||||||
bytelist[j] = n % 256
|
bytelist[j] = n % 256
|
||||||
n = mfloor(n / 256)
|
n = mfloor(n / 256)
|
||||||
|
60
polygons.lua
60
polygons.lua
@ -9,36 +9,41 @@ minetest.mkdir(world_data_path)
|
|||||||
|
|
||||||
dofile(modpath .. 'load.lua')
|
dofile(modpath .. 'load.lua')
|
||||||
|
|
||||||
|
mapgen_rivers.grid = {}
|
||||||
|
|
||||||
|
local X = 1000
|
||||||
|
local Z = 1000
|
||||||
|
|
||||||
-- Try to read file 'size'
|
-- Try to read file 'size'
|
||||||
local sfile = io.open(world_data_path..'size', 'r')
|
local sfile = io.open(world_data_path..'size', 'r')
|
||||||
if not sfile then
|
if sfile then
|
||||||
|
X, Z = tonumber(sfile:read('*l')), tonumber(sfile:read('*l'))
|
||||||
|
sfile:close()
|
||||||
|
minetest.register_on_mods_loaded(function()
|
||||||
|
local grid = mapgen_rivers.grid
|
||||||
|
grid.dem = mapgen_rivers.load_map('dem', 2, true, X*Z)
|
||||||
|
grid.lakes = mapgen_rivers.load_map('lakes', 2, true, X*Z)
|
||||||
|
grid.dirs = mapgen_rivers.load_map('dirs', 1, false, X*Z)
|
||||||
|
grid.rivers = mapgen_rivers.load_map('rivers', 4, false, X*Z)
|
||||||
|
|
||||||
|
grid.offset_x = mapgen_rivers.load_map('offset_x', 1, true, X*Z)
|
||||||
|
grid.offset_y = mapgen_rivers.load_map('offset_y', 1, true, X*Z)
|
||||||
|
end)
|
||||||
|
else
|
||||||
-- Generate a map!!
|
-- Generate a map!!
|
||||||
local generate = dofile(mapgen_rivers.modpath .. '/generate.lua')
|
local generate = dofile(mapgen_rivers.modpath .. '/generate.lua')
|
||||||
generate()
|
minetest.register_on_mods_loaded(generate)
|
||||||
sfile = io.open(world_data_path..'size', 'r')
|
|
||||||
end
|
end
|
||||||
|
|
||||||
-- Read the map
|
minetest.register_on_mods_loaded(function()
|
||||||
-- TODO: if data has just been generated, transfer it without reloading everything
|
local offset_x, offset_y = mapgen_rivers.grid.offset_x, mapgen_rivers.grid.offset_y
|
||||||
local X = tonumber(sfile:read('*l'))
|
for i=1, #offset_x do
|
||||||
local Z = tonumber(sfile:read('*l'))
|
offset_x[i] = (offset_x[i]+0.5) * (1/256)
|
||||||
sfile:close()
|
offset_y[i] = (offset_y[i]+0.5) * (1/256)
|
||||||
|
end
|
||||||
|
end)
|
||||||
|
|
||||||
local dem = mapgen_rivers.load_map('dem', 2, true, X*Z)
|
mapgen_rivers.grid.size = {x=X, y=Z}
|
||||||
local lakes = mapgen_rivers.load_map('lakes', 2, true, X*Z)
|
|
||||||
local dirs = mapgen_rivers.load_map('dirs', 1, false, X*Z)
|
|
||||||
local rivers = mapgen_rivers.load_map('rivers', 4, false, X*Z)
|
|
||||||
|
|
||||||
local offset_x = mapgen_rivers.load_map('offset_x', 1, true, X*Z)
|
|
||||||
for k, v in ipairs(offset_x) do
|
|
||||||
offset_x[k] = (v+0.5)/256
|
|
||||||
end
|
|
||||||
|
|
||||||
local offset_z = mapgen_rivers.load_map('offset_y', 1, true, X*Z)
|
|
||||||
for k, v in ipairs(offset_z) do
|
|
||||||
offset_z[k] = (v+0.5)/256
|
|
||||||
end
|
|
||||||
-- Should have finished loading
|
|
||||||
|
|
||||||
local function index(x, z)
|
local function index(x, z)
|
||||||
return z*X+x+1
|
return z*X+x+1
|
||||||
@ -86,6 +91,15 @@ local function make_polygons(minp, maxp)
|
|||||||
print("Generating polygon map")
|
print("Generating polygon map")
|
||||||
print(minp.x, maxp.x, minp.z, maxp.z)
|
print(minp.x, maxp.x, minp.z, maxp.z)
|
||||||
|
|
||||||
|
local grid = mapgen_rivers.grid
|
||||||
|
local dem = grid.dem
|
||||||
|
local lakes = grid.lakes
|
||||||
|
local dirs = grid.dirs
|
||||||
|
local rivers = grid.rivers
|
||||||
|
|
||||||
|
local offset_x = grid.offset_x
|
||||||
|
local offset_z = grid.offset_y
|
||||||
|
|
||||||
if not init then
|
if not init then
|
||||||
if glaciers then
|
if glaciers then
|
||||||
noise_heat = minetest.get_perlin(mapgen_rivers.noise_params.heat)
|
noise_heat = minetest.get_perlin(mapgen_rivers.noise_params.heat)
|
||||||
|
Loading…
x
Reference in New Issue
Block a user