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); }
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; }
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); }
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); } }
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; }