Use local function, and change names to use underscores.

Also add biomegen.generate_all that does all the job in one function.
master
Gael-de-Sailly 2020-11-10 14:07:30 +01:00
parent 84a940f457
commit 0cfe913dcb
2 changed files with 45 additions and 28 deletions

View File

@ -5,7 +5,7 @@ local emptynodes = {
ignore = true,
}
local function generateDecoSimple(deco, vm, pr, p, ceiling)
local function generate_deco_simple(deco, vm, pr, p, ceiling)
local emin, emax = vm:get_emerged_area()
local place_offset_y = deco.place_offset_y
@ -62,7 +62,7 @@ local function get_schematic_size(schem)
return {x=0, y=0, z=0}
end
local function generateDecoSchematic(deco, vm, pr, p, ceiling)
local function generate_deco_schematic(deco, vm, pr, p, ceiling)
local force_placement = deco.flags.force_placement == true
local direction = ceiling and -1 or 1
if not deco.flags.place_center_y then
@ -182,7 +182,7 @@ local function make_decolist()
b.param2_max = math.max(a.params2_max or b.param2, b.height)
b.vary_param2 = b.param2 < b.param2_max
b.place_offset_y = a.place_offset_y or 0
b.generate = generateDecoSimple
b.generate = generate_deco_simple
elseif b.deco_type == "schematic" then
b.schematic = a.schematic
b.replacements = a.replacements or {}
@ -197,7 +197,7 @@ local function make_decolist()
end
b.schem_flags = table.concat(schem_flags, ',')
b.generate = generateDecoSchematic
b.generate = generate_deco_schematic
end
end

View File

@ -1,7 +1,5 @@
-- biomegen/init.lua
biomegen = {}
local make_biomelist = dofile(minetest.get_modpath(minetest.get_current_modname()) .. "/biomelist.lua")
local make_decolist = dofile(minetest.get_modpath(minetest.get_current_modname()) .. "/decorations.lua")
@ -24,7 +22,7 @@ local nvals_humid_blend = {}
local water_level = tonumber(minetest.get_mapgen_setting('water_level'))
local elevation_chill = 0
function biomegen.set_elevation_chill(ec)
local function set_elevation_chill(ec)
elevation_chill = ec
end
@ -68,7 +66,7 @@ local biomemap = {}
local heatmap = {}
local humidmap = {}
function biomegen.calculateNoises(minp)
local function calculate_noises(minp)
local minp2d = {x=minp.x, y=minp.z}
nobj_filler_depth:get_2d_map_flat(minp2d, nvals_filler_depth)
@ -84,13 +82,7 @@ function biomegen.calculateNoises(minp)
end
end
function biomegen.getBiomeAtIndex(i, pos)
local heat = heatmap[i] - math.max(pos.y, water_level)*elevation_chill
local humid = humidmap[i]
return biomegen.calcBiomeFromNoise(heat, humid, pos)
end
function biomegen.calcBiomeFromNoise(heat, humid, pos)
local function calc_biome_from_noise(heat, humid, pos)
local biome_closest = nil
local biome_closest_blend = nil
local dist_min = 31000
@ -131,7 +123,13 @@ function biomegen.calcBiomeFromNoise(heat, humid, pos)
return biome_closest
end
function biomegen.generateBiomes(data, a, minp, maxp)
local function get_biome_at_index(i, pos)
local heat = heatmap[i] - math.max(pos.y, water_level)*elevation_chill
local humid = humidmap[i]
return calc_biome_from_noise(heat, humid, pos)
end
local function generate_biomes(data, a, minp, maxp)
local chulens = {x=maxp.x-minp.x+1, y=maxp.y-minp.y+1, z=maxp.z-minp.z+1}
local index = 1
@ -140,7 +138,7 @@ function biomegen.generateBiomes(data, a, minp, maxp)
initialize(chulens)
end
biomegen.calculateNoises(minp)
calculate_noises(minp)
for z=minp.z, maxp.z do
for x=minp.x, maxp.x do
@ -180,7 +178,7 @@ function biomegen.generateBiomes(data, a, minp, maxp)
(air_above or not biome or y < biome_y_min)
if is_stone_surface or is_water_surface then
biome = biomegen.getBiomeAtIndex(index, {x=x, y=y, z=z})
biome = get_biome_at_index(index, {x=x, y=y, z=z})
biome_stone = biome.node_stone
if not biomemap[index] and is_stone_surface then
@ -288,7 +286,7 @@ local liquid = setmetatable({}, {
end,
})
local function canPlaceDeco(deco, data, vi, pattern)
local function can_place_deco(deco, data, vi, pattern)
if not deco.place_on[data[vi]] then
return false
elseif deco.num_spawn_by <= 0 then
@ -310,7 +308,7 @@ local function canPlaceDeco(deco, data, vi, pattern)
return false
end
local function placeDeco(deco, data, a, vm, minp, maxp, blockseed)
local function place_deco(deco, data, a, vm, minp, maxp, blockseed)
local ps = PcgRandom(blockseed + 53)
local carea_size = maxp.x - minp.x + 1
@ -394,7 +392,7 @@ local function placeDeco(deco, data, a, vm, minp, maxp, blockseed)
for _, y in ipairs(floors) do
if y >= biome.y_min and y <= biome.y_max then
local pos = {x=x, y=y, z=z}
if canPlaceDeco(deco, data, vi, pattern) then
if can_place_deco(deco, data, vi, pattern) then
deco:generate(vm, ps, pos, false)
end
end
@ -405,7 +403,7 @@ local function placeDeco(deco, data, a, vm, minp, maxp, blockseed)
for _, y in ipairs(ceilings) do
if y >= biome.y_min and y <= biome.y_max then
local pos = {x=x, y=y, z=z}
if canPlaceDeco(deco, data, vi, pattern) then
if can_place_deco(deco, data, vi, pattern) then
deco:generate(vm, ps, pos, true)
end
end
@ -448,7 +446,7 @@ local function placeDeco(deco, data, a, vm, minp, maxp, blockseed)
if biome_ok then
local pos = {x=x, y=y, z=z}
if canPlaceDeco(deco, data, a:index(x,y,z), pattern) then
if can_place_deco(deco, data, a:index(x,y,z), pattern) then
deco:generate(vm, ps, pos, false)
end
end
@ -461,18 +459,18 @@ local function placeDeco(deco, data, a, vm, minp, maxp, blockseed)
return 0
end
local function getBlockseed(p, seed)
local function get_blockseed(p, seed)
return seed + p.z * 38134234 + p.y * 42123 + p.x * 23
end
function biomegen.placeAllDecos(data, a, vm, minp, maxp, seed)
local function place_all_decos(data, a, vm, minp, maxp, seed)
local emin = vm:get_emerged_area()
local blockseed = getBlockseed(emin, seed)
local blockseed = get_blockseed(emin, seed)
local nplaced = 0
for i, deco in pairs(decos) do
nplaced = nplaced + placeDeco(deco, data, a, vm, minp, maxp, blockseed)
nplaced = nplaced + place_deco(deco, data, a, vm, minp, maxp, blockseed)
end
return nplaced
@ -494,7 +492,7 @@ local dustable = setmetatable({}, {
end,
})
function biomegen.dustTopNodes(vm, data, a, minp, maxp)
local function dust_top_nodes(vm, data, a, minp, maxp)
if maxp.y < water_level then
return
end
@ -545,3 +543,22 @@ function biomegen.dustTopNodes(vm, data, a, minp, maxp)
end
end
end
biomegen = {
set_elevation_chill = set_elevation_chill,
calculate_noises = calculate_noises,
get_biome_at_index = get_biome_at_index,
calc_biome_from_noise = calc_biome_from_noise,
generate_biomes = generate_biomes,
place_all_decos = place_all_decos,
dust_top_nodes = dust_top_nodes,
}
function biomegen.generate_all(data, a, vm, minp, maxp, seed)
generate_biomes(data, a, minp, maxp)
vm:set_data(data)
place_all_decos(data, a, vm, minp, maxp, seed)
minetest.generate_ores(vm, minp, maxp)
vm:get_data(data)
dust_top_nodes(vm, data, a, minp, maxp)
end