123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264 |
- local rcvboxes = {
- { -3/16, -3/16, -8/16 , 3/16, 3/16 , -13/32 }, -- the smaller bump
- { -1/32, -1/32, -3/2 , 1/32, 1/32 , -1/2 }, -- the wire through the block
- { -2/32, -1/2 , -.5 , 2/32, 0 , -.5002+3/32 }, -- the vertical wire bit
- { -2/32, -1/2 , -7/16+0.002 , 2/32, -14/32, 16/32+0.001 } -- the horizontal wire
- }
- local down_rcvboxes = {
- {-6/16, -8/16, -6/16, 6/16, -7/16, 6/16}, -- Top plate
- {-2/16, -6/16, -2/16, 2/16, -7/16, 2/16}, -- Bump
- {-1/16, -8/16, -1/16, 1/16, -24/16, 1/16}, -- Wire through the block
- {-1/16, -8/16, 6/16, 1/16, -7/16, 8/16}, -- Plate extension (North)
- {-1/16, -8/16, -6/16, 1/16, -7/16, -8/16}, -- Plate extension (South)
- {-8/16, -8/16, 1/16, -6/16, -7/16, -1/16}, -- Plate extension (West)
- {6/16, -8/16, 1/16, 8/16, -7/16, -1/16}, -- Plate extension (East)
- }
- local up_rcvboxes = {
- {-6/16, -8/16, -6/16, 6/16, -7/16, 6/16}, -- Top plate
- {-2/16, -6/16, -2/16, 2/16, -7/16, 2/16}, -- Bump
- {-1/16, -6/16, -1/16, 1/16, 24/16, 1/16}, -- Wire through the block
- {-1/16, -8/16, 6/16, 1/16, -7/16, 8/16}, -- Plate extension (North)
- {-1/16, -8/16, -6/16, 1/16, -7/16, -8/16}, -- Plate extension (South)
- {-8/16, -8/16, 1/16, -6/16, -7/16, -1/16}, -- Plate extension (West)
- {6/16, -8/16, 1/16, 8/16, -7/16, -1/16}, -- Plate extension (East)
- }
- 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
- mesecon.register_node("mesecons_receiver:receiver", {
- drawtype = "nodebox",
- paramtype = "light",
- paramtype2 = "facedir",
- is_ground_content = false,
- sunlight_propagates = true,
- walkable = false,
- on_rotate = false,
- selection_box = {
- type = "fixed",
- fixed = { -3/16, -8/16, -8/16, 3/16, 3/16, 8/16 }
- },
- node_box = {
- type = "fixed",
- fixed = rcvboxes
- },
- groups = {dig_immediate = 3, not_in_creative_inventory = 1},
- drop = "mesecons:wire_00000000_off",
- sounds = default.node_sound_defaults(),
- }, {
- tiles = {
- "receiver_top_off.png",
- "receiver_bottom_off.png",
- "receiver_lr_off.png",
- "receiver_lr_off.png",
- "receiver_fb_off.png",
- "receiver_fb_off.png",
- },
- mesecons = {conductor = {
- state = mesecon.state.off,
- rules = receiver_get_rules,
- onstate = "mesecons_receiver:receiver_on"
- }}
- }, {
- tiles = {
- "receiver_top_on.png",
- "receiver_bottom_on.png",
- "receiver_lr_on.png",
- "receiver_lr_on.png",
- "receiver_fb_on.png",
- "receiver_fb_on.png",
- },
- mesecons = {conductor = {
- state = mesecon.state.on,
- rules = receiver_get_rules,
- offstate = "mesecons_receiver:receiver_off"
- }}
- })
- mesecon.register_node("mesecons_receiver:receiver_up", {
- drawtype = "nodebox",
- paramtype = "light",
- paramtype2 = "facedir",
- is_ground_content = false,
- sunlight_propagates = true,
- walkable = false,
- on_rotate = false,
- selection_box = {
- type = "fixed",
- fixed = up_rcvboxes
- },
- node_box = {
- type = "fixed",
- fixed = up_rcvboxes
- },
- groups = {dig_immediate = 3, not_in_creative_inventory = 1},
- drop = "mesecons:wire_00000000_off",
- sounds = default.node_sound_defaults(),
- }, {
- tiles = {"mesecons_wire_off.png"},
- mesecons = {conductor = {
- state = mesecon.state.off,
- rules = {{x=1, y=0, z=0},
- {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=2, z=0}},
- onstate = "mesecons_receiver:receiver_up_on"
- }}
- }, {
- tiles = {"mesecons_wire_on.png"},
- mesecons = {conductor = {
- state = mesecon.state.on,
- rules = {{x=1, y=0, z=0},
- {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=2, z=0}},
- offstate = "mesecons_receiver:receiver_up_off"
- }}
- })
- mesecon.register_node("mesecons_receiver:receiver_down", {
- drawtype = "nodebox",
- paramtype = "light",
- paramtype2 = "facedir",
- is_ground_content = false,
- sunlight_propagates = true,
- walkable = false,
- on_rotate = false,
- selection_box = {
- type = "fixed",
- fixed = down_rcvboxes
- },
- node_box = {
- type = "fixed",
- fixed = down_rcvboxes
- },
- groups = {dig_immediate = 3, not_in_creative_inventory = 1},
- drop = "mesecons:wire_00000000_off",
- sounds = default.node_sound_defaults(),
- }, {
- tiles = {"mesecons_wire_off.png"},
- mesecons = {conductor = {
- state = mesecon.state.off,
- rules = {{x=1,y=0, z=0},
- {x=-1,y=0, z=0},
- {x=0, y=0, z=1},
- {x=0, y=0, z=-1},
- {x=0, y=-2,z=0}},
- onstate = "mesecons_receiver:receiver_down_on"
- }}
- }, {
- tiles = {"mesecons_wire_on.png"},
- mesecons = {conductor = {
- state = mesecon.state.on,
- rules = {{x=1,y=0, z=0},
- {x=-1,y=0, z=0},
- {x=0, y=0, z=1},
- {x=0, y=0, z=-1},
- {x=0, y=-2,z=0}},
- offstate = "mesecons_receiver:receiver_down_off"
- }}
- })
- function mesecon.receiver_get_pos_from_rcpt(pos, param2)
- local rules = {{x = 2, y = 0, z = 0}}
- if param2 == nil then param2 = minetest.get_node(pos).param2 end
- local rcvtype = "mesecons_receiver:receiver_off"
- local dir = minetest.facedir_to_dir(param2)
- if dir.x == 1 then
- -- No action needed
- elseif dir.z == -1 then
- rules = mesecon.rotate_rules_left(rules)
- elseif dir.x == -1 then
- rules = mesecon.rotate_rules_right(mesecon.rotate_rules_right(rules))
- elseif dir.z == 1 then
- rules = mesecon.rotate_rules_right(rules)
- elseif dir.y == -1 then
- rules = mesecon.rotate_rules_up(rules)
- rcvtype = "mesecons_receiver:receiver_up_off"
- elseif dir.y == 1 then
- rules = mesecon.rotate_rules_down(rules)
- rcvtype = "mesecons_receiver:receiver_down_off"
- end
- local np = { x = pos.x + rules[1].x,
- y = pos.y + rules[1].y,
- z = pos.z + rules[1].z}
- return np, rcvtype
- end
- function mesecon.receiver_place(rcpt_pos)
- local node = minetest.get_node(rcpt_pos)
- local pos, rcvtype = mesecon.receiver_get_pos_from_rcpt(rcpt_pos, node.param2)
- local nn = minetest.get_node(pos)
- local param2 = minetest.dir_to_facedir(minetest.facedir_to_dir(node.param2))
- if string.find(nn.name, "mesecons:wire_") ~= nil then
- minetest.set_node(pos, {name = rcvtype, param2 = param2})
- mesecon.on_placenode(pos, nn)
- end
- end
- function mesecon.receiver_remove(rcpt_pos, dugnode)
- local pos = mesecon.receiver_get_pos_from_rcpt(rcpt_pos, dugnode.param2)
- local nn = minetest.get_node(pos)
- if string.find(nn.name, "mesecons_receiver:receiver_") ~= nil then
- local node = {name = "mesecons:wire_00000000_off"}
- minetest.set_node(pos, node)
- mesecon.on_placenode(pos, node)
- end
- end
- minetest.register_on_placenode(function (pos, node)
- if minetest.get_item_group(node.name, "mesecon_needs_receiver") == 1 then
- mesecon.receiver_place(pos)
- end
- end)
- minetest.register_on_dignode(function(pos, node)
- if minetest.get_item_group(node.name, "mesecon_needs_receiver") == 1 then
- mesecon.receiver_remove(pos, node)
- end
- end)
- minetest.register_on_placenode(function (pos, node)
- if string.find(node.name, "mesecons:wire_") ~= nil then
- local rules = { {x = 2, y = 0, z = 0},
- {x =-2, y = 0, z = 0},
- {x = 0, y = 0, z = 2},
- {x = 0, y = 0, z =-2},
- {x = 0, y = 2, z = 0},
- {x = 0, y = -2, z = 0}}
- local i = 1
- while rules[i] ~= nil do
- local np = { x = pos.x + rules[i].x,
- y = pos.y + rules[i].y,
- z = pos.z + rules[i].z}
- if minetest.get_item_group(minetest.get_node(np).name, "mesecon_needs_receiver") == 1 then
- mesecon.receiver_place(np)
- end
- i = i + 1
- end
- end
- end)
- function mesecon.buttonlike_onrotate(pos, node)
- minetest.after(0, mesecon.receiver_remove, pos, node)
- minetest.after(0, mesecon.receiver_place, pos)
- end
|