summaryrefslogtreecommitdiff
path: root/pipeworks/devices.lua
diff options
context:
space:
mode:
authorVanessa Ezekowitz <vanessaezekowitz@gmail.com>2017-10-27 15:13:31 -0400
committerVanessa Ezekowitz <vanessaezekowitz@gmail.com>2017-10-27 15:13:31 -0400
commit6281dc744dc3951234931a9f44c3bdd353f79df7 (patch)
tree0ead0d0d18be58bed7480cb9a5ea1495230c568f /pipeworks/devices.lua
parent2e6082ccdbd121cd5fc0f82a931ac01ac00dcb76 (diff)
downloaddreambuilder_modpack-6281dc744dc3951234931a9f44c3bdd353f79df7.tar
dreambuilder_modpack-6281dc744dc3951234931a9f44c3bdd353f79df7.tar.gz
dreambuilder_modpack-6281dc744dc3951234931a9f44c3bdd353f79df7.tar.bz2
dreambuilder_modpack-6281dc744dc3951234931a9f44c3bdd353f79df7.tar.xz
dreambuilder_modpack-6281dc744dc3951234931a9f44c3bdd353f79df7.zip
updated boost cart, homedecor modpack, castles modpack, currency, farming-redo,
maptools, mesecons, moreblocks, moreores, pipeworks, quartz
Diffstat (limited to 'pipeworks/devices.lua')
-rw-r--r--pipeworks/devices.lua135
1 files changed, 102 insertions, 33 deletions
diff --git a/pipeworks/devices.lua b/pipeworks/devices.lua
index 0121e2f..3b215f4 100644
--- a/pipeworks/devices.lua
+++ b/pipeworks/devices.lua
@@ -1,3 +1,7 @@
+local new_flow_logic_register = pipeworks.flowables.register
+
+local polys = ""
+if pipeworks.enable_lowpoly then polys = "_lowpoly" end
-- rotation handlers
@@ -68,7 +72,7 @@ function pipeworks.rotate_on_place(itemstack, placer, pointed_thing)
local placednode = string.gsub(itemstack:get_name(), "_loaded", "_empty")
placednode = string.gsub(placednode, "_on", "_off")
- minetest.add_node(pos1, {name = placednode, param2 = fdir })
+ minetest.swap_node(pos1, {name = placednode, param2 = fdir })
pipeworks.scan_for_pipe_objects(pos1)
if not pipeworks.expect_infinite_stacks then
@@ -129,10 +133,11 @@ for s in ipairs(states) do
dgroups = {snappy=3, pipe=1, not_in_creative_inventory=1}
end
- minetest.register_node("pipeworks:pump_"..states[s], {
+ local pumpname = "pipeworks:pump_"..states[s]
+ minetest.register_node(pumpname, {
description = "Pump/Intake Module",
drawtype = "mesh",
- mesh = "pipeworks_pump.obj",
+ mesh = "pipeworks_pump"..polys..".obj",
tiles = { "pipeworks_pump_"..states[s]..".png" },
paramtype = "light",
paramtype2 = "facedir",
@@ -149,23 +154,33 @@ for s in ipairs(states) do
drop = "pipeworks:pump_off",
mesecons = {effector = {
action_on = function (pos, node)
- minetest.add_node(pos,{name="pipeworks:pump_on", param2 = node.param2})
+ minetest.swap_node(pos,{name="pipeworks:pump_on", param2 = node.param2})
end,
action_off = function (pos, node)
- minetest.add_node(pos,{name="pipeworks:pump_off", param2 = node.param2})
+ minetest.swap_node(pos,{name="pipeworks:pump_off", param2 = node.param2})
end
}},
on_rightclick = function(pos, node, clicker, itemstack, pointed_thing)
local fdir = node.param2
- minetest.add_node(pos, { name = "pipeworks:pump_"..states[3-s], param2 = fdir })
+ minetest.swap_node(pos, { name = "pipeworks:pump_"..states[3-s], param2 = fdir })
end,
on_rotate = screwdriver.rotate_simple
})
-
- minetest.register_node("pipeworks:valve_"..states[s].."_empty", {
+
+ -- FIXME: this currently assumes that pumps can only rotate around the fixed axis pointing Y+.
+ new_flow_logic_register.directional_vertical_fixed(pumpname, true)
+ local pump_drive = 4
+ if states[s] ~= "off" then
+ new_flow_logic_register.intake_simple(pumpname, pump_drive)
+ end
+
+
+
+ local nodename_valve_empty = "pipeworks:valve_"..states[s].."_empty"
+ minetest.register_node(nodename_valve_empty, {
description = "Valve",
drawtype = "mesh",
- mesh = "pipeworks_valve_"..states[s]..".obj",
+ mesh = "pipeworks_valve_"..states[s]..polys..".obj",
tiles = { "pipeworks_valve.png" },
sunlight_propagates = true,
paramtype = "light",
@@ -188,24 +203,30 @@ for s in ipairs(states) do
drop = "pipeworks:valve_off_empty",
mesecons = {effector = {
action_on = function (pos, node)
- minetest.add_node(pos,{name="pipeworks:valve_on_empty", param2 = node.param2})
+ minetest.swap_node(pos,{name="pipeworks:valve_on_empty", param2 = node.param2})
end,
action_off = function (pos, node)
- minetest.add_node(pos,{name="pipeworks:valve_off_empty", param2 = node.param2})
+ minetest.swap_node(pos,{name="pipeworks:valve_off_empty", param2 = node.param2})
end
}},
on_rightclick = function(pos, node, clicker, itemstack, pointed_thing)
local fdir = node.param2
- minetest.add_node(pos, { name = "pipeworks:valve_"..states[3-s].."_empty", param2 = fdir })
+ minetest.swap_node(pos, { name = "pipeworks:valve_"..states[3-s].."_empty", param2 = fdir })
end,
on_rotate = pipeworks.fix_after_rotation
})
+ -- only register flow logic for the "on" ABM.
+ -- this means that the off state automatically blocks flow by not participating in the balancing operation.
+ if states[s] ~= "off" then
+ new_flow_logic_register.directional_horizonal_rotate(nodename_valve_empty, true)
+ end
end
-minetest.register_node("pipeworks:valve_on_loaded", {
+local nodename_valve_loaded = "pipeworks:valve_on_loaded"
+minetest.register_node(nodename_valve_loaded, {
description = "Valve",
drawtype = "mesh",
- mesh = "pipeworks_valve_on.obj",
+ mesh = "pipeworks_valve_on"..polys..".obj",
tiles = { "pipeworks_valve.png" },
sunlight_propagates = true,
paramtype = "light",
@@ -228,21 +249,28 @@ minetest.register_node("pipeworks:valve_on_loaded", {
drop = "pipeworks:valve_off_empty",
mesecons = {effector = {
action_on = function (pos, node)
- minetest.add_node(pos,{name="pipeworks:valve_on_empty", param2 = node.param2})
+ minetest.swap_node(pos,{name="pipeworks:valve_on_empty", param2 = node.param2})
end,
action_off = function (pos, node)
- minetest.add_node(pos,{name="pipeworks:valve_off_empty", param2 = node.param2})
+ minetest.swap_node(pos,{name="pipeworks:valve_off_empty", param2 = node.param2})
end
}},
on_rightclick = function(pos, node, clicker, itemstack, pointed_thing)
local fdir = node.param2
- minetest.add_node(pos, { name = "pipeworks:valve_off_empty", param2 = fdir })
+ minetest.swap_node(pos, { name = "pipeworks:valve_off_empty", param2 = fdir })
end,
on_rotate = pipeworks.fix_after_rotation
})
+-- register this the same as the on-but-empty variant, so existing nodes of this type work also.
+-- note that as new_flow_logic code does not distinguish empty/full in node states,
+-- right-clicking a "loaded" valve (becoming an off valve) then turning it on again will yield a on-but-empty valve,
+-- but the flow logic will still function.
+-- thus under new_flow_logic this serves as a kind of migration.
+new_flow_logic_register.directional_horizonal_rotate(nodename_valve_loaded, true)
-- grating
+-- FIXME: should this do anything useful in the new flow logic?
minetest.register_node("pipeworks:grating", {
description = "Decorative grating",
tiles = {
@@ -275,10 +303,11 @@ minetest.register_node("pipeworks:grating", {
-- outlet spigot
-minetest.register_node("pipeworks:spigot", {
+local nodename_spigot_empty = "pipeworks:spigot"
+minetest.register_node(nodename_spigot_empty, {
description = "Spigot outlet",
drawtype = "mesh",
- mesh = "pipeworks_spigot.obj",
+ mesh = "pipeworks_spigot"..polys..".obj",
tiles = { "pipeworks_spigot.png" },
sunlight_propagates = true,
paramtype = "light",
@@ -305,10 +334,11 @@ minetest.register_node("pipeworks:spigot", {
on_rotate = pipeworks.fix_after_rotation
})
-minetest.register_node("pipeworks:spigot_pouring", {
+local nodename_spigot_loaded = "pipeworks:spigot_pouring"
+minetest.register_node(nodename_spigot_loaded, {
description = "Spigot outlet",
drawtype = "mesh",
- mesh = "pipeworks_spigot_pouring.obj",
+ mesh = "pipeworks_spigot_pouring"..polys..".obj",
tiles = {
{
name = "default_water_flowing_animated.png",
@@ -347,6 +377,17 @@ minetest.register_node("pipeworks:spigot_pouring", {
drop = "pipeworks:spigot",
on_rotate = pipeworks.fix_after_rotation
})
+-- new flow logic does not currently distinguish between these two visual states.
+-- register both so existing flowing spigots continue to work (even if the visual doesn't match the spigot's behaviour).
+new_flow_logic_register.directional_horizonal_rotate(nodename_spigot_empty, false)
+new_flow_logic_register.directional_horizonal_rotate(nodename_spigot_loaded, false)
+local spigot_upper = 1.0
+local spigot_lower = 1.0
+local spigot_neighbours={{x=0, y=-1, z=0}}
+new_flow_logic_register.output_simple(nodename_spigot_empty, spigot_upper, spigot_lower, spigot_neighbours)
+new_flow_logic_register.output_simple(nodename_spigot_loaded, spigot_upper, spigot_lower, spigot_neighbours)
+
+
-- sealed pipe entry/exit (horizontal pipe passing through a metal
-- wall, for use in places where walls should look like they're airtight)
@@ -359,10 +400,11 @@ local panel_cbox = {
}
}
-minetest.register_node("pipeworks:entry_panel_empty", {
+local nodename_panel_empty = "pipeworks:entry_panel_empty"
+minetest.register_node(nodename_panel_empty, {
description = "Airtight Pipe entry/exit",
drawtype = "mesh",
- mesh = "pipeworks_entry_panel.obj",
+ mesh = "pipeworks_entry_panel"..polys..".obj",
tiles = { "pipeworks_entry_panel.png" },
paramtype = "light",
paramtype2 = "facedir",
@@ -378,10 +420,11 @@ minetest.register_node("pipeworks:entry_panel_empty", {
on_rotate = pipeworks.fix_after_rotation
})
-minetest.register_node("pipeworks:entry_panel_loaded", {
+local nodename_panel_loaded = "pipeworks:entry_panel_loaded"
+minetest.register_node(nodename_panel_loaded, {
description = "Airtight Pipe entry/exit",
drawtype = "mesh",
- mesh = "pipeworks_entry_panel.obj",
+ mesh = "pipeworks_entry_panel"..polys..".obj",
tiles = { "pipeworks_entry_panel.png" },
paramtype = "light",
paramtype2 = "facedir",
@@ -397,11 +440,17 @@ minetest.register_node("pipeworks:entry_panel_loaded", {
drop = "pipeworks:entry_panel_empty",
on_rotate = pipeworks.fix_after_rotation
})
+-- TODO: AFAIK the two panels have no visual difference, so are redundant under new flow logic - alias?
+new_flow_logic_register.directional_horizonal_rotate(nodename_panel_empty, true)
+new_flow_logic_register.directional_horizonal_rotate(nodename_panel_loaded, true)
+
-minetest.register_node("pipeworks:flow_sensor_empty", {
+
+local nodename_sensor_empty = "pipeworks:flow_sensor_empty"
+minetest.register_node(nodename_sensor_empty, {
description = "Flow Sensor",
drawtype = "mesh",
- mesh = "pipeworks_flow_sensor.obj",
+ mesh = "pipeworks_flow_sensor"..polys..".obj",
tiles = { "pipeworks_flow_sensor_off.png" },
sunlight_propagates = true,
paramtype = "light",
@@ -436,10 +485,11 @@ minetest.register_node("pipeworks:flow_sensor_empty", {
on_rotate = pipeworks.fix_after_rotation
})
-minetest.register_node("pipeworks:flow_sensor_loaded", {
+local nodename_sensor_loaded = "pipeworks:flow_sensor_loaded"
+minetest.register_node(nodename_sensor_loaded, {
description = "Flow sensor (on)",
drawtype = "mesh",
- mesh = "pipeworks_flow_sensor.obj",
+ mesh = "pipeworks_flow_sensor"..polys..".obj",
tiles = { "pipeworks_flow_sensor_on.png" },
sunlight_propagates = true,
paramtype = "light",
@@ -474,9 +524,17 @@ minetest.register_node("pipeworks:flow_sensor_loaded", {
mesecons = pipereceptor_on,
on_rotate = pipeworks.fix_after_rotation
})
+new_flow_logic_register.directional_horizonal_rotate(nodename_sensor_empty, true)
+new_flow_logic_register.directional_horizonal_rotate(nodename_sensor_loaded, true)
+-- activate flow sensor at roughly half the pressure pumps drive pipes
+local sensor_pressure_set = { { nodename_sensor_empty, 0.0 }, { nodename_sensor_loaded, 1.0 } }
+new_flow_logic_register.transition_simple_set(sensor_pressure_set, { mesecons=pipeworks.mesecons_rules })
+
+
-- tanks
+-- TODO flow-logic-stub: these don't currently do anything under the new flow logic.
for fill = 0, 10 do
local filldesc="empty"
local sgroups = {snappy=3, pipe=1, tankfill=fill+1}
@@ -547,10 +605,11 @@ end
-- fountainhead
-minetest.register_node("pipeworks:fountainhead", {
+local nodename_fountain_empty = "pipeworks:fountainhead"
+minetest.register_node(nodename_fountain_empty, {
description = "Fountainhead",
drawtype = "mesh",
- mesh = "pipeworks_fountainhead.obj",
+ mesh = "pipeworks_fountainhead"..polys..".obj",
tiles = { "pipeworks_fountainhead.png" },
sunlight_propagates = true,
paramtype = "light",
@@ -580,10 +639,11 @@ minetest.register_node("pipeworks:fountainhead", {
on_rotate = false
})
-minetest.register_node("pipeworks:fountainhead_pouring", {
+local nodename_fountain_loaded = "pipeworks:fountainhead_pouring"
+minetest.register_node(nodename_fountain_loaded, {
description = "Fountainhead",
drawtype = "mesh",
- mesh = "pipeworks_fountainhead.obj",
+ mesh = "pipeworks_fountainhead"..polys..".obj",
tiles = { "pipeworks_fountainhead.png" },
sunlight_propagates = true,
paramtype = "light",
@@ -614,6 +674,15 @@ minetest.register_node("pipeworks:fountainhead_pouring", {
drop = "pipeworks:fountainhead",
on_rotate = false
})
+new_flow_logic_register.directional_vertical_fixed(nodename_fountain_empty, false)
+new_flow_logic_register.directional_vertical_fixed(nodename_fountain_loaded, false)
+local fountain_upper = 1.0
+local fountain_lower = 1.0
+local fountain_neighbours={{x=0, y=1, z=0}}
+new_flow_logic_register.output_simple(nodename_fountain_empty, fountain_upper, fountain_lower, fountain_neighbours)
+new_flow_logic_register.output_simple(nodename_fountain_loaded, fountain_upper, fountain_lower, fountain_neighbours)
+
+
minetest.register_alias("pipeworks:valve_off_loaded", "pipeworks:valve_off_empty")
minetest.register_alias("pipeworks:entry_panel", "pipeworks:entry_panel_empty")