summaryrefslogtreecommitdiff
path: root/new_flow_logic/flowable_node_registry.lua
diff options
context:
space:
mode:
Diffstat (limited to 'new_flow_logic/flowable_node_registry.lua')
-rw-r--r--new_flow_logic/flowable_node_registry.lua59
1 files changed, 59 insertions, 0 deletions
diff --git a/new_flow_logic/flowable_node_registry.lua b/new_flow_logic/flowable_node_registry.lua
new file mode 100644
index 0000000..def9649
--- /dev/null
+++ b/new_flow_logic/flowable_node_registry.lua
@@ -0,0 +1,59 @@
+-- registration code for nodes under new flow logic
+-- written 2017 by thetaepsilon
+
+pipeworks.flowables = {}
+pipeworks.flowables.list = {}
+pipeworks.flowables.list.all = {}
+-- pipeworks.flowables.list.nodenames = {}
+
+-- simple flowables - balance pressure in any direction
+pipeworks.flowables.list.simple = {}
+pipeworks.flowables.list.simple_nodenames = {}
+
+-- simple intakes - try to absorb any adjacent water nodes
+pipeworks.flowables.inputs = {}
+pipeworks.flowables.inputs.list = {}
+pipeworks.flowables.inputs.nodenames = {}
+
+-- registration functions
+pipeworks.flowables.register = {}
+local register = pipeworks.flowables.register
+
+-- some sanity checking for passed args, as this could potentially be made an external API eventually
+local checkexists = function(nodename)
+ if type(nodename) ~= "string" then error("pipeworks.flowables nodename must be a string!") end
+ return pipeworks.flowables.list.all[nodename]
+end
+
+local insertbase = function(nodename)
+ if checkexists(nodename) then error("pipeworks.flowables duplicate registration!") end
+ pipeworks.flowables.list.all[nodename] = true
+ -- table.insert(pipeworks.flowables.list.nodenames, nodename)
+end
+
+-- Register a node as a simple flowable.
+-- Simple flowable nodes have no considerations for direction of flow;
+-- A cluster of adjacent simple flowables will happily average out in any direction.
+-- This does *not* register the ABM, as that is done in register_flow_logic.lua;
+-- this is so that the new flow logic can remain optional during development.
+register.simple = function(nodename)
+ insertbase(nodename)
+ pipeworks.flowables.list.simple[nodename] = true
+ table.insert(pipeworks.flowables.list.simple_nodenames, nodename)
+end
+
+local checkbase = function(nodename)
+ if not checkexists(nodename) then error("pipeworks.flowables node doesn't exist as a flowable!") end
+end
+
+-- Register a node as a simple intake.
+-- See new_flow_logic for the details of this.
+-- Expects node to be registered as a flowable (is present in flowables.list.all),
+-- so that water can move out of it.
+-- maxpressure is the maximum pipeline pressure that this node can drive.
+-- possible WISHME here: technic-driven high-pressure pumps
+register.intake_simple = function(nodename, maxpressure)
+ checkbase(nodename)
+ pipeworks.flowables.inputs.list[nodename] = { maxpressure=maxpressure }
+ table.insert(pipeworks.flowables.inputs.nodenames, nodename)
+end