summaryrefslogtreecommitdiff
path: root/conductors.lua
diff options
context:
space:
mode:
authorcheapie <no-email-for-you@example.com>2019-05-27 18:28:00 -0500
committercheapie <no-email-for-you@example.com>2019-05-27 18:28:00 -0500
commit6e3f9d4c111bebfed6d1876a27a4980b979fb2ba (patch)
tree5a957acb7d8b653d190d0a4b9bfbada0207222ea /conductors.lua
parent0e61a770c99da669b9ad8bddfdb03adfe94c4c30 (diff)
downloaddigistuff-6e3f9d4c111bebfed6d1876a27a4980b979fb2ba.tar
digistuff-6e3f9d4c111bebfed6d1876a27a4980b979fb2ba.tar.gz
digistuff-6e3f9d4c111bebfed6d1876a27a4980b979fb2ba.tar.bz2
digistuff-6e3f9d4c111bebfed6d1876a27a4980b979fb2ba.tar.xz
digistuff-6e3f9d4c111bebfed6d1876a27a4980b979fb2ba.zip
Add receivers, insulated digilines, and vertical digilines
Diffstat (limited to 'conductors.lua')
-rw-r--r--conductors.lua455
1 files changed, 447 insertions, 8 deletions
diff --git a/conductors.lua b/conductors.lua
index 77229e2..dfc8793 100644
--- a/conductors.lua
+++ b/conductors.lua
@@ -1,3 +1,59 @@
+digistuff.remove_receiver = function(pos,node)
+ local dir = minetest.facedir_to_dir(node.param2)
+ local rpos = vector.add(pos,vector.multiply(dir,2))
+ local rnode = minetest.get_node(rpos)
+ if rnode.name == "digistuff:receiver" then
+ rnode.name = "digilines:wire_std_00000000"
+ minetest.remove_node(rpos)
+ minetest.place_node(rpos,rnode)
+ end
+end
+
+digistuff.place_receiver = function(pos)
+ local node = minetest.get_node(pos)
+ local dir = minetest.facedir_to_dir(node.param2)
+ if dir.y == 0 then
+ local nodebehind = minetest.get_node(vector.add(pos,dir))
+ if nodebehind.name == "digistuff:digimese" then return end
+ local rpos = vector.add(pos,vector.multiply(dir,2))
+ local rnode = minetest.get_node(rpos)
+ if string.find(rnode.name,"^digilines:wire_std_") then
+ minetest.remove_node(rpos)
+ local newrnode = {pos = rpos,name = "digistuff:receiver",param2 = node.param2,}
+ minetest.set_node(rpos,newrnode)
+ digilines.update_autoconnect(rpos)
+ end
+ end
+end
+
+local old_update_autoconnect = digilines.update_autoconnect
+
+digilines.update_autoconnect = function(pos,secondcall)
+ if not secondcall then
+ local node = minetest.get_node(pos)
+ if string.find(node.name,"^digilines:wire_std_") then
+ local checkdirs = {
+ {x = 1,y = 0,z = 0},
+ {x = -1,y = 0,z = 0},
+ {x = 0,y = 0,z = 1},
+ {x = 0,y = 0,z = -1},
+ }
+ local found = false
+ for _,i in ipairs(checkdirs) do
+ if not found then
+ local checkpos = vector.add(pos,vector.multiply(i,2))
+ local group = minetest.get_item_group(minetest.get_node(checkpos).name,"digiline_receiver")
+ if group and group > 0 then
+ digistuff.place_receiver(checkpos)
+ if minetest.get_node(pos).name == "digistuff:receiver" then found = true end
+ end
+ end
+ end
+ end
+ end
+ old_update_autoconnect(pos,secondcall)
+end
+
minetest.register_node("digistuff:digimese", {
description = "Digimese",
tiles = {"digistuff_digimese.png"},
@@ -22,14 +78,14 @@ minetest.register_node("digistuff:junctionbox", {
paramtype2 = "facedir",
groups = {cracky = 3},
is_ground_content = false,
- paramtype = "light",
- drawtype = "nodebox",
- node_box = {
- type = "fixed",
- fixed = {
- {-0.1,-0.15,0.35,0.1,0.15,0.5},
- }
- },
+ paramtype = "light",
+ drawtype = "nodebox",
+ node_box = {
+ type = "fixed",
+ fixed = {
+ {-0.1,-0.15,0.35,0.1,0.15,0.5},
+ }
+ },
sounds = default and default.node_sound_stone_defaults(),
digiline = {
receptor = {},
@@ -52,6 +108,330 @@ minetest.register_node("digistuff:junctionbox", {
},
})
+digistuff.receiver_get_rules = function(node)
+ local rules = {
+ {x = 0,y = 0,z = -2},
+ {x = 0,y = 0,z = 1},
+ }
+ return digistuff.rotate_rules(rules,minetest.facedir_to_dir(node.param2))
+end
+
+minetest.register_node("digistuff:receiver", {
+ description = "Digilines Receiver (you hacker you!)",
+ tiles = {"digistuff_digiline_full.png"},
+ paramtype = "light",
+ groups = {dig_immediate = 3,not_in_creative_inventory = 1,},
+ drop = "digilines:wire_std_00000000",
+ is_ground_content = false,
+ paramtype = "light",
+ paramtype2 = "facedir",
+ drawtype = "nodebox",
+ node_box = {
+ type = "fixed",
+ fixed = {
+ {-0.05,-0.05,-1.49,0.05,0.05,-0.5},
+ {-0.2,-0.2,-0.5,0.2,0.2,-0.4},
+ {-0.0625,-0.5,-0.5,0.0625,-0.2,-0.4},
+ {-0.0625,-0.5,-0.4,0.0625,-0.4375,0.5},
+ },
+ },
+ digiline = {
+ receptor = {},
+ wire = {
+ rules = digistuff.receiver_get_rules,
+ },
+ },
+})
+
+digistuff.vertical_autoconnect = function(pos)
+ local node = minetest.get_node(pos)
+ if minetest.get_item_group(node.name,"vertical_digiline") == 0 then return end
+ local uppos = vector.add(pos,vector.new(0,1,0))
+ local dnpos = vector.add(pos,vector.new(0,-1,0))
+ local upnode = minetest.get_node(uppos)
+ local dnnode = minetest.get_node(dnpos)
+ local shouldbe = "digistuff:vertical_bottom"
+ if minetest.get_item_group(dnnode.name,"vertical_digiline") > 0 then
+ if minetest.get_item_group(upnode.name,"vertical_digiline") > 0 then
+ shouldbe = "digistuff:vertical_middle"
+ else
+ shouldbe = "digistuff:vertical_top"
+ end
+ end
+ if shouldbe ~= node.name or upnode.name == "digistuff:vertical_bottom" or dnnode.name == "digistuff:vertical_top" then
+ node.name = shouldbe
+ minetest.set_node(pos,node)
+ digilines.update_autoconnect(pos)
+ digistuff.vertical_autoconnect(uppos)
+ digistuff.vertical_autoconnect(dnpos)
+ end
+end
+
+digistuff.vertical_remove = function(pos)
+ local uppos = vector.add(pos,vector.new(0,1,0))
+ local dnpos = vector.add(pos,vector.new(0,-1,0))
+ digistuff.vertical_autoconnect(uppos)
+ digistuff.vertical_autoconnect(dnpos)
+end
+
+minetest.register_node("digistuff:vertical_bottom", {
+ description = "Vertical Digiline",
+ tiles = {"digistuff_digiline_full.png"},
+ paramtype = "light",
+ groups = {dig_immediate = 3,vertical_digiline = 1,},
+ is_ground_content = false,
+ paramtype = "light",
+ drawtype = "nodebox",
+ node_box = {
+ type = "fixed",
+ fixed = {
+ {-0.5,-0.5,-0.5,0.5,-0.4375,0.5},
+ {-0.05,-0.4375,-0.05,0.05,0.5,0.05},
+ },
+ },
+ after_place_node = digistuff.vertical_autoconnect,
+ after_destruct = digistuff.vertical_remove,
+ digiline = {
+ receptor = {},
+ wire = {
+ 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},
+ },
+ },
+ },
+})
+
+minetest.register_node("digistuff:vertical_middle", {
+ description = "Vertical Digiline (middle - you hacker you!)",
+ tiles = {"digistuff_digiline_full.png"},
+ paramtype = "light",
+ groups = {dig_immediate = 3,not_in_creative_inventory = 1,vertical_digiline = 1,},
+ drop = "digistuff:vertical_bottom",
+ is_ground_content = false,
+ paramtype = "light",
+ drawtype = "nodebox",
+ node_box = {
+ type = "fixed",
+ fixed = {
+ {-0.05,-0.5,-0.05,0.05,0.5,0.05},
+ },
+ },
+ after_place_node = digistuff.vertical_autoconnect,
+ after_destruct = digistuff.vertical_remove,
+ digiline = {
+ receptor = {},
+ wire = {
+ rules = {
+ {x = 0,y = 1,z = 0},
+ {x = 0,y = -1,z = 0},
+ },
+ },
+ },
+})
+
+minetest.register_node("digistuff:vertical_top", {
+ description = "Vertical Digiline (top - you hacker you!)",
+ tiles = {"digistuff_digiline_full.png"},
+ paramtype = "light",
+ groups = {dig_immediate = 3,not_in_creative_inventory = 1,vertical_digiline = 1,},
+ drop = "digistuff:vertical_bottom",
+ is_ground_content = false,
+ paramtype = "light",
+ drawtype = "nodebox",
+ node_box = {
+ type = "fixed",
+ fixed = {
+ {-0.5,-0.5,-0.5,0.5,-0.4375,0.5},
+ },
+ },
+ after_place_node = digistuff.vertical_autoconnect,
+ after_destruct = digistuff.vertical_remove,
+ digiline = {
+ receptor = {},
+ wire = {
+ 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},
+ },
+ },
+ },
+})
+
+minetest.register_node("digistuff:insulated_straight", {
+ description = "Insulated Digiline (straight)",
+ tiles = {
+ "digistuff_insulated_full.png",
+ "digistuff_insulated_full.png",
+ "digistuff_insulated_edge.png",
+ "digistuff_insulated_edge.png",
+ "digistuff_insulated_full.png",
+ "digistuff_insulated_full.png",
+ },
+ paramtype = "light",
+ paramtype2 = "facedir",
+ on_rotate = minetest.get_modpath("screwdriver") and screwdriver.rotate_simple,
+ groups = {dig_immediate = 3,},
+ is_ground_content = false,
+ paramtype = "light",
+ drawtype = "nodebox",
+ node_box = {
+ type = "fixed",
+ fixed = {
+ {-0.5,-0.5,-0.1,0.5,-0.4,0.1},
+ },
+ },
+ after_place_node = digilines.update_autoconnect,
+ after_destruct = digilines.update_autoconnect,
+ digiline = {
+ receptor = {},
+ wire = {
+ rules = function(node)
+ local rules = {
+ {x = 1,y = 0,z = 0},
+ {x = -1,y = 0,z = 0},
+ }
+ return digistuff.rotate_rules(rules,minetest.facedir_to_dir(node.param2))
+ end,
+ },
+ },
+})
+
+minetest.register_node("digistuff:insulated_tjunction", {
+ description = "Insulated Digiline (T junction)",
+ tiles = {
+ "digistuff_insulated_full.png",
+ "digistuff_insulated_full.png",
+ "digistuff_insulated_edge.png",
+ "digistuff_insulated_edge.png",
+ "digistuff_insulated_full.png",
+ "digistuff_insulated_edge.png",
+ },
+ paramtype = "light",
+ paramtype2 = "facedir",
+ on_rotate = minetest.get_modpath("screwdriver") and screwdriver.rotate_simple,
+ groups = {dig_immediate = 3,},
+ is_ground_content = false,
+ paramtype = "light",
+ drawtype = "nodebox",
+ node_box = {
+ type = "fixed",
+ fixed = {
+ {-0.5,-0.5,-0.1,0.5,-0.4,0.1},
+ {-0.1,-0.5,-0.5,0.1,-0.4,-0.1},
+ },
+ },
+ after_place_node = digilines.update_autoconnect,
+ after_destruct = digilines.update_autoconnect,
+ digiline = {
+ receptor = {},
+ wire = {
+ rules = function(node)
+ local rules = {
+ {x = 1,y = 0,z = 0},
+ {x = -1,y = 0,z = 0},
+ {x = 0,y = 0,z = -1},
+ }
+ return digistuff.rotate_rules(rules,minetest.facedir_to_dir(node.param2))
+ end,
+ },
+ },
+})
+
+minetest.register_node("digistuff:insulated_corner", {
+ description = "Insulated Digiline (corner)",
+ tiles = {
+ "digistuff_insulated_full.png",
+ "digistuff_insulated_full.png",
+ "digistuff_insulated_full.png",
+ "digistuff_insulated_edge.png",
+ "digistuff_insulated_full.png",
+ "digistuff_insulated_edge.png",
+ },
+ paramtype = "light",
+ paramtype2 = "facedir",
+ on_rotate = minetest.get_modpath("screwdriver") and screwdriver.rotate_simple,
+ groups = {dig_immediate = 3,},
+ is_ground_content = false,
+ paramtype = "light",
+ drawtype = "nodebox",
+ node_box = {
+ type = "fixed",
+ fixed = {
+ {-0.1,-0.5,-0.5,0.1,-0.4,0.1},
+ {-0.5,-0.5,-0.1,0.1,-0.4,0.1},
+ },
+ },
+ after_place_node = digilines.update_autoconnect,
+ after_destruct = digilines.update_autoconnect,
+ digiline = {
+ receptor = {},
+ wire = {
+ rules = function(node)
+ local rules = {
+ {x = -1,y = 0,z = 0},
+ {x = 0,y = 0,z = -1},
+ }
+ return digistuff.rotate_rules(rules,minetest.facedir_to_dir(node.param2))
+ end,
+ },
+ },
+})
+
+minetest.register_node("digistuff:insulated_fourway", {
+ description = "Insulated Digiline (four-way junction)",
+ tiles = {
+ "digistuff_insulated_full.png",
+ "digistuff_insulated_full.png",
+ "digistuff_insulated_edge.png",
+ "digistuff_insulated_edge.png",
+ "digistuff_insulated_edge.png",
+ "digistuff_insulated_edge.png",
+ },
+ paramtype = "light",
+ groups = {dig_immediate = 3,},
+ is_ground_content = false,
+ paramtype = "light",
+ drawtype = "nodebox",
+ node_box = {
+ type = "fixed",
+ fixed = {
+ {-0.5,-0.5,-0.1,0.5,-0.4,0.1},
+ {-0.1,-0.5,-0.5,0.1,-0.4,-0.1},
+ {-0.1,-0.5,0.1,0.1,-0.4,0.5},
+ },
+ },
+ after_place_node = digilines.update_autoconnect,
+ after_destruct = digilines.update_autoconnect,
+ digiline = {
+ receptor = {},
+ wire = {
+ 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},
+ },
+ },
+ },
+})
+
+minetest.register_craft({
+ output = "digistuff:digimese",
+ recipe = {
+ {"digilines:wire_std_00000000","digilines:wire_std_00000000","digilines:wire_std_00000000"},
+ {"digilines:wire_std_00000000","default:mese","digilines:wire_std_00000000"},
+ {"digilines:wire_std_00000000","digilines:wire_std_00000000","digilines:wire_std_00000000"}
+ }
+})
+
minetest.register_craft({
output = "digistuff:junctionbox",
recipe = {
@@ -60,3 +440,62 @@ minetest.register_craft({
{"homedecor:plastic_sheeting","digilines:wire_std_00000000","homedecor:plastic_sheeting",},
}
})
+
+if minetest.get_modpath("mesecons_materials") then
+ minetest.register_craft({
+ output = "digistuff:insulated_straight 3",
+ recipe = {
+ {"mesecons_materials:fiber","mesecons_materials:fiber","mesecons_materials:fiber",},
+ {"digilines:wire_std_00000000","digilines:wire_std_00000000","digilines:wire_std_00000000",},
+ {"mesecons_materials:fiber","mesecons_materials:fiber","mesecons_materials:fiber",},
+ }
+ })
+end
+
+minetest.register_craft({
+ output = "digistuff:vertical_bottom 3",
+ recipe = {
+ {"digilines:wire_std_00000000",},
+ {"digilines:wire_std_00000000",},
+ {"digilines:wire_std_00000000",},
+ }
+})
+
+minetest.register_craft({
+ output = "digistuff:insulated_corner 3",
+ recipe = {
+ {"digistuff:insulated_straight","digistuff:insulated_straight",},
+ {"","digistuff:insulated_straight",},
+ }
+})
+
+minetest.register_craft({
+ output = "digistuff:insulated_tjunction 4",
+ recipe = {
+ {"digistuff:insulated_straight","digistuff:insulated_straight","digistuff:insulated_straight",},
+ {"","digistuff:insulated_straight","",},
+ }
+})
+
+minetest.register_craft({
+ output = "digistuff:insulated_fourway 5",
+ recipe = {
+ {"","digistuff:insulated_straight","",},
+ {"digistuff:insulated_straight","digistuff:insulated_straight","digistuff:insulated_straight",},
+ {"","digistuff:insulated_straight","",},
+ }
+})
+
+for _,item in ipairs({"digistuff:insulated_corner","digistuff:insulated_tjunction","digistuff:insulated_fourway",}) do
+ minetest.register_craft({
+ output = "digistuff:insulated_straight",
+ type = "shapeless",
+ recipe = {item},
+ })
+end
+
+minetest.register_craft({
+ output = "digilines:wire_std_00000000",
+ type = "shapeless",
+ recipe = {"digistuff:vertical_bottom"},
+})