int end_y = end.getY();
//List of Visited Nodes
L2FastSet<Node> visited = L2Collections.newL2FastSet();//TODO! Add limit to cfg
// List of Nodes to Visit
BinaryNodeHeap to_visit = BinaryNodeHeap.newInstance();
to_visit.add(start);
try
{
int i = 0;
while(i < 800)//TODO! Add limit to cfg
{
if(to_visit.isEmpty())
{
// No Path found
return null;
}
Node node;
try
{
node = to_visit.removeFirst();
}
catch(Exception e)
{
// No Path found
if(Config.ENABLE_ALL_EXCEPTIONS)
e.printStackTrace();
return null;
}
if(node.equals(end)) //path found!
return constructPath(node);
visited.add(node);
node.attachNeighbors();
for(Node n : node.getNeighbors())
{
if(!visited.contains(n) && !to_visit.contains(n))
{
i++;
n.setParent(node);
n.setCost(Math.abs(start_x - n.getNodeX())
+ Math.abs(start_y - n.getNodeY()) + Math.abs(end_x - n.getNodeX())
+ Math.abs(end_y - n.getNodeY()));
to_visit.add(n);
}
}
}
//No Path found
return null;