loud_walking/mapgen.lua

102 lines
2.4 KiB
Lua

-- Loud Walking mapgen.lua
-- Copyright Duane Robertson (duane@duanerobertson.com), 2017
-- Distributed under the LGPLv2.1 (https://www.gnu.org/licenses/old-licenses/lgpl-2.1.en.html)
local DEBUG
local node = loud_walking.node
local max_height = 31000
local fun_caves_mod = minetest.get_modpath('fun_caves')
local data = {}
local p2data = {} -- vm rotation data buffer
local function generate(p_minp, p_maxp, seed)
if not (p_minp and p_maxp and seed) then
return
end
local baseline = loud_walking.baseline
local extent_bottom = loud_walking.extent_bottom
local extent_top = loud_walking.extent_top
local heightmap = {}
local minp, maxp = p_minp, p_maxp
if maxp.y < baseline + extent_bottom or minp.y > baseline + extent_top then
return
end
local vm, emin, emax = minetest.get_mapgen_object("voxelmanip")
if not (vm and emin and emax) then
return
end
vm:get_data(data)
p2data = vm:get_param2_data()
local area = VoxelArea:new({MinEdge = emin, MaxEdge = emax})
loud_walking.csize = vector.add(vector.subtract(maxp, minp), 1)
loud_walking.tree_map = {}
local t
local meta_data = {}
local schem = {}
for fake_loop = 1, 1 do
loud_walking.terrain(minp, maxp, data, p2data, area, baseline, heightmap, schem)
--loud_walking.caves(minp, maxp, data, p2data, area, node, baseline, heightmap)
end
for _, s in ipairs(schem) do
loud_walking.place_schematic(minp, maxp, data, p2data, area, node, s.pos, loud_walking.schematics[s.name], true, s.bound)
end
vm:set_data(data)
vm:set_param2_data(p2data)
minetest.generate_ores(vm, minp, maxp)
if DEBUG then
vm:set_lighting({day = 15, night = 15})
else
vm:set_lighting({day = 0, night = 0}, minp, maxp)
vm:calc_lighting()
end
vm:update_liquids()
vm:write_to_map()
for _, t in ipairs(meta_data) do
local meta = minetest.get_meta({x=t.x, y=t.y, z=t.z})
meta:from_table()
meta:from_table(t.meta)
end
-- Clear any tables that won't be reused.
loud_walking.tree_map = nil
end
if loud_walking.path then
dofile(loud_walking.path .. "/terrain.lua")
--dofile(loud_walking.path .. "/caves.lua")
end
local function pgenerate(...)
local status, err = pcall(generate, ...)
--local status, err = true
--generate(...)
if not status then
print('Loud Walking: Could not generate terrain:')
print(dump(err))
collectgarbage("collect")
end
end
minetest.register_on_generated(pgenerate)