summaryrefslogtreecommitdiff
path: root/mesecons_extrawires/vertical.lua
diff options
context:
space:
mode:
Diffstat (limited to 'mesecons_extrawires/vertical.lua')
-rw-r--r--mesecons_extrawires/vertical.lua204
1 files changed, 204 insertions, 0 deletions
diff --git a/mesecons_extrawires/vertical.lua b/mesecons_extrawires/vertical.lua
new file mode 100644
index 0000000..64e6e80
--- /dev/null
+++ b/mesecons_extrawires/vertical.lua
@@ -0,0 +1,204 @@
+local vbox = {
+ type = "fixed",
+ fixed = {-1/16, -.5, -1/16, 1/16, .5, 1/16}
+}
+
+local tbox = {
+ type = "fixed",
+ fixed = {{-.5, -.5, -.5, .5, -.5 + 1/16, .5}}
+}
+
+local bbox = {
+ type = "fixed",
+ fixed = {{ -.5, -.5, -.5, .5, -.5+1/16, .5},
+ {-1/16, -.5, -1/16, 1/16, .5 , 1/16}}
+}
+
+local vrules =
+{{x = 0, y = 1, z = 0},
+ {x = 0, y =-1, z = 0}}
+
+local trules =
+{{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}}
+
+local brules =
+{{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}}
+
+local vertical_updatepos = function (pos)
+ local node = minetest.env:get_node(pos)
+ if minetest.registered_nodes[node.name].is_vertical_conductor then
+ local node_above = minetest.env:get_node(addPosRule(pos, vrules[1]))
+ local node_below = minetest.env:get_node(addPosRule(pos, vrules[2]))
+ local namestate = minetest.registered_nodes[node.name].vertical_conductor_state
+
+ -- above and below: vertical mesecon
+ if minetest.registered_nodes[node_above.name].is_vertical_conductor
+ and minetest.registered_nodes[node_below.name].is_vertical_conductor then
+ minetest.env:add_node (pos,
+ {name = "mesecons_extrawires:vertical_"..namestate})
+
+ -- above only: bottom
+ elseif minetest.registered_nodes[node_above.name].is_vertical_conductor
+ and not minetest.registered_nodes[node_below.name].is_vertical_conductor then
+ minetest.env:add_node (pos,
+ {name = "mesecons_extrawires:vertical_bottom_"..namestate})
+
+ -- below only: top
+ elseif not minetest.registered_nodes[node_above.name].is_vertical_conductor
+ and minetest.registered_nodes[node_below.name].is_vertical_conductor then
+ minetest.env:add_node (pos,
+ {name = "mesecons_extrawires:vertical_top_"..namestate})
+ else -- no vertical wire above, no vertical wire below: use default wire
+ minetest.env:add_node (pos,
+ {name = "mesecons_extrawires:vertical_"..namestate})
+ end
+ end
+end
+
+local vertical_update = function (pos, node)
+ print("update")
+ vertical_updatepos(pos) -- this one
+ vertical_updatepos(addPosRule(pos, vrules[1])) -- above
+ vertical_updatepos(addPosRule(pos, vrules[2])) -- below
+end
+
+-- Vertical wire
+minetest.register_node("mesecons_extrawires:vertical_on", {
+ description = "Vertical mesecon",
+ drawtype = "nodebox",
+ tiles = {"wires_vertical_on.png"},
+ walkable = false,
+ paramtype = "light",
+ sunlight_propagates = true,
+ groups = {dig_immediate = 3},
+ selection_box = vbox,
+ node_box = vbox,
+ is_vertical_conductor = true,
+ vertical_conductor_state = "on",
+ mesecons = {conductor = {
+ state = mesecon.state.on,
+ offstate = "mesecons_extrawires:vertical_off",
+ rules = vrules
+ }},
+ drop = {"mesecons_extrawires:vertical_off"},
+ after_place_node = vertical_update,
+ after_dig_node = vertical_update
+})
+
+minetest.register_node("mesecons_extrawires:vertical_off", {
+ description = "Vertical mesecon",
+ drawtype = "nodebox",
+ tiles = {"wires_vertical_off.png"},
+ walkable = false,
+ paramtype = "light",
+ sunlight_propagates = true,
+ groups = {dig_immediate = 3},
+ selection_box = vbox,
+ node_box = vbox,
+ is_vertical_conductor = true,
+ vertical_conductor_state = "off",
+ mesecons = {conductor = {
+ state = mesecon.state.off,
+ onstate = "mesecons_extrawires:vertical_on",
+ rules = vrules
+ }},
+ after_place_node = vertical_update,
+ after_dig_node = vertical_update
+})
+
+-- Vertical wire top
+minetest.register_node("mesecons_extrawires:vertical_top_on", {
+ description = "Vertical mesecon",
+ drawtype = "nodebox",
+ tiles = {"wires_vertical_on.png"},
+ walkable = false,
+ paramtype = "light",
+ sunlight_propagates = true,
+ groups = {dig_immediate = 3},
+ selection_box = tbox,
+ node_box = tbox,
+ is_vertical_conductor = true,
+ vertical_conductor_state = "on",
+ mesecons = {conductor = {
+ state = mesecon.state.on,
+ offstate = "mesecons_extrawires:vertical_top_off",
+ rules = trules
+ }},
+ drop = {"mesecons_extrawires:vertical_off"},
+ after_place_node = vertical_update,
+ after_dig_node = vertical_update
+})
+
+minetest.register_node("mesecons_extrawires:vertical_top_off", {
+ description = "Vertical mesecon",
+ drawtype = "nodebox",
+ tiles = {"wires_vertical_off.png"},
+ walkable = false,
+ paramtype = "light",
+ sunlight_propagates = true,
+ groups = {dig_immediate = 3},
+ selection_box = tbox,
+ node_box = tbox,
+ is_vertical_conductor = true,
+ vertical_conductor_state = "off",
+ mesecons = {conductor = {
+ state = mesecon.state.off,
+ onstate = "mesecons_extrawires:vertical_top_on",
+ rules = trules
+ }},
+ drop = {"mesecons_extrawires:vertical_off"},
+ after_place_node = vertical_update,
+ after_dig_node = vertical_update
+})
+
+-- Vertical wire bottom
+minetest.register_node("mesecons_extrawires:vertical_bottom_on", {
+ description = "Vertical mesecon",
+ drawtype = "nodebox",
+ tiles = {"wires_vertical_on.png"},
+ walkable = false,
+ paramtype = "light",
+ sunlight_propagates = true,
+ vertical_conductor_state = "on",
+ groups = {dig_immediate = 3},
+ selection_box = bbox,
+ node_box = bbox,
+ mesecons = {conductor = {
+ state = mesecon.state.on,
+ offstate = "mesecons_extrawires:vertical_bottom_off",
+ rules = brules
+ }},
+ drop = {"mesecons_extrawires:vertical_off"},
+ after_place_node = vertical_update,
+ after_dig_node = vertical_update
+})
+
+minetest.register_node("mesecons_extrawires:vertical_bottom_off", {
+ description = "Vertical mesecon",
+ drawtype = "nodebox",
+ tiles = {"wires_vertical_off.png"},
+ walkable = false,
+ paramtype = "light",
+ sunlight_propagates = true,
+ groups = {dig_immediate = 3},
+ selection_box = bbox,
+ node_box = bbox,
+ is_vertical_conductor = true,
+ vertical_conductor_state = "off",
+ mesecons = {conductor = {
+ state = mesecon.state.off,
+ onstate = "mesecons_extrawires:vertical_bottom_on",
+ rules = brules
+ }},
+ drop = {"mesecons_extrawires:vertical_off"},
+ after_place_node = vertical_update,
+ after_dig_node = vertical_update
+})