private IEnumerator DrawingAnimation()
    {
        ConvexHullNode currentPotentialNode = _currentNodes[_currentIndex];

        for (int j = 0; j < _currentNodes.Count; j++)
        {
            Vector3 distancePotentialToLeftNode = currentPotentialNode.GetPosition() - _currentLeftestNode.GetPosition();
            Vector3 distanceCurrentToLeftNode   = _currentNodes[j].GetPosition() - _currentLeftestNode.GetPosition();

            float _currentCrossValue = GetCrossVectorY(distancePotentialToLeftNode.normalized, distanceCurrentToLeftNode.normalized);

            if (_currentCrossValue <= 0f)
            {
                continue;
            }

            yield return(new WaitForSeconds(_waitForSecondDelay));

            _currentLeftestNode.SetLinePosition(_currentNodes[j].GetPosition());

            currentPotentialNode = _currentNodes[j];
        }

        SetNextLeftestNode(currentPotentialNode);
    }
    public void GenerateNodes()
    {
        if (!CanGenerate())
        {
            return;
        }

        CleanNodes();

        _currentIndex = 1;

        for (int i = 0; i <  _numberOfNodes; i++)
        {
            ConvexHullNode newNode = Instantiate(_nodeRef, _nodeParent);
            newNode.name = newNode.name + " " + i.ToString();

            Vector3 newPos = new Vector3(Random.Range(-_instantiationRange.x, _instantiationRange.x), 0f, Random.Range(-_instantiationRange.y, _instantiationRange.y));

            newNode.SetLocalPosition(newPos);
            _currentNodes.Add(newNode);
        }

        _currentNodes = _currentNodes.OrderBy(node => node.GetPosition().x).ToList();

        _currentLeftestNode = _currentNodes[0];

        _isAnimating = true;

        _currentDrawingCoroutine = StartCoroutine(DrawingAnimation());
    }
    private void SetNextLeftestNode(ConvexHullNode chosenNode)
    {
        _currentDrawingCoroutine = null;

        _currentLeftestNode.SetLinePosition(chosenNode.GetPosition());
        _currentLeftestNode.SetComplete();

        if (chosenNode.IsComplete())
        {
            _currentLeftestNode.SetLinePosition(_currentNodes[0].GetPosition());

            EndAnimation();
        }
        else
        {
            _currentIndex++;

            _currentLeftestNode = chosenNode;

            _currentDrawingCoroutine = StartCoroutine(DrawingAnimation());
        }
    }