diff --git a/mods/MAPGEN/mcl_mapgen_core/api.lua b/mods/MAPGEN/mcl_mapgen_core/api.lua index 60c3c69f9..ef63605b1 100644 --- a/mods/MAPGEN/mcl_mapgen_core/api.lua +++ b/mods/MAPGEN/mcl_mapgen_core/api.lua @@ -7,19 +7,6 @@ local logging = minetest.settings:get_bool("mcl_logging_mapgen", false) local log_timing = minetest.settings:get_bool("mcl_logging_mapgen_timing", false) -- detailed, for performance debugging local seed = minetest.get_mapgen_setting("seed") -local function run_generators(minp, maxp, blockseed) - if nodes == 0 then return end - for _, rec in ipairs(registered_generators) do - if rec.nf then - local gt1 = os.clock() - rec.nf(vector.copy(minp), vector.copy(maxp), blockseed) -- defensive copies against some generator changing the vectors - if log_timing then - minetest.log("action", string.format("[mcl_mapgen_core] %-20s %s ... %s %8.2fms", rec.id, minetest.pos_to_string(minp), minetest.pos_to_string(maxp), (os.clock() - gt1)*1000)) - end - end - end -end - minetest.register_on_generated(function(minp, maxp, blockseed) local t1 = os.clock() if lvm > 0 then @@ -32,12 +19,12 @@ minetest.register_on_generated(function(minp, maxp, blockseed) end local lvm_used, shadow, deco_used, deco_table, ore_used, ore_table = false, false, false, false, false, false - for _, rec in ipairs(registered_generators) do - if rec.vf then + for _, gen in ipairs(registered_generators) do + if gen.vf then local gt1 = os.clock() local p1, p2 = vector.copy(minp), vector.copy(maxp) -- defensive copies against some generator changing the vectors local e1, e2 = vector.copy(emin), vector.copy(emax) -- defensive copies against some generator changing the vectors - local lvm_used0, shadow0, deco, ore = rec.vf(vm, data, data2, e1, e2, area, p1, p2, blockseed) + local lvm_used0, shadow0, deco, ore = gen.vf(vm, data, data2, e1, e2, area, p1, p2, blockseed) lvm_used = lvm_used or lvm_used0 shadow = shadow or shadow0 if deco and type(deco) == "table" then @@ -51,7 +38,7 @@ minetest.register_on_generated(function(minp, maxp, blockseed) ore_used = true end if log_timing then - minetest.log("action", string.format("[mcl_mapgen_core] %-20s %s ... %s %8.2fms", rec.id, minetest.pos_to_string(minp), minetest.pos_to_string(maxp), (os.clock() - gt1)*1000)) + minetest.log("action", string.format("[mcl_mapgen_core] %-20s %s ... %s %8.2fms", gen.id, minetest.pos_to_string(minp), minetest.pos_to_string(maxp), (os.clock() - gt1)*1000)) end end end @@ -64,7 +51,7 @@ minetest.register_on_generated(function(minp, maxp, blockseed) minetest.log("action", string.format("[mcl_mapgen_core] %-20s %s ... %s %8.2fms", "set_data", minetest.pos_to_string(minp), minetest.pos_to_string(maxp), (os.clock() - gt1)*1000)) end local gt2 = os.clock() - if deco_table then + if deco_table and #deco_table > 0 then minetest.generate_decorations(vm,vector.new(minp.x,deco_table.min,minp.z),vector.new(maxp.x,deco_table.max,maxp.z)) elseif deco_used then minetest.generate_decorations(vm) @@ -73,7 +60,7 @@ minetest.register_on_generated(function(minp, maxp, blockseed) minetest.log("action", string.format("[mcl_mapgen_core] %-20s %s ... %s %8.2fms", "decorations", minetest.pos_to_string(minp), minetest.pos_to_string(maxp), (os.clock() - gt2)*1000)) end local gt3 = os.clock() - if ore_table then + if ore_table and #ore_table > 0 then minetest.generate_ores(vm,vector.new(minp.x,ore_table.min,minp.z),vector.new(maxp.x,ore_table.max,maxp.z)) elseif ore_used then minetest.generate_ores(vm) @@ -91,7 +78,17 @@ minetest.register_on_generated(function(minp, maxp, blockseed) end end - run_generators(minp, maxp, blockseed) + if nodes > 0 then + for _, gen in ipairs(registered_generators) do + if gen.nf then + local gt1 = os.clock() + gen.nf(vector.copy(minp), vector.copy(maxp), blockseed) -- defensive copies against some generator changing the vectors + if log_timing then + minetest.log("action", string.format("[mcl_mapgen_core] %-20s %s ... %s %8.2fms", gen.id, minetest.pos_to_string(minp), minetest.pos_to_string(maxp), (os.clock() - gt1)*1000)) + end + end + end + end if logging then minetest.log("action", string.format("[mcl_mapgen_core] %-20s %s ... %s %8.2fms", "Generating chunk", minetest.pos_to_string(minp), minetest.pos_to_string(maxp), (os.clock() - t1)*1000)) diff --git a/mods/MAPGEN/mcl_mapgen_core/init.lua b/mods/MAPGEN/mcl_mapgen_core/init.lua index 1c52386a7..591bfe083 100644 --- a/mods/MAPGEN/mcl_mapgen_core/init.lua +++ b/mods/MAPGEN/mcl_mapgen_core/init.lua @@ -1,6 +1,4 @@ mcl_mapgen_core = {} -local registered_generators = {} - local modname = minetest.get_current_modname() local modpath = minetest.get_modpath(modname) @@ -118,8 +116,6 @@ elseif mg_name == "fractal" then mg_flags.caverns = true end - - local mg_flags_str = "" for k,v in pairs(mg_flags) do if v == false then @@ -211,12 +207,12 @@ end local function set_layers(data, area, content_id, check, min, max, minp, maxp, pr) if maxp.y < min or minp.y > max then return false end local lvm_used = false - if check == nil then + if not check then for p_pos in area:iter(minp.x, math.max(min, minp.y), minp.z, maxp.x, math.min(max, maxp.y), maxp.z) do data[p_pos] = content_id lvm_used = true end - elseif check and type(check) == "function" then + elseif type(check) == "function" then -- slow path, needs vector coordinates (bedrock uses y only) for p_pos in area:iter(minp.x, math.max(min, minp.y), minp.z, maxp.x, math.min(max, maxp.y), maxp.z) do if check(area:position(p_pos), data[p_pos], pr) then