public void UpdatePaths() { ResetAllWeights(); Queue <Vector2Int> queue = new Queue <Vector2Int>(); m_Grid.GetNode(m_FinalTarget).PathWeight = 0f; queue.Enqueue(m_FinalTarget); while (queue.Count > 0) { Vector2Int current = queue.Dequeue(); Node currentNode = m_Grid.GetNode(current); foreach (Vector2Int neighbour in GetNeighbours(current)) { Node neighbourNode = m_Grid.GetNode(neighbour); if (!m_Grid.CheckCoordinate(neighbour) || neighbourNode.IsOccupied) { continue; } if ((current - neighbour).magnitude > 1) { // checking adjacent nodes if (GetNeighbours(current).Any(adj => CheckAdjacent(adj, current) && CheckAdjacent(adj, neighbour) && m_Grid.GetNode(adj).IsOccupied)) { continue; } } if (currentNode.PathWeight + (current - neighbour).magnitude < neighbourNode.PathWeight) { neighbourNode.NextNode = currentNode; neighbourNode.PathWeight = currentNode.PathWeight + (current - neighbour).magnitude; queue.Enqueue(neighbour); } } } CalculateAccessibility(); }