public void OnRoundEnded(int time) { if (_score == 0) { _achievmentPresentator.Show(AchievementType.FirstLevelPassed); } _difficultCf = (( double )CharactersCount - MinCharactersCount) / (MaxCharactersCount - MinCharactersCount); _difficultCf *= 10 / _linesCountCfs[LinesCount]; _difficultCf = _difficultCf > 1 ? 1 : _difficultCf; _difficultCf = Math.Round(_difficultCf, 2); if (DoubleUtil.EqualDoubles(_difficultCf, 0)) { _difficultCf = 0.01; } double timeCf = (( double )_timeoutForLinesCount[LinesCount] - time) / _timeoutForLinesCount[LinesCount]; if (timeCf < 0) { timeCf = 0; } int newPoints = ( int )(CharactersCount * timeCf * LinesCount); _score += newPoints; CharactersCount += ( int )(((timeCf + _difficultCf) / 2) * (MaxCharactersCount - MinCharactersCount) * 0.1); if (CharactersCount > MaxCharactersCount) { CharactersCount = MaxCharactersCount; } else if (CharactersCount < MinCharactersCount) { CharactersCount = MinCharactersCount; } if (( int )(_difficultCf * 100) <= 0 && LinesCount != MinLinesCount) { _difficultCf = 0.98; LinesCount -= 1; } else if (( int )(_difficultCf * 100) >= 100 && LinesCount != MaxCharactersCount) { _difficultCf = 0; LinesCount += 1; } _scoreLabel.text = _score.ToString(); _pointsPerLevelLabel.text = newPoints.ToString(); if (_score >= 200) { _achievmentPresentator.Show(AchievementType.TwoHundredPointsAchieved); } if (LinesCount == MaxLinesCount && DoubleUtil.EqualDoubles(_difficultCf, 1d)) { _achievmentPresentator.Show(AchievementType.GameWon); } SaveData(); }