From b5cc933287b9dcd1d2e9b999398f93023e89fccc Mon Sep 17 00:00:00 2001
From: Jeija <jeija@mesecons.net>
Date: Sat, 22 Nov 2014 12:28:45 +0100
Subject: Pressure plates and the object detector will send power to vertical
 wires 2 nodes below them, allows to hide circuitry powered by them. Fixes
 #179 Rewrite pressure plates + vertical wires using mesecon.register_node.

---
 mesecons_extrawires/vertical.lua | 133 +++++++++++++++------------------------
 1 file changed, 51 insertions(+), 82 deletions(-)

(limited to 'mesecons_extrawires/vertical.lua')

diff --git a/mesecons_extrawires/vertical.lua b/mesecons_extrawires/vertical.lua
index 24e36e1..0f153b7 100644
--- a/mesecons_extrawires/vertical.lua
+++ b/mesecons_extrawires/vertical.lua
@@ -18,7 +18,7 @@ local bottom_box = {
 
 local vertical_rules = {
 	{x=0, y=1, z=0},
-	{x=0, y=-1, z=0},
+	{x=0, y=-1, z=0}
 }
 
 local top_rules = {
@@ -26,7 +26,7 @@ local top_rules = {
 	{x=-1,y=0, z=0},
 	{x=0,y=0, z=1},
 	{x=0,y=0, z=-1},
-	{x=0,y=-1, z=0},
+	{x=0,y=-1, z=0}
 }
 
 local bottom_rules = {
@@ -35,26 +35,31 @@ local bottom_rules = {
 	{x=0, y=0, z=1},
 	{x=0, y=0, z=-1},
 	{x=0, y=1, z=0},
+	{x=0, y=2, z=0} -- receive power from pressure plate / detector / ... 2 nodes above
 }
 
 local vertical_updatepos = function (pos)
 	local node = minetest.get_node(pos)
-	if minetest.registered_nodes[node.name] and minetest.registered_nodes[node.name].is_vertical_conductor then
+	if minetest.registered_nodes[node.name]
+	and minetest.registered_nodes[node.name].is_vertical_conductor then
 		local node_above = minetest.get_node(mesecon:addPosRule(pos, vertical_rules[1]))
 		local node_below = minetest.get_node(mesecon:addPosRule(pos, vertical_rules[2]))
 		local namestate = minetest.registered_nodes[node.name].vertical_conductor_state
 
-		local above = minetest.registered_nodes[node_above.name] and minetest.registered_nodes[node_above.name].is_vertical_conductor
-		local below = minetest.registered_nodes[node_below.name] and minetest.registered_nodes[node_below.name].is_vertical_conductor
+		local above = minetest.registered_nodes[node_above.name]
+			and minetest.registered_nodes[node_above.name].is_vertical_conductor
+		local below = minetest.registered_nodes[node_below.name]
+			and minetest.registered_nodes[node_below.name].is_vertical_conductor
 
+		local basename = "mesecons_extrawires:vertical_"
 		if above and below then -- above and below: vertical mesecon
-			minetest.add_node(pos, {name = "mesecons_extrawires:vertical_" .. namestate})
+			minetest.add_node(pos, {name = basename .. namestate})
 		elseif above and not below then -- above only: bottom
-			minetest.add_node(pos, {name = "mesecons_extrawires:vertical_bottom_" .. namestate})
+			minetest.add_node(pos, {name = basename .. "bottom_" .. namestate})
 		elseif not above and below then -- below only: top
-			minetest.add_node(pos, {name = "mesecons_extrawires:vertical_top_" .. namestate})
-		else -- no vertical wire above, no vertical wire below: use default wire
-			minetest.add_node(pos, {name = "mesecons_extrawires:vertical_" .. namestate})
+			minetest.add_node(pos, {name = basename .. "top_" .. namestate})
+		else -- no vertical wire above, no vertical wire below: use bottom
+			minetest.add_node(pos, {name = basename .. "bottom_" .. namestate})
 		end
 	end
 end
@@ -66,76 +71,42 @@ local vertical_update = function (pos, node)
 end
 
 -- Vertical wire
-minetest.register_node("mesecons_extrawires:vertical_on", {
+mesecon.register_node("mesecons_extrawires:vertical", {
 	description = "Vertical mesecon",
 	drawtype = "nodebox",
-	tiles = {"mesecons_wire_on.png"},
 	walkable = false,
 	paramtype = "light",
 	sunlight_propagates = true,
-	groups = {dig_immediate=3, not_in_creative_inventory=1},
 	selection_box = vertical_box,
 	node_box = vertical_box,
 	is_vertical_conductor = true,
-	vertical_conductor_state = "on",
-	mesecons = {conductor = {
-		state = mesecon.state.on,
-		offstate = "mesecons_extrawires:vertical_off",
-		rules = vertical_rules,
-	}},
 	drop = "mesecons_extrawires:vertical_off",
 	after_place_node = vertical_update,
-	after_dig_node = vertical_update,
-})
-
-minetest.register_node("mesecons_extrawires:vertical_off", {
-	description = "Vertical mesecon",
-	drawtype = "nodebox",
+	after_dig_node = vertical_update
+},{
 	tiles = {"mesecons_wire_off.png"},
-	walkable = false,
-	paramtype = "light",
-	sunlight_propagates = true,
 	groups = {dig_immediate=3},
-	selection_box = vertical_box,
-	node_box = vertical_box,
-	is_vertical_conductor = true,
 	vertical_conductor_state = "off",
 	mesecons = {conductor = {
 		state = mesecon.state.off,
 		onstate = "mesecons_extrawires:vertical_on",
 		rules = vertical_rules,
-	}},
-	after_place_node = vertical_update,
-	after_dig_node = vertical_update,
-})
-
--- Vertical wire top
-minetest.register_node("mesecons_extrawires:vertical_top_on", {
-	description = "Vertical mesecon",
-	drawtype = "nodebox",
+	}}
+},{
 	tiles = {"mesecons_wire_on.png"},
-	walkable = false,
-	paramtype = "light",
-	sunlight_propagates = true,
 	groups = {dig_immediate=3, not_in_creative_inventory=1},
-	selection_box = top_box,
-	node_box = top_box,
-	is_vertical_conductor = true,
 	vertical_conductor_state = "on",
 	mesecons = {conductor = {
 		state = mesecon.state.on,
-		offstate = "mesecons_extrawires:vertical_top_off",
-		rules = top_rules,
-	}},
-	drop = "mesecons_extrawires:vertical_off",
-	after_place_node = vertical_update,
-	after_dig_node = vertical_update,
+		offstate = "mesecons_extrawires:vertical_off",
+		rules = vertical_rules,
+	}}
 })
 
-minetest.register_node("mesecons_extrawires:vertical_top_off", {
+-- Vertical wire top
+mesecon.register_node("mesecons_extrawires:vertical_top", {
 	description = "Vertical mesecon",
 	drawtype = "nodebox",
-	tiles = {"mesecons_wire_off.png"},
 	walkable = false,
 	paramtype = "light",
 	sunlight_propagates = true,
@@ -143,43 +114,31 @@ minetest.register_node("mesecons_extrawires:vertical_top_off", {
 	selection_box = top_box,
 	node_box = top_box,
 	is_vertical_conductor = true,
+	drop = "mesecons_extrawires:vertical_off",
+	after_place_node = vertical_update,
+	after_dig_node = vertical_update
+},{
+	tiles = {"mesecons_wire_off.png"},
 	vertical_conductor_state = "off",
 	mesecons = {conductor = {
 		state = mesecon.state.off,
 		onstate = "mesecons_extrawires:vertical_top_on",
 		rules = top_rules,
-	}},
-	drop = "mesecons_extrawires:vertical_off",
-	after_place_node = vertical_update,
-	after_dig_node = vertical_update,
-})
-
--- Vertical wire bottom
-minetest.register_node("mesecons_extrawires:vertical_bottom_on", {
-	description = "Vertical mesecon",
-	drawtype = "nodebox",
+	}}
+},{
 	tiles = {"mesecons_wire_on.png"},
-	walkable = false,
-	paramtype = "light",
-	sunlight_propagates = true,
 	vertical_conductor_state = "on",
-	groups = {dig_immediate = 3, not_in_creative_inventory = 1},
-	selection_box = bottom_box,
-	node_box = bottom_box,
 	mesecons = {conductor = {
 		state = mesecon.state.on,
-		offstate = "mesecons_extrawires:vertical_bottom_off",
-		rules = bottom_rules,
-	}},
-	drop = "mesecons_extrawires:vertical_off",
-	after_place_node = vertical_update,
-	after_dig_node = vertical_update,
+		offstate = "mesecons_extrawires:vertical_top_off",
+		rules = top_rules,
+	}}
 })
 
-minetest.register_node("mesecons_extrawires:vertical_bottom_off", {
+-- Vertical wire bottom
+mesecon.register_node("mesecons_extrawires:vertical_bottom", {
 	description = "Vertical mesecon",
 	drawtype = "nodebox",
-	tiles = {"mesecons_wire_off.png"},
 	walkable = false,
 	paramtype = "light",
 	sunlight_propagates = true,
@@ -187,15 +146,25 @@ minetest.register_node("mesecons_extrawires:vertical_bottom_off", {
 	selection_box = bottom_box,
 	node_box = bottom_box,
 	is_vertical_conductor = true,
+	drop = "mesecons_extrawires:vertical_off",
+	after_place_node = vertical_update,
+	after_dig_node = vertical_update
+},{
+	tiles = {"mesecons_wire_off.png"},
 	vertical_conductor_state = "off",
 	mesecons = {conductor = {
 		state = mesecon.state.off,
 		onstate = "mesecons_extrawires:vertical_bottom_on",
 		rules = bottom_rules,
-	}},
-	drop = "mesecons_extrawires:vertical_off",
-	after_place_node = vertical_update,
-	after_dig_node = vertical_update,
+	}}
+},{
+	tiles = {"mesecons_wire_on.png"},
+	vertical_conductor_state = "on",
+	mesecons = {conductor = {
+		state = mesecon.state.on,
+		offstate = "mesecons_extrawires:vertical_bottom_off",
+		rules = bottom_rules,
+	}}
 })
 
 minetest.register_craft({
-- 
cgit v1.2.3