private void SetLevel(int next)
 {
     levelUpReadyTracker.No();
     accuracyTracker.Clear();
     ScoreMachine.Put(LEVEL_RESET_SCORE);
     Level.Value = next;
     OnClearBubbles?.Invoke();
 }
 void ResetScores()
 {
     Level.Value = 1;
     levelUpReadyTracker.No();
     accuracyTracker.Clear();
     highestScore.Value = 0;
     ScoreMachine.Put(INITIAL_SCORE);
     Level.Value = 0;
     OnClearBubbles?.Invoke();
 }
    private void UpdateScore()
    {
        accuracyTracker.Crop(Time.time);
        if (accuracyTracker.TryGetAverage(out var accuracy))
        {
            ScoreMachine.Push(accuracy, Time.deltaTime);
        }

        if (ScoreMachine.Score.Value < levelRegressAt)
        {
            LevelDown();
        }

        if (ScoreMachine.Score.Value >= 0.8f)
        {
            levelUpReadyTracker.Yes(Time.time);
        }
        else
        {
            levelUpReadyTracker.No();
        }
    }