mirror of
https://github.com/sbrl/Minetest-WorldEditAdditions.git
synced 2024-11-22 23:42:59 +00:00
It works!
This commit is contained in:
parent
008519177c
commit
d2f101e9dd
2 changed files with 20 additions and 10 deletions
|
@ -51,13 +51,13 @@ end
|
||||||
|
|
||||||
local function subdivide_step_beforeload(state)
|
local function subdivide_step_beforeload(state)
|
||||||
state.cpos.z = state.cpos.z - (state.chunk_size.z + 1)
|
state.cpos.z = state.cpos.z - (state.chunk_size.z + 1)
|
||||||
if state.cpos.z <= state.pos1.z then
|
if state.cpos.z < state.pos1.z then
|
||||||
state.cpos.z = state.pos2.z
|
state.cpos.z = state.pos2.z
|
||||||
state.cpos.y = state.cpos.y - (state.chunk_size.y + 1)
|
state.cpos.y = state.cpos.y - (state.chunk_size.y + 1)
|
||||||
if state.cpos.y <= state.pos1.y then
|
if state.cpos.y < state.pos1.y then
|
||||||
state.cpos.y = state.pos2.y
|
state.cpos.y = state.pos2.y
|
||||||
state.cpos.x = state.cpos.x - (state.chunk_size.x + 1)
|
state.cpos.x = state.cpos.x - (state.chunk_size.x + 1)
|
||||||
if state.cpos.x <= state.pos1.x then
|
if state.cpos.x < state.pos1.x then
|
||||||
subdivide_step_complete(state)
|
subdivide_step_complete(state)
|
||||||
return
|
return
|
||||||
end
|
end
|
||||||
|
@ -125,6 +125,7 @@ end
|
||||||
-- @param {function} callback The callback to call upon completion.
|
-- @param {function} callback The callback to call upon completion.
|
||||||
function worldeditadditions.subdivide(pos1, pos2, chunk_size, callback_subblock, callback_complete)
|
function worldeditadditions.subdivide(pos1, pos2, chunk_size, callback_subblock, callback_complete)
|
||||||
pos1, pos2 = worldedit.sort_pos(pos1, pos2)
|
pos1, pos2 = worldedit.sort_pos(pos1, pos2)
|
||||||
|
local chunks_total = count_chunks(pos1, pos2, chunk_size)
|
||||||
|
|
||||||
chunk_size.x = chunk_size.x - 1 -- WorldEdit regions are inclusive
|
chunk_size.x = chunk_size.x - 1 -- WorldEdit regions are inclusive
|
||||||
chunk_size.y = chunk_size.y - 1 -- WorldEdit regions are inclusive
|
chunk_size.y = chunk_size.y - 1 -- WorldEdit regions are inclusive
|
||||||
|
@ -132,7 +133,8 @@ function worldeditadditions.subdivide(pos1, pos2, chunk_size, callback_subblock,
|
||||||
|
|
||||||
local state = {
|
local state = {
|
||||||
pos1 = pos1, pos2 = pos2,
|
pos1 = pos1, pos2 = pos2,
|
||||||
cpos = { x = pos2.x, y = pos2.y, z = pos2.z },
|
-- Note that we start 1 over on the Z axis because we increment *before* calling the callback, so if we don't fiddle it here, we'll miss the first chunk
|
||||||
|
cpos = { x = pos2.x, y = pos2.y, z = pos2.z + chunk_size.z + 1 },
|
||||||
-- The size of a single subblock
|
-- The size of a single subblock
|
||||||
chunk_size = chunk_size,
|
chunk_size = chunk_size,
|
||||||
-- The total number of nodes in the defined region
|
-- The total number of nodes in the defined region
|
||||||
|
@ -153,7 +155,7 @@ function worldeditadditions.subdivide(pos1, pos2, chunk_size, callback_subblock,
|
||||||
-- The percentage of the total time spent so far waiting for Minetest to emerge blocks. Updated every step.
|
-- The percentage of the total time spent so far waiting for Minetest to emerge blocks. Updated every step.
|
||||||
emerge_overhead = 0,
|
emerge_overhead = 0,
|
||||||
-- The total number of chunks
|
-- The total number of chunks
|
||||||
chunks_total = count_chunks(pos1, pos2, chunk_size),
|
chunks_total = chunks_total,
|
||||||
-- The number of chunks processed so far
|
-- The number of chunks processed so far
|
||||||
chunks_completed = 0,
|
chunks_completed = 0,
|
||||||
callback_subblock = callback_subblock,
|
callback_subblock = callback_subblock,
|
||||||
|
|
|
@ -22,7 +22,9 @@ end
|
||||||
local function emerge_stats_tostring(tbl_emerge)
|
local function emerge_stats_tostring(tbl_emerge)
|
||||||
local result = {}
|
local result = {}
|
||||||
for key,value in pairs(tbl_emerge) do
|
for key,value in pairs(tbl_emerge) do
|
||||||
table.insert(result, string.format("%s=%d", key, value))
|
if value > 0 then
|
||||||
|
table.insert(result, string.format("%s=%d", key, value))
|
||||||
|
end
|
||||||
end
|
end
|
||||||
return table.concat(result, ", ")
|
return table.concat(result, ", ")
|
||||||
end
|
end
|
||||||
|
@ -99,6 +101,7 @@ worldedit.register_command("subdivide", {
|
||||||
worldedit.player_notify_suppress(name)
|
worldedit.player_notify_suppress(name)
|
||||||
worldedit.pos1[name] = cpos1
|
worldedit.pos1[name] = cpos1
|
||||||
worldedit.pos2[name] = cpos2
|
worldedit.pos2[name] = cpos2
|
||||||
|
worldedit.marker_update(name)
|
||||||
cmd.func(name, args)
|
cmd.func(name, args)
|
||||||
if will_trigger_saferegion(name, cmd_name, args) then
|
if will_trigger_saferegion(name, cmd_name, args) then
|
||||||
minetest.chatcommands["/y"].func()
|
minetest.chatcommands["/y"].func()
|
||||||
|
@ -121,8 +124,12 @@ worldedit.register_command("subdivide", {
|
||||||
time_last_msg = wea.get_ms_time()
|
time_last_msg = wea.get_ms_time()
|
||||||
end
|
end
|
||||||
end, function(_, _, stats)
|
end, function(_, _, stats)
|
||||||
|
worldedit.pos1[name] = pos1
|
||||||
|
worldedit.pos2[name] = pos2
|
||||||
|
worldedit.marker_update(name)
|
||||||
|
|
||||||
-- Called on completion
|
-- Called on completion
|
||||||
minetest.log("action", string.format("%s used //subdivide at %s - %s, with $d chunks and %d total nodes in %s",
|
minetest.log("action", string.format("%s used //subdivide at %s - %s, with %d chunks and %d total nodes in %s",
|
||||||
name,
|
name,
|
||||||
wea.vector.tostring(pos1),
|
wea.vector.tostring(pos1),
|
||||||
wea.vector.tostring(pos2),
|
wea.vector.tostring(pos2),
|
||||||
|
@ -130,15 +137,16 @@ worldedit.register_command("subdivide", {
|
||||||
stats.volume_nodes,
|
stats.volume_nodes,
|
||||||
wea.human_time(stats.times.total)
|
wea.human_time(stats.times.total)
|
||||||
))
|
))
|
||||||
return true, string.format(
|
worldedit.player_notify(name, string.format(
|
||||||
"%sComplete: %d chunks processed in %s (%.2f%% emerge overhead, emerge totals: %s)",
|
"%sComplete: %d chunks processed in %s (%.2f%% emerge overhead, emerge totals: %s)",
|
||||||
msg_prefix,
|
msg_prefix,
|
||||||
stats.chunks_completed,
|
stats.chunks_completed,
|
||||||
wea.human_time(stats.time.total),
|
wea.human_time(stats.times.total),
|
||||||
stats.emerge_overhead * 100,
|
stats.emerge_overhead * 100,
|
||||||
emerge_stats_tostring(stats.emerge)
|
emerge_stats_tostring(stats.emerge)
|
||||||
)
|
))
|
||||||
end)
|
end)
|
||||||
|
|
||||||
|
return true
|
||||||
end
|
end
|
||||||
})
|
})
|
||||||
|
|
Loading…
Reference in a new issue