def _find_next_neighbourhood(animal_obj, current_triangles, traversed_triangles):
    """ Find the triangles adjacent to a given list of triangles in an animal mesh,
    disregarding previously traversed triangles.

    Given an animal object, a set of triangles whose neighbours we want to get and a set of
    inner triangles or edges we have already traversed, find the next layer of adjacent
    triangles that we have not yet traversed.

    Parameters
    ----------
    animal_obj : Animal() object
        Initialized with regular coordinates and triangulation set/updated.
    current_triangles: set of int
        The set containing the indices of triangles whose neighbours we want to find.
    traversed_triangles: set of int
        The set containing the ndices of triangles which we have already traversed.

    Returns
    -------
    set of int
        The set of all triangles not in traversed_triangles and are adjacent to any
        triangle in current_triangles.
    """
    #initialise return set
    all_adjacent_triangles = set()

    #use the triangle-triangle adjacency array to find neighbouring triangles
    triangle_triangle_adjacency_array = animal_obj.get_triangle_triangle_adjacency()

    for triangle_i in current_triangles:
        #update all adjacent triangles with the triangles adjacent to each triangle
        adjacent_triangles = triangle_triangle_adjacency_array[triangle_i]
        all_adjacent_triangles.update(adjacent_triangles)

    #remove -1 (indicating that no triangle is adjacent to that edge) and
    #traversed triangles from all the adjacent triangles we've found
    all_adjacent_triangles.difference_update(traversed_triangles)
    all_adjacent_triangles.discard(-1)

    return all_adjacent_triangles