Exemple #1
0
 private void SpawnCollectible(Vector3 position)
 {
     if (Random.Range(0, 101) <= _nextCollectibleChance)
     {
         _animatedCollectibleTile.Next(position, _tilesHolder);
     }
 }
Exemple #2
0
    private void Update()
    {
        while (transform.position.x - (_zeroPosition.x + _globalGenerationIndex * _tileSize.x) >= _tileSize.x)
        {
            if (_currentGenerationIndex == _currentGenerationLength)
            {
                _lastGenerationLength       = _currentGenerationLength;
                _lastGenerationElevation    = _currentGenerationElevation;
                _lastGenerationType         = _currentGenerationType;
                _currentGenerationLength    = _nextGenerationLength;
                _currentGenerationElevation = _nextGenerationElevation;
                _currentGenerationType      = _nextGenerationType;
                if (_currentGenerationType == GenerationType.Pit || _currentGenerationType == GenerationType.Gorge || _currentGenerationType == GenerationType.River)
                {
                    _nextGenerationLength    = Random.Range(4, 21);
                    _nextGenerationElevation = _lastGenerationElevation;
                    _nextGenerationType      = GenerationType.Land;
                }
                else
                {
                    switch (Random.Range(0, 4))
                    {
                    case 0:
                        _nextGenerationLength    = Random.Range(4, 31);
                        _nextGenerationElevation = Random.Range(_currentGenerationElevation - 1, _currentGenerationElevation + 2);
                        _nextGenerationElevation = Mathf.Clamp(_nextGenerationElevation, 2, 4);
                        _nextGenerationType      = GenerationType.Land;
                        break;

                    case 1:
                        _nextGenerationLength    = Random.Range(2, 5);
                        _nextGenerationElevation = _currentGenerationElevation;
                        _nextGenerationType      = GenerationType.Pit;
                        _pitSpikes      = Random.Range(0, 101) <= _pitSpikesChance;
                        _pitCollectible = Random.Range(0, 101) <= _pitCollectibleChance;
                        _pitChest       = Random.Range(0, 101) <= _pitChestChance;
                        break;

                    case 2:
                        _nextGenerationLength    = Random.Range(4, 9);
                        _nextGenerationElevation = _currentGenerationElevation;
                        _nextGenerationType      = GenerationType.River;
                        break;

                    case 3:
                        _nextGenerationLength    = Random.Range(4, 41);
                        _nextGenerationElevation = _currentGenerationElevation;
                        _nextGenerationType      = GenerationType.Gorge;
                        break;

                    default:
                        break;
                    }
                }
                _currentGenerationIndex = 0;
            }
            if (_globalGenerationIndex == _nextTreeIndex)
            {
                if (_currentGenerationType == GenerationType.Land || _currentGenerationType == GenerationType.Gorge)
                {
                    var leftBranch            = (Random.Range(0, 101) <= 50);
                    var nextBranchHeightIndex = _currentGenerationElevation + Random.Range(1, 3);

                    for (int treeHeightIndex = 0; treeHeightIndex < 12; treeHeightIndex++)
                    {
                        _treeTrunkTile.Next(GridPosition(_globalGenerationIndex, treeHeightIndex), _tilesHolder);
                        if (treeHeightIndex == nextBranchHeightIndex)
                        {
                            var branchSize = 1; //Random.Range(1, 4);
                            if (leftBranch && branchSize == 1)
                            {
                                SpawnCollectible(GridPosition(_globalGenerationIndex - 1, treeHeightIndex + 1));
                                _canopy1LeftTile.Next(GridPosition(_globalGenerationIndex - 1, treeHeightIndex), _tilesHolder);
                            }
                            else if (!leftBranch && branchSize == 1)
                            {
                                SpawnCollectible(GridPosition(_globalGenerationIndex + 1, treeHeightIndex + 1));
                                _canopy1RightTile.Next(GridPosition(_globalGenerationIndex + 1, treeHeightIndex), _tilesHolder);
                            }
                            else if (leftBranch && branchSize == 2)
                            {
                                SpawnCollectible(GridPosition(_globalGenerationIndex - 1, treeHeightIndex + 1));
                                _canopy1LeftTile.Next(GridPosition(_globalGenerationIndex - 1, treeHeightIndex), _tilesHolder);
                            }
                            else if (!leftBranch && branchSize == 2)
                            {
                                SpawnCollectible(GridPosition(_globalGenerationIndex + 1, treeHeightIndex + 1));
                                _canopy1RightTile.Next(GridPosition(_globalGenerationIndex + 1, treeHeightIndex), _tilesHolder);
                            }
                            //TODO: Finish Branches
                            leftBranch             = !leftBranch;
                            nextBranchHeightIndex += Random.Range(_minimumBranchOffset, _maximumBranchOffset);
                        }
                    }
                }
                _nextTreeIndex += Random.Range(6, 9);
            }
            switch (_currentGenerationType)
            {
            case GenerationType.Land:
                for (int currentElevation = 0; currentElevation < _currentGenerationElevation; currentElevation++)
                {
                    if (_currentGenerationIndex == 0 && _lastGenerationType != GenerationType.Land)
                    {
                        if (currentElevation == _currentGenerationElevation - 1)
                        {
                            _landSurfaceLeftTile.Next(GridPosition(_globalGenerationIndex, currentElevation), _tilesHolder);
                        }
                        else
                        {
                            _landFillLeftTile.Next(GridPosition(_globalGenerationIndex, currentElevation), _tilesHolder);
                        }
                    }
                    else if (_currentGenerationIndex == _currentGenerationLength - 1 && _nextGenerationType != GenerationType.Land)
                    {
                        if (currentElevation == _currentGenerationElevation - 1)
                        {
                            _landSurfaceRightTile.Next(GridPosition(_globalGenerationIndex, currentElevation), _tilesHolder);
                        }
                        else
                        {
                            _landFillRightTile.Next(GridPosition(_globalGenerationIndex, currentElevation), _tilesHolder);
                        }
                    }
                    else
                    {
                        if (_lastGenerationElevation < _currentGenerationElevation)
                        {
                            if (_currentGenerationIndex == 0)
                            {
                                if (currentElevation == _currentGenerationElevation - 1)
                                {
                                    _landSurfaceUp2251Tile.Next(GridPosition(_globalGenerationIndex, currentElevation), _tilesHolder);
                                }
                                else if (currentElevation == _currentGenerationElevation - 2)
                                {
                                    _landSurfaceUp45225Tile.Next(GridPosition(_globalGenerationIndex, currentElevation), _tilesHolder);
                                }
                                else if (currentElevation < _currentGenerationElevation - 2)
                                {
                                    _landFillTile.Next(GridPosition(_globalGenerationIndex, currentElevation), _tilesHolder);
                                }
                            }
                            else if (_currentGenerationIndex == 1)
                            {
                                if (currentElevation == _currentGenerationElevation - 1)
                                {
                                    _landSurfaceUp2252Tile.Next(GridPosition(_globalGenerationIndex, currentElevation), _tilesHolder);
                                }
                                else if (currentElevation < _currentGenerationElevation - 1)
                                {
                                    _landFillTile.Next(GridPosition(_globalGenerationIndex, currentElevation), _tilesHolder);
                                }
                            }
                            else
                            {
                                if (currentElevation == _currentGenerationElevation - 1)
                                {
                                    _landSurfaceTile.Next(GridPosition(_globalGenerationIndex, currentElevation), _tilesHolder);
                                }
                                else
                                {
                                    _landFillTile.Next(GridPosition(_globalGenerationIndex, currentElevation), _tilesHolder);
                                }
                            }
                        }
                        else if (_lastGenerationElevation > _currentGenerationElevation)
                        {
                            if (_currentGenerationIndex == 0)
                            {
                                if (currentElevation == _currentGenerationElevation - 1)
                                {
                                    _landSurfaceDown2251Tile.Next(GridPosition(_globalGenerationIndex, currentElevation + 1), _tilesHolder);
                                    _landFillTile.Next(GridPosition(_globalGenerationIndex, currentElevation), _tilesHolder);
                                }
                                else if (currentElevation < _currentGenerationElevation - 1)
                                {
                                    _landFillTile.Next(GridPosition(_globalGenerationIndex, currentElevation), _tilesHolder);
                                }
                            }
                            else if (_currentGenerationIndex == 1)
                            {
                                if (currentElevation == _currentGenerationElevation - 1)
                                {
                                    _landSurfaceDown2252Tile.Next(GridPosition(_globalGenerationIndex, currentElevation + 1), _tilesHolder);
                                    _landSurfaceDown45225Tile.Next(GridPosition(_globalGenerationIndex, currentElevation), _tilesHolder);
                                }
                                else if (currentElevation < _currentGenerationElevation - 1)
                                {
                                    _landFillTile.Next(GridPosition(_globalGenerationIndex, currentElevation), _tilesHolder);
                                }
                            }
                            else
                            {
                                if (currentElevation == _currentGenerationElevation - 1)
                                {
                                    _landSurfaceTile.Next(GridPosition(_globalGenerationIndex, currentElevation), _tilesHolder);
                                }
                                else
                                {
                                    _landFillTile.Next(GridPosition(_globalGenerationIndex, currentElevation), _tilesHolder);
                                }
                            }
                        }
                        else
                        {
                            if (currentElevation == _currentGenerationElevation - 1)
                            {
                                _landSurfaceTile.Next(GridPosition(_globalGenerationIndex, currentElevation), _tilesHolder);
                            }
                            else
                            {
                                _landFillTile.Next(GridPosition(_globalGenerationIndex, currentElevation), _tilesHolder);
                            }
                        }
                    }
                    if (_nextGenerationType == GenerationType.Gorge && _currentGenerationIndex == _currentGenerationLength - 1 && currentElevation == 0)
                    {
                        _animatedDriftNutTile.Next(GridPosition(_globalGenerationIndex, _currentGenerationElevation), _tilesHolder);
                    }
                }
                _globalGenerationIndex++;
                _currentGenerationIndex++;
                break;

            case GenerationType.Pit:
                for (int currentElevation = 0; currentElevation < _currentGenerationElevation; currentElevation++)
                {
                    if (currentElevation != _currentGenerationElevation - 1 && _currentGenerationIndex == 0)
                    {
                        _landFillTile.Next(GridPosition(_globalGenerationIndex - 1, currentElevation), _tilesHolder);
                    }
                    if (currentElevation == _currentGenerationElevation - 1)
                    {
                        if (_pitSpikes)
                        {
                            _animatedSpikesTile.Next(GridPosition(_globalGenerationIndex, currentElevation), _tilesHolder);
                        }
                        else if (_pitCollectible)
                        {
                            SpawnCollectible(GridPosition(_globalGenerationIndex, currentElevation));
                        }
                        else if (_pitChest && _currentGenerationIndex == 1)
                        {
                            _animatedChestTile.Next(GridPosition(_globalGenerationIndex, currentElevation), _tilesHolder);
                        }
                    }
                    else if (currentElevation == _currentGenerationElevation - 2)
                    {
                        _landSurfaceTile.Next(GridPosition(_globalGenerationIndex, currentElevation), _tilesHolder);
                    }
                    else if (currentElevation < _currentGenerationElevation - 2)
                    {
                        _landFillTile.Next(GridPosition(_globalGenerationIndex, currentElevation), _tilesHolder);
                    }
                    if (currentElevation != _currentGenerationElevation - 1 && _currentGenerationIndex == _currentGenerationLength - 1)
                    {
                        _landFillTile.Next(GridPosition(_globalGenerationIndex + 1, currentElevation), _tilesHolder);
                    }
                }
                _globalGenerationIndex++;
                _currentGenerationIndex++;
                break;

            case GenerationType.Gorge:
                _globalGenerationIndex++;
                _currentGenerationIndex++;
                break;

            case GenerationType.River:
                for (int currentElevation = 0; currentElevation < _currentGenerationElevation; currentElevation++)
                {
                    if (currentElevation == _currentGenerationElevation - 1)
                    {
                        _waterSurfaceTile.Next(GridPosition(_globalGenerationIndex, currentElevation), _tilesHolder);
                    }
                    else
                    {
                        _waterFillTile.Next(GridPosition(_globalGenerationIndex, currentElevation), _tilesHolder);
                        _waterFillFrontTile.Next(GridPosition(_globalGenerationIndex, currentElevation), _tilesHolder);
                    }
                }
                _globalGenerationIndex++;
                _currentGenerationIndex++;
                break;

            default:
                break;
            }
        }
    }