@@ -33,12 +33,14 @@ def build_nodes(width, height, matrix=None, inverse=False):
3333
3434
3535class 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