summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--mesecons/internal.lua58
-rw-r--r--mesecons_blinkyplant/init.lua6
-rw-r--r--mesecons_lightstone/init.lua51
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