public AStarNode findPath(AStarNode start, AStarNode destination) {
		// Push start to open.
		aStar.addOpen(start);
		while (aStar.isOpenNodeAvailable()) {
			AStarNode current = aStar.obtainOpenNodeWithLowestCost();
			if (current.isTouching(destination)) {
				return current;
			} else {
				aStar.addClosed(current);
				// Examine and cost out adjacent nodes, adding them to the open list if appropriate
				for (AStarNode adjacentNode: aStar.getAdjacentTo(current)) {
					if (!aStar.isInOpen(adjacentNode) && !aStar.isInClosed(adjacentNode) && aStar.canBeInPath(adjacentNode)) {
						aStar.setFactors(current, destination, adjacentNode);
						aStar.addOpen(adjacentNode);
					}
				}
			}
		}
		return null;
	}