@@ -2,29 +2,39 @@ worldedit = worldedit or {}
2
2
3
3
worldedit .queue = {}
4
4
5
- worldedit .ENABLE_QUEUE = true
6
- worldedit .BLOCKS_PER_GLOBALSTEP = 512
5
+ worldedit .ENABLE_QUEUE = true -- enable the WorldEdit block queue
6
+ worldedit .MAXIMUM_TIME = 0.08 -- maximum time each step alloted for WorldEdit operations
7
7
8
8
minetest .register_globalstep (function (dtime )
9
- i = 1
10
- while i <= # worldedit .queue and i <= worldedit .BLOCKS_PER_GLOBALSTEP do
11
- idx = (# worldedit .queue + 1 ) - i -- we use the last entry, so we don't spend days moving stuff in the table because we removed the first entry
12
- if worldedit .queue [idx ].t == " set_node" then
13
- minetest .env :set_node (worldedit .queue [idx ].pos , worldedit .queue [idx ].node )
14
- elseif worldedit .queue [idx ].t == " remove_node" then
15
- minetest .env :remove_node (worldedit .queue [idx ].pos )
16
- elseif worldedit .queue [idx ].t == " place_node" then
17
- minetest .env :place_node (worldedit .queue [idx ].pos , worldedit .queue [idx ].node )
18
- elseif worldedit .queue [idx ].t == " dig_node" then
19
- minetest .env :dig_node (worldedit .queue [idx ].pos )
20
- elseif worldedit .queue [idx ].t == " add_entity" then
21
- minetest .env :add_entity (worldedit .queue [idx ].pos , worldedit .queue [idx ].name )
22
- elseif worldedit .queue [idx ].t == " add_item" then
23
- minetest .env :add_item (worldedit .queue [idx ].pos , worldedit .queue [idx ].item )
24
- elseif worldedit .queue [idx ].t == " meta_from_table" then
25
- minetest .env :get_meta (worldedit .queue [idx ].pos ):from_table (worldedit .queue [idx ].table )
9
+ local i = 1
10
+ local elapsed = 0
11
+ 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
15
+ if entry .t == " set_node" then
16
+ env :set_node (entry .pos , entry .node )
17
+ elapsed = elapsed + 0.0002
18
+ elseif entry .t == " remove_node" then
19
+ env :remove_node (entry .pos )
20
+ elapsed = elapsed + 0.0002
21
+ elseif entry .t == " place_node" then
22
+ env :place_node (entry .pos , entry .node )
23
+ elapsed = elapsed + 0.001
24
+ elseif entry .t == " dig_node" then
25
+ env :dig_node (entry .pos )
26
+ elapsed = elapsed + 0.001
27
+ elseif entry .t == " add_entity" then
28
+ env :add_entity (entry .pos , entry .name )
29
+ elapsed = elapsed + 0.005
30
+ elseif entry .t == " add_item" then
31
+ env :add_item (entry .pos , entry .item )
32
+ elapsed = elapsed + 0.005
33
+ elseif entry .t == " meta_from_table" then
34
+ env :get_meta (entry .pos ):from_table (entry .table )
35
+ elapsed = elapsed + 0.0002
26
36
else
27
- print (" Unknown queue event type: " .. worldedit . queue [ idx ] .t )
37
+ print (" Unknown queue event type: " .. entry .t )
28
38
end
29
39
table.remove (worldedit .queue , idx )
30
40
i = i + 1
0 commit comments