Add ETA to //many, and tidy up message generation in //subdivide

This commit is contained in:
Starbeamrainbowlabs 2020-10-10 17:01:08 +01:00
parent 4367b4bc70
commit ef165b9c58
Signed by: sbrl
GPG key ID: 1BE5172E637709C2
4 changed files with 32 additions and 9 deletions

View file

@ -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)

View file

@ -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

View file

@ -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(

View file

@ -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