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 /new_flow_logic | |
| parent | 608a9a69808ee58d05dc115b37af1d53b00f0241 (diff) | |
new flow logic: abms.lua: refactor ABM logic into new master ABM, make balance_pressure() take current pressure and return new pressure
Diffstat (limited to 'new_flow_logic')
| -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  | 
