mirror of
https://github.com/mt-mods/pipeworks.git
synced 2024-12-24 18:00:22 +01:00
add turn-to-vertical handling to valve, flow sensor
reuse the code from entry panel
This commit is contained in:
parent
88ad79163d
commit
e5ee0dee90
125
devices.lua
125
devices.lua
@ -1,4 +1,6 @@
|
|||||||
|
|
||||||
|
-- rotation handlers
|
||||||
|
|
||||||
function pipeworks.fix_after_rotation(pos, node, user, mode, new_param2)
|
function pipeworks.fix_after_rotation(pos, node, user, mode, new_param2)
|
||||||
|
|
||||||
if string.find(node.name, "spigot") then new_param2 = new_param2 % 4 end
|
if string.find(node.name, "spigot") then new_param2 = new_param2 % 4 end
|
||||||
@ -10,6 +12,71 @@ function pipeworks.fix_after_rotation(pos, node, user, mode, new_param2)
|
|||||||
return true
|
return true
|
||||||
end
|
end
|
||||||
|
|
||||||
|
function pipeworks.rotate_on_place(itemstack, placer, pointed_thing)
|
||||||
|
|
||||||
|
local playername = placer:get_player_name()
|
||||||
|
if not minetest.is_protected(pointed_thing.under, playername)
|
||||||
|
and not minetest.is_protected(pointed_thing.above, playername) then
|
||||||
|
|
||||||
|
local node = minetest.get_node(pointed_thing.under)
|
||||||
|
|
||||||
|
if (not placer:get_player_control().sneak)
|
||||||
|
and minetest.registered_nodes[node.name]
|
||||||
|
and minetest.registered_nodes[node.name].on_rightclick then
|
||||||
|
minetest.registered_nodes[node.name].on_rightclick(pointed_thing.under, node, placer, itemstack)
|
||||||
|
else
|
||||||
|
|
||||||
|
local pitch = placer:get_look_pitch()
|
||||||
|
local above = pointed_thing.above
|
||||||
|
local under = pointed_thing.under
|
||||||
|
local fdir = minetest.dir_to_facedir(placer:get_look_dir())
|
||||||
|
local undernode = minetest.get_node(under)
|
||||||
|
local abovenode = minetest.get_node(above)
|
||||||
|
local uname = undernode.name
|
||||||
|
local aname = abovenode.name
|
||||||
|
local isabove = (above.x == under.x) and (above.z == under.z) and (pitch > 0)
|
||||||
|
local pos1 = above
|
||||||
|
|
||||||
|
-- check if the object should be turned vertically
|
||||||
|
if above.x == under.x
|
||||||
|
and above.z == under.z
|
||||||
|
and (
|
||||||
|
string.find(uname, "pipeworks:pipe_")
|
||||||
|
or string.find(uname, "pipeworks:storage_")
|
||||||
|
or string.find(uname, "pipeworks:expansion_")
|
||||||
|
or ( string.find(uname, "pipeworks:grating") and not isabove )
|
||||||
|
or ( string.find(uname, "pipeworks:pump_") and not isabove )
|
||||||
|
|
||||||
|
or (
|
||||||
|
( string.find(uname, "pipeworks:valve")
|
||||||
|
or string.find(uname, "pipeworks:entry_panel")
|
||||||
|
or string.find(uname, "pipeworks:flow_sensor") )
|
||||||
|
and minetest.facedir_to_dir(undernode.param2).y ~= 0 )
|
||||||
|
)
|
||||||
|
then
|
||||||
|
fdir = 17
|
||||||
|
end
|
||||||
|
|
||||||
|
if minetest.registered_nodes[uname]
|
||||||
|
and minetest.registered_nodes[uname]["buildable_to"] then
|
||||||
|
pos1 = under
|
||||||
|
end
|
||||||
|
|
||||||
|
if minetest.registered_nodes[minetest.get_node(pos1).name]
|
||||||
|
and not minetest.registered_nodes[minetest.get_node(pos1).name]["buildable_to"] then return end
|
||||||
|
|
||||||
|
local placednode = itemstack:get_name()
|
||||||
|
minetest.add_node(pos1, {name = placednode, param2 = fdir })
|
||||||
|
pipeworks.scan_for_pipe_objects(pos1)
|
||||||
|
|
||||||
|
if not pipeworks.expect_infinite_stacks then
|
||||||
|
itemstack:take_item()
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
return itemstack
|
||||||
|
end
|
||||||
|
|
||||||
-- List of devices that should participate in the autoplace algorithm
|
-- List of devices that should participate in the autoplace algorithm
|
||||||
|
|
||||||
local pipereceptor_on = nil
|
local pipereceptor_on = nil
|
||||||
@ -111,6 +178,7 @@ for s in ipairs(states) do
|
|||||||
groups = dgroups,
|
groups = dgroups,
|
||||||
sounds = default.node_sound_wood_defaults(),
|
sounds = default.node_sound_wood_defaults(),
|
||||||
walkable = true,
|
walkable = true,
|
||||||
|
on_place = pipeworks.rotate_on_place,
|
||||||
after_place_node = function(pos)
|
after_place_node = function(pos)
|
||||||
pipeworks.scan_for_pipe_objects(pos)
|
pipeworks.scan_for_pipe_objects(pos)
|
||||||
end,
|
end,
|
||||||
@ -153,6 +221,7 @@ minetest.register_node("pipeworks:valve_on_loaded", {
|
|||||||
groups = {snappy=3, pipe=1, not_in_creative_inventory=1},
|
groups = {snappy=3, pipe=1, not_in_creative_inventory=1},
|
||||||
sounds = default.node_sound_wood_defaults(),
|
sounds = default.node_sound_wood_defaults(),
|
||||||
walkable = true,
|
walkable = true,
|
||||||
|
on_place = pipeworks.rotate_on_place,
|
||||||
after_place_node = function(pos)
|
after_place_node = function(pos)
|
||||||
pipeworks.scan_for_pipe_objects(pos)
|
pipeworks.scan_for_pipe_objects(pos)
|
||||||
end,
|
end,
|
||||||
@ -292,6 +361,7 @@ minetest.register_node("pipeworks:entry_panel_empty", {
|
|||||||
groups = {snappy=3, pipe=1},
|
groups = {snappy=3, pipe=1},
|
||||||
sounds = default.node_sound_wood_defaults(),
|
sounds = default.node_sound_wood_defaults(),
|
||||||
walkable = true,
|
walkable = true,
|
||||||
|
on_place = pipeworks.rotate_on_place,
|
||||||
after_place_node = function(pos)
|
after_place_node = function(pos)
|
||||||
pipeworks.scan_for_pipe_objects(pos)
|
pipeworks.scan_for_pipe_objects(pos)
|
||||||
end,
|
end,
|
||||||
@ -300,58 +370,6 @@ minetest.register_node("pipeworks:entry_panel_empty", {
|
|||||||
end,
|
end,
|
||||||
selection_box = panel_cbox,
|
selection_box = panel_cbox,
|
||||||
collision_box = panel_cbox,
|
collision_box = panel_cbox,
|
||||||
on_place = function(itemstack, placer, pointed_thing)
|
|
||||||
local playername = placer:get_player_name()
|
|
||||||
if not minetest.is_protected(pointed_thing.under, playername)
|
|
||||||
and not minetest.is_protected(pointed_thing.above, playername) then
|
|
||||||
local node = minetest.get_node(pointed_thing.under)
|
|
||||||
|
|
||||||
if not minetest.registered_nodes[node.name]
|
|
||||||
or not minetest.registered_nodes[node.name].on_rightclick then
|
|
||||||
local pitch = placer:get_look_pitch()
|
|
||||||
local above = pointed_thing.above
|
|
||||||
local under = pointed_thing.under
|
|
||||||
local fdir = minetest.dir_to_facedir(placer:get_look_dir())
|
|
||||||
local undernode = minetest.get_node(under)
|
|
||||||
local abovenode = minetest.get_node(above)
|
|
||||||
local uname = undernode.name
|
|
||||||
local aname = abovenode.name
|
|
||||||
local isabove = (above.x == under.x) and (above.z == under.z) and (pitch > 0)
|
|
||||||
local pos1 = above
|
|
||||||
|
|
||||||
if above.x == under.x
|
|
||||||
and above.z == under.z
|
|
||||||
and ( string.find(uname, "pipeworks:pipe_")
|
|
||||||
or string.find(uname, "pipeworks:storage_")
|
|
||||||
or string.find(uname, "pipeworks:expansion_")
|
|
||||||
or ( string.find(uname, "pipeworks:grating") and not isabove )
|
|
||||||
or ( string.find(uname, "pipeworks:pump_") and not isabove )
|
|
||||||
or ( string.find(uname, "pipeworks:entry_panel")
|
|
||||||
and undernode.param2 == 13 )
|
|
||||||
)
|
|
||||||
then
|
|
||||||
fdir = 13
|
|
||||||
end
|
|
||||||
|
|
||||||
if minetest.registered_nodes[uname]["buildable_to"] then
|
|
||||||
pos1 = under
|
|
||||||
end
|
|
||||||
|
|
||||||
if not minetest.registered_nodes[minetest.get_node(pos1).name]["buildable_to"] then return end
|
|
||||||
|
|
||||||
minetest.add_node(pos1, {name = "pipeworks:entry_panel_empty", param2 = fdir })
|
|
||||||
pipeworks.scan_for_pipe_objects(pos1)
|
|
||||||
|
|
||||||
if not pipeworks.expect_infinite_stacks then
|
|
||||||
itemstack:take_item()
|
|
||||||
end
|
|
||||||
|
|
||||||
else
|
|
||||||
minetest.registered_nodes[node.name].on_rightclick(pointed_thing.under, node, placer, itemstack)
|
|
||||||
end
|
|
||||||
end
|
|
||||||
return itemstack
|
|
||||||
end,
|
|
||||||
on_rotate = pipeworks.fix_after_rotation
|
on_rotate = pipeworks.fix_after_rotation
|
||||||
})
|
})
|
||||||
|
|
||||||
@ -365,6 +383,7 @@ minetest.register_node("pipeworks:entry_panel_loaded", {
|
|||||||
groups = {snappy=3, pipe=1, not_in_creative_inventory=1},
|
groups = {snappy=3, pipe=1, not_in_creative_inventory=1},
|
||||||
sounds = default.node_sound_wood_defaults(),
|
sounds = default.node_sound_wood_defaults(),
|
||||||
walkable = true,
|
walkable = true,
|
||||||
|
on_place = pipeworks.rotate_on_place,
|
||||||
after_place_node = function(pos)
|
after_place_node = function(pos)
|
||||||
pipeworks.scan_for_pipe_objects(pos)
|
pipeworks.scan_for_pipe_objects(pos)
|
||||||
end,
|
end,
|
||||||
@ -388,6 +407,7 @@ minetest.register_node("pipeworks:flow_sensor_empty", {
|
|||||||
groups = {snappy=3, pipe=1},
|
groups = {snappy=3, pipe=1},
|
||||||
sounds = default.node_sound_wood_defaults(),
|
sounds = default.node_sound_wood_defaults(),
|
||||||
walkable = true,
|
walkable = true,
|
||||||
|
on_place = pipeworks.rotate_on_place,
|
||||||
after_place_node = function(pos)
|
after_place_node = function(pos)
|
||||||
pipeworks.scan_for_pipe_objects(pos)
|
pipeworks.scan_for_pipe_objects(pos)
|
||||||
end,
|
end,
|
||||||
@ -428,6 +448,7 @@ minetest.register_node("pipeworks:flow_sensor_loaded", {
|
|||||||
groups = {snappy=3, pipe=1, not_in_creative_inventory=1},
|
groups = {snappy=3, pipe=1, not_in_creative_inventory=1},
|
||||||
sounds = default.node_sound_wood_defaults(),
|
sounds = default.node_sound_wood_defaults(),
|
||||||
walkable = true,
|
walkable = true,
|
||||||
|
on_place = pipeworks.rotate_on_place,
|
||||||
after_place_node = function(pos)
|
after_place_node = function(pos)
|
||||||
pipeworks.scan_for_pipe_objects(pos)
|
pipeworks.scan_for_pipe_objects(pos)
|
||||||
end,
|
end,
|
||||||
|
Loading…
Reference in New Issue
Block a user