mirror of
https://gitlab.com/gaelysam/mapgen_rivers.git
synced 2025-07-04 01:10:39 +02:00
Compare commits
2 Commits
Author | SHA1 | Date | |
---|---|---|---|
b1f4437a91 | |||
a00c1cbd39 |
@ -6,7 +6,7 @@ local transform_quadri = dofile(modpath .. 'geometry.lua')
|
|||||||
local sea_level = mapgen_rivers.settings.sea_level
|
local sea_level = mapgen_rivers.settings.sea_level
|
||||||
local riverbed_slope = mapgen_rivers.settings.riverbed_slope * mapgen_rivers.settings.blocksize
|
local riverbed_slope = mapgen_rivers.settings.riverbed_slope * mapgen_rivers.settings.blocksize
|
||||||
|
|
||||||
local MAP_BOTTOM = -31000
|
local out_elev = mapgen_rivers.settings.margin_elev
|
||||||
|
|
||||||
-- Localize for performance
|
-- Localize for performance
|
||||||
local floor, min, max = math.floor, math.min, math.max
|
local floor, min, max = math.floor, math.min, math.max
|
||||||
@ -128,8 +128,8 @@ local function heightmaps(minp, maxp)
|
|||||||
terrain_height_map[i] = terrain_height
|
terrain_height_map[i] = terrain_height
|
||||||
lake_height_map[i] = lake_height
|
lake_height_map[i] = lake_height
|
||||||
else
|
else
|
||||||
terrain_height_map[i] = MAP_BOTTOM
|
terrain_height_map[i] = out_elev
|
||||||
lake_height_map[i] = MAP_BOTTOM
|
lake_height_map[i] = out_elev
|
||||||
end
|
end
|
||||||
i = i + 1
|
i = i + 1
|
||||||
end
|
end
|
||||||
|
@ -13,6 +13,38 @@ local time_step = mapgen_rivers.settings.evol_time_step
|
|||||||
local niter = math.ceil(time/time_step)
|
local niter = math.ceil(time/time_step)
|
||||||
time_step = time / niter
|
time_step = time / niter
|
||||||
|
|
||||||
|
local use_margin = mapgen_rivers.settings.margin
|
||||||
|
local margin_width = mapgen_rivers.settings.margin_width / blocksize
|
||||||
|
local margin_elev = mapgen_rivers.settings.margin_elev
|
||||||
|
|
||||||
|
local function margin(dem, width, elev)
|
||||||
|
local X, Y = dem.X, dem.Y
|
||||||
|
for i=1, width do
|
||||||
|
local c1 = ((i-1)/width) ^ 0.5
|
||||||
|
local c2 = (1-c1) * elev
|
||||||
|
local index = (i-1)*X + 1
|
||||||
|
for x=1, X do
|
||||||
|
dem[index] = dem[index] * c1 + c2
|
||||||
|
index = index + 1
|
||||||
|
end
|
||||||
|
index = i
|
||||||
|
for y=1, Y do
|
||||||
|
dem[index] = dem[index] * c1 + c2
|
||||||
|
index = index + X
|
||||||
|
end
|
||||||
|
index = X*(Y-i) + 1
|
||||||
|
for x=1, X do
|
||||||
|
dem[index] = dem[index] * c1 + c2
|
||||||
|
index = index + 1
|
||||||
|
end
|
||||||
|
index = X-i + 1
|
||||||
|
for y=1, Y do
|
||||||
|
dem[index] = dem[index] * c1 + c2
|
||||||
|
index = index + X
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
local function pregenerate(keep_loaded)
|
local function pregenerate(keep_loaded)
|
||||||
local grid = mapgen_rivers.grid
|
local grid = mapgen_rivers.grid
|
||||||
local size = grid.size
|
local size = grid.size
|
||||||
@ -26,6 +58,10 @@ local function pregenerate(keep_loaded)
|
|||||||
dem.X = size.x
|
dem.X = size.x
|
||||||
dem.Y = size.y
|
dem.Y = size.y
|
||||||
|
|
||||||
|
if use_margin then
|
||||||
|
margin(dem, margin_width, margin_elev)
|
||||||
|
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)
|
||||||
@ -41,6 +77,9 @@ local function pregenerate(keep_loaded)
|
|||||||
if i < niter then
|
if i < niter then
|
||||||
if tectonic_step ~= 0 then
|
if tectonic_step ~= 0 then
|
||||||
nobj_base:get_3d_map_flat({x=0, y=tectonic_step*i, z=0}, ref_dem)
|
nobj_base:get_3d_map_flat({x=0, y=tectonic_step*i, z=0}, ref_dem)
|
||||||
|
if use_margin then
|
||||||
|
margin(ref_dem, margin_width, margin_elev)
|
||||||
|
end
|
||||||
end
|
end
|
||||||
model:isostasy()
|
model:isostasy()
|
||||||
end
|
end
|
||||||
|
@ -74,6 +74,9 @@ mapgen_rivers.settings = {
|
|||||||
|
|
||||||
grid_x_size = def_setting('grid_x_size', 'number', 1000),
|
grid_x_size = def_setting('grid_x_size', 'number', 1000),
|
||||||
grid_z_size = def_setting('grid_z_size', 'number', 1000),
|
grid_z_size = def_setting('grid_z_size', 'number', 1000),
|
||||||
|
margin = def_setting('margin', 'bool', true),
|
||||||
|
margin_width = def_setting('margin_width', 'number', 2000),
|
||||||
|
margin_elev = def_setting('margin_elev', 'number', -200),
|
||||||
evol_params = {
|
evol_params = {
|
||||||
K = def_setting('river_erosion_coef', 'number', 0.5),
|
K = def_setting('river_erosion_coef', 'number', 0.5),
|
||||||
m = def_setting('river_erosion_power', 'number', 0.4),
|
m = def_setting('river_erosion_power', 'number', 0.4),
|
||||||
|
@ -17,6 +17,16 @@ mapgen_rivers_grid_x_size (Grid X size) int 1000 50 5000
|
|||||||
# Actual size of the map is grid_z_size * blocksize
|
# Actual size of the map is grid_z_size * blocksize
|
||||||
mapgen_rivers_grid_z_size (Grid Z size) int 1000 50 5000
|
mapgen_rivers_grid_z_size (Grid Z size) int 1000 50 5000
|
||||||
|
|
||||||
|
# If margin is enabled, elevation becomes closer to a fixed value when approaching
|
||||||
|
# the edges of the map.
|
||||||
|
mapgen_rivers_margin (Margin) bool true
|
||||||
|
|
||||||
|
# Width of the transition at map borders, in nodes
|
||||||
|
mapgen_rivers_margin_width (Margin width) float 2000.0 0.0 15000.0
|
||||||
|
|
||||||
|
# Elevation toward which to converge at map borders
|
||||||
|
mapgen_rivers_margin_elev (Margin elevation) float -200.0 -31000.0 31000.0
|
||||||
|
|
||||||
# Minimal catchment area for a river to be drawn, in square nodes
|
# Minimal catchment area for a river to be drawn, in square nodes
|
||||||
# Lower value means bigger river density
|
# Lower value means bigger river density
|
||||||
mapgen_rivers_min_catchment (Minimal catchment area) float 3600.0 100.0 1000000.0
|
mapgen_rivers_min_catchment (Minimal catchment area) float 3600.0 100.0 1000000.0
|
||||||
|
Reference in New Issue
Block a user