diff --git a/CHANGELOG.md b/CHANGELOG.md index 0ed7d3a..da43fb3 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -5,6 +5,7 @@ It's about time I started a changelog! This will serve from now on as the master ## v1.10 (unreleased) - `//maze`: Fix some parts of generated mazes staying solid - `//maze`, `//maze3d`: Allow non-number seeds (existing seeds aren't affected - they will still produce identical output) + - `//many`: Improve format of progress messages, add ETA ## v1.9: The Nature Update (20th September 2020) diff --git a/worldeditadditions/utils/numbers.lua b/worldeditadditions/utils/numbers.lua index cefd879..a4f1865 100644 --- a/worldeditadditions/utils/numbers.lua +++ b/worldeditadditions/utils/numbers.lua @@ -25,3 +25,10 @@ end function worldeditadditions.get_ms_time() return minetest.get_us_time() / 1000 end + +function worldeditadditions.eta(existing_times, times_total_count) + local average = worldeditadditions.average(existing_times) + local times_left = times_total_count - #existing_times + if times_left == 0 then return 0 end + return average * times_left +end diff --git a/worldeditadditions_commands/commands/meta/many.lua b/worldeditadditions_commands/commands/meta/many.lua index f98225d..8b95077 100644 --- a/worldeditadditions_commands/commands/meta/many.lua +++ b/worldeditadditions_commands/commands/meta/many.lua @@ -35,7 +35,14 @@ local function step(params) local start_time = worldeditadditions.get_ms_time() local full_cmd = params.cmd_name.." "..params.args - worldedit.player_notify(params.name, "[ many ] [ /"..full_cmd.." ] "..(params.i + 1).." / "..params.count.." (~"..worldeditadditions.round(((params.i + 1) / params.count)*100, 2).."%)") + worldedit.player_notify(params.name, string.format("[ many | /%s ] %d / %d (~%.2f%%) complete | last: %s, average: %s, ETA: ~%s", + full_cmd, + (params.i + 1), params.count, + ((params.i + 1) / params.count)*100, + worldeditadditions.human_time(params.times[#params.times] or 0), + worldeditadditions.human_time(worldeditadditions.average(params.times)), + worldeditadditions.human_time(worldeditadditions.eta(params.times, params.count)) + )) local cmd = minetest.chatcommands[params.cmd_name] @@ -43,7 +50,7 @@ local function step(params) cmd.func(params.name, params.args) - params.times[#params.times + 1] = (worldeditadditions.get_ms_time() - start_time) + table.insert(params.times, worldeditadditions.get_ms_time() - start_time) params.i = params.i + 1 if params.i < params.count then @@ -52,7 +59,7 @@ local function step(params) local total_time = (worldeditadditions.get_ms_time() - params.master_start_time) local done_message = {} table.insert(done_message, - string.format("Executed '"..full_cmd.."' %d times in %s (~%s / time", + string.format("Executed '"..full_cmd.."' %d times in %s (~%s / time)", #params.times, worldeditadditions.human_time(total_time), worldeditadditions.human_time( diff --git a/worldeditadditions_commands/commands/meta/subdivide.lua b/worldeditadditions_commands/commands/meta/subdivide.lua index 884d7f5..e2d73e5 100644 --- a/worldeditadditions_commands/commands/meta/subdivide.lua +++ b/worldeditadditions_commands/commands/meta/subdivide.lua @@ -136,14 +136,22 @@ worldedit.register_command("subdivide", { -- print("eta", eta, "time_average", time_average, "chunks_left", chunks_total - i) -- Send updates every 2 seconds, and after the first 3 chunks are done + print("[DEBUG]", + i, chunks_total, + (i / chunks_total) * 100, + wea.human_time(time_this), + wea.human_time(time_average), + "eta", eta, "[human]", wea.human_time(eta), "end") if worldeditadditions.get_ms_time() - time_last_msg > 2 * 1000 or i == 3 or i == chunks_total then worldedit.player_notify(name, - msg_prefix - ..i.." / "..chunks_total.." (~" - ..string.format("%.2f", (i / chunks_total) * 100).."%) complete | " - .."last chunk: "..wea.human_time(time_this) - ..", average: "..wea.human_time(time_average) - ..", ETA: ~"..wea.human_time(eta) + string.format("%s%d / %d (~%.2f%%) complete | last chunk: %s, average: %s, ETA: ~%s", + msg_prefix, + i, chunks_total, + (i / chunks_total) * 100, + wea.human_time(time_this), + wea.human_time(time_average), + wea.human_time(eta) + ) ) time_last_msg = worldeditadditions.get_ms_time() end