diff --git a/src/tools/grid.py b/src/tools/grid.py index 109d6fc..0a53bec 100644 --- a/src/tools/grid.py +++ b/src/tools/grid.py @@ -229,6 +229,20 @@ class Grid: else: return self.__grid.keys() + def getRegion(self, start: Coordinate, includeDiagonal: bool = False) -> Iterable[Coordinate]: + start_value = self.get(start) + queue = deque() + queue.append(start) + visited = set() + while queue: + next_coord = queue.popleft() + if next_coord in visited or not self.isWithinBoundaries(next_coord) or self.get(next_coord) != start_value: + continue + visited.add(next_coord) + yield next_coord + for n in self.getNeighboursOf(next_coord, includeDefault=True, includeDiagonal=includeDiagonal): + queue.append(n) + def getActiveRegion( self, start: Coordinate,