mirror of
				https://gitlab.com/gaelysam/mapgen_rivers.git
				synced 2025-11-04 10:05:30 +01:00 
			
		
		
		
	Generate and load map after mod loading
This has needed to globalize map tables
This commit is contained in:
		
							
								
								
									
										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)
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										58
									
								
								polygons.lua
									
									
									
									
									
								
							
							
						
						
									
										58
									
								
								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)
 | 
				
			||||||
 | 
					 | 
				
			||||||
local dem = mapgen_rivers.load_map('dem', 2, true, X*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
 | 
						end
 | 
				
			||||||
 | 
					end)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
local offset_z = mapgen_rivers.load_map('offset_y', 1, true, X*Z)
 | 
					mapgen_rivers.grid.size = {x=X, y=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)
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user