summaryrefslogtreecommitdiff
path: root/mesecons_torch
diff options
context:
space:
mode:
authorJeija <norrepli@gmail.com>2012-12-31 18:32:46 +0100
committerJeija <norrepli@gmail.com>2012-12-31 18:32:46 +0100
commitec07fc27d7ef76114fd977283c36a20afe26f13f (patch)
treee8eab0fd457abdd33adaebbd46c4cf77e2fefd1c /mesecons_torch
parent5921f6d46caa18310435046a22d5aa0f529998f0 (diff)
parent52ddd4bdc931a1f806ea581002b0f39ba83158bc (diff)
downloadmesecons-ec07fc27d7ef76114fd977283c36a20afe26f13f.tar
mesecons-ec07fc27d7ef76114fd977283c36a20afe26f13f.tar.gz
mesecons-ec07fc27d7ef76114fd977283c36a20afe26f13f.tar.bz2
mesecons-ec07fc27d7ef76114fd977283c36a20afe26f13f.tar.xz
mesecons-ec07fc27d7ef76114fd977283c36a20afe26f13f.zip
Merge branch 'nextgen'
Conflicts: mesecons/wires.lua
Diffstat (limited to 'mesecons_torch')
-rw-r--r--mesecons_torch/init.lua140
1 files changed, 65 insertions, 75 deletions
diff --git a/mesecons_torch/init.lua b/mesecons_torch/init.lua
index 8b9a59b..801220e 100644
--- a/mesecons_torch/init.lua
+++ b/mesecons_torch/init.lua
@@ -1,53 +1,54 @@
--MESECON TORCHES
-local torch_get_rules = function(node)
- local 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}}
- if node.param2 == 5 then
- rules=mesecon:rotate_rules_right(rules)
- elseif node.param2 == 2 then
- rules=mesecon:rotate_rules_right(mesecon:rotate_rules_right(rules)) --180 degrees
- elseif node.param2 == 4 then
- rules=mesecon:rotate_rules_left(rules)
- elseif node.param2 == 1 then
- rules=mesecon:rotate_rules_down(rules)
- elseif node.param2 == 0 then
- rules=mesecon:rotate_rules_up(rules)
+local rotate_torch_rules = function (rules, param2)
+ if param2 == 5 then
+ return mesecon:rotate_rules_right(rules)
+ elseif param2 == 2 then
+ return mesecon:rotate_rules_right(mesecon:rotate_rules_right(rules)) --180 degrees
+ elseif param2 == 4 then
+ return mesecon:rotate_rules_left(rules)
+ elseif param2 == 1 then
+ return mesecon:rotate_rules_down(rules)
+ elseif param2 == 0 then
+ return mesecon:rotate_rules_up(rules)
+ else
+ return rules
end
- return rules
+end
+
+local torch_get_output_rules = function(node)
+ local 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}}
+
+ return rotate_torch_rules(rules, node.param2)
end
local torch_get_input_rules = function(node)
- local rules = {x=0, y=0, z=0}
+ local rules = {{x = -2, y = 0, z = 0},
+ {x = -1, y = 1, z = 0}}
- if node.param2 == 4 then
- rules.z = -2
- elseif node.param2 == 2 then
- rules.x = -2
- elseif node.param2 == 5 then
- rules.z = 2
- elseif node.param2 == 3 then
- rules.x = 2
- elseif node.param2 == 1 then
- rules.y = 2
- elseif node.param2 == 0 then
- rules.y = -2
- end
- return rules
+ return rotate_torch_rules(rules, node.param2)
end
minetest.register_craft({
output = '"mesecons_torch:mesecon_torch_on" 4',
recipe = {
- {"group:mesecon_conductor_craftable"},
- {"default:stick"},
- }
+ {"group:mesecon_conductor_craftable"},
+ {"default:stick"},}
})
+local torch_selectionbox =
+{
+ type = "wallmounted",
+ wall_top = {-0.1, 0.5-0.6, -0.1, 0.1, 0.5, 0.1},
+ wall_bottom = {-0.1, -0.5, -0.1, 0.1, -0.5+0.6, 0.1},
+ wall_side = {-0.5, -0.1, -0.1, -0.5+0.6, 0.1, 0.1},
+}
+
minetest.register_node("mesecons_torch:mesecon_torch_off", {
drawtype = "torchlike",
tiles = {"jeija_torches_off.png", "jeija_torches_off_ceiling.png", "jeija_torches_off_side.png"},
@@ -55,19 +56,12 @@ minetest.register_node("mesecons_torch:mesecon_torch_off", {
paramtype = "light",
walkable = false,
paramtype2 = "wallmounted",
- selection_box = {
- type = "wallmounted",
- wall_top = {-0.1, 0.5-0.6, -0.1, 0.1, 0.5, 0.1},
- wall_bottom = {-0.1, -0.5, -0.1, 0.1, -0.5+0.6, 0.1},
- wall_side = {-0.5, -0.1, -0.1, -0.5+0.6, 0.1, 0.1},
- },
- legacy_wallmounted = true,
- groups = {dig_immediate=3,not_in_creative_inventory=1},
- drop = '"mesecons_torch:mesecon_torch_on" 1',
- description="Mesecon Torch",
+ selection_box = torch_selectionbox,
+ groups = {dig_immediate = 3, not_in_creative_inventory = 1},
+ drop = "mesecons_torch:mesecon_torch_on",
mesecons = {receptor = {
state = mesecon.state.off,
- rules = torch_get_rules
+ rules = torch_get_output_rules
}}
})
@@ -80,43 +74,39 @@ minetest.register_node("mesecons_torch:mesecon_torch_on", {
sunlight_propagates = true,
walkable = false,
paramtype2 = "wallmounted",
- selection_box = {
- type = "wallmounted",
- wall_top = {-0.1, 0.5-0.6, -0.1, 0.1, 0.5, 0.1},
- wall_bottom = {-0.1, -0.5, -0.1, 0.1, -0.5+0.6, 0.1},
- wall_side = {-0.5, -0.1, -0.1, -0.5+0.6, 0.1, 0.1},
- },
- legacy_wallmounted = true,
+ selection_box = torch_selectionbox,
groups = {dig_immediate=3},
light_source = LIGHT_MAX-5,
description="Mesecon Torch",
mesecons = {receptor = {
state = mesecon.state.on,
- rules = torch_get_rules
- }}
+ rules = torch_get_output_rules
+ }},
})
minetest.register_abm({
- nodenames = {"mesecons_torch:mesecon_torch_off","mesecons_torch:mesecon_torch_on"},
- interval = 1,
- chance = 1,
- action = function(pos, node, active_object_count, active_object_count_wider)
- local node = minetest.env:get_node(pos)
- local pa = torch_get_input_rules(node)
+ nodenames = {"mesecons_torch:mesecon_torch_off","mesecons_torch:mesecon_torch_on"},
+ interval = 1,
+ chance = 1,
+ action = function(pos, node)
+ local is_powered = false
+ for _, rule in ipairs(torch_get_input_rules(node)) do
+ local src = mesecon:addPosRule(pos, rule)
+ if mesecon:is_power_on(src) then
+ is_powered = true
+ end
+ end
- local postc = {x=pos.x-pa.x, y=pos.y-pa.y, z=pos.z-pa.z}
- if mesecon:is_power_on(postc) then
- if node.name ~= "mesecons_torch:mesecon_torch_off" then
- minetest.env:add_node(pos, {name="mesecons_torch:mesecon_torch_off",param2=node.param2})
- mesecon:receptor_off(pos, torch_get_rules(node))
- end
- else
- if node.name ~= "mesecons_torch:mesecon_torch_on" then
- minetest.env:add_node(pos, {name="mesecons_torch:mesecon_torch_on",param2=node.param2})
- mesecon:receptor_on(pos, torch_get_rules(node))
- end
- end
- end
+ if is_powered then
+ if node.name == "mesecons_torch:mesecon_torch_on" then
+ mesecon:swap_node(pos, "mesecons_torch:mesecon_torch_off")
+ mesecon:receptor_off(pos, torch_get_output_rules(node))
+ end
+ elseif node.name == "mesecons_torch:mesecon_torch_off" then
+ mesecon:swap_node(pos, "mesecons_torch:mesecon_torch_on")
+ mesecon:receptor_on(pos, torch_get_output_rules(node))
+ end
+ end
})
-- Param2 Table (Block Attached To)