private LinkedList<Vector2f> astar(Field2D field, boolean flag) { for (; pathes.size() > 0; ) { ScoredPath spath = pathes.remove(0); Vector2f current = spath.path.get(spath.path.size() - 1); if (current.equals(goal)) { return spath.path; } ArrayList<Vector2f> list = field.neighbors(current, flag); int size = list.size(); for (int i = 0; i < size; i++) { Vector2f next = list.get(i); if (visitedCache.contains(next)) { continue; } visitedCache.add(next); if (!field.isHit(next) && !flying) { continue; } LinkedList<Vector2f> path = new LinkedList<Vector2f>(spath.path); path.add(next); int score = spath.score + field.score(goal, next); insert(score, path); } } return null; }