Skip to content

Commit 748446b

Browse files
DesournumberZero
authored andcommittedOct 18, 2017
MVPS: pull objects (#374)
1 parent 1b10610 commit 748446b

File tree

3 files changed

+17
-10
lines changed

3 files changed

+17
-10
lines changed
 

‎mesecons_movestones/init.lua

+7-4
Original file line numberDiff line numberDiff line change
@@ -50,7 +50,6 @@ function mesecon.register_movestone(name, def, is_sticky, is_vertical)
5050
minetest.get_node_timer(pos):start(timer_interval)
5151
return
5252
end
53-
mesecon.mvps_process_stack(stack)
5453
mesecon.mvps_move_objects(frontpos, direction, oldstack)
5554

5655
-- ### Step 2: Move the movestone ###
@@ -61,9 +60,13 @@ function mesecon.register_movestone(name, def, is_sticky, is_vertical)
6160
minetest.get_node_timer(frontpos):start(timer_interval)
6261

6362
-- ### Step 3: If sticky, pull stack behind ###
64-
if is_sticky then
65-
local backpos = vector.subtract(pos, direction)
66-
mesecon.mvps_pull_all(backpos, direction, max_pull)
63+
if not is_sticky then
64+
return
65+
end
66+
local backpos = vector.subtract(pos, direction)
67+
success, stack, oldstack = mesecon.mvps_pull_all(backpos, direction, max_pull)
68+
if success then
69+
mesecon.mvps_move_objects(backpos, vector.multiply(direction, -1), oldstack, -1)
6770
end
6871
end
6972

‎mesecons_mvps/init.lua

+4-2
Original file line numberDiff line numberDiff line change
@@ -205,7 +205,7 @@ function mesecon.mvps_push_or_pull(pos, stackdir, movedir, maximum, all_pull_sti
205205
return true, nodes, oldstack
206206
end
207207

208-
function mesecon.mvps_move_objects(pos, dir, nodestack)
208+
function mesecon.mvps_move_objects(pos, dir, nodestack, movefactor)
209209
local objects_to_move = {}
210210
local dir_k
211211
local dir_l
@@ -216,6 +216,8 @@ function mesecon.mvps_move_objects(pos, dir, nodestack)
216216
break
217217
end
218218
end
219+
movefactor = movefactor or 1
220+
dir = vector.multiply(dir, movefactor)
219221
for id, obj in pairs(minetest.object_refs) do
220222
local obj_pos = obj:get_pos()
221223
local cbox = obj:get_properties().collisionbox
@@ -229,7 +231,7 @@ function mesecon.mvps_move_objects(pos, dir, nodestack)
229231
edge2 = v + 0.51
230232
else
231233
edge1 = v - 0.5 * dir_l
232-
edge2 = v + (#nodestack + 0.5) * dir_l
234+
edge2 = v + (#nodestack + 0.5 * movefactor) * dir_l
233235
-- Make sure, edge1 is bigger than edge2:
234236
if edge1 > edge2 then
235237
edge1, edge2 = edge2, edge1

‎mesecons_pistons/init.lua

+6-4
Original file line numberDiff line numberDiff line change
@@ -101,10 +101,12 @@ local function piston_off(pos, node)
101101
if not pistonspec.sticky then
102102
return
103103
end
104-
local dir = vector.multiply(minetest.facedir_to_dir(node.param2), -1)
105-
local pullpos = vector.add(pos, vector.multiply(dir, 2))
106-
local stack = mesecon.mvps_pull_single(pullpos, vector.multiply(dir, -1), max_pull)
107-
mesecon.mvps_process_stack(pos, dir, stack)
104+
local dir = minetest.facedir_to_dir(node.param2)
105+
local pullpos = vector.add(pos, vector.multiply(dir, -2))
106+
local success, stack, oldstack = mesecon.mvps_pull_single(pullpos, dir, max_pull)
107+
if success then
108+
mesecon.mvps_move_objects(pullpos, vector.multiply(dir, -1), oldstack, -1)
109+
end
108110
end
109111

110112
local orientations = {

0 commit comments

Comments
 (0)
Please sign in to comment.