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();
        }