new flow logic: flowable node registry: add directional flow type class

This commit is contained in:
thetaepsilon-gamedev 2017-10-16 23:18:00 +01:00
parent 0e74978a73
commit e41167813b
2 changed files with 21 additions and 3 deletions

@ -17,6 +17,14 @@ pipeworks.flowables.list.all = {}
pipeworks.flowables.list.simple = {} pipeworks.flowables.list.simple = {}
pipeworks.flowables.list.simple_nodenames = {} pipeworks.flowables.list.simple_nodenames = {}
-- directional flowables - can only flow on certain sides
-- format per entry is a table with the following fields:
-- neighbourfn: function(node),
-- called to determine which nodes to consider as neighbours.
-- can be used to e.g. inspect the node's param values for facedir etc.
-- returns: array of vector offsets to look for possible neighbours in
pipeworks.flowables.list.directional = {}
-- simple intakes - try to absorb any adjacent water nodes -- simple intakes - try to absorb any adjacent water nodes
pipeworks.flowables.inputs = {} pipeworks.flowables.inputs = {}
pipeworks.flowables.inputs.list = {} pipeworks.flowables.inputs.list = {}

@ -20,6 +20,9 @@ local insertbase = function(nodename)
if checkexists(nodename) then error("pipeworks.flowables duplicate registration!") end if checkexists(nodename) then error("pipeworks.flowables duplicate registration!") end
pipeworks.flowables.list.all[nodename] = true pipeworks.flowables.list.all[nodename] = true
-- table.insert(pipeworks.flowables.list.nodenames, nodename) -- table.insert(pipeworks.flowables.list.nodenames, nodename)
if pipeworks.toggles.pressure_logic then
abmregister.flowlogic(nodename)
end
end end
local regwarning = function(kind, nodename) local regwarning = function(kind, nodename)
@ -35,12 +38,19 @@ register.simple = function(nodename)
insertbase(nodename) insertbase(nodename)
pipeworks.flowables.list.simple[nodename] = true pipeworks.flowables.list.simple[nodename] = true
table.insert(pipeworks.flowables.list.simple_nodenames, nodename) table.insert(pipeworks.flowables.list.simple_nodenames, nodename)
if pipeworks.toggles.pressure_logic then
abmregister.flowlogic(nodename)
end
regwarning("simple", nodename) regwarning("simple", nodename)
end end
-- Register a node as a directional flowable:
-- has a helper function which determines which nodes to consider valid neighbours.
register.directional = function(nodename, neighbourfn)
insertbase(nodename)
pipeworks.flowables.list.directional[nodename] = { neighbourfn = neighbourfn }
regwarning("directional", nodename)
end
local checkbase = function(nodename) local checkbase = function(nodename)
if not checkexists(nodename) then error("pipeworks.flowables node doesn't exist as a flowable!") end if not checkexists(nodename) then error("pipeworks.flowables node doesn't exist as a flowable!") end
end end