private IEnumerator LevelGenerationLoop() { _platformsGenerator = new PlatformGenerator(_sizeOfThePlatformPartsObjectPool, _sizeOfThePlatformsObjectPool, transform, _platformPartPrefab, _platformPrefab, _firstPlatformLength, _leftBorderX, _leftPlatformEdgeSprite, _platformMiddlePartsSprites, _rightPlatformEdgeSprite, _gridSnapper); _farBackgroundObjectsGenerator.CheckAndTryCreateBatchOfObjects(_leftBorderX, _rightBorderX - _leftBorderX, _maxYDistanceOfBackgroundObjectsFromPlatform, (int)(((_rightBorderX - _leftBorderX) / _backgroundObjectsBatchWidth) * _minAmountOfFarBackgroundObjectsInBatch), (int)(((_rightBorderX - _leftBorderX) / _backgroundObjectsBatchWidth) * _maxAmountOfFarBackgroundObjectsInBatch), _farBackgroundObjectsSprites, _gridSnapper); _midBackgroundObjectsGenerator.CheckAndTryCreateBatchOfObjects(_leftBorderX, _rightBorderX - _leftBorderX, _maxYDistanceOfBackgroundObjectsFromPlatform, (int)(((_rightBorderX - _leftBorderX) / _backgroundObjectsBatchWidth) * _minAmountOfMidBackgroundObjectsInBatch), (int)(((_rightBorderX - _leftBorderX) / _backgroundObjectsBatchWidth) * _maxAmountOfMidBackgroundObjectsInBatch), _midBackgroundObjectsSprites, _gridSnapper); _farBackgroundObjectsGenerator.CheckAndTryCreateBatchOfObjects(_leftBorderX, _rightBorderX - _leftBorderX, _maxYDistanceOfBackgroundObjectsFromPlatform, (int)(((_rightBorderX - _leftBorderX) / _backgroundObjectsBatchWidth) * _minAmountOfNearBackgroundObjectsInBatch), (int)(((_rightBorderX - _leftBorderX) / _backgroundObjectsBatchWidth) * _maxAmountOfNearBackgroundObjectsInBatch), _nearBackgroundObjectsSprites, _gridSnapper); _farBackgroundObjectsGenerator.CheckAndTryCreateBatchOfObjects(_leftBorderX, _rightBorderX - _leftBorderX, _maxYDistanceOfBackgroundObjectsFromPlatform, (int)(((_rightBorderX - _leftBorderX) / _backgroundObjectsBatchWidth) * _minAmountOfForegroundObjectsInBatch), (int)(((_rightBorderX - _leftBorderX) / _backgroundObjectsBatchWidth) * _maxAmountOfForegroundObjectsInBatch), _foregroundObjectsSprites, _gridSnapper); WaitForSeconds delay = new WaitForSeconds(_delayToCheckBuildAndRemoveObjects); while (true) { #region создаём объекты _platformsGenerator.CheckAndTryCreatePlatform(_rightBorderX, _minPlatformLength, _maxPlatformLength, _minXDistanceBetweenPlatforms, _maxXDistanceBetweenPlatforms, _minYDistanceBetweenPlatforms, _maxYDistanceBetweenPlatforms, _leftPlatformEdgeSprite, _platformMiddlePartsSprites, _rightPlatformEdgeSprite, _gridSnapper); _wallsGenerator.CheckAndTryCreateObjectOnPlatform(_rightBorderX, _wallsYDistanceToPlatform, _gridSnapper); _buffsOnPlatformsGenerator.CheckAndTryCreateObjectOnPlatform(_rightBorderX, _buffOnPlatformYDistanceToPlatform, _gridSnapper); _debuffsOnPlatformsGenerator.CheckAndTryCreateObjectOnPlatform(_rightBorderX, _debuffOnPlatformYDistanceToPlatform, _gridSnapper); _buffsInTheAirGenerator.CheckAndTryCreateFloatingObject(_rightBorderX, _minHeightAbovePlatformForBuffsInTheAir, _maxHeightAbovePlatformForBuffsInTheAir, _gridSnapper); _bugsInTheAirGenerator.CheckAndTryCreateFloatingObject(_rightBorderX, _minHeightAbovePlatformForBugsInTheAir, _maxHeightAbovePlatformForBugsInTheAir, _gridSnapper); _farBackgroundObjectsGenerator.CheckAndTryCreateBatchOfObjects(_rightBorderX, _backgroundObjectsBatchWidth, _maxYDistanceOfBackgroundObjectsFromPlatform, _minAmountOfFarBackgroundObjectsInBatch, _maxAmountOfFarBackgroundObjectsInBatch, _farBackgroundObjectsSprites, _gridSnapper); _midBackgroundObjectsGenerator.CheckAndTryCreateBatchOfObjects(_rightBorderX, _backgroundObjectsBatchWidth, _maxYDistanceOfBackgroundObjectsFromPlatform, _minAmountOfMidBackgroundObjectsInBatch, _maxAmountOfMidBackgroundObjectsInBatch, _midBackgroundObjectsSprites, _gridSnapper); _nearBackgroundObjectsGenerator.CheckAndTryCreateBatchOfObjects(_rightBorderX, _backgroundObjectsBatchWidth, _maxYDistanceOfBackgroundObjectsFromPlatform, _minAmountOfNearBackgroundObjectsInBatch, _maxAmountOfNearBackgroundObjectsInBatch, _nearBackgroundObjectsSprites, _gridSnapper); _foregroundObjectsGenerator.CheckAndTryCreateBatchOfObjects(_rightBorderX, _backgroundObjectsBatchWidth, _maxYDistanceOfBackgroundObjectsFromPlatform, _minAmountOfForegroundObjectsInBatch, _maxAmountOfForegroundObjectsInBatch, _foregroundObjectsSprites, _gridSnapper); #endregion #region уничтожаем объекты _platformsGenerator.CheckAndTryRemoveObjects(_leftBorderX); _wallsGenerator.CheckAndTryRemoveObjects(_leftBorderX); _buffsOnPlatformsGenerator.CheckAndTryRemoveObjects(_leftBorderX); _debuffsOnPlatformsGenerator.CheckAndTryRemoveObjects(_leftBorderX); _buffsInTheAirGenerator.CheckAndTryRemoveObjects(_leftBorderX); _bugsInTheAirGenerator.CheckAndTryRemoveObjects(_leftBorderX); _farBackgroundObjectsGenerator.CheckAndTryRemoveObjects(_leftBorderX); _midBackgroundObjectsGenerator.CheckAndTryRemoveObjects(_leftBorderX); _nearBackgroundObjectsGenerator.CheckAndTryRemoveObjects(_leftBorderX); _foregroundObjectsGenerator.CheckAndTryRemoveObjects(_leftBorderX); #endregion yield return(delay); } }