From 44dc1a128cd6574b53ae68c33a6d2583eb878087 Mon Sep 17 00:00:00 2001 From: Jeija Date: Sat, 15 Dec 2012 18:45:51 +0100 Subject: Upload cleaned up mesecons to nextgen branch --- mesecons_pistons/init.lua | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) (limited to 'mesecons_pistons') diff --git a/mesecons_pistons/init.lua b/mesecons_pistons/init.lua index dd3f599..3971e19 100644 --- a/mesecons_pistons/init.lua +++ b/mesecons_pistons/init.lua @@ -247,5 +247,8 @@ function mesecon:piston_get_direction(node) end end -dofile(minetest.get_modpath("mesecons_pistons").."/pistons_down.lua") -dofile(minetest.get_modpath("mesecons_pistons").."/pistons_up.lua") +-- dofile(minetest.get_modpath("mesecons_pistons").."/pistons_down.lua") +-- dofile(minetest.get_modpath("mesecons_pistons").."/pistons_up.lua") +-- Dropped +-- We need a better way to have these piston types +-- There should be a facedir for vertical orientations -- cgit v1.2.3 From a1852204fbc2bd056f3286f316c94076d5fd7e2b Mon Sep 17 00:00:00 2001 From: Jeija Date: Sun, 16 Dec 2012 11:58:43 +0100 Subject: Cleanup and improve piston code --- mesecons_pistons/init.lua | 89 +++++++++++++++++++++++++++-------------------- 1 file changed, 51 insertions(+), 38 deletions(-) (limited to 'mesecons_pistons') diff --git a/mesecons_pistons/init.lua b/mesecons_pistons/init.lua index 0eb2b6e..92dbd32 100644 --- a/mesecons_pistons/init.lua +++ b/mesecons_pistons/init.lua @@ -1,5 +1,25 @@ --PISTONS +-- Get mesecon rules of pistons +piston_rules = +{{x=0, y=0, z=1}, --everything apart from z- (pusher side) + {x=1, y=0, z=0}, + {x=-1, y=0, z=0}, + {x=1, y=1, z=0}, + {x=1, y=-1, z=0}, + {x=-1, y=1, z=0}, + {x=-1, y=-1, z=0}, + {x=0, y=1, z=1}, + {x=0, y=-1, z=1}} + +local piston_get_rules = function (node) + local rules = piston_rules + for i = 1, node.param2 do + rules = mesecon:rotate_rules_left(rules) + end + return rules +end + --starts the timer to make the piston update to its new state local update = function(pos, node) local timer = minetest.env:get_node_timer(pos) @@ -44,11 +64,12 @@ end function mesecon:piston_push(pos) local node = minetest.env:get_node(pos) local dir = mesecon:piston_get_direction(node) - pos = {x=pos.x + dir.x, y=pos.y + dir.y, z=pos.z + dir.z} --move to first node being pushed + pos = addPosRule(pos, dir) --move to first node being pushed --determine the number of nodes that need to be pushed local count = 0 local checkpos = {x=pos.x, y=pos.y, z=pos.z} --first node being pushed + while true do local checknode = minetest.env:get_node(checkpos) @@ -69,10 +90,13 @@ function mesecon:piston_push(pos) return end - checkpos.x, checkpos.y, checkpos.z = checkpos.x + dir.x, checkpos.y + dir.y, checkpos.z + dir.z + checkpos = addPosRule(checkpos, dir) end - local checknode = minetest.env:get_node(pos) + local thisnode = minetest.env:get_node(pos) + minetest.env:remove_node(pos) + mesecon.on_dignode(pos, thisnode) + local nextnode --add pusher if node.name == "mesecons_pistons:piston_normal" then @@ -91,25 +115,15 @@ function mesecon:piston_push(pos) --move nodes forward for i = 1, count do - pos.x, pos.y, pos.z = pos.x + dir.x, pos.y + dir.y, pos.z + dir.z --move to the next node - - --check for conductor --wip: not sure if still needed - if mesecon:is_conductor_on(checknode.name) then - checknode.name = mesecon:get_conductor_off(checknode.name) - end - - --move the node forward - local nextnode = minetest.env:get_node(pos) - minetest.env:add_node(pos, checknode) - checknode = nextnode - end - - --update nodes - for i = 1, count do - mesecon:updatenode(pos) + pos = addPosRule(pos, dir) --move to the next node + + nextnode = minetest.env:get_node(pos) + minetest.env:remove_node(pos) + mesecon.on_dignode(pos, thisnode) + minetest.env:add_node(pos, thisnode) + mesecon.on_placenode(pos, thisnode) + thisnode = nextnode nodeupdate(pos) - - pos.x, pos.y, pos.z = pos.x - dir.x, pos.y - dir.y, pos.z - dir.z --move to the previous node end end @@ -140,23 +154,17 @@ function mesecon:piston_pull(pos) --retract piston minetest.env:remove_node(pos) --remove pusher - if node.name == "mesecons_pistons:piston_sticky" - or node.name == "mesecons_pistons:piston_up_sticky" - or node.name == "mesecons_pistons:piston_down_sticky" then --retract block if piston is sticky - local checkpos = {x=pos.x + dir.x, y=pos.y + dir.y, z=pos.z + dir.z} --move to the node to be retracted - checknode = minetest.env:get_node(checkpos) - if checknode.name ~= "air" - and checknode.name ~= "ignore" - and minetest.registered_nodes[checknode.name].liquidtype == "none" - and not mesecon:is_mvps_stopper(checknode.name) then - minetest.env:add_node(pos, checknode) - minetest.env:remove_node(checkpos) - mesecon:updatenode(checkpos) - nodeupdate(checkpos) + if minetest.registered_nodes[node.name].is_sticky_piston then --retract block if piston is sticky + local retractpos = addPosRule(pos, dir) --move to the node to be retracted + local retractnode = minetest.env:get_node(retractpos) + if minetest.registered_nodes[retractnode.name].liquidtype == "none" + and not mesecon:is_mvps_stopper(retractnode.name) then + mesecon:move_node(retractpos, pos) + mesecon.on_dignode(retractpos, retractnode) + mesecon.on_placenode(pos, retractnode) + nodeupdate(pos) end end - mesecon:updatenode(pos) - nodeupdate(pos) end --push direction of a piston @@ -208,7 +216,8 @@ minetest.register_node("mesecons_pistons:piston_normal", { return minetest.item_place(itemstack, placer, pointed_thing) --place piston normally end, mesecons = {effector={ - action_change = update + action_change = update, + rules = piston_get_rules }} }) @@ -219,6 +228,7 @@ minetest.register_node("mesecons_pistons:piston_sticky", { paramtype2 = "facedir", after_destruct = destruct, on_timer = timer, + is_sticky_piston = true, on_place = function(itemstack, placer, pointed_thing) if pointed_thing.type ~= "node" then --can be placed only on nodes return itemstack @@ -243,7 +253,8 @@ minetest.register_node("mesecons_pistons:piston_sticky", { return minetest.item_place(itemstack, placer, pointed_thing) --place piston normally end, mesecons = {effector={ - action_change = update + action_change = update, + rules = piston_get_rules }} }) @@ -307,6 +318,7 @@ minetest.register_node("mesecons_pistons:piston_up_normal", { groups = {cracky=3, mesecon=2}, after_destruct = destruct, on_timer = timer, + is_sticky_piston = true, mesecons = {effector={ action_change = update }}, @@ -393,6 +405,7 @@ minetest.register_node("mesecons_pistons:piston_down_sticky", { groups = {cracky=3, mesecon=2}, after_destruct = destruct, on_timer = timer, + is_sticky_piston = true, mesecons = {effector={ action_change = update }}, -- cgit v1.2.3 From 5aa0815ffb9b1661311958da6a1e757e9c52a0c9 Mon Sep 17 00:00:00 2001 From: Jeija Date: Wed, 19 Dec 2012 18:20:21 +0100 Subject: hopefully fix http://minetest.net/forum/viewtopic.php?pid=58093#p58093 --- mesecons_pistons/init.lua | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) (limited to 'mesecons_pistons') diff --git a/mesecons_pistons/init.lua b/mesecons_pistons/init.lua index 92dbd32..028eb54 100644 --- a/mesecons_pistons/init.lua +++ b/mesecons_pistons/init.lua @@ -64,7 +64,7 @@ end function mesecon:piston_push(pos) local node = minetest.env:get_node(pos) local dir = mesecon:piston_get_direction(node) - pos = addPosRule(pos, dir) --move to first node being pushed + pos = mesecon:addPosRule(pos, dir) --move to first node being pushed --determine the number of nodes that need to be pushed local count = 0 @@ -90,7 +90,7 @@ function mesecon:piston_push(pos) return end - checkpos = addPosRule(checkpos, dir) + checkpos = mesecon:addPosRule(checkpos, dir) end local thisnode = minetest.env:get_node(pos) @@ -115,7 +115,7 @@ function mesecon:piston_push(pos) --move nodes forward for i = 1, count do - pos = addPosRule(pos, dir) --move to the next node + pos = mesecon:addPosRule(pos, dir) --move to the next node nextnode = minetest.env:get_node(pos) minetest.env:remove_node(pos) @@ -155,7 +155,7 @@ function mesecon:piston_pull(pos) --retract piston minetest.env:remove_node(pos) --remove pusher if minetest.registered_nodes[node.name].is_sticky_piston then --retract block if piston is sticky - local retractpos = addPosRule(pos, dir) --move to the node to be retracted + local retractpos = mesecon:addPosRule(pos, dir) --move to the node to be retracted local retractnode = minetest.env:get_node(retractpos) if minetest.registered_nodes[retractnode.name].liquidtype == "none" and not mesecon:is_mvps_stopper(retractnode.name) then -- cgit v1.2.3 From 594d061d6d33e59009914d8873f5c1584f1383f0 Mon Sep 17 00:00:00 2001 From: Jeija Date: Wed, 12 Dec 2012 03:14:57 +0100 Subject: Fix sticky piston retraction not working --- mesecons_pistons/init.lua | 1 + 1 file changed, 1 insertion(+) (limited to 'mesecons_pistons') diff --git a/mesecons_pistons/init.lua b/mesecons_pistons/init.lua index e5228d4..fb7375b 100644 --- a/mesecons_pistons/init.lua +++ b/mesecons_pistons/init.lua @@ -216,6 +216,7 @@ minetest.register_node("mesecons_pistons:piston_sticky", { paramtype2 = "facedir", after_destruct = destruct, on_timer = timer, + is_sticky_piston = true, after_place_node = function(pos, placer) if not placer then --not placed by player return -- cgit v1.2.3 From af8fd75fa484cdf881e2414f3baa3a0eed6562e9 Mon Sep 17 00:00:00 2001 From: Jeija Date: Sun, 23 Dec 2012 17:20:59 +0100 Subject: Fix sticky piston up --- mesecons_pistons/init.lua | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'mesecons_pistons') diff --git a/mesecons_pistons/init.lua b/mesecons_pistons/init.lua index fb7375b..47956cc 100644 --- a/mesecons_pistons/init.lua +++ b/mesecons_pistons/init.lua @@ -294,7 +294,6 @@ minetest.register_node("mesecons_pistons:piston_up_normal", { groups = {cracky=3, mesecon=2}, after_destruct = destruct, on_timer = timer, - is_sticky_piston = true, mesecons = {effector={ action_change = update }}, @@ -306,6 +305,7 @@ minetest.register_node("mesecons_pistons:piston_up_sticky", { groups = {cracky=3, mesecon=2}, after_destruct = destruct, on_timer = timer, + is_sticky_piston = true, mesecons = {effector={ action_change = update }}, -- cgit v1.2.3 From d91e0b66cb7971ba54d071a0955f17d1a7b0162e Mon Sep 17 00:00:00 2001 From: Jeija Date: Wed, 26 Dec 2012 22:54:28 +0100 Subject: Re-write pistons from scratch, propably fixes a lot of bugs and doesn't cause too many new ones. --- mesecons_pistons/depends.txt | 1 - mesecons_pistons/init.lua | 739 +++++++++++++++++++++++++------------------ 2 files changed, 432 insertions(+), 308 deletions(-) (limited to 'mesecons_pistons') diff --git a/mesecons_pistons/depends.txt b/mesecons_pistons/depends.txt index a596cf8..01f085b 100644 --- a/mesecons_pistons/depends.txt +++ b/mesecons_pistons/depends.txt @@ -1,3 +1,2 @@ mesecons -mesecons_materials mesecons_mvps diff --git a/mesecons_pistons/init.lua b/mesecons_pistons/init.lua index 47956cc..75547d2 100644 --- a/mesecons_pistons/init.lua +++ b/mesecons_pistons/init.lua @@ -1,4 +1,7 @@ ---PISTONS +-- +-- +-- +-- -- Get mesecon rules of pistons piston_rules = @@ -20,242 +23,194 @@ local piston_get_rules = function (node) return rules end ---starts the timer to make the piston update to its new state -local update = function(pos, node) - local timer = minetest.env:get_node_timer(pos) - timer:stop() - timer:start(0) -end - ---on_destruct callback, removes the piston pusher if it is present -local destruct = function(pos, oldnode) - local dir = mesecon:piston_get_direction(oldnode) - pos.x, pos.y, pos.z = pos.x + dir.x, pos.y + dir.y, pos.z + dir.z --move to first node to check - - --ensure piston is extended - local checknode = minetest.env:get_node(pos) - if checknode.name == "mesecons_pistons:piston_pusher_normal" - or checknode.name == "mesecons_pistons:piston_pusher_sticky" then - if checknode.param2 == oldnode.param2 then --pusher is facing the same direction as the piston - minetest.env:remove_node(pos) --remove the pusher - end - elseif oldnode.name == "mesecons_pistons:piston_up_normal" or oldnode.name == "mesecons_pistons:piston_up_sticky" then - if checknode.name == "mesecons_pistons:piston_up_pusher_normal" or checknode.name == "mesecons_pistons:piston_up_pusher_sticky" then - minetest.env:remove_node(pos) --remove the pusher - end - elseif oldnode.name == "mesecons_pistons:piston_down_normal" or oldnode.name == "mesecons_pistons:piston_down_sticky" then - if checknode.name == "mesecons_pistons:piston_down_pusher_normal" or checknode.name == "mesecons_pistons:piston_down_pusher_sticky" then - minetest.env:remove_node(pos) --remove the pusher - end +piston_facedir_direction = function (node) + local rules = {{x = 0, y = 0, z = -1}} + for i = 1, node.param2 do + rules = mesecon:rotate_rules_left(rules) end + return rules[1] end ---node timer callback, pushes/pulls the piston depending on whether it is powered -local timer = function(pos, elapsed) - if mesecon:is_powered(pos) then - mesecon:piston_push(pos) +piston_get_direction = function (dir, node) + if type(dir) == "function" then + return dir(node) else - mesecon:piston_pull(pos) + return dir end - return false end ---piston push action -function mesecon:piston_push(pos) - local node = minetest.env:get_node(pos) - local dir = mesecon:piston_get_direction(node) - pos = mesecon:addPosRule(pos, dir) --move to first node being pushed - - --determine the number of nodes that need to be pushed - local count = 0 - local checkpos = {x=pos.x, y=pos.y, z=pos.z} --first node being pushed - - while true do - local checknode = minetest.env:get_node(checkpos) - - --check for collision with stopper or bounds - if mesecon:is_mvps_stopper(checknode.name) or checknode.name == "ignore" then - return - end - - --check for column end - if checknode.name == "air" - or not(minetest.registered_nodes[checknode.name].liquidtype == "none") then - break - end - - --limit piston pushing capacity - count = count + 1 - if count > 15 then - return - end - - checkpos = mesecon:addPosRule(checkpos, dir) - end +local piston_remove_pusher = function (pos, node) + pistonspec = minetest.registered_nodes[node.name].mesecons_piston - local thisnode = minetest.env:get_node(pos) - minetest.env:remove_node(pos) - mesecon.on_dignode(pos, thisnode) - local nextnode - - --add pusher - if node.name == "mesecons_pistons:piston_normal" then - minetest.env:add_node(pos, {name="mesecons_pistons:piston_pusher_normal", param2=node.param2}) - elseif node.name == "mesecons_pistons:piston_sticky" then - minetest.env:add_node(pos, {name="mesecons_pistons:piston_pusher_sticky", param2=node.param2}) - elseif node.name == "mesecons_pistons:piston_up_normal" then - minetest.env:add_node(pos, {name="mesecons_pistons:piston_up_pusher_normal"}) - elseif node.name == "mesecons_pistons:piston_up_sticky" then - minetest.env:add_node(pos, {name="mesecons_pistons:piston_up_pusher_sticky"}) - elseif node.name == "mesecons_pistons:piston_down_normal" then - minetest.env:add_node(pos, {name="mesecons_pistons:piston_down_pusher_normal"}) - elseif node.name == "mesecons_pistons:piston_down_sticky" then - minetest.env:add_node(pos, {name="mesecons_pistons:piston_down_pusher_sticky"}) - end + dir = piston_get_direction(pistonspec.dir, node) + local pusherpos = mesecon:addPosRule(pos, dir) + minetest.env:remove_node(pusherpos) + nodeupdate(pusherpos) +end - --move nodes forward - for i = 1, count do - pos = mesecon:addPosRule(pos, dir) --move to the next node - - nextnode = minetest.env:get_node(pos) - minetest.env:remove_node(pos) - mesecon.on_dignode(pos, thisnode) - minetest.env:add_node(pos, thisnode) - mesecon.on_placenode(pos, thisnode) - thisnode = nextnode - nodeupdate(pos) +local piston_on = function (pos, node) + local pistonspec = minetest.registered_nodes[node.name].mesecons_piston + + dir = piston_get_direction(pistonspec.dir, node) + local np = mesecon:addPosRule(pos, dir) + success, stack = mesecon:mvps_push(np, dir, PISTON_MAXIMUM_PUSH) + if success then + minetest.env:add_node(pos, {param2 = node.param2, name = pistonspec.onname}) + minetest.env:add_node(np, {param2 = node.param2, name = pistonspec.pusher}) + mesecon:mvps_process_stack(stack) end end ---piston pull action -function mesecon:piston_pull(pos) - local node = minetest.env:get_node(pos) - local dir = mesecon:piston_get_direction(node) - pos = {x=pos.x + dir.x, y=pos.y + dir.y, z=pos.z + dir.z} --move to first node being replaced - - --ensure piston is extended - local checknode = minetest.env:get_node(pos) - if node.name == "mesecons_pistons:piston_up_normal" or node.name == "mesecons_pistons:piston_up_sticky" then --up piston - if checknode.name ~= "mesecons_pistons:piston_up_pusher_normal" and checknode.name ~= "mesecons_pistons:piston_up_pusher_sticky" then - return --piston is not extended - end - elseif node.name == "mesecons_pistons:piston_down_normal" or node.name == "mesecons_pistons:piston_down_sticky" then --down piston - if checknode.name ~= "mesecons_pistons:piston_down_pusher_normal" and checknode.name ~= "mesecons_pistons:piston_down_pusher_sticky" then - return --piston is not extended - end - else --horizontal piston - if checknode.name ~= "mesecons_pistons:piston_pusher_normal" and checknode.name ~= "mesecons_pistons:piston_pusher_sticky" then - return --piston is not extended - end - if checknode.param2 ~= node.param2 then --pusher is not facing the same direction as the piston - return --piston is not extended - end - end +local piston_off = function (pos, node) + local pistonspec = minetest.registered_nodes[node.name].mesecons_piston + minetest.env:add_node(pos, {param2 = node.param2, name = pistonspec.offname}) + piston_remove_pusher (pos, node) - --retract piston - minetest.env:remove_node(pos) --remove pusher - if minetest.registered_nodes[node.name].is_sticky_piston then --retract block if piston is sticky - local retractpos = mesecon:addPosRule(pos, dir) --move to the node to be retracted - local retractnode = minetest.env:get_node(retractpos) - if minetest.registered_nodes[retractnode.name].liquidtype == "none" - and not mesecon:is_mvps_stopper(retractnode.name) then - mesecon:move_node(retractpos, pos) - mesecon.on_dignode(retractpos, retractnode) - mesecon.on_placenode(pos, retractnode) - nodeupdate(pos) - end + if pistonspec.sticky then + dir = piston_get_direction(pistonspec.dir, node) + pullpos = mesecon:addPosRule(pos, dir) + stack = mesecon:mvps_pull_single(pullpos, dir) + mesecon:mvps_process_stack(stack) end end ---push direction of a piston -function mesecon:piston_get_direction(node) - if node.name == "mesecons_pistons:piston_up_normal" or node.name == "mesecons_pistons:piston_up_sticky" then - return {x=0, y=1, z=0} - elseif node.name == "mesecons_pistons:piston_down_normal" or node.name == "mesecons_pistons:piston_down_sticky" then - return {x=0, y=-1, z=0} - elseif node.param2 == 3 then - return {x=1, y=0, z=0} - elseif node.param2 == 2 then - return {x=0, y=0, z=1} - elseif node.param2 == 1 then - return {x=-1, y=0, z=0} - else --node.param2 == 0 - return {x=0, y=0, z=-1} +local piston_orientate = function (pos, placer) + -- not placed by player + if not placer then return end + + -- placer pitch in degrees + local pitch = placer:get_look_pitch() * (180 / math.pi) + + local node = minetest.env:get_node(pos) + local pistonspec = minetest.registered_nodes[node.name].mesecons_piston + if pitch > 55 then --looking upwards + minetest.env:add_node(pos, {name=pistonspec.piston_down}) + elseif pitch < -55 then --looking downwards + minetest.env:add_node(pos, {name=pistonspec.piston_up}) end end ---horizontal pistons -minetest.register_node("mesecons_pistons:piston_normal", { + +-- Horizontal pistons + +local pt = 2/16 -- pusher thickness + +local piston_pusher_box = { + type = "fixed", + fixed = { + {-2/16, -2/16, -.5 + pt, 2/16, 2/16, .5 + pt}, + {-.5 , -.5 , -.5 , .5 , .5 , -.5 + pt}, + } +} + +local piston_on_box = { + type = "fixed", + fixed = { + {-.5, -.5, -.5 + pt, .5, .5, .5} + } +} + + +-- Normal (non-sticky) ones: + +local pistonspec_normal = { + offname = "mesecons_pistons:piston_normal_off", + onname = "mesecons_pistons:piston_normal_on", + dir = piston_facedir_direction, + pusher = "mesecons_pistons:piston_pusher_normal", + piston_down = "mesecons_pistons:piston_down_normal_off", + piston_up = "mesecons_pistons:piston_up_normal_off", +} + +-- offstate +minetest.register_node("mesecons_pistons:piston_normal_off", { description = "Piston", tiles = {"jeija_piston_tb.png", "jeija_piston_tb.png", "jeija_piston_tb.png", "jeija_piston_tb.png", "jeija_piston_tb.png", "jeija_piston_side.png"}, - groups = {cracky=3, mesecon=2}, + groups = {cracky = 3}, paramtype2 = "facedir", - after_destruct = destruct, - on_timer = timer, - after_place_node = function(pos, placer) - if not placer then --not placed by player - return - end - local pitch = placer:get_look_pitch() * (180 / math.pi) --placer pitch in degrees - if pitch > 45 then --looking upwards - minetest.env:add_node(pos, {name="mesecons_pistons:piston_down_normal"}) - elseif pitch < -45 then --looking downwards - minetest.env:add_node(pos, {name="mesecons_pistons:piston_up_normal"}) - end - end, + after_place_node = piston_orientate, + mesecons_piston = pistonspec_normal, mesecons = {effector={ - action_change = update, + action_on = piston_on, rules = piston_get_rules }} }) -minetest.register_node("mesecons_pistons:piston_sticky", { - description = "Sticky Piston", - tiles = {"jeija_piston_tb.png", "jeija_piston_tb.png", "jeija_piston_tb.png", "jeija_piston_tb.png", "jeija_piston_tb.png", "jeija_piston_sticky_side.png"}, - groups = {cracky=3, mesecon=2}, +-- onstate +minetest.register_node("mesecons_pistons:piston_normal_on", { + drawtype = "nodebox", + tiles = {"jeija_piston_tb.png", "jeija_piston_tb.png", "jeija_piston_tb.png", "jeija_piston_tb.png", "jeija_piston_tb.png", "jeija_piston_tb.png"}, + groups = {cracky = 3, not_in_creative_inventory = 1}, + paramtype = "light", paramtype2 = "facedir", - after_destruct = destruct, - on_timer = timer, - is_sticky_piston = true, - after_place_node = function(pos, placer) - if not placer then --not placed by player - return - end - local pitch = placer:get_look_pitch() * (180 / math.pi) --placer pitch in degrees - if pitch > 45 then --looking upwards - minetest.env:add_node(pos, {name="mesecons_pistons:piston_down_sticky"}) - elseif pitch < -45 then --looking downwards - minetest.env:add_node(pos, {name="mesecons_pistons:piston_up_sticky"}) - end - end, + drop = {"mesecons_pistons:piston_normal_off"}, + after_dig_node = piston_remove_pusher, + node_box = piston_on_box, + selection_box = piston_on_box, + mesecons_piston = pistonspec_normal, mesecons = {effector={ - action_change = update, + action_off = piston_off, rules = piston_get_rules }} }) +-- pusher minetest.register_node("mesecons_pistons:piston_pusher_normal", { drawtype = "nodebox", tiles = {"jeija_piston_pusher_normal.png"}, paramtype = "light", paramtype2 = "facedir", diggable = false, - selection_box = { - type = "fixed", - fixed = { - {-0.2, -0.2, -0.3, 0.2, 0.2, 0.5}, - {-0.5, -0.5, -0.5, 0.5, 0.5, -0.3}, - }, - }, - node_box = { - type = "fixed", - fixed = { - {-0.2, -0.2, -0.3, 0.2, 0.2, 0.5}, - {-0.5, -0.5, -0.5, 0.5, 0.5, -0.3}, - }, - }, + corresponding_piston = "mesecons_pistons:piston_normal_on", + selection_box = piston_pusher_box, + node_box = piston_pusher_box, }) +-- Sticky ones + +local pistonspec_sticky = { + offname = "mesecons_pistons:piston_sticky_off", + onname = "mesecons_pistons:piston_sticky_on", + dir = piston_facedir_direction, + pusher = "mesecons_pistons:piston_pusher_sticky", + sticky = true, + piston_down = "mesecons_pistons:piston_down_sticky_off", + piston_up = "mesecons_pistons:piston_up_sticky_off", +} + +-- offstate +minetest.register_node("mesecons_pistons:piston_sticky_off", { + description = "Sticky Piston", + tiles = {"jeija_piston_tb.png", "jeija_piston_tb.png", "jeija_piston_tb.png", "jeija_piston_tb.png", "jeija_piston_tb.png", "jeija_piston_sticky_side.png"}, + groups = {cracky = 3}, + paramtype2 = "facedir", + after_place_node = piston_orientate, + mesecons_piston = pistonspec_sticky, + mesecons = {effector={ + action_on = piston_on, + rules = piston_get_rules + }} +}) + +-- onstate +minetest.register_node("mesecons_pistons:piston_sticky_on", { + drawtype = "nodebox", + tiles = {"jeija_piston_tb.png", "jeija_piston_tb.png", "jeija_piston_tb.png", "jeija_piston_tb.png", "jeija_piston_tb.png", "jeija_piston_tb.png"}, + groups = {cracky = 3, not_in_creative_inventory = 1}, + paramtype = "light", + paramtype2 = "facedir", + drop = {"mesecons_pistons:piston_normal_off"}, + after_dig_node = piston_remove_pusher, + node_box = piston_on_box, + selection_box = piston_on_box, + mesecons_piston = pistonspec_sticky, + mesecons = {effector={ + action_off = piston_off, + rules = piston_get_rules + }} +}) + +-- pusher minetest.register_node("mesecons_pistons:piston_pusher_sticky", { drawtype = "nodebox", tiles = { @@ -269,70 +224,125 @@ minetest.register_node("mesecons_pistons:piston_pusher_sticky", { paramtype = "light", paramtype2 = "facedir", diggable = false, - selection_box = { - type = "fixed", - fixed = { - {-0.2, -0.2, -0.3, 0.2, 0.2, 0.5}, - {-0.5, -0.5, -0.5, 0.5, 0.5, -0.3}, - }, - }, - node_box = { - type = "fixed", - fixed = { - {-0.2, -0.2, -0.3, 0.2, 0.2, 0.5}, - {-0.5, -0.5, -0.5, 0.5, 0.5, -0.3}, - }, - }, + corresponding_piston = "mesecons_pistons:piston_sticky_on", + selection_box = piston_pusher_box, + node_box = piston_pusher_box, }) -mesecon:register_mvps_stopper("mesecons_pistons:piston_pusher_normal") -mesecon:register_mvps_stopper("mesecons_pistons:piston_pusher_sticky") +-- +-- +-- UP +-- +-- + +local piston_up_pusher_box = { + type = "fixed", + fixed = { + {-2/16, -.5 - pt, -2/16, 2/16, .5, 2/16}, + {-.5 , .5 - pt, -.5 , .5 , .5, .5}, + } +} + +local piston_up_on_box = { + type = "fixed", + fixed = { + {-.5, -.5, -.5 , .5, .5-pt, .5} + } +} ---up pistons -minetest.register_node("mesecons_pistons:piston_up_normal", { +-- Normal + +local pistonspec_normal_down = { + offname = "mesecons_pistons:piston_up_normal_off", + onname = "mesecons_pistons:piston_up_normal_on", + dir = {x = 0, y = 1, z = 0}, + pusher = "mesecons_pistons:piston_up_pusher_normal" +} + +-- offstate +minetest.register_node("mesecons_pistons:piston_up_normal_off", { tiles = {"jeija_piston_side.png", "jeija_piston_tb.png", "jeija_piston_tb.png", "jeija_piston_tb.png", "jeija_piston_tb.png", "jeija_piston_tb.png"}, - groups = {cracky=3, mesecon=2}, - after_destruct = destruct, - on_timer = timer, + groups = {cracky = 3, not_in_creative_inventory = 1}, + paramtype2 = "facedir", + drop = {"mesecons_pistons:piston_normal_off"}, + mesecons_piston = pistonspec_normal_down, mesecons = {effector={ - action_change = update - }}, - drop = "mesecons_pistons:piston_normal", + action_on = piston_on, + }} }) -minetest.register_node("mesecons_pistons:piston_up_sticky", { - tiles = {"jeija_piston_sticky_side.png", "jeija_piston_tb.png", "jeija_piston_tb.png", "jeija_piston_tb.png", "jeija_piston_tb.png", "jeija_piston_tb.png"}, - groups = {cracky=3, mesecon=2}, - after_destruct = destruct, - on_timer = timer, - is_sticky_piston = true, +-- onstate +minetest.register_node("mesecons_pistons:piston_up_normal_on", { + drawtype = "nodebox", + tiles = {"jeija_piston_tb.png"}, + groups = {cracky = 3, not_in_creative_inventory = 1}, + paramtype = "light", + paramtype2 = "facedir", + drop = {"mesecons_pistons:piston_normal_off"}, + after_dig_node = piston_remove_pusher, + node_box = piston_up_on_box, + selection_box = piston_up_on_box, + mesecons_piston = pistonspec_normal_down, mesecons = {effector={ - action_change = update - }}, - drop = "mesecons_pistons:piston_sticky", + action_off = piston_off, + }} }) +-- pusher minetest.register_node("mesecons_pistons:piston_up_pusher_normal", { drawtype = "nodebox", tiles = {"jeija_piston_pusher_normal.png"}, paramtype = "light", + paramtype2 = "facedir", diggable = false, - selection_box = { - type = "fixed", - fixed = { - {-0.2, -0.5, -0.2, 0.2, 0.3, 0.2}, - {-0.5, 0.3, -0.5, 0.5, 0.5, 0.5}, - }, - }, - node_box = { - type = "fixed", - fixed = { - {-0.2, -0.5, -0.2, 0.2, 0.3, 0.2}, - {-0.5, 0.3, -0.5, 0.5, 0.5, 0.5}, - }, - }, + corresponding_piston = "mesecons_pistons:piston_up_normal_on", + selection_box = piston_up_pusher_box, + node_box = piston_up_pusher_box, }) + + +-- Sticky + + +local pistonspec_sticky_up = { + offname = "mesecons_pistons:piston_up_sticky_off", + onname = "mesecons_pistons:piston_up_sticky_on", + dir = {x = 0, y = 1, z = 0}, + pusher = "mesecons_pistons:piston_up_pusher_sticky", + sticky = true +} + +-- offstate +minetest.register_node("mesecons_pistons:piston_up_sticky_off", { + tiles = {"jeija_piston_sticky_side.png", "jeija_piston_tb.png", "jeija_piston_tb.png", "jeija_piston_tb.png", "jeija_piston_tb.png", "jeija_piston_tb.png"}, + groups = {cracky = 3, not_in_creative_inventory = 1}, + paramtype2 = "facedir", + drop = {"mesecons_pistons:piston_sticky_off"}, + mesecons_piston = pistonspec_sticky_up, + mesecons = {effector={ + action_on = piston_on, + }} +}) + +-- onstate +minetest.register_node("mesecons_pistons:piston_up_sticky_on", { + drawtype = "nodebox", + tiles = {"jeija_piston_tb.png"}, + groups = {cracky = 3, not_in_creative_inventory = 1}, + paramtype = "light", + paramtype2 = "facedir", + drop = {"mesecons_pistons:piston_normal_off"}, + after_dig_node = piston_remove_pusher, + node_box = piston_up_on_box, + selection_box = piston_up_on_box, + mesecons_piston = pistonspec_sticky_up, + mesecons = {effector={ + action_off = piston_off, + }} +}) + +-- pusher minetest.register_node("mesecons_pistons:piston_up_pusher_sticky", { drawtype = "nodebox", tiles = { @@ -344,71 +354,133 @@ minetest.register_node("mesecons_pistons:piston_up_pusher_sticky", { "jeija_piston_pusher_normal.png" }, paramtype = "light", + paramtype2 = "facedir", diggable = false, - selection_box = { - type = "fixed", - fixed = { - {-0.2, -0.5, -0.2, 0.2, 0.3, 0.2}, - {-0.5, 0.3, -0.5, 0.5, 0.5, 0.5}, - }, - }, - node_box = { - type = "fixed", - fixed = { - {-0.2, -0.5, -0.2, 0.2, 0.3, 0.2}, - {-0.5, 0.3, -0.5, 0.5, 0.5, 0.5}, - }, - }, + corresponding_piston = "mesecons_pistons:piston_up_sticky_on", + selection_box = piston_up_pusher_box, + node_box = piston_up_pusher_box, }) -mesecon:register_mvps_stopper("mesecons_pistons:piston_up_pusher_normal") -mesecon:register_mvps_stopper("mesecons_pistons:piston_up_pusher_sticky") +-- +-- +-- DOWN +-- +-- + +local piston_down_pusher_box = { + type = "fixed", + fixed = { + {-2/16, -.5, -2/16, 2/16, .5 + pt, 2/16}, + {-.5 , -.5, -.5 , .5 , -.5 + pt, .5}, + } +} + +local piston_down_on_box = { + type = "fixed", + fixed = { + {-.5, -.5+pt, -.5 , .5, .5, .5} + } +} + ---down pistons -minetest.register_node("mesecons_pistons:piston_down_normal", { + +-- Normal + +local pistonspec_normal_down = { + offname = "mesecons_pistons:piston_down_normal_off", + onname = "mesecons_pistons:piston_down_normal_on", + dir = {x = 0, y = -1, z = 0}, + pusher = "mesecons_pistons:piston_down_pusher_normal", +} + +-- offstate +minetest.register_node("mesecons_pistons:piston_down_normal_off", { tiles = {"jeija_piston_tb.png", "jeija_piston_side.png", "jeija_piston_tb.png", "jeija_piston_tb.png", "jeija_piston_tb.png", "jeija_piston_tb.png"}, - groups = {cracky=3, mesecon=2}, - after_destruct = destruct, - on_timer = timer, + groups = {cracky = 3, not_in_creative_inventory = 1}, + paramtype2 = "facedir", + drop = {"mesecons_pistons:piston_normal_off"}, + mesecons_piston = pistonspec_normal_down, mesecons = {effector={ - action_change = update - }}, - drop = "mesecons_pistons:piston_normal", + action_on = piston_on, + }} }) -minetest.register_node("mesecons_pistons:piston_down_sticky", { - tiles = {"jeija_piston_tb.png", "jeija_piston_sticky_side.png", "jeija_piston_tb.png", "jeija_piston_tb.png", "jeija_piston_tb.png", "jeija_piston_tb.png"}, - groups = {cracky=3, mesecon=2}, - after_destruct = destruct, - on_timer = timer, - is_sticky_piston = true, +-- onstate +minetest.register_node("mesecons_pistons:piston_down_normal_on", { + drawtype = "nodebox", + tiles = {"jeija_piston_tb.png"}, + groups = {cracky = 3, not_in_creative_inventory = 1}, + paramtype = "light", + paramtype2 = "facedir", + drop = {"mesecons_pistons:piston_normal_off"}, + after_dig_node = piston_remove_pusher, + node_box = piston_down_on_box, + selection_box = piston_down_on_box, + mesecons_piston = pistonspec_normal_down, mesecons = {effector={ - action_change = update - }}, - drop = "mesecons_pistons:piston_sticky", + action_off = piston_off, + }} }) +-- pusher minetest.register_node("mesecons_pistons:piston_down_pusher_normal", { drawtype = "nodebox", - tiles = {"jeija_piston_pusher_normal.png"}, + tiles = { + "jeija_piston_pusher_sticky.png", + "jeija_piston_pusher_normal.png", + "jeija_piston_pusher_normal.png", + "jeija_piston_pusher_normal.png", + "jeija_piston_pusher_normal.png", + "jeija_piston_pusher_normal.png" + }, paramtype = "light", + paramtype2 = "facedir", diggable = false, - selection_box = { - type = "fixed", - fixed = { - {-0.2, -0.3, -0.2, 0.2, 0.5, 0.2}, - {-0.5, -0.5, -0.5, 0.5, -0.3, 0.5}, - }, - }, - node_box = { - type = "fixed", - fixed = { - {-0.2, -0.3, -0.2, 0.2, 0.5, 0.2}, - {-0.5, -0.5, -0.5, 0.5, -0.3, 0.5}, - }, - }, + corresponding_piston = "mesecons_pistons:piston_down_normal_on", + selection_box = piston_down_pusher_box, + node_box = piston_down_pusher_box, }) +-- Sticky + +local pistonspec_sticky_down = { + onname = "mesecons_pistons:piston_down_sticky_on", + offname = "mesecons_pistons:piston_down_sticky_off", + dir = {x = 0, y = -1, z = 0}, + pusher = "mesecons_pistons:piston_down_pusher_sticky", + sticky = true +} + +-- offstate +minetest.register_node("mesecons_pistons:piston_down_sticky_off", { + tiles = {"jeija_piston_tb.png", "jeija_piston_sticky_side.png", "jeija_piston_tb.png", "jeija_piston_tb.png", "jeija_piston_tb.png", "jeija_piston_tb.png"}, + groups = {cracky = 3, not_in_creative_inventory = 1}, + paramtype2 = "facedir", + drop = {"mesecons_pistons:piston_sticky_off"}, + mesecons_piston = pistonspec_sticky_down, + mesecons = {effector={ + action_on = piston_on, + }} +}) + +-- onstate +minetest.register_node("mesecons_pistons:piston_down_sticky_on", { + drawtype = "nodebox", + tiles = {"jeija_piston_tb.png"}, + groups = {cracky = 3, not_in_creative_inventory = 1}, + paramtype = "light", + paramtype2 = "facedir", + drop = {"mesecons_pistons:piston_sticky_off"}, + after_dig_node = piston_remove_pusher, + node_box = piston_down_on_box, + selection_box = piston_down_on_box, + mesecons_piston = pistonspec_sticky_down, + mesecons = {effector={ + action_off = piston_off, + }} +}) + +-- pusher minetest.register_node("mesecons_pistons:piston_down_pusher_sticky", { drawtype = "nodebox", tiles = { @@ -420,25 +492,78 @@ minetest.register_node("mesecons_pistons:piston_down_pusher_sticky", { "jeija_piston_pusher_normal.png" }, paramtype = "light", + paramtype2 = "facedir", diggable = false, - selection_box = { - type = "fixed", - fixed = { - {-0.2, -0.3, -0.2, 0.2, 0.5, 0.2}, - {-0.5, -0.5, -0.5, 0.5, -0.3, 0.5}, - }, - }, - node_box = { - type = "fixed", - fixed = { - {-0.2, -0.3, -0.2, 0.2, 0.5, 0.2}, - {-0.5, -0.5, -0.5, 0.5, -0.3, 0.5}, - }, - }, + corresponding_piston = "mesecons_pistons:piston_down_sticky_on", + selection_box = piston_down_pusher_box, + node_box = piston_down_pusher_box, }) -mesecon:register_mvps_stopper("mesecons_pistons:piston_down_pusher_normal") -mesecon:register_mvps_stopper("mesecons_pistons:piston_down_pusher_sticky") + +-- Register pushers as stoppers if they would be seperated from the piston +local piston_pusher_get_stopper = function (node, dir, stack, stackid) + if (stack[stackid + 1] + and stack[stackid + 1].node.name == minetest.registered_nodes[node.name].corresponding_piston + and stack[stackid + 1].node.param2 == node.param2) + or (stack[stackid - 1] + and stack[stackid - 1].node.name == minetest.registered_nodes[node.name].corresponding_piston + and stack[stackid - 1].node.param2 == node.param2) then + return false + end + return true +end + +local piston_pusher_up_down_get_stopper = function (node, dir, stack, stackid) + if (stack[stackid + 1] + and stack[stackid + 1].node.name == minetest.registered_nodes[node.name].corresponding_piston) + or (stack[stackid - 1] + and stack[stackid - 1].node.name == minetest.registered_nodes[node.name].corresponding_piston) then + return false + end + return true +end + +mesecon:register_mvps_stopper("mesecons_pistons:piston_pusher_normal", piston_pusher_get_stopper) +mesecon:register_mvps_stopper("mesecons_pistons:piston_pusher_sticky", piston_pusher_get_stopper) + +mesecon:register_mvps_stopper("mesecons_pistons:piston_up_pusher_normal", piston_pusher_up_down_get_stopper) +mesecon:register_mvps_stopper("mesecons_pistons:piston_up_pusher_sticky", piston_pusher_up_down_get_stopper) + +mesecon:register_mvps_stopper("mesecons_pistons:piston_down_pusher_normal", piston_pusher_up_down_get_stopper) +mesecon:register_mvps_stopper("mesecons_pistons:piston_down_pusher_sticky", piston_pusher_up_down_get_stopper) + + +-- Register pistons as stoppers if they would be seperated from the stopper +local piston_up_down_get_stopper = function (node, dir, stack, stackid) + if (stack[stackid + 1] + and stack[stackid + 1].node.name == minetest.registered_nodes[node.name].mesecons_piston.pusher) + or (stack[stackid - 1] + and stack[stackid - 1].node.name == minetest.registered_nodes[node.name].mesecons_piston.pusher) then + return false + end + return true +end + +local piston_get_stopper = function (node, dir, stack, stackid) + if (stack[stackid + 1] + and stack[stackid + 1].node.name == minetest.registered_nodes[node.name].mesecons_piston.pusher + and stack[stackid + 1].node.param2 == node.param2) + or (stack[stackid - 1] + and stack[stackid - 1].node.name == minetest.registered_nodes[node.name].mesecons_piston.pusher + and stack[stackid + 1].node.param2 == node.param2) then + return false + end + return true +end + +mesecon:register_mvps_stopper("mesecons_pistons:piston_normal_on", piston_get_stopper) +mesecon:register_mvps_stopper("mesecons_pistons:piston_sticky_on", piston_pusher_get_stopper) + +mesecon:register_mvps_stopper("mesecons_pistons:piston_normal_on", piston_up_down_get_stopper) +mesecon:register_mvps_stopper("mesecons_pistons:piston_sticky_on", piston_up_down_get_stopper) + +mesecon:register_mvps_stopper("mesecons_pistons:piston_normal_on", piston_up_down_get_stopper) +mesecon:register_mvps_stopper("mesecons_pistons:piston_sticky_on", piston_up_down_get_stopper) --craft recipes minetest.register_craft({ -- cgit v1.2.3 From d3b77b5be33b7103b5fe3fc07246c903b02b2d90 Mon Sep 17 00:00:00 2001 From: Jeija Date: Thu, 27 Dec 2012 12:03:05 +0100 Subject: Compatibility with old pistons --- mesecons_pistons/init.lua | 19 +++++++++---------- 1 file changed, 9 insertions(+), 10 deletions(-) (limited to 'mesecons_pistons') diff --git a/mesecons_pistons/init.lua b/mesecons_pistons/init.lua index 75547d2..828b466 100644 --- a/mesecons_pistons/init.lua +++ b/mesecons_pistons/init.lua @@ -1,8 +1,3 @@ --- --- --- --- - -- Get mesecon rules of pistons piston_rules = {{x=0, y=0, z=1}, --everything apart from z- (pusher side) @@ -44,8 +39,12 @@ local piston_remove_pusher = function (pos, node) dir = piston_get_direction(pistonspec.dir, node) local pusherpos = mesecon:addPosRule(pos, dir) - minetest.env:remove_node(pusherpos) - nodeupdate(pusherpos) + local pushername = minetest.env:get_node(pusherpos).name + + if pushername == pistonspec.pusher then --make sure there actually is a pusher (for compatibility reasons mainly) + minetest.env:remove_node(pusherpos) + nodeupdate(pusherpos) + end end local piston_on = function (pos, node) @@ -252,7 +251,7 @@ local piston_up_on_box = { -- Normal -local pistonspec_normal_down = { +local pistonspec_normal_up = { offname = "mesecons_pistons:piston_up_normal_off", onname = "mesecons_pistons:piston_up_normal_on", dir = {x = 0, y = 1, z = 0}, @@ -265,7 +264,7 @@ minetest.register_node("mesecons_pistons:piston_up_normal_off", { groups = {cracky = 3, not_in_creative_inventory = 1}, paramtype2 = "facedir", drop = {"mesecons_pistons:piston_normal_off"}, - mesecons_piston = pistonspec_normal_down, + mesecons_piston = pistonspec_normal_up, mesecons = {effector={ action_on = piston_on, }} @@ -282,7 +281,7 @@ minetest.register_node("mesecons_pistons:piston_up_normal_on", { after_dig_node = piston_remove_pusher, node_box = piston_up_on_box, selection_box = piston_up_on_box, - mesecons_piston = pistonspec_normal_down, + mesecons_piston = pistonspec_normal_up, mesecons = {effector={ action_off = piston_off, }} -- cgit v1.2.3 From cdd9a93da9c8ed5e89993bc225647dbce71f96f4 Mon Sep 17 00:00:00 2001 From: Vanessa Ezekowitz Date: Thu, 27 Dec 2012 12:13:40 -0500 Subject: revamped textures for all pistons, tweaked thickness of piston pusher --- mesecons_pistons/init.lua | 177 ++++++++++++++++++++++++++++++++++++---------- 1 file changed, 138 insertions(+), 39 deletions(-) (limited to 'mesecons_pistons') diff --git a/mesecons_pistons/init.lua b/mesecons_pistons/init.lua index 828b466..ab04026 100644 --- a/mesecons_pistons/init.lua +++ b/mesecons_pistons/init.lua @@ -92,7 +92,7 @@ end -- Horizontal pistons -local pt = 2/16 -- pusher thickness +local pt = 3/16 -- pusher thickness local piston_pusher_box = { type = "fixed", @@ -124,7 +124,14 @@ local pistonspec_normal = { -- offstate minetest.register_node("mesecons_pistons:piston_normal_off", { description = "Piston", - tiles = {"jeija_piston_tb.png", "jeija_piston_tb.png", "jeija_piston_tb.png", "jeija_piston_tb.png", "jeija_piston_tb.png", "jeija_piston_side.png"}, + tiles = { + "mesecons_piston_top.png", + "mesecons_piston_bottom.png", + "mesecons_piston_left.png", + "mesecons_piston_right.png", + "mesecons_piston_back.png", + "mesecons_piston_pusher_front.png" + }, groups = {cracky = 3}, paramtype2 = "facedir", after_place_node = piston_orientate, @@ -138,7 +145,14 @@ minetest.register_node("mesecons_pistons:piston_normal_off", { -- onstate minetest.register_node("mesecons_pistons:piston_normal_on", { drawtype = "nodebox", - tiles = {"jeija_piston_tb.png", "jeija_piston_tb.png", "jeija_piston_tb.png", "jeija_piston_tb.png", "jeija_piston_tb.png", "jeija_piston_tb.png"}, + tiles = { + "mesecons_piston_top.png", + "mesecons_piston_bottom.png", + "mesecons_piston_left.png", + "mesecons_piston_right.png", + "mesecons_piston_back.png", + "mesecons_piston_on_front.png" + }, groups = {cracky = 3, not_in_creative_inventory = 1}, paramtype = "light", paramtype2 = "facedir", @@ -156,7 +170,14 @@ minetest.register_node("mesecons_pistons:piston_normal_on", { -- pusher minetest.register_node("mesecons_pistons:piston_pusher_normal", { drawtype = "nodebox", - tiles = {"jeija_piston_pusher_normal.png"}, + tiles = { + "mesecons_piston_pusher_top.png", + "mesecons_piston_pusher_bottom.png", + "mesecons_piston_pusher_left.png", + "mesecons_piston_pusher_right.png", + "mesecons_piston_pusher_back.png", + "mesecons_piston_pusher_front.png" + }, paramtype = "light", paramtype2 = "facedir", diggable = false, @@ -180,7 +201,14 @@ local pistonspec_sticky = { -- offstate minetest.register_node("mesecons_pistons:piston_sticky_off", { description = "Sticky Piston", - tiles = {"jeija_piston_tb.png", "jeija_piston_tb.png", "jeija_piston_tb.png", "jeija_piston_tb.png", "jeija_piston_tb.png", "jeija_piston_sticky_side.png"}, + tiles = { + "mesecons_piston_top.png", + "mesecons_piston_bottom.png", + "mesecons_piston_left.png", + "mesecons_piston_right.png", + "mesecons_piston_back.png", + "mesecons_piston_pusher_front_sticky.png" + }, groups = {cracky = 3}, paramtype2 = "facedir", after_place_node = piston_orientate, @@ -194,7 +222,14 @@ minetest.register_node("mesecons_pistons:piston_sticky_off", { -- onstate minetest.register_node("mesecons_pistons:piston_sticky_on", { drawtype = "nodebox", - tiles = {"jeija_piston_tb.png", "jeija_piston_tb.png", "jeija_piston_tb.png", "jeija_piston_tb.png", "jeija_piston_tb.png", "jeija_piston_tb.png"}, + tiles = { + "mesecons_piston_top.png", + "mesecons_piston_bottom.png", + "mesecons_piston_left.png", + "mesecons_piston_right.png", + "mesecons_piston_back.png", + "mesecons_piston_on_front.png" + }, groups = {cracky = 3, not_in_creative_inventory = 1}, paramtype = "light", paramtype2 = "facedir", @@ -213,12 +248,12 @@ minetest.register_node("mesecons_pistons:piston_sticky_on", { minetest.register_node("mesecons_pistons:piston_pusher_sticky", { drawtype = "nodebox", tiles = { - "jeija_piston_pusher_normal.png", - "jeija_piston_pusher_normal.png", - "jeija_piston_pusher_normal.png", - "jeija_piston_pusher_normal.png", - "jeija_piston_pusher_normal.png", - "jeija_piston_pusher_sticky.png" + "mesecons_piston_pusher_top.png", + "mesecons_piston_pusher_bottom.png", + "mesecons_piston_pusher_left.png", + "mesecons_piston_pusher_right.png", + "mesecons_piston_pusher_back.png", + "mesecons_piston_pusher_front_sticky.png" }, paramtype = "light", paramtype2 = "facedir", @@ -260,7 +295,14 @@ local pistonspec_normal_up = { -- offstate minetest.register_node("mesecons_pistons:piston_up_normal_off", { - tiles = {"jeija_piston_side.png", "jeija_piston_tb.png", "jeija_piston_tb.png", "jeija_piston_tb.png", "jeija_piston_tb.png", "jeija_piston_tb.png"}, + tiles = { + "mesecons_piston_pusher_front.png", + "mesecons_piston_back.png", + "mesecons_piston_left.png^[transformR270", + "mesecons_piston_right.png^[transformR90", + "mesecons_piston_bottom.png", + "mesecons_piston_top.png^[transformR180", + }, groups = {cracky = 3, not_in_creative_inventory = 1}, paramtype2 = "facedir", drop = {"mesecons_pistons:piston_normal_off"}, @@ -273,7 +315,14 @@ minetest.register_node("mesecons_pistons:piston_up_normal_off", { -- onstate minetest.register_node("mesecons_pistons:piston_up_normal_on", { drawtype = "nodebox", - tiles = {"jeija_piston_tb.png"}, + tiles = { + "mesecons_piston_on_front.png", + "mesecons_piston_back.png", + "mesecons_piston_left.png^[transformR270", + "mesecons_piston_right.png^[transformR90", + "mesecons_piston_bottom.png", + "mesecons_piston_top.png^[transformR180", + }, groups = {cracky = 3, not_in_creative_inventory = 1}, paramtype = "light", paramtype2 = "facedir", @@ -290,7 +339,14 @@ minetest.register_node("mesecons_pistons:piston_up_normal_on", { -- pusher minetest.register_node("mesecons_pistons:piston_up_pusher_normal", { drawtype = "nodebox", - tiles = {"jeija_piston_pusher_normal.png"}, + tiles = { + "mesecons_piston_pusher_front.png", + "mesecons_piston_pusher_back.png", + "mesecons_piston_pusher_left.png^[transformR270", + "mesecons_piston_pusher_right.png^[transformR90", + "mesecons_piston_pusher_bottom.png", + "mesecons_piston_pusher_top.png^[transformR180", + }, paramtype = "light", paramtype2 = "facedir", diggable = false, @@ -314,7 +370,15 @@ local pistonspec_sticky_up = { -- offstate minetest.register_node("mesecons_pistons:piston_up_sticky_off", { - tiles = {"jeija_piston_sticky_side.png", "jeija_piston_tb.png", "jeija_piston_tb.png", "jeija_piston_tb.png", "jeija_piston_tb.png", "jeija_piston_tb.png"}, + tiles = { + "mesecons_piston_pusher_front_sticky.png", + "mesecons_piston_back.png", + "mesecons_piston_left.png^[transformR270", + "mesecons_piston_right.png^[transformR90", + "mesecons_piston_bottom.png", + "mesecons_piston_top.png^[transformR180", + "mesecons_piston_tb.png" + }, groups = {cracky = 3, not_in_creative_inventory = 1}, paramtype2 = "facedir", drop = {"mesecons_pistons:piston_sticky_off"}, @@ -327,7 +391,14 @@ minetest.register_node("mesecons_pistons:piston_up_sticky_off", { -- onstate minetest.register_node("mesecons_pistons:piston_up_sticky_on", { drawtype = "nodebox", - tiles = {"jeija_piston_tb.png"}, + tiles = { + "mesecons_piston_on_front.png", + "mesecons_piston_back.png", + "mesecons_piston_left.png^[transformR270", + "mesecons_piston_right.png^[transformR90", + "mesecons_piston_bottom.png", + "mesecons_piston_top.png^[transformR180", + }, groups = {cracky = 3, not_in_creative_inventory = 1}, paramtype = "light", paramtype2 = "facedir", @@ -345,12 +416,12 @@ minetest.register_node("mesecons_pistons:piston_up_sticky_on", { minetest.register_node("mesecons_pistons:piston_up_pusher_sticky", { drawtype = "nodebox", tiles = { - "jeija_piston_pusher_sticky.png", - "jeija_piston_pusher_normal.png", - "jeija_piston_pusher_normal.png", - "jeija_piston_pusher_normal.png", - "jeija_piston_pusher_normal.png", - "jeija_piston_pusher_normal.png" + "mesecons_piston_pusher_front_sticky.png", + "mesecons_piston_pusher_back.png", + "mesecons_piston_pusher_left.png^[transformR270", + "mesecons_piston_pusher_right.png^[transformR90", + "mesecons_piston_pusher_bottom.png", + "mesecons_piston_pusher_top.png^[transformR180", }, paramtype = "light", paramtype2 = "facedir", @@ -394,7 +465,14 @@ local pistonspec_normal_down = { -- offstate minetest.register_node("mesecons_pistons:piston_down_normal_off", { - tiles = {"jeija_piston_tb.png", "jeija_piston_side.png", "jeija_piston_tb.png", "jeija_piston_tb.png", "jeija_piston_tb.png", "jeija_piston_tb.png"}, + tiles = { + "mesecons_piston_back.png", + "mesecons_piston_pusher_front.png", + "mesecons_piston_left.png^[transformR90", + "mesecons_piston_right.png^[transformR270", + "mesecons_piston_bottom.png^[transformR180", + "mesecons_piston_top.png", + }, groups = {cracky = 3, not_in_creative_inventory = 1}, paramtype2 = "facedir", drop = {"mesecons_pistons:piston_normal_off"}, @@ -407,7 +485,14 @@ minetest.register_node("mesecons_pistons:piston_down_normal_off", { -- onstate minetest.register_node("mesecons_pistons:piston_down_normal_on", { drawtype = "nodebox", - tiles = {"jeija_piston_tb.png"}, + tiles = { + "mesecons_piston_back.png", + "mesecons_piston_on_front.png", + "mesecons_piston_left.png^[transformR90", + "mesecons_piston_right.png^[transformR270", + "mesecons_piston_bottom.png^[transformR180", + "mesecons_piston_top.png", + }, groups = {cracky = 3, not_in_creative_inventory = 1}, paramtype = "light", paramtype2 = "facedir", @@ -425,12 +510,12 @@ minetest.register_node("mesecons_pistons:piston_down_normal_on", { minetest.register_node("mesecons_pistons:piston_down_pusher_normal", { drawtype = "nodebox", tiles = { - "jeija_piston_pusher_sticky.png", - "jeija_piston_pusher_normal.png", - "jeija_piston_pusher_normal.png", - "jeija_piston_pusher_normal.png", - "jeija_piston_pusher_normal.png", - "jeija_piston_pusher_normal.png" + "mesecons_piston_pusher_back.png", + "mesecons_piston_pusher_front.png", + "mesecons_piston_pusher_left.png^[transformR90", + "mesecons_piston_pusher_right.png^[transformR270", + "mesecons_piston_pusher_bottom.png^[transformR180", + "mesecons_piston_pusher_top.png", }, paramtype = "light", paramtype2 = "facedir", @@ -452,7 +537,14 @@ local pistonspec_sticky_down = { -- offstate minetest.register_node("mesecons_pistons:piston_down_sticky_off", { - tiles = {"jeija_piston_tb.png", "jeija_piston_sticky_side.png", "jeija_piston_tb.png", "jeija_piston_tb.png", "jeija_piston_tb.png", "jeija_piston_tb.png"}, + tiles = { + "mesecons_piston_back.png", + "mesecons_piston_pusher_front_sticky.png", + "mesecons_piston_left.png^[transformR90", + "mesecons_piston_right.png^[transformR270", + "mesecons_piston_bottom.png^[transformR180", + "mesecons_piston_top.png", + }, groups = {cracky = 3, not_in_creative_inventory = 1}, paramtype2 = "facedir", drop = {"mesecons_pistons:piston_sticky_off"}, @@ -465,7 +557,14 @@ minetest.register_node("mesecons_pistons:piston_down_sticky_off", { -- onstate minetest.register_node("mesecons_pistons:piston_down_sticky_on", { drawtype = "nodebox", - tiles = {"jeija_piston_tb.png"}, + tiles = { + "mesecons_piston_back.png", + "mesecons_piston_on_front.png", + "mesecons_piston_left.png^[transformR90", + "mesecons_piston_right.png^[transformR270", + "mesecons_piston_bottom.png^[transformR180", + "mesecons_piston_top.png", + }, groups = {cracky = 3, not_in_creative_inventory = 1}, paramtype = "light", paramtype2 = "facedir", @@ -483,12 +582,12 @@ minetest.register_node("mesecons_pistons:piston_down_sticky_on", { minetest.register_node("mesecons_pistons:piston_down_pusher_sticky", { drawtype = "nodebox", tiles = { - "jeija_piston_pusher_normal.png", - "jeija_piston_pusher_sticky.png", - "jeija_piston_pusher_normal.png", - "jeija_piston_pusher_normal.png", - "jeija_piston_pusher_normal.png", - "jeija_piston_pusher_normal.png" + "mesecons_piston_pusher_back.png", + "mesecons_piston_pusher_front_sticky.png", + "mesecons_piston_pusher_left.png^[transformR90", + "mesecons_piston_pusher_right.png^[transformR270", + "mesecons_piston_pusher_bottom.png^[transformR180", + "mesecons_piston_pusher_top.png", }, paramtype = "light", paramtype2 = "facedir", -- cgit v1.2.3 From 2a8bd68c41663c023d7d9c4baf06e65f16a8fd72 Mon Sep 17 00:00:00 2001 From: Jeija Date: Thu, 27 Dec 2012 19:14:54 +0100 Subject: Fix very rare piston bug (needs testing) --- mesecons_pistons/init.lua | 27 ++++++++++++++++----------- 1 file changed, 16 insertions(+), 11 deletions(-) (limited to 'mesecons_pistons') diff --git a/mesecons_pistons/init.lua b/mesecons_pistons/init.lua index ab04026..576c03a 100644 --- a/mesecons_pistons/init.lua +++ b/mesecons_pistons/init.lua @@ -643,13 +643,18 @@ local piston_up_down_get_stopper = function (node, dir, stack, stackid) end local piston_get_stopper = function (node, dir, stack, stackid) - if (stack[stackid + 1] - and stack[stackid + 1].node.name == minetest.registered_nodes[node.name].mesecons_piston.pusher - and stack[stackid + 1].node.param2 == node.param2) - or (stack[stackid - 1] - and stack[stackid - 1].node.name == minetest.registered_nodes[node.name].mesecons_piston.pusher - and stack[stackid + 1].node.param2 == node.param2) then - return false + pistonspec = minetest.registered_nodes[node.name].mesecons_piston + dir = piston_get_direction(pistonspec.dir, node) + local pusherpos = mesecon:addPosRule(stack[stackid].pos, dir) + local pushernode = minetest.env:get_node(pusherpos) + + if minetest.registered_nodes[node.name].mesecons_piston.pusher == pushernode.name then + for _, s in ipairs(stack) do + if mesecon:cmpPos(s.pos, pusherpos) -- pusher is also to be pushed + and s.node.param2 == node.param2 then + return false + end + end end return true end @@ -657,11 +662,11 @@ end mesecon:register_mvps_stopper("mesecons_pistons:piston_normal_on", piston_get_stopper) mesecon:register_mvps_stopper("mesecons_pistons:piston_sticky_on", piston_pusher_get_stopper) -mesecon:register_mvps_stopper("mesecons_pistons:piston_normal_on", piston_up_down_get_stopper) -mesecon:register_mvps_stopper("mesecons_pistons:piston_sticky_on", piston_up_down_get_stopper) +mesecon:register_mvps_stopper("mesecons_pistons:piston_up_normal_on", piston_up_down_get_stopper) +mesecon:register_mvps_stopper("mesecons_pistons:piston_up_sticky_on", piston_up_down_get_stopper) -mesecon:register_mvps_stopper("mesecons_pistons:piston_normal_on", piston_up_down_get_stopper) -mesecon:register_mvps_stopper("mesecons_pistons:piston_sticky_on", piston_up_down_get_stopper) +mesecon:register_mvps_stopper("mesecons_pistons:piston_down_normal_on", piston_up_down_get_stopper) +mesecon:register_mvps_stopper("mesecons_pistons:piston_down_sticky_on", piston_up_down_get_stopper) --craft recipes minetest.register_craft({ -- cgit v1.2.3 From c062411fa18100c6aa0645d6b7663be42268602d Mon Sep 17 00:00:00 2001 From: Jeija Date: Thu, 27 Dec 2012 20:38:12 +0100 Subject: Fix another two piston-related bugs --- mesecons_pistons/init.lua | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'mesecons_pistons') diff --git a/mesecons_pistons/init.lua b/mesecons_pistons/init.lua index 576c03a..a51e16e 100644 --- a/mesecons_pistons/init.lua +++ b/mesecons_pistons/init.lua @@ -660,7 +660,7 @@ local piston_get_stopper = function (node, dir, stack, stackid) end mesecon:register_mvps_stopper("mesecons_pistons:piston_normal_on", piston_get_stopper) -mesecon:register_mvps_stopper("mesecons_pistons:piston_sticky_on", piston_pusher_get_stopper) +mesecon:register_mvps_stopper("mesecons_pistons:piston_sticky_on", piston_get_stopper) mesecon:register_mvps_stopper("mesecons_pistons:piston_up_normal_on", piston_up_down_get_stopper) mesecon:register_mvps_stopper("mesecons_pistons:piston_up_sticky_on", piston_up_down_get_stopper) -- cgit v1.2.3