public DisplayerController(OsuListenerManager mamger)
        {
            var listenerManager = mamger;

            listenerManager.OnCount300Changed        += c => _n300 = c;
            listenerManager.OnCountGekiChanged       += c => _ngeki = c;
            listenerManager.OnCountKatuChanged       += c => _nkatu = c;
            listenerManager.OnCount100Changed        += c => _n100 = c;
            listenerManager.OnCount50Changed         += c => _n50 = c;
            listenerManager.OnCountMissChanged       += c => _nmiss = c;
            listenerManager.OnScoreChanged           += s => _score = s;
            listenerManager.OnErrorStatisticsChanged += es => _error_statistics = es;
            listenerManager.OnPlayerChanged          += p => _playername = p;

            listenerManager.OnComboChanged += (combo) =>
            {
                if (_status != OsuStatus.Playing)
                {
                    return;
                }
                int fullCombo = GetFullCombo(GetCalculator(_mode));
                if (combo <= (fullCombo == 0 ? 20000 : fullCombo))
                {
                    _combo    = combo;
                    _maxCombo = Math.Max(_maxCombo, _combo);
                }
            };

            listenerManager.OnModsChanged += (mods) =>
            {
                if (Setting.IgnoreTouchScreenDecrease)
                {
                    mods.Mod = (mods.Mod & ~ModsInfo.Mods.TouchDevice);
                }
                _curMods = mods;
                if (_status != OsuStatus.Playing)
                {
                    GetCalculator(_mode).ClearCache();
                }
            };

            listenerManager.OnPlayModeChanged    += RtppOnPlayModeChanged;
            listenerManager.OnStatusChanged      += RtppOnStatusChanged;
            listenerManager.OnBeatmapChanged     += RtppOnBeatmapChanged;
            listenerManager.OnPlayingTimeChanged += RtppOnPlayingTimeChanged;
        }
 private void ListenerManager_OnErrorStatisticsChanged(ErrorStatisticsResult result)
 {
     current_ur = result.UnstableRate;
 }