New valid dir methods for easier checking

This commit is contained in:
Cam B 2021-01-21 00:12:03 +00:00
parent 518e76d638
commit 024f9da472
2 changed files with 23 additions and 11 deletions

@ -121,12 +121,7 @@ function Tube:get_secondary_node(pos, dir)
local npos = vector.add(pos, Dir6dToVector[dir or 0])
local node = self:get_node_lvm(npos)
if self.secondary_node_names[node.name] then
local is_valid_dir = nil
if dir ~= nil then
local side = tubelib2.dir_to_side(Turn180Deg[dir], node.param2)
is_valid_dir = self.secondary_node_names[node.name][side] or false
end
return node, npos, is_valid_dir
return node, npos
end
end
@ -147,7 +142,7 @@ end
function Tube:is_secondary_node(pos, dir)
local npos = vector.add(pos, Dir6dToVector[dir or 0])
local node = self:get_node_lvm(npos)
return self.secondary_node_names[node.name]
return self.secondary_node_names[node.name] ~= nil
end
-- Check if node at given position is a special node
@ -291,9 +286,9 @@ function Tube:determine_tube_dirs(pos, preferred_pos, fdir)
-- Check for secondary nodes (chests and so on)
for dir = 1,6 do
if allowed[dir] then
local _,npos,allow = self:get_secondary_node(pos, dir)
local node,npos = self:get_secondary_node(pos, dir)
if npos then
if allow == false then
if self:is_valid_dir(node, Turn180Deg[dir]) == false then
allowed[dir] = false
else
if preferred_pos and vector.equals(npos, preferred_pos) then
@ -416,8 +411,8 @@ function Tube:walk_tube_line(pos, dir)
local cnt = 0
if dir then
while cnt <= self.max_tube_length do
local secondary,_,valid = self:get_secondary_node(pos, dir)
if secondary and valid == false then
local secondary = self:get_secondary_node(pos, dir)
if secondary and self:is_valid_dir(secondary, Turn180Deg[dir]) == false then
break
end
local new_pos, new_dir, num = self:get_next_tube(pos, dir)

@ -231,6 +231,23 @@ function Tube:add_secondary_node_names(names, valid_sides)
end
end
-- Checks the list of secondary nodes to see if a
-- given side can be connected to
function Tube:is_valid_side(name, side)
if self.secondary_node_names[name] then
return self.secondary_node_names[name][side] or false
end
end
-- Checks is a particular node can be connected to
-- from a particular direction, taing into account orientation
function Tube:is_valid_dir(node, dir)
if dir ~= nil then
local side = tubelib2.dir_to_side(dir, node.param2)
return self:is_valid_side(node.name, side)
end
end
-- Register further nodes, which should be updated after
-- a node/tube is placed/dug
function Tube:add_special_node_names(names)