From 0913098a9de262050ccde0bdd221dd1a12d1a785 Mon Sep 17 00:00:00 2001 From: thetaepsilon-gamedev Date: Thu, 19 Oct 2017 12:28:33 +0100 Subject: pressure logic: add horizontally-rotating directional flowable helper --- pressure_logic/flowable_node_registry_install.lua | 37 +++++++++++++++++++++++ 1 file changed, 37 insertions(+) (limited to 'pressure_logic') diff --git a/pressure_logic/flowable_node_registry_install.lua b/pressure_logic/flowable_node_registry_install.lua index d8f945b..7b14fd3 100644 --- a/pressure_logic/flowable_node_registry_install.lua +++ b/pressure_logic/flowable_node_registry_install.lua @@ -66,6 +66,43 @@ register.directional_vertical_fixed = function(nodename, topside) register.directional(nodename, neighbourfn, directionfn) end +-- register a node as a directional flowable whose accepting sides depends upon param2 rotation. +-- used for entry panels, valves, flow sensors and spigots, +-- whose facing axis is always upwards and can only rotate horizontally. +local iseastwest = function(node) + local data = node.param2 + local rotation = data % 4 + -- rotation 0 and 2 is the same axis, as is 1 and 3. + -- 0-3 starts at north and proceeds clockwise. + local axis = rotation % 2 + --pipeworks.logger("iseastwest() rotation="..tostring(rotation).." axis="..tostring(axis)) + return (axis == 1) +end +register.directional_horizonal_rotate = function(nodename) + local north = {x= 0,y= 0,z= 1} + local south = {x= 0,y= 0,z=-1} + local east = {x= 1,y= 0,z= 0} + local west = {x=-1,y= 0,z= 0} + local neighbourfn = function(node) + if iseastwest(node) then + return { east, west } + else + return { north, south } + end + end + local directionfn = function(node, direction) + local result = false + if iseastwest(node) then + --pipeworks.logger("horizontal rotate directionfn() eastwest=true") + result = vector.equals(direction, east) or vector.equals(direction, west) + else + result = vector.equals(direction, north) or vector.equals(direction, south) + end + return result + end + register.directional(nodename, neighbourfn, directionfn) +end + local checkbase = function(nodename) -- cgit v1.2.3