summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJeija <norrepli@gmail.com>2012-12-26 22:55:01 +0100
committerJeija <norrepli@gmail.com>2012-12-26 22:56:31 +0100
commit5a88a9715fc822d02d06b7f03a8bbf0e7c9ad7ba (patch)
treece0118dab235f53b9444ce02da2bb7a1d2c8ed84
parentd91e0b66cb7971ba54d071a0955f17d1a7b0162e (diff)
downloadmesecons-5a88a9715fc822d02d06b7f03a8bbf0e7c9ad7ba.tar
mesecons-5a88a9715fc822d02d06b7f03a8bbf0e7c9ad7ba.tar.gz
mesecons-5a88a9715fc822d02d06b7f03a8bbf0e7c9ad7ba.tar.bz2
mesecons-5a88a9715fc822d02d06b7f03a8bbf0e7c9ad7ba.tar.xz
mesecons-5a88a9715fc822d02d06b7f03a8bbf0e7c9ad7ba.zip
Re-write pistons from scratch, propably fixes a lot of bugs and doesn't
cause too many new ones.
-rw-r--r--.mesecons_pistons/depends.txt3
-rw-r--r--.mesecons_pistons/init.lua459
2 files changed, 0 insertions, 462 deletions
diff --git a/.mesecons_pistons/depends.txt b/.mesecons_pistons/depends.txt
deleted file mode 100644
index a596cf8..0000000
--- a/.mesecons_pistons/depends.txt
+++ /dev/null
@@ -1,3 +0,0 @@
-mesecons
-mesecons_materials
-mesecons_mvps
diff --git a/.mesecons_pistons/init.lua b/.mesecons_pistons/init.lua
deleted file mode 100644
index 0a3838d..0000000
--- a/.mesecons_pistons/init.lua
+++ /dev/null
@@ -1,459 +0,0 @@
---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)
- 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
- end
-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)
- else
- mesecon:piston_pull(pos)
- 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 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
-
- --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)
- 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
-
- --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
- 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}
- end
-end
-
---horizontal pistons
-minetest.register_node("mesecons_pistons:piston_normal", {
- 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},
- 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,
- mesecons = {effector={
- action_change = update,
- 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},
- 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,
- mesecons = {effector={
- action_change = update,
- rules = piston_get_rules
- }}
-})
-
-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},
- },
- },
-})
-
-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"
- },
- 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},
- },
- },
-})
-
-mesecon:register_mvps_stopper("mesecons_pistons:piston_pusher_normal")
-mesecon:register_mvps_stopper("mesecons_pistons:piston_pusher_sticky")
-
--- up pistons
-minetest.register_node("mesecons_pistons:piston_up_normal", {
- 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,
- mesecons = {effector={
- action_change = update
- }},
- drop = "mesecons_pistons:piston_normal",
-})
-
-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,
- mesecons = {effector={
- action_change = update
- }},
- drop = "mesecons_pistons:piston_sticky",
-})
-
-minetest.register_node("mesecons_pistons:piston_up_pusher_normal", {
- drawtype = "nodebox",
- tiles = {"jeija_piston_pusher_normal.png"},
- paramtype = "light",
- 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},
- },
- },
-})
-
-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"
- },
- paramtype = "light",
- 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},
- },
- },
-})
-
-mesecon:register_mvps_stopper("mesecons_pistons:piston_up_pusher_normal")
-mesecon:register_mvps_stopper("mesecons_pistons:piston_up_pusher_sticky")
-
---down pistons
-minetest.register_node("mesecons_pistons:piston_down_normal", {
- 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,
- mesecons = {effector={
- action_change = update
- }},
- drop = "mesecons_pistons:piston_normal",
-})
-
-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,
- mesecons = {effector={
- action_change = update
- }},
- drop = "mesecons_pistons:piston_sticky",
-})
-
-minetest.register_node("mesecons_pistons:piston_down_pusher_normal", {
- drawtype = "nodebox",
- tiles = {"jeija_piston_pusher_normal.png"},
- paramtype = "light",
- 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},
- },
- },
-})
-
-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"
- },
- paramtype = "light",
- 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},
- },
- },
-})
-
-mesecon:register_mvps_stopper("mesecons_pistons:piston_down_pusher_normal")
-mesecon:register_mvps_stopper("mesecons_pistons:piston_down_pusher_sticky")
-
---craft recipes
-minetest.register_craft({
- output = '"mesecons_pistons:piston_normal" 2',
- recipe = {
- {"default:wood", "default:wood", "default:wood"},
- {"default:cobble", "default:steel_ingot", "default:cobble"},
- {"default:cobble", "group:mesecon_conductor_craftable", "default:cobble"},
- }
-})
-
-minetest.register_craft({
- output = "mesecons_pistons:piston_sticky",
- recipe = {
- {"mesecons_materials:glue"},
- {"mesecons_pistons:piston_normal"},
- }
-})