private PerformanceCalculatorBase GetCalculator(OsuPlayMode mode)
        {
            switch (mode)
            {
            case OsuPlayMode.Osu:
                _stdPpCalculator = _stdPpCalculator ?? new StdPerformanceCalculator();
                return(_stdPpCalculator);

            case OsuPlayMode.Taiko:
                _taikoPpCalculator = _taikoPpCalculator ?? new TaikoPerformanceCalculator();
                return(_taikoPpCalculator);

            case OsuPlayMode.Mania:
                _maniaPpCalculator = _maniaPpCalculator ?? new ManiaPerformanceCalculator();
                return(_maniaPpCalculator);

            case OsuPlayMode.CatchTheBeat:
                _ctbPpCalculator = _ctbPpCalculator ?? new CatchTheBeatPerformanceCalculator();
                return(_ctbPpCalculator);

            default:
                CurrentIO.WriteColor($"[RealTimePPDisplay]Unknown Mode! Mode:0x{(int)mode:X8}", ConsoleColor.Red);
                return(null);
            }
        }
        private void RtppOnStatusChanged(OsuStatus last, OsuStatus cur)
        {
            _status = cur;
            if ((cur == OsuStatus.Rank && last == OsuStatus.Playing))
            {
                var cal = _tmpLastPpCalculator ?? _ppCalculator;

                var    beatmap = cal.Beatmap.OrtdpBeatmap;
                var    mods    = cal.Mods;
                string songs   = $"{beatmap.Artist} - {beatmap.Title}[{beatmap.Difficulty}]";
                string acc     = $"{cal.Accuracy:F2}%";
                string modsStr = $"{(mods != ModsInfo.Mods.None ? "+" + mods.ShortName : "")}";
                string pp      = $"{cal.GetPerformance().RealTimePP:F2}pp";
                string msg     = $"[RTPPD]{songs} {modsStr} | {acc} => {pp}";

                CurrentIO.Write($"[RTPPD]{songs}{acc}{modsStr} -> {pp}");
                if (SyncHost.Instance.ClientWrapper.Client.CurrentStatus == SourceStatus.CONNECTED_WORKING &&
                    Setting.RankingSendPerformanceToChat)
                {
                    if (beatmap.BeatmapID != 0)
                    {
                        string dlUrl = beatmap.DownloadLink;
                        SyncHost.Instance.ClientWrapper.Client.SendMessage(new IRCMessage(SyncHost.Instance.ClientWrapper.Client.NickName, $"[RTPPD][{dlUrl} {songs}] {modsStr} | {acc} => {pp}"));
                    }
                    else
                    {
                        SyncHost.Instance.ClientWrapper.Client.SendMessage(new IRCMessage(SyncHost.Instance.ClientWrapper.Client.NickName, msg));
                    }
                }
            }

            if (cur != OsuStatus.Rank)
            {
                _tmpLastPpCalculator = null;
            }

            if (OsuStatusHelper.IsListening(cur) || cur == OsuStatus.Editing)//Clear Output and reset
            {
                _combo    = 0;
                _maxCombo = 0;
                _n100     = 0;
                _n50      = 0;
                _nmiss    = 0;
                foreach (var p in _displayers)
                {
                    p.Value.Clear();
                }
            }

            _ppCalculator.ClearCache();
        }
        private int GetRtMaxCombo(PerformanceCalculatorBase cal)
        {
            int rtMaxCombo = 0;

            if (cal is OppaiPerformanceCalculator oppai)
            {
                rtMaxCombo = oppai.Oppai.RealTimeMaxCombo;
            }
            else if (cal is CatchTheBeatPerformanceCalculator ctb)
            {
                rtMaxCombo = ctb.RealTimeMaxCombo;
            }

            return(rtMaxCombo);
        }
        private int GetFullCombo(PerformanceCalculatorBase cal)
        {
            int fullCombo = 0;

            if (cal is OppaiPerformanceCalculator oppai)
            {
                fullCombo = oppai.Oppai.FullCombo;
            }
            else if (cal is CatchTheBeatPerformanceCalculator ctb)
            {
                fullCombo = ctb.FullCombo;
            }

            return(fullCombo);
        }
Exemplo n.º 5
0
        public object GetFcpp(double acc)
        {
            PerformanceCalculatorBase cal = GetCalculator();

            if (cal is null)
            {
                return(new ActionResult(null, 500, "The server could not get pp calculator."));
            }

            if (_beatmap is null)
            {
                return(new ActionResult(null, 500, "The server could not get beatmap."));
            }

            if (_reader is null ||
                _reader.OrtdpBeatmap.BeatmapID != _beatmap.BeatmapID)
            {
                cal.ClearCache();
                _reader = new BeatmapReader(_beatmap, (int)_mode);
            }

            if (_reader is null)
            {
                return(new ActionResult(null, 500, "The server could not create BeatmapReader."));
            }

            cal.AccuracyRound(acc, _reader.ObjectsCount, 0, out int n300, out int n100, out int n50);

            cal.Mods      = _mods;
            cal.Beatmap   = _reader;
            cal.Count50   = n50;
            cal.Count100  = n100;
            cal.Count300  = n300;
            cal.CountMiss = 0;

            var pptuple = cal.GetPerformance();

            return(new ActionResult(new
            {
                pp = pptuple.FullComboPP,
                aim_pp = pptuple.FullComboAimPP,
                speed_pp = pptuple.FullComboSpeedPP,
                acc_pp = pptuple.FullComboAccuracyPP,
            }));
        }
        private void RtppOnPlayModeChanged(OsuPlayMode last, OsuPlayMode mode)
        {
            if (_status == OsuStatus.Playing)
            {
                _tmpLastPpCalculator = _ppCalculator;
            }

            switch (mode)
            {
            case OsuPlayMode.Osu:
                _ppCalculator = new StdPerformanceCalculator(); break;

            case OsuPlayMode.Taiko:
                _ppCalculator = new TaikoPerformanceCalculator(); break;

            case OsuPlayMode.Mania:
                _ppCalculator = new ManiaPerformanceCalculator(); break;

            default:
                CurrentIO.WriteColor("[RealTimePPDisplayer]Unsupported Mode", ConsoleColor.Red);
                _ppCalculator = null; break;
            }
            _mode = mode;
        }
Exemplo n.º 7
0
        private PerformanceCalculatorBase GetCalculator(OsuPlayMode mode)
        {
            PerformanceCalculatorBase calculator;

            switch (mode)
            {
            case OsuPlayMode.Osu:
                _stdPpCalculator = _stdPpCalculator ?? new StdPerformanceCalculator();
                calculator       = _stdPpCalculator;
                break;

            case OsuPlayMode.Taiko:
                _taikoPpCalculator = _taikoPpCalculator ?? new TaikoPerformanceCalculator();
                calculator         = _taikoPpCalculator;
                break;

            case OsuPlayMode.Mania:
                _maniaPpCalculator = _maniaPpCalculator ?? new ManiaPerformanceCalculator();
                calculator         = _maniaPpCalculator;
                break;

            case OsuPlayMode.CatchTheBeat:
                _ctbPpCalculator = _ctbPpCalculator ?? new CatchTheBeatPerformanceCalculator();
                calculator       = _ctbPpCalculator;
                break;

            default:
                Sync.Tools.IO.CurrentIO.WriteColor($"[ReplayPPDisplay]Unknown Mode! Mode:0x{(int)mode:X8}", ConsoleColor.Red);
                calculator = null;
                break;
            }

            calculator?.ClearCache();

            return(calculator);
        }
Exemplo n.º 8
0
        private PerformanceCalculatorBase GetCalculator()
        {
            switch (_mode)
            {
            case OsuPlayMode.Osu:
                _stdPpCalculator = _stdPpCalculator ?? new StdPerformanceCalculator();
                return(_stdPpCalculator);

            case OsuPlayMode.Taiko:
                _taikoPpCalculator = _taikoPpCalculator ?? new TaikoPerformanceCalculator();
                return(_taikoPpCalculator);

            case OsuPlayMode.Mania:
                _maniaPpCalculator = _maniaPpCalculator ?? new ManiaPerformanceCalculator();
                return(_maniaPpCalculator);

            case OsuPlayMode.CatchTheBeat:
                _ctbPpCalculator = _ctbPpCalculator ?? new CatchTheBeatPerformanceCalculator();
                return(_ctbPpCalculator);

            default:
                return(null);
            }
        }
Exemplo n.º 9
0
        public PPControl(OsuListenerManager mamger, int?id)
        {
            m_listener_manager = mamger;

            m_listener_manager.OnModsChanged      += (mods) => { m_cur_mods = mods; m_pp_calculator.ClearCache(); };
            m_listener_manager.OnCount300Changed  += c => m_n300 = c;
            m_listener_manager.OnCountGekiChanged += c => m_ngeki = c;
            m_listener_manager.OnCountKatuChanged += c => m_nkatu = c;
            m_listener_manager.OnCount100Changed  += c => m_n100 = c;
            m_listener_manager.OnCount50Changed   += c => m_n50 = c;
            m_listener_manager.OnCountMissChanged += c => m_nmiss = c;
            m_listener_manager.OnScoreChanged     += s => m_score = s;
            m_listener_manager.OnPlayModeChanged  += (last, mode) =>
            {
                switch (mode)
                {
                case OsuPlayMode.Osu:
                    m_pp_calculator = new StdPPCalculator(); break;

                case OsuPlayMode.Taiko:
                    m_pp_calculator = new TaikoPerformanceCalculator(); break;

                case OsuPlayMode.Mania:
                    m_pp_calculator = new ManiaPerformanceCalculator(); break;

                default:
                    Sync.Tools.IO.CurrentIO.WriteColor("[RealTimePPDisplayer]Unsupported Mode", ConsoleColor.Red);
                    m_pp_calculator = null; break;
                }
                m_mode = mode;
            };

            m_listener_manager.OnStatusChanged += (last, cur) =>
            {
                m_status = cur;
                if (cur == OsuStatus.Listening || cur == OsuStatus.Editing)//Clear Output
                {
                    m_combo     = 0;
                    m_max_combo = 0;
                    m_n100      = 0;
                    m_n50       = 0;
                    m_nmiss     = 0;
                    foreach (var p in m_displayers)
                    {
                        p.Value.Clear();
                    }
                }
            };

            m_listener_manager.OnComboChanged += (combo) =>
            {
                if (m_status != OsuStatus.Playing)
                {
                    return;
                }
                if (combo <= ((m_pp_calculator as OppaiPerformanceCalculator)?.Oppai.FullCombo ?? 20000))
                {
                    m_combo     = combo;
                    m_max_combo = Math.Max(m_max_combo, m_combo);
                }
            };

            m_listener_manager.OnBeatmapChanged     += RTPPOnBeatmapChanged;
            m_listener_manager.OnPlayingTimeChanged += RTPPOnPlayingTimeChanged;
        }