diff options
author | thetaepsilon-gamedev <thetaepsilon-gamedev@noreply.users.github.com> | 2017-10-07 17:33:42 +0100 |
---|---|---|
committer | thetaepsilon-gamedev <thetaepsilon-gamedev@noreply.users.github.com> | 2017-10-07 17:33:42 +0100 |
commit | 016f9de82f91b61a14ad1bc477ee18b501f77e39 (patch) | |
tree | 1551627d147e32054e6eb1a4ff79fe990b06a24b | |
parent | 608a9a69808ee58d05dc115b37af1d53b00f0241 (diff) | |
download | pipeworks-016f9de82f91b61a14ad1bc477ee18b501f77e39.tar pipeworks-016f9de82f91b61a14ad1bc477ee18b501f77e39.tar.gz pipeworks-016f9de82f91b61a14ad1bc477ee18b501f77e39.tar.bz2 pipeworks-016f9de82f91b61a14ad1bc477ee18b501f77e39.tar.xz pipeworks-016f9de82f91b61a14ad1bc477ee18b501f77e39.zip |
new flow logic: abms.lua: refactor ABM logic into new master ABM, make balance_pressure() take current pressure and return new pressure
-rw-r--r-- | new_flow_logic/abm_register.lua | 6 | ||||
-rw-r--r-- | new_flow_logic/abms.lua | 31 | ||||
-rw-r--r-- | new_flow_logic/flowable_node_registry_install.lua | 2 |
3 files changed, 28 insertions, 11 deletions
diff --git a/new_flow_logic/abm_register.lua b/new_flow_logic/abm_register.lua index d8bb6cc..db6233f 100644 --- a/new_flow_logic/abm_register.lua +++ b/new_flow_logic/abm_register.lua @@ -16,7 +16,7 @@ local flowlogic = pipeworks.flowlogic -- register node list for the main logic function. -- see flowlogic.run() in abms.lua. ---[[ + local register_flowlogic_abm = function(nodename) minetest.register_abm({ nodenames = { nodename }, @@ -27,12 +27,13 @@ local register_flowlogic_abm = function(nodename) end }) end -]] +register.flowlogic = register_flowlogic_abm -- register a node name for the pressure balancing ABM. -- currently this only exists as a per-node function to allow nodes to be registered outside pipeworks. +--[[ local register_abm_balance = function(nodename) minetest.register_abm({ nodenames = { nodename }, @@ -44,6 +45,7 @@ local register_abm_balance = function(nodename) }) end register.balance = register_abm_balance +]] -- register a node for the input ABM. -- intakefn is run on the node to determine how much water can be taken (and update it's environment accordingly). diff --git a/new_flow_logic/abms.lua b/new_flow_logic/abms.lua index 9e5eb2d..37b10bc 100644 --- a/new_flow_logic/abms.lua +++ b/new_flow_logic/abms.lua @@ -65,17 +65,30 @@ local get_pressure_access = function(pos) } end -flowlogic.balance_pressure = function(pos, node) + + +flowlogic.run = function(pos, node) + -- get the current pressure value. + local nodepressure = get_pressure_access(pos) + local currentpressure = nodepressure.get() + + -- balance pressure with neighbours + currentpressure = flowlogic.balance_pressure(pos, node, currentpressure) + + -- set the new pressure + nodepressure.set(currentpressure) +end + + + +flowlogic.balance_pressure = function(pos, node, currentpressure) -- debuglog("balance_pressure() "..node.name.." at "..pos.x.." "..pos.y.." "..pos.z) - -- check the pressure of all nearby nodes, and average it out. - -- for the moment, only balance neighbour nodes if it already has a pressure value. - -- XXX: maybe this could be used to add fluid behaviour to other mod's nodes too? + -- check the pressure of all nearby flowable nodes, and average it out. - -- unconditionally include self in nodes to average over - local pressure = get_pressure_access(pos) - local currentpressure = pressure.get() -- pressure handles to average over - local connections = { pressure } + local connections = {} + -- unconditionally include self in nodes to average over. + -- result of averaging will be returned as new pressure for main flow logic callback local totalv = currentpressure local totalc = 1 @@ -99,6 +112,8 @@ flowlogic.balance_pressure = function(pos, node) for _, target in ipairs(connections) do target.set(average) end + + return average end diff --git a/new_flow_logic/flowable_node_registry_install.lua b/new_flow_logic/flowable_node_registry_install.lua index 5ebae61..d195c63 100644 --- a/new_flow_logic/flowable_node_registry_install.lua +++ b/new_flow_logic/flowable_node_registry_install.lua @@ -36,7 +36,7 @@ register.simple = function(nodename) pipeworks.flowables.list.simple[nodename] = true table.insert(pipeworks.flowables.list.simple_nodenames, nodename) if pipeworks.toggles.pressure_logic then - abmregister.balance(nodename) + abmregister.flowlogic(nodename) end regwarning("simple", nodename) end |