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