From d4dddc41ec199ffc73f1ad10f900b42c3164a46f Mon Sep 17 00:00:00 2001 From: Vanessa Ezekowitz Date: Fri, 10 May 2013 18:28:57 -0400 Subject: [PATCH] add flow sensor. Sends mesecons signal when water is flowing through it. --- autoplace.lua | 22 ++++++++++ crafts.lua | 8 +++- devices.lua | 110 ++++++++++++++++++++++++++++++++++++++++++++++ flowing_logic.lua | 2 + optdepends.txt | 2 + 5 files changed, 143 insertions(+), 1 deletion(-) create mode 100644 optdepends.txt diff --git a/autoplace.lua b/autoplace.lua index dbcc423..ddfdb76 100644 --- a/autoplace.lua +++ b/autoplace.lua @@ -143,6 +143,28 @@ function pipes_scansurroundings(pos) pzp=1 end +-- ...flow sensors... + + if (string.find(nxm.name, "pipeworks:flow_sensor") ~= nil) + and (nxm.param2 == 0 or nxm.param2 == 2) then + pxm=1 + end + + if (string.find(nxp.name, "pipeworks:flow_sensor") ~= nil) + and (nxp.param2 == 0 or nxp.param2 == 2) then + pxp=1 + end + + if (string.find(nzm.name, "pipeworks:flow_sensor") ~= nil) + and (nzm.param2 == 1 or nzm.param2 == 3) then + pzm=1 + end + + if (string.find(nzp.name, "pipeworks:flow_sensor") ~= nil) + and (nzp.param2 == 1 or nzp.param2 == 3) then + pzp=1 + end + -- ...spigots... if (string.find(nxm.name, "pipeworks:spigot") ~= nil) diff --git a/crafts.lua b/crafts.lua index 700543b..25c57b6 100644 --- a/crafts.lua +++ b/crafts.lua @@ -64,6 +64,13 @@ minetest.register_craft( { }, }) +minetest.register_craft( { + output = "pipeworks:flow_sensor_empty 2", + recipe = { + { "pipeworks:pipe_110000_empty", "mesecons:mesecon", "pipeworks:pipe_110000_empty" }, + }, +}) + -- Various ancillary tube devices @@ -164,7 +171,6 @@ if minetest.get_modpath("homedecor") == nil then end - -- If the technic mod is present, then don't bother registering the recipes -- for the various tubes, as technic has its own recipes for those. diff --git a/devices.lua b/devices.lua index dcd5967..3cbf71a 100644 --- a/devices.lua +++ b/devices.lua @@ -1,5 +1,19 @@ -- List of devices that should participate in the autoplace algorithm +if mesecon then + pipereceptor_on = { + receptor = { + state = mesecon.state.on + } + } + + pipereceptor_off = { + receptor = { + state = mesecon.state.off + } + } +end + pipes_devicelist = { "pump", "valve", @@ -35,6 +49,10 @@ pipe_valvehandle_off = { { -1/16, 4/16, -5/16, 1/16, 5/16, 0 } } +pipe_sensorbody = { + { -3/16, -2/16, -2/16, 3/16, 2/16, 2/16 } +} + spigot_bottomstub = { { -2/64, -16/64, -6/64, 2/64, 1/64, 6/64 }, -- pipe segment against -Y face { -4/64, -16/64, -5/64, 4/64, 1/64, 5/64 }, @@ -439,6 +457,98 @@ minetest.register_node("pipeworks:entry_panel_loaded", { drop = "pipeworks:entry_panel_empty" }) +local sensorboxes = {} +pipe_addbox(sensorboxes, pipe_leftstub) +pipe_addbox(sensorboxes, pipe_sensorbody) +pipe_addbox(sensorboxes, pipe_rightstub) + +minetest.register_node("pipeworks:flow_sensor_empty", { + description = "Flow Sensor", + drawtype = "nodebox", + tiles = { + "pipeworks_plain.png", + "pipeworks_plain.png", + "pipeworks_plain.png", + "pipeworks_plain.png", + "pipeworks_windowed_empty.png", + "pipeworks_windowed_empty.png" + }, + paramtype = "light", + paramtype2 = "facedir", + groups = {snappy=3, pipe=1}, + sounds = default.node_sound_wood_defaults(), + walkable = true, + after_place_node = function(pos) + pipe_scanforobjects(pos) + end, + after_dig_node = function(pos) + pipe_scanforobjects(pos) + end, + pipelike=1, + on_construct = function(pos) + local meta = minetest.env:get_meta(pos) + meta:set_int("pipelike",1) + if mesecon then + mesecon:receptor_off(pos, rules) + end + end, + node_box = { + type = "fixed", + fixed = sensorboxes, + }, + selection_box = { + type = "fixed", + fixed = { + { -8/16, -2/16, -2/16, 8/16, 2/16, 2/16 }, + } + }, + mesecons = pipereceptor_off +}) + +minetest.register_node("pipeworks:flow_sensor_loaded", { + description = "Flow sensor (on)", + drawtype = "nodebox", + tiles = { + "pipeworks_plain.png", + "pipeworks_plain.png", + "pipeworks_plain.png", + "pipeworks_plain.png", + pipeworks_liquid_texture.."^pipeworks_windowed_loaded.png", + pipeworks_liquid_texture.."^pipeworks_windowed_loaded.png" + }, + paramtype = "light", + paramtype2 = "facedir", + groups = {snappy=3, pipe=1, not_in_creative_inventory=1}, + sounds = default.node_sound_wood_defaults(), + walkable = true, + after_place_node = function(pos) + pipe_scanforobjects(pos) + end, + after_dig_node = function(pos) + pipe_scanforobjects(pos) + end, + pipelike=1, + on_construct = function(pos) + local meta = minetest.env:get_meta(pos) + meta:set_int("pipelike",1) + if mesecon then + mesecon:receptor_on(pos, rules) + end + end, + node_box = { + type = "fixed", + fixed = sensorboxes, + }, + selection_box = { + type = "fixed", + fixed = { + { -8/16, -2/16, -2/16, 8/16, 2/16, 2/16 }, + } + }, + drop = "pipeworks:flow_sensor_empty", + mesecons = pipereceptor_on +}) + -- tanks for fill = 0, 10 do diff --git a/flowing_logic.lua b/flowing_logic.lua index e633983..a375aeb 100644 --- a/flowing_logic.lua +++ b/flowing_logic.lua @@ -104,11 +104,13 @@ table.insert(pipes_empty_nodenames,"pipeworks:valve_on_empty") table.insert(pipes_empty_nodenames,"pipeworks:valve_off_empty") table.insert(pipes_empty_nodenames,"pipeworks:valve_on_loaded") table.insert(pipes_empty_nodenames,"pipeworks:entry_panel_empty") +table.insert(pipes_empty_nodenames,"pipeworks:flow_sensor_empty") table.insert(pipes_full_nodenames,"pipeworks:valve_on_empty") table.insert(pipes_full_nodenames,"pipeworks:valve_off_empty") table.insert(pipes_full_nodenames,"pipeworks:valve_on_loaded") table.insert(pipes_full_nodenames,"pipeworks:entry_panel_loaded") +table.insert(pipes_full_nodenames,"pipeworks:flow_sensor_loaded") minetest.register_abm({ nodenames = pipes_empty_nodenames, diff --git a/optdepends.txt b/optdepends.txt new file mode 100644 index 0000000..d92a438 --- /dev/null +++ b/optdepends.txt @@ -0,0 +1,2 @@ +mesecons + -- 2.30.2