From 2031291d0018eb426dbd9f61fa1ea07bf4d7ffd9 Mon Sep 17 00:00:00 2001 From: Thibaud Date: Mon, 1 Oct 2018 15:56:53 +0200 Subject: [PATCH] [Pathfinding] inline getNeighbor() method --- .../pathfinding/algorithm/AStarSearch.java | 37 +++++++++---------- 1 file changed, 17 insertions(+), 20 deletions(-) diff --git a/simple-pathfinding/src/main/java/fr/uha/gasser/pathfinding/algorithm/AStarSearch.java b/simple-pathfinding/src/main/java/fr/uha/gasser/pathfinding/algorithm/AStarSearch.java index 95d8d6e..28a31f7 100644 --- a/simple-pathfinding/src/main/java/fr/uha/gasser/pathfinding/algorithm/AStarSearch.java +++ b/simple-pathfinding/src/main/java/fr/uha/gasser/pathfinding/algorithm/AStarSearch.java @@ -48,38 +48,35 @@ class AStarSearch { } List shortestPath() { + final LinkedList path = new LinkedList<>(); Node currentNode = search(); - LinkedList path = new LinkedList<>(); - while (currentNode.getParent() != null) { - path.addFirst(currentNode); - currentNode = currentNode.getParent(); - } + if (currentNode != null) { + while (currentNode.getParent() != null) { + path.addFirst(currentNode); + currentNode = currentNode.getParent(); + } + } return path; } private List getNeighbors(Node current) { - LinkedList neighbors = new LinkedList<>(); + final Dimension gridSize = grid.getSize(); + final LinkedList neighbors = new LinkedList<>(); for (Direction direction : Direction.values()) { - final Node neighbor = getNeighbor(current, direction); - // If neighbor is a wall or off the grid (null), don't add it to the list - if (neighbor != null) neighbors.add(neighbor); + final Node node = new Node(current); + final Point loc = new Point(current.loc.x + direction.x, current.loc.y + direction.y); + // If the node is a wall, don't add it to the list + if (grid.get(loc).isWall()) continue; + // Don't overflow off the grid + if (loc.x > gridSize.width || loc.y > gridSize.height) continue; + node.setLoc(loc); + neighbors.add(node); } return neighbors; } - private Node getNeighbor(Node current, Direction direction) { - final Dimension gridSize = grid.getSize(); - final Node node = new Node(current); - final Point loc = new Point(current.loc.x + direction.x, current.loc.y + direction.y); - if (grid.get(loc).isWall()) return null; - // Don't overflow off the grid - if (loc.x > gridSize.width || loc.y > gridSize.height) return null; - node.setLoc(loc); - return node; - } - private enum Direction { UP(0, 1), DOWN(0, -1),