public List<Tile> findPath() { MazeTileNode lastNode = run(); if (isTarget(lastNode)) { // Reconstruct path List<MazeTileNode> nodePath = reconstructPath(lastNode); // Create list of tiles List<Tile> path = new LinkedList<Tile>(); for (MazeTileNode node : nodePath) { path.add(node.getTile()); } return path; } else { // No path found return null; } }
@Override public boolean isValidNode(MazeTileNode node) { return tileValidator.apply(node.getTile()); }
@Override public boolean isTarget(MazeTileNode node) { return node != null && node.equals(getTarget()); }
@Override protected boolean canHaveAsTarget(MazeTileNode target) { return super.canHaveAsTarget(target) && target.getMaze() == getMaze(); }