diff options
Diffstat (limited to 'mesecons_receiver')
-rw-r--r-- | mesecons_receiver/init.lua | 66 |
1 files changed, 31 insertions, 35 deletions
diff --git a/mesecons_receiver/init.lua b/mesecons_receiver/init.lua index e67b980..de2b535 100644 --- a/mesecons_receiver/init.lua +++ b/mesecons_receiver/init.lua @@ -1,10 +1,23 @@ rcvboxes = { { -3/16, -3/16 , -8/16 , 3/16, 3/16, -13/32 }, -- the smaller bump - { -5/32, -5/32 , -13/32 , 5/32, 5/32, -12/32 }, -- the receiver itself - { -3/32, -.5-1/32, -.5 , 3/32, 0 , -.5002+3/32 }, -- the vertical wire bit - { -3/32, -17/32 , -7/16+0.002 , 3/32, -13/32, 16/32+0.001 } -- the horizontal wire + { -1/32, -1/32 , -3/2 , 1/32, 1/32, -1/2 }, -- the wire through the block + { -2/32, -.5-1/32, -.5 , 2/32, 0 , -.5002+3/32 }, -- the vertical wire bit + { -2/32, -17/32 , -7/16+0.002 , 2/32, -14/32, 16/32+0.001 } -- the horizontal wire } +local receiver_get_rules = function (node) + local rules = { {x = 1, y = 0, z = 0}, + {x = -2, y = 0, z = 0}} + if node.param2 == 2 then + rules = mesecon:rotate_rules_left(rules) + elseif node.param2 == 3 then + rules = mesecon:rotate_rules_right(mesecon:rotate_rules_right(rules)) + elseif node.param2 == 0 then + rules = mesecon:rotate_rules_right(rules) + end + return rules +end + minetest.register_node("mesecons_receiver:receiver_on", { drawtype = "nodebox", tiles = { @@ -18,6 +31,7 @@ minetest.register_node("mesecons_receiver:receiver_on", { paramtype = "light", paramtype2 = "facedir", sunlight_propagates = true, + walkable = false, selection_box = { type = "fixed", fixed = { -3/16, -8/16, -8/16, 3/16, 3/16, 8/16 } @@ -26,9 +40,13 @@ minetest.register_node("mesecons_receiver:receiver_on", { type = "fixed", fixed = rcvboxes }, - groups = {dig_immediate = 3, mesecon = 3, not_in_creative_inventory = 1}, + groups = {dig_immediate = 3, not_in_creative_inventory = 1}, drop = "mesecons:wire_00000000_off", - + mesecons = {conductor = { + state = mesecon.state.on, + rules = receiver_get_rules, + offstate = "mesecons_receiver:receiver_off" + }} }) minetest.register_node("mesecons_receiver:receiver_off", { @@ -45,6 +63,7 @@ minetest.register_node("mesecons_receiver:receiver_off", { paramtype = "light", paramtype2 = "facedir", sunlight_propagates = true, + walkable = false, selection_box = { type = "fixed", fixed = { -3/16, -8/16, -8/16, 3/16, 3/16, 8/16 } @@ -53,8 +72,13 @@ minetest.register_node("mesecons_receiver:receiver_off", { type = "fixed", fixed = rcvboxes }, - groups = {dig_immediate = 3, mesecon = 3, not_in_creative_inventory = 1}, + groups = {dig_immediate = 3, not_in_creative_inventory = 1}, drop = "mesecons:wire_00000000_off", + mesecons = {conductor = { + state = mesecon.state.off, + rules = receiver_get_rules, + onstate = "mesecons_receiver:receiver_on" + }} }) mesecon:add_rules("receiver_pos", {{x = 2, y = 0, z = 0}}) @@ -65,34 +89,6 @@ mesecon:add_rules("receiver_pos_all", { {x = 0, y = 0, z = 2}, {x = 0, y = 0, z =-2}}) -mesecon:add_rules("mesecon_receiver", { -{x = 1, y = 0, z = 0}, -{x = -2, y = 0, z = 0},}) - -mesecon:add_rules("mesecon_receiver_all", { -{x = 1, y = 0, z = 0}, -{x =-2, y = 0, z = 0}, -{x =-1, y = 0, z = 0}, -{x = 2, y = 0, z = 0}, -{x = 0, y = 0, z = 1}, -{x = 0, y = 0, z =-2}, -{x = 1, y = 0, z =-1}, -{x =-2, y = 0, z = 2},}) - -function receiver_get_rules(param2) - local rules = mesecon:get_rules("mesecon_receiver") - if param2 == 2 then - rules = mesecon:rotate_rules_left(rules) - elseif param2 == 3 then - rules = mesecon:rotate_rules_right(mesecon:rotate_rules_right(rules)) - elseif param2 == 0 then - rules = mesecon:rotate_rules_right(rules) - end - return rules -end - -mesecon:register_conductor("mesecons_receiver:receiver_on", "mesecons_receiver:receiver_off", mesecon:get_rules("mesecon_receiver_all"), receiver_get_rules) - function mesecon:receiver_get_pos_from_rcpt(pos, param2) local rules = mesecon:get_rules("receiver_pos") if param2 == nil then param2 = minetest.env:get_node(pos).param2 end @@ -119,7 +115,7 @@ function mesecon:receiver_place(rcpt_pos) minetest.env:dig_node(pos) if mesecon:is_power_on(rcpt_pos) then minetest.env:add_node(pos, {name = "mesecons_receiver:receiver_on", param2 = node.param2}) - mesecon:receptor_on(pos, receiver_get_rules(node.param2)) + mesecon:receptor_on(pos, receiver_get_rules(node)) else minetest.env:add_node(pos, {name = "mesecons_receiver:receiver_off", param2 = node.param2}) end |