diff --git a/devices.lua b/devices.lua index d9edcad..6dd9617 100644 --- a/devices.lua +++ b/devices.lua @@ -165,13 +165,7 @@ for s in ipairs(states) do }) -- FIXME: this currently assumes that pumps can only rotate around the fixed axis pointing Y+. - -- TODO: these directionality functions should be behind a helper so the fountainhead can use something similar. - local upwards = {x=0,y=1,z=0} - local neighbourfn = function(node) return { upwards } end - local directionfn = function(node, direction) - return vector.equals(direction, upwards) - end - new_flow_logic_register.directional(pumpname, neighbourfn, directionfn) + new_flow_logic_register.directional_vertical_fixed(pumpname, true) local pump_drive = 4 if states[s] ~= "off" then new_flow_logic_register.intake_simple(pumpname, pump_drive) diff --git a/pressure_logic/flowable_node_registry_install.lua b/pressure_logic/flowable_node_registry_install.lua index 3cd9c4d..d8f945b 100644 --- a/pressure_logic/flowable_node_registry_install.lua +++ b/pressure_logic/flowable_node_registry_install.lua @@ -52,6 +52,20 @@ register.directional = function(nodename, neighbourfn, directionfn) regwarning("directional", nodename) end +-- register a node as a directional flowable that can only flow through either the top or bottom side. +-- used for fountainheads (bottom side) and pumps (top side). +-- this is in world terms, not facedir relative! +register.directional_vertical_fixed = function(nodename, topside) + local y + if topside then y = 1 else y = -1 end + local side = { x=0, y=y, z=0 } + local neighbourfn = function(node) return { side } end + local directionfn = function(node, direction) + return vector.equals(direction, side) + end + register.directional(nodename, neighbourfn, directionfn) +end + local checkbase = function(nodename)