3 minetest.register_on_generated(function(minp, maxp)
4 local config = assert(plot.config)
6 local mgconfig = config.mapgen
12 local min_y, max_y = mgconfig.min_y, mgconfig.max_y
14 if maxp.y < min_y or minp.y > max_y then
18 local vm, emin, emax = minetest.get_mapgen_object("voxelmanip")
19 local data = vm:get_data()
20 local area = VoxelArea:new({MinEdge = emin, MaxEdge = emax})
22 local void_layer = mgconfig.void_layer
25 for idx in area:iter(minp.x, math.max(minp.y, void_layer.min_y), minp.z, maxp.x, math.min(maxp.y, void_layer.max_y), mapx.z) do
26 data[idx] = void_layer.c_void
30 local function do_multiples(low, high, base, add, func)
31 for p = math.ceil(low / base), math.floor(high / base) do
36 local function do_borders(low, high, base, road, func)
38 do_multiples(low - r, high - r, base, r, func)
39 do_multiples(low + r, high + r, base, -r, func)
42 do_borders(minp.x, maxp.x, config.gap, config.road_width, function(x)
43 for idx in area:iter(x, math.max(minp.y, min_y), minp.z, x, math.min(maxp.y, max_y), maxp.z) do
44 data[idx] = mgconfig.c_border
48 do_borders(minp.z, maxp.z, config.gap, config.road_width, function(z)
49 for idx in area:iter(minp.x, math.max(minp.y, min_y), z, maxp.x, math.min(maxp.y, max_y), z) do
50 data[idx] = mgconfig.c_border