summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorthetaepsilon-gamedev <thetaepsilon-gamedev@noreply.users.github.com>2017-10-07 17:33:42 +0100
committerthetaepsilon-gamedev <thetaepsilon-gamedev@noreply.users.github.com>2017-10-07 17:33:42 +0100
commit016f9de82f91b61a14ad1bc477ee18b501f77e39 (patch)
tree1551627d147e32054e6eb1a4ff79fe990b06a24b
parent608a9a69808ee58d05dc115b37af1d53b00f0241 (diff)
downloadpipeworks-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.lua6
-rw-r--r--new_flow_logic/abms.lua31
-rw-r--r--new_flow_logic/flowable_node_registry_install.lua2
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