Skip to content

Commit 248480f

Browse files
committed
allows passing through up-down/left-right borders on option
1 parent f8956e5 commit 248480f

1 file changed

Lines changed: 35 additions & 13 deletions

File tree

pathfinding/core/grid.py

Lines changed: 35 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -33,12 +33,14 @@ def build_nodes(width, height, matrix=None, inverse=False):
3333

3434

3535
class Grid(object):
36-
def __init__(self, width=0, height=0, matrix=None, inverse=False):
36+
def __init__(self, width=0, height=0, matrix=None, inverse=False, passable_left_right_border=False, passable_up_down_border=False):
3737
"""
3838
a grid represents the map (as 2d-list of nodes).
3939
"""
4040
self.width = width
4141
self.height = height
42+
self.passable_left_right_border = passable_left_right_border
43+
self.passable_up_down_border = passable_up_down_border
4244
if isinstance(matrix, (tuple, list)) or (
4345
USE_NUMPY and isinstance(matrix, np.ndarray) and
4446
matrix.size > 0):
@@ -84,21 +86,41 @@ def neighbors(self, node, diagonal_movement=DiagonalMovement.never):
8486
s0 = d0 = s1 = d1 = s2 = d2 = s3 = d3 = False
8587

8688
# ↑
87-
if self.walkable(x, y - 1):
88-
neighbors.append(self.nodes[y - 1][x])
89-
s0 = True
89+
if y == 0 and self.passable_up_down_border:
90+
if self.walkable(x, self.height - 1):
91+
neighbors.append(self.nodes[self.height - 1][x])
92+
s0 = True
93+
else:
94+
if self.walkable(x, y - 1):
95+
neighbors.append(self.nodes[y - 1][x])
96+
s0 = True
9097
# →
91-
if self.walkable(x + 1, y):
92-
neighbors.append(self.nodes[y][x + 1])
93-
s1 = True
98+
if x == self.width and self.passable_left_right_border:
99+
if self.walkable(0, y):
100+
neighbors.append(self.nodes[y][0])
101+
s1 = True
102+
else:
103+
if self.walkable(x + 1, y):
104+
neighbors.append(self.nodes[y][x + 1])
105+
s1 = True
94106
# ↓
95-
if self.walkable(x, y + 1):
96-
neighbors.append(self.nodes[y + 1][x])
97-
s2 = True
107+
if y == self.height and self.passable_up_down_border:
108+
if self.walkable(x, 0):
109+
neighbors.append(self.nodes[0][x])
110+
s2 = True
111+
else:
112+
if self.walkable(x, y + 1):
113+
neighbors.append(self.nodes[y + 1][x])
114+
s2 = True
98115
# ←
99-
if self.walkable(x - 1, y):
100-
neighbors.append(self.nodes[y][x - 1])
101-
s3 = True
116+
if x == 0 and self.passable_left_right_border:
117+
if self.walkable(self.width - 1, y):
118+
neighbors.append(self.nodes[y][self.width - 1])
119+
s3 = True
120+
else:
121+
if self.walkable(x - 1, y):
122+
neighbors.append(self.nodes[y][x - 1])
123+
s3 = True
102124

103125
if diagonal_movement == DiagonalMovement.never:
104126
return neighbors

0 commit comments

Comments
 (0)