From df8ef255a3a66c676fc74197fb034e5033aed763 Mon Sep 17 00:00:00 2001 From: thetaepsilon-gamedev Date: Wed, 27 Sep 2017 17:25:16 +0100 Subject: [PATCH] flowing_logic.lua: add new spigot code + ABM registration --- flowing_logic.lua | 16 ++++++++++++++++ register_flow_logic.lua | 21 +++++++++++++++++++-- 2 files changed, 35 insertions(+), 2 deletions(-) diff --git a/flowing_logic.lua b/flowing_logic.lua index 62d75ab..50a4c99 100644 --- a/flowing_logic.lua +++ b/flowing_logic.lua @@ -234,3 +234,19 @@ pipeworks.run_pump_intake = function(pos, node) -- debuglog("oldpressure "..currentpressure.." intake_limit "..intake_limit.." actual_intake "..actual_intake.." newpressure "..newpressure) meta:set_float(label_pressure, newpressure) end + + + +pipeworks.run_spigot_output = function(pos, node) + -- try to output a water source node if there's enough pressure and space below. + local meta = minetest.get_meta(pos) + local currentpressure = meta:get_float(label_pressure) + if currentpressure > 1 then + local below = {x=pos.x, y=pos.y-1, z=pos.z} + local name = minetest.get_node(below).name + if (name == "air") or (name == "default:water_flowing") then + minetest.set_node(below, {name="default:water_source"}) + meta:set_float(label_pressure, currentpressure - 1) + end + end +end diff --git a/register_flow_logic.lua b/register_flow_logic.lua index e027dae..c6fc46f 100644 --- a/register_flow_logic.lua +++ b/register_flow_logic.lua @@ -7,13 +7,20 @@ local pipes_empty_nodenames = pipeworks.pipes_empty_nodenames -- FIXME: DRY principle, get this from elsewhere in the code local pump_on = "pipeworks:pump_on" local pump_off = "pipeworks:pump_off" +local spigot_off = "pipeworks:spigot" +local spigot_on = "pipeworks:spigot_pouring" local pipes_all_nodenames = pipes_full_nodenames for _, pipe in ipairs(pipes_empty_nodenames) do table.insert(pipes_all_nodenames, pipe) end -table.insert(pipes_all_nodenames, pump_off) -table.insert(pipes_all_nodenames, pump_on) + +if pipeworks.enable_pipe_devices then + table.insert(pipes_all_nodenames, pump_off) + table.insert(pipes_all_nodenames, pump_on) + table.insert(pipes_all_nodenames, spigot_on) + table.insert(pipes_all_nodenames, spigot_off) +end if pipeworks.enable_pipes then @@ -37,4 +44,14 @@ if pipeworks.enable_pipe_devices then pipeworks.run_pump_intake(pos, node) end }) + -- output water from spigots + -- add both "on/off" spigots so one can be used to indicate a certain level of fluid. + minetest.register_abm({ + nodenames = { spigot_on, spigot_off }, + interval = 1, + chance = 1, + action = function(pos, node, active_object_count, active_object_count_wider) + pipeworks.run_spigot_output(pos, node) + end + }) end