pressure logic/flowable node registry: move pump directionality code to dedicated fixed vertical helper

This commit is contained in:
thetaepsilon-gamedev 2017-10-18 21:19:59 +01:00
parent 7b141fb0ea
commit 7f7dfb79d5
2 changed files with 15 additions and 7 deletions

@ -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+. -- 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. new_flow_logic_register.directional_vertical_fixed(pumpname, true)
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)
local pump_drive = 4 local pump_drive = 4
if states[s] ~= "off" then if states[s] ~= "off" then
new_flow_logic_register.intake_simple(pumpname, pump_drive) new_flow_logic_register.intake_simple(pumpname, pump_drive)

@ -52,6 +52,20 @@ register.directional = function(nodename, neighbourfn, directionfn)
regwarning("directional", nodename) regwarning("directional", nodename)
end 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) local checkbase = function(nodename)