Exemplo n.º 1
0
    void Update()
    {
        if (!_complete)
        {
            return;
        }

        Vector3 start  = Vector3.zero;
        Vector3 end    = Vector3.zero;
        Vector3 middle = Vector3.zero;

        if (_curveT >= 1.0f)
        {
            if (_currentCell < _cells.Count)
            {
                _currentCell++;
            }

            if (_currentCell >= _cells.Count)
            {
                return;
            }
            _curveT = 0;
        }

        _selectedCell = _cells [_currentCell];
        SetInterpPoints(out start, out end, out middle);
        trail.transform.position = CurveVelocity(_curveT, start, middle, end);
        _curveT += 0.025f;
    }
Exemplo n.º 2
0
    IEnumerator SetUpSpiral()
    {
        FibonacciCell firstCell = Instantiate(cellObj) as FibonacciCell;
        float         initSize  = CalculateFibonacciNumber();

        firstCell.cellDirection = CellDirection.up;

        StartCoroutine(firstCell.SetUp(0, 0, initSize, -initSize));
        _line.SetPosition(0, new Vector3(initSize, -initSize));
        _cells.Add(firstCell);

        yield return(new WaitForSeconds(buildTime));

        for (int i = 0; i < cellCount; i++)
        {
            int           modulos  = i % 4;
            FibonacciCell cell     = null;
            float         size     = CalculateFibonacciNumber();
            FibonacciCell lastCell = null;

            float top;
            float left;
            float right;
            float bottom;

            if (_cells.Count > 0)
            {
                lastCell = _cells[i];
            }

            //x = left, y == top
            switch (modulos)
            {
            case 0:
                //left
                cell = Instantiate(cellObj) as FibonacciCell;
                cell.cellDirection = CellDirection.left;

                top    = lastCell.top;
                left   = lastCell.left - size;
                right  = lastCell.left;
                bottom = lastCell.top - size;

                _line.SetPosition(i + 1, new Vector3(right, top));

                StartCoroutine(cell.SetUp(top, left, right, bottom));
                break;

            case 1:
                //down
                cell = Instantiate(cellObj) as FibonacciCell;
                cell.cellDirection = CellDirection.down;

                top    = lastCell.bottom;
                left   = lastCell.left;
                right  = lastCell.left + size;
                bottom = top - size;

                _line.SetPosition(i + 1, new Vector3(left, top));

                StartCoroutine(cell.SetUp(top, left, right, bottom));
                break;

            case 2:
                //right
                cell = Instantiate(cellObj) as FibonacciCell;
                cell.cellDirection = CellDirection.right;

                bottom = lastCell.bottom;
                left   = lastCell.right;
                right  = left + size;
                top    = bottom + size;

                _line.SetPosition(i + 1, new Vector3(left, bottom));

                StartCoroutine(cell.SetUp(top, left, right, bottom));
                break;

            case 3:
                //up
                cell = Instantiate(cellObj) as FibonacciCell;
                cell.cellDirection = CellDirection.up;

                top    = lastCell.top + size;
                left   = lastCell.right - size;
                right  = lastCell.right;
                bottom = lastCell.top;

                _line.SetPosition(i + 1, new Vector3(right, bottom));

                StartCoroutine(cell.SetUp(top, left, right, bottom));
                break;
            }
            if (cell)
            {
                _cells.Add(cell);
            }
            yield return(new WaitForSeconds(buildTime));
        }

        _complete = true;
    }