From fd978204dd5c72d350ba0d31ec43c628c46599f3 Mon Sep 17 00:00:00 2001
From: thetaepsilon-gamedev <thetaepsilon-gamedev@noreply.users.github.com>
Date: Mon, 16 Oct 2017 23:27:04 +0100
Subject: new flow logic: abms.lua: use directional callback function for
 direcional nodes to obtain neighbour list

---
 new_flow_logic/abms.lua | 17 +++++++++++++++++
 1 file changed, 17 insertions(+)

diff --git a/new_flow_logic/abms.lua b/new_flow_logic/abms.lua
index 0b0b799..e5e2e6e 100644
--- a/new_flow_logic/abms.lua
+++ b/new_flow_logic/abms.lua
@@ -23,6 +23,16 @@ local make_coords_offsets = function(pos, include_base)
 	return coords
 end
 
+-- create positions from list of offsets
+-- see in use of directional flow logic below
+local apply_coords_offsets = function(pos, offsets)
+	local result = {}
+	for index, offset in ipairs(offsets) do
+		table.insert(result, vector.add(pos, offset))
+	end
+	return result
+end
+
 
 
 -- local debuglog = function(msg) print("## "..msg) end
@@ -138,6 +148,13 @@ flowlogic.balance_pressure = function(pos, node, currentpressure)
 	local candidates = {}
 	if pipeworks.flowables.list.simple[node.name] then
 		candidates = make_coords_offsets(pos, false)
+	else
+		-- directional flowables: call the callback to get the list
+		local directional = pipeworks.flowables.list.directional[node.name]
+		if directional then
+			local offsets = directional.neighbourfn(node)
+			candidates = apply_coords_offsets(pos, offsets)
+		end
 	end
 
 	-- then handle neighbours, but if not a pressure node don't consider them at all
-- 
cgit v1.2.3