Skip to content

Commit 0664cde

Browse files
committedMay 31, 2013
Fix //rotate, improve queue (order now preserved), typos fixed (quene -> queue).
1 parent f952ee4 commit 0664cde

File tree

2 files changed

+64
-54
lines changed

2 files changed

+64
-54
lines changed
 

‎worldedit/queue.lua

+36-29
Original file line numberDiff line numberDiff line change
@@ -1,17 +1,17 @@
11
worldedit = worldedit or {}
22

33
worldedit.queue = {}
4+
worldedit.lower = 1
5+
worldedit.higher = 0
46

57
worldedit.ENABLE_QUEUE = true --enable the WorldEdit block queue
68
worldedit.MAXIMUM_TIME = 0.08 --maximum time each step alloted for WorldEdit operations
79

810
minetest.register_globalstep(function(dtime)
9-
local i = 1
1011
local elapsed = 0
1112
local env = minetest.env
12-
while i <= #worldedit.queue and elapsed <= worldedit.MAXIMUM_TIME do
13-
local idx = (#worldedit.queue + 1) - i
14-
local entry = worldedit.queue[idx] --we use the last entry, so we don't spend days moving stuff in the table because we removed the first entry
13+
while worldedit.lower <= worldedit.higher and elapsed <= worldedit.MAXIMUM_TIME do
14+
local entry = worldedit.queue[worldedit.lower]
1515
if entry.t == "set_node" then
1616
env:set_node(entry.pos, entry.node)
1717
elapsed = elapsed + 0.0002
@@ -36,11 +36,18 @@ minetest.register_globalstep(function(dtime)
3636
else
3737
print("Unknown queue event type: " .. entry.t)
3838
end
39-
table.remove(worldedit.queue, idx)
40-
i = i + 1
39+
worldedit.queue[worldedit.lower] = nil
40+
worldedit.lower = worldedit.lower + 1
4141
end
4242
end)
4343

44+
do
45+
worldedit.enqueue = function(value)
46+
worldedit.higher = worldedit.higher + 1
47+
worldedit.queue[worldedit.higher] = value
48+
end
49+
end
50+
4451
function table.copy(t, seen)
4552
seen = seen or {}
4653
if t == nil then return nil end
@@ -58,39 +65,39 @@ function table.copy(t, seen)
5865
return nt
5966
end
6067

61-
local quene_setnode = function(self, pos_, node_)
62-
table.insert(worldedit.queue, {pos=table.copy(pos_), node=table.copy(node_), t="set_node"})
68+
local queue_setnode = function(self, pos_, node_)
69+
worldedit.enqueue({pos=table.copy(pos_), node=table.copy(node_), t="set_node"})
6370
end
6471

65-
local quene_removenode = function(self, pos_)
66-
table.insert(worldedit.queue, {pos=table.copy(pos_), t="remove_node"})
72+
local queue_removenode = function(self, pos_)
73+
worldedit.enqueue({pos=table.copy(pos_), t="remove_node"})
6774
end
6875

69-
local quene_placenode = function(self, pos_, node_)
70-
table.insert(worldedit.queue, {pos=table.copy(pos_), node=table.copy(node_), t="place_node"})
76+
local queue_placenode = function(self, pos_, node_)
77+
worldedit.enqueue({pos=table.copy(pos_), node=table.copy(node_), t="place_node"})
7178
end
7279

73-
local quene_dignode = function(self, pos_)
74-
table.insert(worldedit.queue, {pos=table.copy(pos_), t="dig_node"})
80+
local queue_dignode = function(self, pos_)
81+
worldedit.enqueue({pos=table.copy(pos_), t="dig_node"})
7582
end
7683

77-
local quene_addentity = function(self, pos_, name_)
78-
table.insert(worldedit.queue, {pos=table.copy(pos_), name=name_.."", t="add_entity"})
84+
local queue_addentity = function(self, pos_, name_)
85+
worldedit.enqueue({pos=table.copy(pos_), name=name_.."", t="add_entity"})
7986
end
8087

81-
local quene_additem = function(self, pos_, item_)
82-
table.insert(worldedit.queue, {pos=table.copy(pos_), item=item_.."", t="add_item"})
88+
local queue_additem = function(self, pos_, item_)
89+
worldedit.enqueue({pos=table.copy(pos_), item=item_.."", t="add_item"})
8390
end
8491

85-
local quene_setmeta = function(self, pos_, table_)
86-
table.insert(worldedit.queue, {pos=table.copy(pos_), table=table.copy(table_), t="meta_from_table"})
92+
local queue_setmeta = function(self, pos_, table_)
93+
worldedit.enqueue({pos=table.copy(pos_), table=table.copy(table_), t="meta_from_table"})
8794
end
8895

8996
local aliasmeta = {
9097
-- the other functions are left out because they are not used in worldedit
9198
to_table = function(self) return minetest.env:get_meta(self._pos):to_table() end,
9299
set_string = function(self, name_, value_) minetest.env:get_meta(self._pos):set_string(name_, value_) end,
93-
from_table = function(self, tbl) quene_setmeta(nil, self._pos, tbl) end,
100+
from_table = function(self, tbl) queue_setmeta(nil, self._pos, tbl) end,
94101
}
95102

96103
local get_meta_alias = function(self, pos)
@@ -99,20 +106,20 @@ local get_meta_alias = function(self, pos)
99106
return am
100107
end
101108

102-
worldedit.quene_aliasenv = {
109+
worldedit.queue_aliasenv = {
103110
-- ALL functions that are not just piped to the real minetest.env function must copy the arguments, not just reference them
104-
set_node = quene_setnode,
105-
add_node = quene_setnode,
106-
remove_node = quene_removenode,
111+
set_node = queue_setnode,
112+
add_node = queue_setnode,
113+
remove_node = queue_removenode,
107114
get_node = function(self, pos) return minetest.env:get_node(pos) end,
108115
get_node_or_nil = function(self, pos) return minetest.env:get_node_or_nil(pos) end,
109116
get_node_light = function(self, pos, timeofday) return minetest.env:get_node_light(pos, timeofday) end,
110-
place_node = quene_placenode,
111-
dig_node = quene_dignode,
117+
place_node = queue_placenode,
118+
dig_node = queue_dignode,
112119
punch_node = function(self, pos) return minetest.env:punch_node(pos) end,
113120
get_meta = get_meta_alias,
114121
get_node_timer = function(self, pos) return minetest.env:get_node_timer(pos) end,
115-
add_entity = quene_addentity,
116-
add_item = quene_additem,
122+
add_entity = queue_addentity,
123+
add_item = queue_additem,
117124
}
118125

‎worldedit_commands/init.lua

+28-25
Original file line numberDiff line numberDiff line change
@@ -185,7 +185,7 @@ minetest.register_chatcommand("/set", {
185185

186186
local tenv = minetest.env
187187
if worldedit.ENABLE_QUEUE then
188-
tenv = worldedit.quene_aliasenv
188+
tenv = worldedit.queue_aliasenv
189189
end
190190

191191
local count = worldedit.set(pos1, pos2, param, tenv)
@@ -220,7 +220,7 @@ minetest.register_chatcommand("/replace", {
220220

221221
local tenv = minetest.env
222222
if worldedit.ENABLE_QUEUE then
223-
tenv = worldedit.quene_aliasenv
223+
tenv = worldedit.queue_aliasenv
224224
end
225225
local count = worldedit.replace(pos1, pos2, searchnode, replacenode, tenv)
226226
worldedit.player_notify(name, count .. " nodes replaced")
@@ -254,7 +254,7 @@ minetest.register_chatcommand("/replaceinverse", {
254254

255255
local tenv = minetest.env
256256
if worldedit.ENABLE_QUEUE then
257-
tenv = worldedit.quene_aliasenv
257+
tenv = worldedit.queue_aliasenv
258258
end
259259
local count = worldedit.replaceinverse(pos1, pos2, searchnode, replacenode, tenv)
260260
worldedit.player_notify(name, count .. " nodes replaced")
@@ -284,7 +284,7 @@ minetest.register_chatcommand("/hollowsphere", {
284284

285285
local tenv = minetest.env
286286
if worldedit.ENABLE_QUEUE then
287-
tenv = worldedit.quene_aliasenv
287+
tenv = worldedit.queue_aliasenv
288288
end
289289
local count = worldedit.hollow_sphere(pos, tonumber(radius), nodename, tenv)
290290
worldedit.player_notify(name, count .. " nodes added")
@@ -314,7 +314,7 @@ minetest.register_chatcommand("/sphere", {
314314

315315
local tenv = minetest.env
316316
if worldedit.ENABLE_QUEUE then
317-
tenv = worldedit.quene_aliasenv
317+
tenv = worldedit.queue_aliasenv
318318
end
319319
local count = worldedit.sphere(pos, tonumber(radius), nodename, tenv)
320320
worldedit.player_notify(name, count .. " nodes added")
@@ -344,7 +344,7 @@ minetest.register_chatcommand("/hollowdome", {
344344

345345
local tenv = minetest.env
346346
if worldedit.ENABLE_QUEUE then
347-
tenv = worldedit.quene_aliasenv
347+
tenv = worldedit.queue_aliasenv
348348
end
349349
local count = worldedit.hollow_dome(pos, tonumber(radius), nodename, tenv)
350350
worldedit.player_notify(name, count .. " nodes added")
@@ -374,7 +374,7 @@ minetest.register_chatcommand("/dome", {
374374

375375
local tenv = minetest.env
376376
if worldedit.ENABLE_QUEUE then
377-
tenv = worldedit.quene_aliasenv
377+
tenv = worldedit.queue_aliasenv
378378
end
379379
local count = worldedit.dome(pos, tonumber(radius), nodename, tenv)
380380
worldedit.player_notify(name, count .. " nodes added")
@@ -408,7 +408,7 @@ minetest.register_chatcommand("/hollowcylinder", {
408408

409409
local tenv = minetest.env
410410
if worldedit.ENABLE_QUEUE then
411-
tenv = worldedit.quene_aliasenv
411+
tenv = worldedit.queue_aliasenv
412412
end
413413
local count = worldedit.hollow_cylinder(pos, axis, tonumber(length), tonumber(radius), nodename, tenv)
414414
worldedit.player_notify(name, count .. " nodes added")
@@ -442,7 +442,7 @@ minetest.register_chatcommand("/cylinder", {
442442

443443
local tenv = minetest.env
444444
if worldedit.ENABLE_QUEUE then
445-
tenv = worldedit.quene_aliasenv
445+
tenv = worldedit.queue_aliasenv
446446
end
447447
local count = worldedit.cylinder(pos, axis, tonumber(length), tonumber(radius), nodename, tenv)
448448
worldedit.player_notify(name, count .. " nodes added")
@@ -472,7 +472,7 @@ minetest.register_chatcommand("/pyramid", {
472472

473473
local tenv = minetest.env
474474
if worldedit.ENABLE_QUEUE then
475-
tenv = worldedit.quene_aliasenv
475+
tenv = worldedit.queue_aliasenv
476476
end
477477
local count = worldedit.pyramid(pos, tonumber(size), nodename, tenv)
478478
worldedit.player_notify(name, count .. " nodes added")
@@ -502,7 +502,7 @@ minetest.register_chatcommand("/spiral", {
502502

503503
local tenv = minetest.env
504504
if worldedit.ENABLE_QUEUE then
505-
tenv = worldedit.quene_aliasenv
505+
tenv = worldedit.queue_aliasenv
506506
end
507507
local count = worldedit.spiral(pos, tonumber(width), tonumber(height), tonumber(space), nodename, tenv)
508508
worldedit.player_notify(name, count .. " nodes added")
@@ -532,7 +532,7 @@ minetest.register_chatcommand("/copy", {
532532

533533
local tenv = minetest.env
534534
if worldedit.ENABLE_QUEUE then
535-
tenv = worldedit.quene_aliasenv
535+
tenv = worldedit.queue_aliasenv
536536
end
537537
local count = worldedit.copy(pos1, pos2, axis, tonumber(amount), tenv)
538538
worldedit.player_notify(name, count .. " nodes copied")
@@ -560,8 +560,11 @@ minetest.register_chatcommand("/move", {
560560
amount = amount * sign
561561
end
562562

563-
--Do NOT use the queue here, it'll mess it up
Has conversations. Original line has conversations.
564-
local count = worldedit.move(pos1, pos2, axis, tonumber(amount))
563+
local tenv = minetest.env
564+
if worldedit.ENABLE_QUEUE then
565+
tenv = worldedit.queue_aliasenv
566+
end
567+
local count = worldedit.move(pos1, pos2, axis, tonumber(amount), tenv)
565568

566569
pos1[axis] = pos1[axis] + amount
567570
pos2[axis] = pos2[axis] + amount
@@ -594,7 +597,7 @@ minetest.register_chatcommand("/stack", {
594597

595598
local tenv = minetest.env
596599
if worldedit.ENABLE_QUEUE then
597-
tenv = worldedit.quene_aliasenv
600+
tenv = worldedit.queue_aliasenv
598601
end
599602
local count = worldedit.stack(pos1, pos2, axis, tonumber(count), tenv)
600603
worldedit.player_notify(name, count .. " nodes stacked")
@@ -630,7 +633,7 @@ minetest.register_chatcommand("/transpose", {
630633

631634
local tenv = minetest.env
632635
if worldedit.ENABLE_QUEUE then
633-
tenv = worldedit.quene_aliasenv
636+
tenv = worldedit.queue_aliasenv
634637
end
635638
local count, pos1, pos2 = worldedit.transpose(pos1, pos2, axis1, axis2, tenv)
636639

@@ -665,7 +668,7 @@ minetest.register_chatcommand("/flip", {
665668

666669
local tenv = minetest.env
667670
if worldedit.ENABLE_QUEUE then
668-
tenv = worldedit.quene_aliasenv
671+
tenv = worldedit.queue_aliasenv
669672
end
670673
local count = worldedit.flip(pos1, pos2, param, tenv)
671674
worldedit.player_notify(name, count .. " nodes flipped")
@@ -698,7 +701,7 @@ minetest.register_chatcommand("/rotate", {
698701

699702
local tenv = minetest.env
700703
if worldedit.ENABLE_QUEUE then
701-
tenv = worldedit.quene_aliasenv
704+
tenv = worldedit.queue_aliasenv
702705
end
703706
local count, pos1, pos2 = worldedit.rotate(pos1, pos2, axis, angle, tenv)
704707

@@ -735,7 +738,7 @@ minetest.register_chatcommand("/orient", {
735738

736739
local tenv = minetest.env
737740
if worldedit.ENABLE_QUEUE then
738-
tenv = worldedit.quene_aliasenv
741+
tenv = worldedit.queue_aliasenv
739742
end
740743
local count = worldedit.orient(pos1, pos2, angle, tenv)
741744

@@ -756,7 +759,7 @@ minetest.register_chatcommand("/fixlight", {
756759

757760
local tenv = minetest.env
758761
if worldedit.ENABLE_QUEUE then
759-
tenv = worldedit.quene_aliasenv
762+
tenv = worldedit.queue_aliasenv
760763
end
761764
local count = worldedit.fixlight(pos1, pos2, tenv)
762765
worldedit.player_notify(name, count .. " nodes updated")
@@ -776,7 +779,7 @@ minetest.register_chatcommand("/hide", {
776779

777780
local tenv = minetest.env
778781
if worldedit.ENABLE_QUEUE then
779-
tenv = worldedit.quene_aliasenv
782+
tenv = worldedit.queue_aliasenv
780783
end
781784
local count = worldedit.hide(pos1, pos2, tenv)
782785
worldedit.player_notify(name, count .. " nodes hidden")
@@ -801,7 +804,7 @@ minetest.register_chatcommand("/suppress", {
801804

802805
local tenv = minetest.env
803806
if worldedit.ENABLE_QUEUE then
804-
tenv = worldedit.quene_aliasenv
807+
tenv = worldedit.queue_aliasenv
805808
end
806809
local count = worldedit.suppress(pos1, pos2, param, tenv)
807810
worldedit.player_notify(name, count .. " nodes suppressed")
@@ -826,7 +829,7 @@ minetest.register_chatcommand("/highlight", {
826829

827830
local tenv = minetest.env
828831
if worldedit.ENABLE_QUEUE then
829-
tenv = worldedit.quene_aliasenv
832+
tenv = worldedit.queue_aliasenv
830833
end
831834
local count = worldedit.highlight(pos1, pos2, param, tenv)
832835
worldedit.player_notify(name, count .. " nodes highlighted")
@@ -846,7 +849,7 @@ minetest.register_chatcommand("/restore", {
846849

847850
local tenv = minetest.env
848851
if worldedit.ENABLE_QUEUE then
849-
tenv = worldedit.quene_aliasenv
852+
tenv = worldedit.queue_aliasenv
850853
end
851854
local count = worldedit.restore(pos1, pos2, tenv)
852855
worldedit.player_notify(name, count .. " nodes restored")
@@ -970,7 +973,7 @@ minetest.register_chatcommand("/load", {
970973

971974
local tenv = minetest.env
972975
if worldedit.ENABLE_QUEUE then
973-
tenv = worldedit.quene_aliasenv
976+
tenv = worldedit.queue_aliasenv
974977
end
975978
local count = worldedit.deserialize(pos1, value, tenv)
976979

0 commit comments

Comments
 (0)
Please sign in to comment.