84 lines
2.7 KiB
Lua
84 lines
2.7 KiB
Lua
mapgen_helper = {}
|
|
|
|
mapgen_helper.mapgen_seed = tonumber(minetest.get_mapgen_setting("seed"))
|
|
|
|
-- The "sidelen" used in almost every mapgen
|
|
mapgen_helper.block_size = tonumber(minetest.get_mapgen_setting("chunksize")) * 16
|
|
|
|
local MP = minetest.get_modpath(minetest.get_current_modname())
|
|
dofile(MP.."/bounding_boxes.lua")
|
|
dofile(MP.."/random.lua")
|
|
dofile(MP.."/voxelarea_iterator.lua")
|
|
dofile(MP.."/voxeldata.lua")
|
|
dofile(MP.."/region_functions.lua")
|
|
dofile(MP.."/lines.lua")
|
|
dofile(MP.."/place_schematic.lua")
|
|
dofile(MP.."/noise_manager.lua")
|
|
dofile(MP.."/metrics.lua")
|
|
dofile(MP.."/log_location.lua")
|
|
|
|
local map_data = {}
|
|
local map_param2_data = {}
|
|
|
|
mapgen_helper.mapgen_vm_data = function()
|
|
local vm, emin, emax = minetest.get_mapgen_object("voxelmanip")
|
|
vm:get_data(map_data)
|
|
return vm, map_data, VoxelArea:new{MinEdge=emin, MaxEdge=emax}
|
|
end
|
|
|
|
mapgen_helper.mapgen_vm_data_param2 = function()
|
|
local vm, emin, emax = minetest.get_mapgen_object("voxelmanip")
|
|
vm:get_data(map_data)
|
|
vm:get_param2_data(map_param2_data)
|
|
return vm, map_data, map_param2_data, VoxelArea:new{MinEdge=emin, MaxEdge=emax}
|
|
end
|
|
|
|
mapgen_helper.biome_defs = nil
|
|
mapgen_helper.get_biome_def = function(biome_id) -- given an id from the biome map, returns a biome definition.
|
|
if mapgen_helper.biome_defs == nil then
|
|
-- First time this was asked for, populate the table.
|
|
-- Biome registration is only done at load time so we don't have to worry about new biomes invalidating this table
|
|
mapgen_helper.biome_defs = {}
|
|
for name, desc in pairs(minetest.registered_biomes) do
|
|
local i = minetest.get_biome_id(desc.name)
|
|
mapgen_helper.biome_defs[i] = desc
|
|
end
|
|
end
|
|
return mapgen_helper.biome_defs[biome_id]
|
|
end
|
|
|
|
mapgen_helper.get_biome_def_i = function(biomemap, minp, maxp, area, vi)
|
|
if biomemap == nil then
|
|
return nil
|
|
end
|
|
local index2d = mapgen_helper.index2di(minp, maxp, area, vi)
|
|
return mapgen_helper.get_biome_def(biomemap[index2d])
|
|
end
|
|
|
|
|
|
-- returns whether a content ID is "buildable to"
|
|
local buildable_to
|
|
mapgen_helper.buildable_to = function(c_node)
|
|
if buildable_to then return buildable_to[c_node] end
|
|
buildable_to = {}
|
|
for k, v in pairs(minetest.registered_nodes) do
|
|
if v.buildable_to then
|
|
buildable_to[minetest.get_content_id(k)] = true
|
|
end
|
|
end
|
|
return buildable_to[c_node]
|
|
end
|
|
|
|
local is_ground_content = nil
|
|
mapgen_helper.is_ground_content = function(c_node) -- If false, the cave generator will not carve through this node
|
|
if is_ground_content ~= nil then
|
|
return is_ground_content[c_node]
|
|
end
|
|
is_ground_content = {}
|
|
for k, v in pairs(minetest.registered_nodes) do
|
|
if v.is_ground_content == true then
|
|
is_ground_content[minetest.get_content_id(k)] = true
|
|
end
|
|
end
|
|
return is_ground_content[c_node]
|
|
end |