private void SpawnCollectible(Vector3 position) { if (Random.Range(0, 101) <= _nextCollectibleChance) { _animatedCollectibleTile.Next(position, _tilesHolder); } }
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; } } }