From d3b1c43ee1e679555929be7c12a191ce35d8fd6f Mon Sep 17 00:00:00 2001
From: Kyle <kyle.kylina@gmail.com>
Date: Fri, 7 Sep 2012 13:18:53 -0700
Subject: crossing wire moved into mesecons

---
 mesecons_extrawires/depends.txt |   1 +
 mesecons_extrawires/init.lua    | 138 ++++++++++++++++++++++++++++++++++++++++
 2 files changed, 139 insertions(+)
 create mode 100644 mesecons_extrawires/depends.txt
 create mode 100644 mesecons_extrawires/init.lua

(limited to 'mesecons_extrawires')

diff --git a/mesecons_extrawires/depends.txt b/mesecons_extrawires/depends.txt
new file mode 100644
index 0000000..acaa924
--- /dev/null
+++ b/mesecons_extrawires/depends.txt
@@ -0,0 +1 @@
+mesecons
diff --git a/mesecons_extrawires/init.lua b/mesecons_extrawires/init.lua
new file mode 100644
index 0000000..9ceb9ac
--- /dev/null
+++ b/mesecons_extrawires/init.lua
@@ -0,0 +1,138 @@
+for x=-1, 1 do for z=-1, 1 do
+	rules = {}
+	nodename = "mesecons_extrawires:crossing"
+	if x == -1 then
+		nodename = nodename .. "A"
+		table.insert(rules, {x=-1, y=0, z=0})
+	end
+	if z == 1 then
+		nodename = nodename .. "B"
+		table.insert(rules, {x=0, y=0, z=1})
+	end
+	if x == 1 then
+		nodename = nodename .. "C"
+		table.insert(rules, {x=1, y=0, z=0})
+	end
+	if z == -1 then
+		nodename = nodename .. "D"
+		table.insert(rules, {x=0, y=0, z=-1})
+	end
+	mesecon:add_rules(nodename, rules)
+	mesecon:register_effector(nodename, nodename, all_rules)
+	if nodename == "mesecons_extrawires:crossing" then
+		description = "Insulated Crossing"
+		groups = {dig_immediate = 3, mesecon = 3, mesecon_conductor_craftable=1}
+	else
+		description = "You hacker you!"
+		drop = "mesecons_extrawires:crossing"
+		groups = {dig_immediate = 3, not_in_creative_inventory=1, mesecon = 3}
+		mesecon:add_receptor_node(nodename, rules)
+	end
+	minetest.register_node(nodename, {
+		drawtype = "nodebox",
+		description = description,
+		tiles = {
+			"jeija_insulated_wire_sides.png",
+		},
+		paramtype = "light",
+		walkable = false,
+		stack_max = 99,
+		selection_box = {
+			type = "fixed",
+			fixed = { -16/32-0.0001, -18/32, -16/32-0.001, 16/32+0.001, -5/32, 16/32+0.001 },
+		},
+		node_box = {
+			type = "fixed",
+			fixed = {
+				{ -16/32-0.001, -17/32, -3/32, 16/32+0.001, -13/32, 3/32 },
+				{ -3/32, -17/32, -16/32-0.001, 3/32, -13/32, -6/32 },
+				{ -3/32, -13/32, -9/32, 3/32, -6/32, -6/32 },
+				{ -3/32, -9/32, -9/32, 3/32, -6/32, 9/32 },
+				{ -3/32, -13/32, 6/32, 3/32, -6/32, 9/32 },
+				{ -3/32, -17/32, 6/32, 3/32, -13/32, 16/32+0.001 },
+			},
+		},
+		groups = groups,
+		drop = drop,
+	})
+end end
+
+function receptor_set(pos, rules, on)
+	if on then
+		mesecon:receptor_on(pos, rules)
+	else
+		mesecon:receptor_off(pos, rules)
+	end
+end
+
+function update_plus(pos, name)
+	vL = {
+		a = string.find(name, "A")~=nil,
+		b = string.find(name, "B")~=nil,
+		c = string.find(name, "C")~=nil,
+		d = string.find(name, "D")~=nil,
+	}
+	rL = yc_get_real_portstates(pos)
+	L = {
+		a = rL.c and not vL.c,
+		b = rL.d and not vL.d,
+		c = rL.a and not vL.a,
+		d = rL.b and not vL.b,
+	}
+	newname = "mesecons_extrawires:crossing"
+	if L.a then newname = newname .. "A" end
+	if L.b then newname = newname .. "B" end
+	if L.c then newname = newname .. "C" end
+	if L.d then newname = newname .. "D" end
+	if newname ~= name then
+		minetest.env:add_node(pos, {name = newname})
+	end
+	if L.a ~= vL.a then
+		receptor_set(pos, mesecon:get_rules("mesecons_extrawires:crossingA"), L.a)
+		if not L.a and yc_get_real_portstates(pos).a then
+			--catch signal changing direction while on
+			update_plus(pos, newname)
+		end
+	end
+	if L.b ~= vL.b then
+		receptor_set(pos, mesecon:get_rules("mesecons_extrawires:crossingB"), L.b)
+		if not L.b and yc_get_real_portstates(pos).b then
+			update_plus(pos, newname)
+		end
+	end
+	if L.c ~= vL.c then
+		receptor_set(pos, mesecon:get_rules("mesecons_extrawires:crossingC"), L.c)
+		if not L.c and yc_get_real_portstates(pos).c then
+			update_plus(pos, newname)
+		end
+	end
+	if L.d ~= vL.d then
+		receptor_set(pos, mesecon:get_rules("mesecons_extrawires:crossingD"), L.d)
+		if not L.c and yc_get_real_portstates(pos).d then
+			update_plus(pos, newname)
+		end
+	end
+end
+
+mesecon:register_on_signal_change(function(pos, node)
+	if string.find(node.name, "mesecons_extrawires:crossing")~=nil then
+		update_plus(pos, node.name)
+	end
+end)
+
+minetest.register_craft({
+	type = "shapeless",
+	output = "mesecons_extrawires:crossing",
+	recipe = {
+		"mesecons_insulated:insulated_off",
+		"mesecons_insulated:insulated_off",
+	},
+})
+
+minetest.register_craft({
+	type = "shapeless",
+	output = "mesecons_insulated:insulated_off 2",
+	recipe = {
+		"mesecons_extrawires:crossing",
+	},
+})
-- 
cgit v1.2.3