From: Elias Fleckenstein Date: Sun, 28 Feb 2021 19:31:29 +0000 (+0100) Subject: Proper indentation in the plotmg; remove void layer and fix dependency problem X-Git-Url: https://git.lizzy.rs/?a=commitdiff_plain;h=cc05f1232a4bb2d4b7c16fe9549754d7d69f4d91;p=elidragon_v2.git Proper indentation in the plotmg; remove void layer and fix dependency problem --- diff --git a/mods/elidragon_plotmg/init.lua b/mods/elidragon_plotmg/init.lua index eccf652..185e652 100644 --- a/mods/elidragon_plotmg/init.lua +++ b/mods/elidragon_plotmg/init.lua @@ -3,74 +3,68 @@ local plot, schems = elidragon.plot, elidragon.schems local plotmg = {} minetest.register_on_generated(function(minp, maxp) - local config = assert(plot.config) - local mgconfig = assert(plotmg.config) - - local min_y, max_y = mgconfig.min_y, mgconfig.max_y - - if maxp.y < min_y or minp.y > max_y then - return - end - - local vm, emin, emax = minetest.get_mapgen_object("voxelmanip") - local data = vm:get_data() - local area = VoxelArea:new({MinEdge = emin, MaxEdge = emax}) - - local void_layer = mgconfig.void_layer - - if void_layer then - 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 - data[idx] = void_layer.c_void - end - end - - local function do_multiples(low, high, base, add, func) - for p = math.ceil(low / base), math.floor(high / base) do - func(p * base + add) - end - end - - local function do_borders(low, high, base, road, func) - do_multiples(low - road, high - road, base, road, func) - do_multiples(low + road, high + road, base, -road, func) - end - - min_y, max_y = math.max(minp.y, min_y), math.min(maxp.y, max_y) - - local gap, road_width = config.gap, config.road_width - local road_width_half = road_width / 2 - - do_borders(minp.x, maxp.x, gap, road_width_half, function(x) - do_multiples(minp.z - gap + road_width_half, maxp.z - road_width_half, gap, road_width_half, function(start_z) - for idx in area:iter(x, min_y, math.max(minp.z, start_z), x, max_y, math.min(maxp.z, start_z + gap - road_width)) do - data[idx] = mgconfig.c_border - end - end) - end) - - do_borders(minp.z, maxp.z, gap, road_width_half, function(z) - do_multiples(minp.x - gap + road_width_half, maxp.x - road_width_half, gap, road_width_half, function(start_x) - for idx in area:iter(math.max(minp.x, start_x), min_y, z, math.min(maxp.x, start_x + gap - road_width), max_y, z) do - data[idx] = mgconfig.c_border - end - end) - end) - - vm:set_data(data) - vm:calc_lighting() - vm:update_liquids() - vm:write_to_map() - - local road_schem = mgconfig.road_schem - - if road_schem and min_y == mgconfig.min_y then - do_multiples(minp.x, maxp.x, gap, 0, function(x) - do_multiples(minp.z, maxp.z, gap, 0, function(z) - schems.add(vector.new(x + road_width_half, min_y + mgconfig.road_schem_offset, z - road_width_half + 1), road_schem) - schems.add(vector.new(x - road_width_half + 1, min_y + mgconfig.road_schem_offset, z + road_width_half), road_schem .. "_flipped") - end) - end) - end + collectgarbage() + + local config = assert(plot.config) + local mgconfig = assert(plotmg.config) + + local min_y, max_y = mgconfig.min_y, mgconfig.max_y + + if maxp.y < min_y or minp.y > max_y then + return + end + + local vm, emin, emax = minetest.get_mapgen_object("voxelmanip") + local data = vm:get_data() + local area = VoxelArea:new({MinEdge = emin, MaxEdge = emax}) + + local function do_multiples(low, high, base, add, func) + for p = math.ceil(low / base), math.floor(high / base) do + func(p * base + add) + end + end + + local function do_borders(low, high, base, road, func) + do_multiples(low - road, high - road, base, road, func) + do_multiples(low + road, high + road, base, -road, func) + end + + min_y, max_y = math.max(minp.y, min_y), math.min(maxp.y, max_y) + + local gap, road_width = config.gap, config.road_width + local road_width_half = road_width / 2 + + do_borders(minp.x, maxp.x, gap, road_width_half, function(x) + do_multiples(minp.z - gap + road_width_half, maxp.z - road_width_half, gap, road_width_half, function(start_z) + for idx in area:iter(x, min_y, math.max(minp.z, start_z), x, max_y, math.min(maxp.z, start_z + gap - road_width)) do + data[idx] = mgconfig.c_border + end + end) + end) + + do_borders(minp.z, maxp.z, gap, road_width_half, function(z) + do_multiples(minp.x - gap + road_width_half, maxp.x - road_width_half, gap, road_width_half, function(start_x) + for idx in area:iter(math.max(minp.x, start_x), min_y, z, math.min(maxp.x, start_x + gap - road_width), max_y, z) do + data[idx] = mgconfig.c_border + end + end) + end) + + vm:set_data(data) + vm:calc_lighting() + vm:update_liquids() + vm:write_to_map() + + local road_schem = mgconfig.road_schem + + if road_schem and min_y == mgconfig.min_y then + do_multiples(minp.x, maxp.x, gap, 0, function(x) + do_multiples(minp.z, maxp.z, gap, 0, function(z) + schems.add(vector.new(x + road_width_half, min_y + mgconfig.road_schem_offset, z - road_width_half + 1), road_schem) + schems.add(vector.new(x - road_width_half + 1, min_y + mgconfig.road_schem_offset, z + road_width_half), road_schem .. "_flipped") + end) + end) + end end) elidragon.plotmg = plotmg diff --git a/mods/elidragon_skyblock/init.lua b/mods/elidragon_skyblock/init.lua index c3ef330..91c43af 100644 --- a/mods/elidragon_skyblock/init.lua +++ b/mods/elidragon_skyblock/init.lua @@ -13,12 +13,7 @@ plot.config = { plotmg.config = { min_y = 1000, max_y = 31000, - void_layer = { - min_y = 1000, - max_y = 2000, - c_void = minetest.get_content_id("mcl_core:void"), - }, - c_border = minetest.get_content_id("mcl_core:barrier"), -- ToDo: make world border + c_border = minetest.get_content_id("mcl_core:barrier"), } elidragon.skyblock = {} diff --git a/worlds/skyblock/world.mt b/worlds/skyblock/world.mt index a45260f..635e0ce 100644 --- a/worlds/skyblock/world.mt +++ b/worlds/skyblock/world.mt @@ -18,7 +18,7 @@ load_mod_elidragon_plotmg = true load_mod_elidragon_random = false load_mod_elidragon_ranks = true load_mod_elidragon_request = true -load_mod_elidragon_schems = false +load_mod_elidragon_schems = true load_mod_elidragon_skyblock = true load_mod_elidragon_tp = true load_mod_elidragon_util = true