public void doPathFinding() { Node firstNode = new Node(m_current, null, m_end, m_start); finalPath = new EnemyPathing(); OpenList openedList = new OpenList(); openedList.insertToOpenList(firstNode); ClosedList closedList = new ClosedList(); SearchLvl search_lvl = new SearchLvl(); while (openedList.isEmpty() == false) { Node secondNodes = openedList.get0(); Node secondNode = new Node(secondNodes.getPosition(), secondNodes.returnPrev(), m_end, m_start); openedList.remove0Fromlist(); closedList.insertToClosedList(secondNode); if (Physics2D.OverlapBox(new Vector2(secondNode.getPosition().x, secondNode.getPosition().y), new Vector2(m_halfWidth / 2, m_halfWidth / 2), 0, targetMask)) { results = secondNode; break; } List <Node.Position> adjacentPositions = search_lvl.getAdjacentNodes(secondNode.getPosition().x, secondNode.getPosition().y, tileWid); for (int i = 0; i < adjacentPositions.Count; i++) { if (closedList.isInClosedList(adjacentPositions[i])) { continue; } int inter = openedList.findFromOpenList(secondNode.getPosition()); //returns -1 if there was no match, iterator cant be negative anyway Node previousNode = new Node(adjacentPositions[i], secondNode, m_end, m_start); if (inter != -1) { //has been found in open list if (openedList.returnAt(inter).getDistanceFromStart() > previousNode.getDistanceFromStart()) //the new distance is smaller { openedList.returnAt(inter).setPrev(secondNode); //setting the previous node that is found at the index } } else { //lineDrawer(previousNode.getPosition().x, previousNode.getPosition().y); //This method just creates a box, used for debugging purposes only! openedList.insertToOpenList(previousNode); } } } if (results != null) { while (results != null) { if (results.returnPrev() == null) { finalPath.insertToPath(results); results = null; donePathFind = true; } else { //Debug.DrawLine(new Vector2(results.getPosition().x, results.getPosition().y), new Vector2(results.returnPrev().getPosition().x, results.returnPrev().getPosition().y), Color.red, 1, false); finalPath.insertToPath(results); //draw a line to prev results = results.returnPrev(); } } finalPath.Reversed(); } else { donePathFind = true; finalPath = null; //NOT FOUND } }