From c3627551b091d27819c242da204ed1e9dd8f15f0 Mon Sep 17 00:00:00 2001 From: thetaepsilon-gamedev Date: Sat, 30 Sep 2017 23:42:26 +0100 Subject: move all current new_flow_logic code to dedicated sub-directory --- new_flow_logic/abm_register.lua | 49 +++++++++++++++++++++++++++++++++++++++++ 1 file changed, 49 insertions(+) create mode 100644 new_flow_logic/abm_register.lua (limited to 'new_flow_logic/abm_register.lua') diff --git a/new_flow_logic/abm_register.lua b/new_flow_logic/abm_register.lua new file mode 100644 index 0000000..e7bed6a --- /dev/null +++ b/new_flow_logic/abm_register.lua @@ -0,0 +1,49 @@ +-- register new flow logic ABMs +-- written 2017 by thetaepsilon + + + +local register = {} +pipeworks.flowlogic.abmregister = register + + + +-- 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 }, + interval = 1, + chance = 1, + action = function(pos, node, active_object_count, active_object_count_wider) + pipeworks.flowlogic.balance_pressure(pos, node) + end + }) +end +register.balance = register_abm_balance + +-- register a node for the pump ABM. +-- maxpressure is the maximum pressure that this pump can drive. +local register_abm_input = function(nodename, maxpressure) + minetest.register_abm({ + nodenames = { nodename }, + interval = 1, + chance = 1, + action = function(pos, node, active_object_count, active_object_count_wider) + pipeworks.flowlogic.run_pump_intake(pos, node) + end + }) +end +register.input = register_abm_input + +-- old spigot ABM code, not yet migrated +--[[ + minetest.register_abm({ + nodenames = { spigot_on, spigot_off }, + interval = 1, + chance = 1, + action = function(pos, node, active_object_count, active_object_count_wider) + pipeworks.run_spigot_output(pos, node) + end + }) +]] -- cgit v1.2.3 From 31741e33e20c2ed366f80c01c7d6b4a6a23e0d4c Mon Sep 17 00:00:00 2001 From: thetaepsilon-gamedev Date: Sun, 1 Oct 2017 00:00:33 +0100 Subject: new_flow_logic/abms.lua: run_pump_intake(): use passed-in maxpressure instead of table lookup, pass through in abm_register.lua --- new_flow_logic/abm_register.lua | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'new_flow_logic/abm_register.lua') diff --git a/new_flow_logic/abm_register.lua b/new_flow_logic/abm_register.lua index e7bed6a..505ca4b 100644 --- a/new_flow_logic/abm_register.lua +++ b/new_flow_logic/abm_register.lua @@ -30,7 +30,7 @@ local register_abm_input = function(nodename, maxpressure) interval = 1, chance = 1, action = function(pos, node, active_object_count, active_object_count_wider) - pipeworks.flowlogic.run_pump_intake(pos, node) + pipeworks.flowlogic.run_pump_intake(pos, node, maxpressure) end }) end -- cgit v1.2.3 From 3486ee319ee4fafbf83c583dd9fedfaed92db7c4 Mon Sep 17 00:00:00 2001 From: thetaepsilon-gamedev Date: Sun, 1 Oct 2017 00:44:14 +0100 Subject: abms.lua: refactor and generalise run_pump_intake() to allow passing custom intake functions --- new_flow_logic/abm_register.lua | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'new_flow_logic/abm_register.lua') diff --git a/new_flow_logic/abm_register.lua b/new_flow_logic/abm_register.lua index 505ca4b..57c8a47 100644 --- a/new_flow_logic/abm_register.lua +++ b/new_flow_logic/abm_register.lua @@ -24,13 +24,13 @@ register.balance = register_abm_balance -- register a node for the pump ABM. -- maxpressure is the maximum pressure that this pump can drive. -local register_abm_input = function(nodename, maxpressure) +local register_abm_input = function(nodename, maxpressure, intakefn) minetest.register_abm({ nodenames = { nodename }, interval = 1, chance = 1, action = function(pos, node, active_object_count, active_object_count_wider) - pipeworks.flowlogic.run_pump_intake(pos, node, maxpressure) + pipeworks.flowlogic.run_input(pos, node, maxpressure, intakefn) end }) end -- cgit v1.2.3 From 15b41d14f3923ce3cea8418a792f83e7763d5b00 Mon Sep 17 00:00:00 2001 From: thetaepsilon-gamedev Date: Sun, 1 Oct 2017 12:28:22 +0100 Subject: new flow logic: abm_register.lua: update doc comments for register_abm_input() --- new_flow_logic/abm_register.lua | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) (limited to 'new_flow_logic/abm_register.lua') diff --git a/new_flow_logic/abm_register.lua b/new_flow_logic/abm_register.lua index 57c8a47..793ea83 100644 --- a/new_flow_logic/abm_register.lua +++ b/new_flow_logic/abm_register.lua @@ -22,8 +22,9 @@ local register_abm_balance = function(nodename) end register.balance = register_abm_balance --- register a node for the pump ABM. --- maxpressure is the maximum pressure that this pump can drive. +-- 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). +-- maxpressure is the maximum pressure that this input can drive, beyond which pressure will not be raised. local register_abm_input = function(nodename, maxpressure, intakefn) minetest.register_abm({ nodenames = { nodename }, -- cgit v1.2.3 From f3a94fcd248df35b4afb992941a58af4cc17f446 Mon Sep 17 00:00:00 2001 From: thetaepsilon-gamedev Date: Sun, 1 Oct 2017 12:34:20 +0100 Subject: new flow logic: abm_register.lua: add register_abm_output routine --- new_flow_logic/abm_register.lua | 24 ++++++++++++++++++++++-- 1 file changed, 22 insertions(+), 2 deletions(-) (limited to 'new_flow_logic/abm_register.lua') diff --git a/new_flow_logic/abm_register.lua b/new_flow_logic/abm_register.lua index 793ea83..c1b2d7d 100644 --- a/new_flow_logic/abm_register.lua +++ b/new_flow_logic/abm_register.lua @@ -6,7 +6,11 @@ local register = {} pipeworks.flowlogic.abmregister = register +local flowlogic = pipeworks.flowlogic +-- A possible DRY violation here... +-- DISCUSS: should it be possible later on to raise the the rate of ABMs, or lower the chance? +-- Currently all the intervals and chances are hardcoded below. -- 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. @@ -16,7 +20,7 @@ local register_abm_balance = function(nodename) interval = 1, chance = 1, action = function(pos, node, active_object_count, active_object_count_wider) - pipeworks.flowlogic.balance_pressure(pos, node) + flowlogic.balance_pressure(pos, node) end }) end @@ -31,12 +35,28 @@ local register_abm_input = function(nodename, maxpressure, intakefn) interval = 1, chance = 1, action = function(pos, node, active_object_count, active_object_count_wider) - pipeworks.flowlogic.run_input(pos, node, maxpressure, intakefn) + flowlogic.run_input(pos, node, maxpressure, intakefn) end }) end register.input = register_abm_input +-- register a node for the output ABM. +-- threshold determines the minimum pressure, over which outputfn is called. +-- outputfn is then given the current pressure, and returns the pressure relieved by the output process. +-- outputfn is expected to update environment, nearby world etc. as appropriate for the node. +local register_abm_output = function(nodename, threshold, outputfn) + minetest.register_abm({ + nodenames = { nodename }, + interval = 1, + chance = 1, + action = function(pos, node, active_object_count, active_object_count_wider) + flowlogic.run_output(pos, node, threshold, outputfn) + end + }) +end +register.output = register_abm_output + -- old spigot ABM code, not yet migrated --[[ minetest.register_abm({ -- cgit v1.2.3 From 34cfee8a2faaa9366b1a9ae5035eedee3620aa56 Mon Sep 17 00:00:00 2001 From: thetaepsilon-gamedev Date: Sat, 7 Oct 2017 16:12:36 +0100 Subject: new flow logic: start adding replacement ABM logic --- new_flow_logic/abm_register.lua | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) (limited to 'new_flow_logic/abm_register.lua') diff --git a/new_flow_logic/abm_register.lua b/new_flow_logic/abm_register.lua index c1b2d7d..d8bb6cc 100644 --- a/new_flow_logic/abm_register.lua +++ b/new_flow_logic/abm_register.lua @@ -12,6 +12,25 @@ local flowlogic = pipeworks.flowlogic -- DISCUSS: should it be possible later on to raise the the rate of ABMs, or lower the chance? -- Currently all the intervals and chances are hardcoded below. + + +-- 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 }, + interval = 1, + chance = 1, + action = function(pos, node, active_object_count, active_object_count_wider) + flowlogic.run(pos, node) + end + }) +end +]] + + + -- 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) -- cgit v1.2.3 From 016f9de82f91b61a14ad1bc477ee18b501f77e39 Mon Sep 17 00:00:00 2001 From: thetaepsilon-gamedev Date: Sat, 7 Oct 2017 17:33:42 +0100 Subject: new flow logic: abms.lua: refactor ABM logic into new master ABM, make balance_pressure() take current pressure and return new pressure --- new_flow_logic/abm_register.lua | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) (limited to 'new_flow_logic/abm_register.lua') 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). -- cgit v1.2.3 From 65b3448796815718275ed3c16af4865e5e005454 Mon Sep 17 00:00:00 2001 From: thetaepsilon-gamedev Date: Sat, 7 Oct 2017 17:55:14 +0100 Subject: new flow logic: abms.lua: refactor flowlogic.run_output() into a processing stage of flowlogic.run() --- new_flow_logic/abm_register.lua | 2 ++ 1 file changed, 2 insertions(+) (limited to 'new_flow_logic/abm_register.lua') diff --git a/new_flow_logic/abm_register.lua b/new_flow_logic/abm_register.lua index db6233f..1c7eede 100644 --- a/new_flow_logic/abm_register.lua +++ b/new_flow_logic/abm_register.lua @@ -66,6 +66,7 @@ register.input = register_abm_input -- threshold determines the minimum pressure, over which outputfn is called. -- outputfn is then given the current pressure, and returns the pressure relieved by the output process. -- outputfn is expected to update environment, nearby world etc. as appropriate for the node. +--[[ local register_abm_output = function(nodename, threshold, outputfn) minetest.register_abm({ nodenames = { nodename }, @@ -77,6 +78,7 @@ local register_abm_output = function(nodename, threshold, outputfn) }) end register.output = register_abm_output +]] -- old spigot ABM code, not yet migrated --[[ -- cgit v1.2.3 From 9c770532e6e3cb1157e467015a97aef97a8a8893 Mon Sep 17 00:00:00 2001 From: thetaepsilon-gamedev Date: Sat, 7 Oct 2017 19:19:09 +0100 Subject: new flow logic: abms.lua: refactor run_input to run as part of master run() ABM --- new_flow_logic/abm_register.lua | 2 ++ 1 file changed, 2 insertions(+) (limited to 'new_flow_logic/abm_register.lua') diff --git a/new_flow_logic/abm_register.lua b/new_flow_logic/abm_register.lua index 1c7eede..dbd37e6 100644 --- a/new_flow_logic/abm_register.lua +++ b/new_flow_logic/abm_register.lua @@ -50,6 +50,7 @@ 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). -- maxpressure is the maximum pressure that this input can drive, beyond which pressure will not be raised. +--[[ local register_abm_input = function(nodename, maxpressure, intakefn) minetest.register_abm({ nodenames = { nodename }, @@ -61,6 +62,7 @@ local register_abm_input = function(nodename, maxpressure, intakefn) }) end register.input = register_abm_input +]] -- register a node for the output ABM. -- threshold determines the minimum pressure, over which outputfn is called. -- cgit v1.2.3 From 91d057fcab8bf2caad295148201f1414e935def7 Mon Sep 17 00:00:00 2001 From: thetaepsilon-gamedev Date: Sat, 7 Oct 2017 19:42:49 +0100 Subject: new flow logic: tear out old abm registration code --- new_flow_logic/abm_register.lua | 65 ----------------------------------------- 1 file changed, 65 deletions(-) (limited to 'new_flow_logic/abm_register.lua') diff --git a/new_flow_logic/abm_register.lua b/new_flow_logic/abm_register.lua index dbd37e6..ac7b2e3 100644 --- a/new_flow_logic/abm_register.lua +++ b/new_flow_logic/abm_register.lua @@ -28,68 +28,3 @@ local register_flowlogic_abm = function(nodename) }) 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 }, - interval = 1, - chance = 1, - action = function(pos, node, active_object_count, active_object_count_wider) - flowlogic.balance_pressure(pos, node) - end - }) -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). --- maxpressure is the maximum pressure that this input can drive, beyond which pressure will not be raised. ---[[ -local register_abm_input = function(nodename, maxpressure, intakefn) - minetest.register_abm({ - nodenames = { nodename }, - interval = 1, - chance = 1, - action = function(pos, node, active_object_count, active_object_count_wider) - flowlogic.run_input(pos, node, maxpressure, intakefn) - end - }) -end -register.input = register_abm_input -]] - --- register a node for the output ABM. --- threshold determines the minimum pressure, over which outputfn is called. --- outputfn is then given the current pressure, and returns the pressure relieved by the output process. --- outputfn is expected to update environment, nearby world etc. as appropriate for the node. ---[[ -local register_abm_output = function(nodename, threshold, outputfn) - minetest.register_abm({ - nodenames = { nodename }, - interval = 1, - chance = 1, - action = function(pos, node, active_object_count, active_object_count_wider) - flowlogic.run_output(pos, node, threshold, outputfn) - end - }) -end -register.output = register_abm_output -]] - --- old spigot ABM code, not yet migrated ---[[ - minetest.register_abm({ - nodenames = { spigot_on, spigot_off }, - interval = 1, - chance = 1, - action = function(pos, node, active_object_count, active_object_count_wider) - pipeworks.run_spigot_output(pos, node) - end - }) -]] -- cgit v1.2.3 From 72f793e2b3a7de1ed2946424eedc3fb2b0d3a1b4 Mon Sep 17 00:00:00 2001 From: thetaepsilon-gamedev Date: Sun, 8 Oct 2017 19:11:58 +0100 Subject: new flow logic: abm_register.lua: add extra safeguarding for conditional activation of new flow logic --- new_flow_logic/abm_register.lua | 28 ++++++++++++---------------- 1 file changed, 12 insertions(+), 16 deletions(-) (limited to 'new_flow_logic/abm_register.lua') diff --git a/new_flow_logic/abm_register.lua b/new_flow_logic/abm_register.lua index ac7b2e3..1d038d6 100644 --- a/new_flow_logic/abm_register.lua +++ b/new_flow_logic/abm_register.lua @@ -1,30 +1,26 @@ -- register new flow logic ABMs -- written 2017 by thetaepsilon - - local register = {} pipeworks.flowlogic.abmregister = register local flowlogic = pipeworks.flowlogic --- A possible DRY violation here... --- DISCUSS: should it be possible later on to raise the the rate of ABMs, or lower the chance? --- Currently all the intervals and chances are hardcoded below. - - - -- 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 }, - interval = 1, - chance = 1, - action = function(pos, node, active_object_count, active_object_count_wider) - flowlogic.run(pos, node) - end - }) + if pipeworks.toggles.pressure_logic then + minetest.register_abm({ + nodenames = { nodename }, + interval = 1, + chance = 1, + action = function(pos, node, active_object_count, active_object_count_wider) + flowlogic.run(pos, node) + end + }) + else + minetest.log("warning", "pipeworks pressure_logic not enabled but register.flowlogic() requested") + end end register.flowlogic = register_flowlogic_abm -- cgit v1.2.3