From 8578fd89c859162bda64af48826b7c1ae1c9e744 Mon Sep 17 00:00:00 2001
From: Jeija <norrepli@gmail.com>
Date: Sat, 8 Dec 2012 19:02:34 +0100
Subject: Port lightstones (as reference for effectors) + blinky plant to the
 new nodedef system

---
 mesecons/internal.lua         | 58 ++++++++++++++++++++++++++++---------------
 mesecons_blinkyplant/init.lua |  6 +++++
 mesecons_lightstone/init.lua  | 51 ++++++++++++++++++-------------------
 3 files changed, 70 insertions(+), 45 deletions(-)

diff --git a/mesecons/internal.lua b/mesecons/internal.lua
index c4bef7c..ce72d38 100644
--- a/mesecons/internal.lua
+++ b/mesecons/internal.lua
@@ -2,7 +2,7 @@
 
 --Receptors
 function mesecon:is_receptor_node(nodename)
-	if minetest.registered_nodes[nodename]
+	if  minetest.registered_nodes[nodename]
 	and minetest.registered_nodes[nodename].mesecons
 	and minetest.registered_nodes[nodename].mesecons.receptor
 	and minetest.registered_nodes[nodename].mesecons.receptor.state == mesecon.state.on then
@@ -43,7 +43,7 @@ function mesecon:receptor_get_rules(node)
 			return rules
 		end
 	end
-	for i, receptor in ipairs(mesecon.receptors) do --TODO
+	for _, receptor in ipairs(mesecon.receptors) do --TODO
 		if receptor.onstate == node.name or receptor.offstate == node.name then
 			if receptor.get_rules ~= nil then
 				return receptor.get_rules(node.param2)
@@ -59,38 +59,38 @@ end
 
 -- Effectors
 function mesecon:is_effector_on(nodename)
-	for i, effector in ipairs(mesecon.effectors) do --TODO
-		if effector.onstate == nodename then
-			return true
-		end
-	end
 	if  minetest.registered_nodes[nodename]
 	and minetest.registered_nodes[nodename].mesecons
 	and minetest.registered_nodes[nodename].mesecons.effector
 	and minetest.registered_nodes[nodename].mesecons.effector.state == mesecon.state.on then
 		return true
 	end
-	return false
-end
-
-function mesecon:is_effector_off(nodename)
 	for i, effector in ipairs(mesecon.effectors) do --TODO
-		if effector.offstate == nodename then
+		if effector.onstate == nodename then
 			return true
 		end
 	end
+	return false
+end
+
+function mesecon:is_effector_off(nodename)
 	if  minetest.registered_nodes[nodename]
 	and minetest.registered_nodes[nodename].mesecons
 	and minetest.registered_nodes[nodename].mesecons.effector
 	and minetest.registered_nodes[nodename].mesecons.effector.state == mesecon.state.off then
 		return true
 	end
+	for i, effector in ipairs(mesecon.effectors) do --TODO
+		if effector.offstate == nodename then
+			return true
+		end
+	end
 	return false
 end
 
 function mesecon:is_effector(nodename)
-	if minetest.registered_nodes[nodename]
-	and  minetest.registered_nodes[nodename].mesecons
+	if  minetest.registered_nodes[nodename]
+	and minetest.registered_nodes[nodename].mesecons
 	and minetest.registered_nodes[nodename].mesecons.effector then
 		return true
 	end
@@ -125,22 +125,40 @@ end
 
 --Signals
 
-function mesecon:activate(pos) --TODO
+function mesecon:activate(pos)
 	local node = minetest.env:get_node(pos)
-	for i, action in ipairs(mesecon.actions_on) do
+	if  minetest.registered_nodes[node.name]
+	and minetest.registered_nodes[node.name].mesecons
+	and minetest.registered_nodes[node.name].mesecons.effector
+	and minetest.registered_nodes[node.name].mesecons.effector.action_on then
+		minetest.registered_nodes[node.name].mesecons.effector.action_on (pos, node)
+	end
+	for _, action in ipairs(mesecon.actions_on) do --TODO
 		action(pos, node) 
 	end
 end
 
 function mesecon:deactivate(pos) --TODO
-	local node = minetest.env:get_node(pos)	
-	for i, action in ipairs(mesecon.actions_off) do
+	local node = minetest.env:get_node(pos)
+	if  minetest.registered_nodes[node.name]
+	and minetest.registered_nodes[node.name].mesecons
+	and minetest.registered_nodes[node.name].mesecons.effector
+	and minetest.registered_nodes[node.name].mesecons.effector.action_off then
+		minetest.registered_nodes[node.name].mesecons.effector.action_off(pos, node)
+	end
+	for _, action in ipairs(mesecon.actions_off) do
 		action(pos, node) 
 	end
 end
 
 function mesecon:changesignal(pos) --TODO
-	local node = minetest.env:get_node(pos)	
+	local node = minetest.env:get_node(pos)
+	if  minetest.registered_nodes[nodename]
+	and minetest.registered_nodes[nodename].mesecons
+	and minetest.registered_nodes[nodename].mesecons.effector
+	and minetest.registered_nodes[nodename].mesecons.effector.action_change then
+		minetest.registered_nodes[nodename].mesecons.action_change(pos, node)
+	end
 	for i, action in ipairs(mesecon.actions_change) do
 		action(pos, node) 
 	end
@@ -221,7 +239,7 @@ function mesecon:is_conductor_off(nodename)
 end
 
 function mesecon:is_conductor(nodename)
-	--TODO: simplify
+	--TODO
 	return mesecon:is_conductor_on(nodename) or mesecon:is_conductor_off(nodename)
 end
 
diff --git a/mesecons_blinkyplant/init.lua b/mesecons_blinkyplant/init.lua
index 145467e..9571359 100644
--- a/mesecons_blinkyplant/init.lua
+++ b/mesecons_blinkyplant/init.lua
@@ -13,6 +13,9 @@ minetest.register_node("mesecons_blinkyplant:blinky_plant_off", {
 		type = "fixed",
 		fixed = {-0.1, -0.5, -0.1, 0.1, -0.5+0.6, 0.1},
 	},
+	mesecons = {receptor = {
+		state = mesecon.state.off
+	}}
 })
 
 minetest.register_node("mesecons_blinkyplant:blinky_plant_on", {
@@ -30,6 +33,9 @@ minetest.register_node("mesecons_blinkyplant:blinky_plant_on", {
 		type = "fixed",
 		fixed = {-0.1, -0.5, -0.1, 0.1, -0.5+0.6, 0.1},
 	},
+	mesecons = {receptor = {
+		state = mesecon.state.on
+	}}
 })
 
 minetest.register_craft({
diff --git a/mesecons_lightstone/init.lua b/mesecons_lightstone/init.lua
index fd8b5bf..9edd99d 100644
--- a/mesecons_lightstone/init.lua
+++ b/mesecons_lightstone/init.lua
@@ -1,30 +1,32 @@
 function mesecon:lightstone_add(name, base_item, texture_off, texture_on)
-    minetest.register_node("mesecons_lightstone:lightstone_" .. name .. "_off", {
-	    tiles = {texture_off},
-	    inventory_image = minetest.inventorycube(texture_off),
-	    groups = {cracky=2, mesecon_effector_off = 1, mesecon = 2},
-    	    description=name.." Lightstone",
+	minetest.register_node("mesecons_lightstone:lightstone_" .. name .. "_off", {
+	tiles = {texture_off},
+	inventory_image = minetest.inventorycube(texture_off),
+	groups = {cracky=2, mesecon_effector_off = 1, mesecon = 2},
+	description=name.." Lightstone",
+	mesecons = {effector = {
+		state = mesecon.state.off,
+		action_on = function (pos, node)
+			minetest.env:add_node(pos, {name="mesecons_lightstone:lightstone_" .. name .. "_on"})
+			mesecon:receptor_on(pos)
+		end
+	}}
     })
-    minetest.register_node("mesecons_lightstone:lightstone_" .. name .. "_on", {
-	    tiles = {texture_on},
-	    inventory_image = minetest.inventorycube(texture_on),
-	    groups = {cracky=2,not_in_creative_inventory=1, mesecon = 2},
-	    drop = "node mesecons_lightstone:lightstone_" .. name .. "_off 1",
-	    light_source = LIGHT_MAX-2,
-    	    description=name.." Lightstone",
+	minetest.register_node("mesecons_lightstone:lightstone_" .. name .. "_on", {
+	tiles = {texture_on},
+	inventory_image = minetest.inventorycube(texture_on),
+	groups = {cracky=2,not_in_creative_inventory=1, mesecon = 2},
+	drop = "node mesecons_lightstone:lightstone_" .. name .. "_off 1",
+	light_source = LIGHT_MAX-2,
+	mesecons = {effector = {
+		state = mesecon.state.on,
+		action_off = function (pos, node)
+			minetest.env:add_node(pos, {name="mesecons_lightstone:lightstone_" .. name .. "_off"})
+			mesecon:receptor_off(pos)
+		end
+	}}
     })
-    assert(loadstring('mesecon:register_on_signal_on(function(pos, node) \n \
-                    if node.name == "mesecons_lightstone:lightstone_' .. name .. '_off" then \n \
-                        minetest.env:add_node(pos, {name="mesecons_lightstone:lightstone_' .. name .. '_on"}) \n \
-                        nodeupdate(pos) \n \
-                    end \n \
-                end)'))()
-    assert(loadstring('mesecon:register_on_signal_off(function(pos, node) \n \
-                    if node.name == "mesecons_lightstone:lightstone_' .. name .. '_on" then \n \
-                        minetest.env:add_node(pos, {name="mesecons_lightstone:lightstone_' .. name .. '_off"}) \n \
-                        nodeupdate(pos) \n \
-                    end \n \
-                end)'))()
+
     minetest.register_craft({
 	    output = "node mesecons_lightstone:lightstone_" .. name .. "_off 1",
 	    recipe = {
@@ -33,7 +35,6 @@ function mesecon:lightstone_add(name, base_item, texture_off, texture_on)
 		    {'','group:mesecon_conductor_craftable',''},
 	    }
     })
-    mesecon:register_effector("mesecons_lightstone:lightstone_" .. name .. "_on", "mesecons_lightstone:lightstone_" .. name .. "_off")
 end
 
 
-- 
cgit v1.2.3