/// <summary> /// Returns performance calculator suitable for given beatmap<para/> /// Reuses provided calculator if possible /// </summary> /// <param name="rulesetId"></param> /// <param name="ppCalculator"></param> /// <returns></returns> public static PpCalculator GetPpCalculator(int rulesetId, PpCalculator ppCalculator) { if (rulesetId == ppCalculator?.RulesetId) { return(ppCalculator); } return(GetPpCalculator(rulesetId)); }
private double GetPp(PpCalculator.PpCalculator ppCalculator, double acc, string mods = "", int score = 0) { ppCalculator.Accuracy = acc; ppCalculator.Score = score; _ppCalculator.Mods = mods.Split(new[] { "," }, StringSplitOptions.RemoveEmptyEntries); return(ppCalculator.Calculate()); }
/// <summary> /// Returns initalized performance calculator suitable for given beatmap<para/> /// Reuses provided calculator if possible /// </summary> /// <param name="file"></param> /// <param name="ppCalculator"></param> /// <returns></returns> public static PpCalculator GetPpCalculator(string file, PpCalculator ppCalculator) { var workingBeatmap = new ProcessorWorkingBeatmap(file); ppCalculator = GetPpCalculator(workingBeatmap.BeatmapInfo.RulesetID, ppCalculator); ppCalculator?.PreProcess(workingBeatmap); return(ppCalculator); }
/// <summary> /// Returns initalized performance calculator for specified ruleset(gamemode)<para/> /// Reuses provided calculator if possible /// </summary> /// <param name="rulesetId"></param> /// <param name="file"></param> /// <param name="ppCalculator"></param> /// <returns></returns> public static PpCalculator GetPpCalculator(int rulesetId, string file, PpCalculator ppCalculator) { if (rulesetId != ppCalculator?.RulesetId) { ppCalculator = GetPpCalculator(rulesetId); } ppCalculator?.PreProcess(new ProcessorWorkingBeatmap(file)); return(ppCalculator); }
private double GetPp(PpCalculator.PpCalculator ppCalculator, double acc, string mods = "", int score = 0) { ppCalculator.Accuracy = acc; ppCalculator.Score = score; _ppCalculator.Mods = mods.Split(new[] { "," }, StringSplitOptions.RemoveEmptyEntries); try { return(ppCalculator.Calculate()); } catch (ArgumentException e) when(e.Message.Contains("Invalid mod provided")) { } return(-1); }
public void SetCurrentMap(IBeatmap beatmap, string mods, string osuFileLocation, PlayMode playMode) { if (beatmap == null) { PpCalculator = null; return; } _currentPlayMode = playMode; PpCalculator = PpCalculatorHelpers.GetPpCalculator((int)playMode, PpCalculator); if (PpCalculator == null) { return; } PpCalculator.Mods = mods.Split(new[] { "," }, StringSplitOptions.RemoveEmptyEntries); PpCalculator.PreProcess(osuFileLocation); }
public void SetCurrentMap(Beatmap beatmap, string mods, string osuFileLocation, PlayMode playMode) { if (beatmap == null) { return; } _currentBeatmap = beatmap; _currentMods = mods; _currentOsuFileLocation = osuFileLocation; _ppCalculator = PpCalculatorHelpers.GetPpCalculator((int)playMode, _ppCalculator); if (_ppCalculator == null) { return; } _ppCalculator.Mods = mods.Split(new[] { "," }, StringSplitOptions.RemoveEmptyEntries); _ppCalculator.PreProcess(osuFileLocation); }
private static PpCalculator InternalGetPpCalculator(int rulesetId, string file, PpCalculator ppCalculator, int retryCount, ProcessorWorkingBeatmap workingBeatmap = null) { if (rulesetId != ppCalculator?.RulesetId) { ppCalculator = GetPpCalculator(rulesetId); } try { workingBeatmap ??= new ProcessorWorkingBeatmap(file); //Check if picked ruleset is valid for loaded beatmap if (GetRulesetId(workingBeatmap.RulesetID, rulesetId) != rulesetId) { return(InternalGetPpCalculator(workingBeatmap.RulesetID, file, ppCalculator, retryCount, workingBeatmap)); } ppCalculator?.PreProcess(workingBeatmap); } catch (IOException) { //file is being used by another process.. if (retryCount < 5) { return(InternalGetPpCalculator(rulesetId, file, ppCalculator, ++retryCount)); } } return(ppCalculator); }
/// <summary> /// Returns initalized performance calculator for specified ruleset(gamemode)<para/> /// Reuses provided calculator if possible /// </summary> /// <param name="rulesetId">osu! gamemode id</param> /// <param name="file">.osu file to read</param> /// <param name="ppCalculator">Existing <see cref="PpCalculator"/> instance, if any.</param> /// <returns></returns> public static PpCalculator GetPpCalculator(int rulesetId, string file, PpCalculator ppCalculator) => InternalGetPpCalculator(rulesetId, file, ppCalculator, 0);
public void CreateTokens(MapSearchResult map) { foreach (var tokenkv in Tokens.AllTokens.Where(t => t.Value.PluginName == Name)) { tokenkv.Value.Reset(); } if (!map.FoundBeatmaps || !map.BeatmapsFound[0].IsValidBeatmap(_settings, out var mapLocation)) { return; } var workingBeatmap = new ProcessorWorkingBeatmap(mapLocation); var playMode = (PlayMode)PpCalculatorHelpers.GetRulesetId(workingBeatmap.RulesetID, map.PlayMode.HasValue ? (int?)map.PlayMode : null); _ppCalculator = PpCalculatorHelpers.GetPpCalculator((int)playMode, mapLocation, _ppCalculator); if (_ppCalculator == null) { return;//Ctb not supported :( } if (playMode == PlayMode.OsuMania) { _ppCalculator.Score = 1_000_000; } else { _ppCalculator.Score = 0; } _ppCalculator.Mods = null; _tokenSetter("GameMode", playMode.ToString()); string mods = ""; if (playMode == PlayMode.OsuMania) { _tokenSetter("1 000 000PP", GetPp(_ppCalculator, 0, mods, 1_000_000), format: PpFormat); _tokenSetter("990 000PP", GetPp(_ppCalculator, 0, mods, 990_000), format: PpFormat); _tokenSetter("950 000PP", GetPp(_ppCalculator, 0, mods, 950_000), format: PpFormat); _tokenSetter("900 000PP", GetPp(_ppCalculator, 0, mods, 900_000), format: PpFormat); _tokenSetter("800 000PP", GetPp(_ppCalculator, 0, mods, 800_000), format: PpFormat); _tokenSetter("700 000PP", GetPp(_ppCalculator, 0, mods, 700_000), format: PpFormat); _tokenSetter("600 000PP", GetPp(_ppCalculator, 0, mods, 600_000), format: PpFormat); } else { _tokenSetter("SSPP", GetPp(_ppCalculator, 100d), format: PpFormat); _tokenSetter("99.9PP", GetPp(_ppCalculator, 99.9d), format: PpFormat); _tokenSetter("99PP", GetPp(_ppCalculator, 99d), format: PpFormat); _tokenSetter("98PP", GetPp(_ppCalculator, 98d), format: PpFormat); _tokenSetter("95PP", GetPp(_ppCalculator, 95d), format: PpFormat); _tokenSetter("90PP", GetPp(_ppCalculator, 90d), format: PpFormat); } _tokenSetter("MaxCombo", _ppCalculator.GetMaxCombo()); mods = map.Mods?.WorkingMods ?? ""; if (playMode == PlayMode.OsuMania) { _tokenSetter("m1 000 000PP", GetPp(_ppCalculator, 0, mods, 1_000_000), format: PpFormat); _tokenSetter("m990 000PP", GetPp(_ppCalculator, 0, mods, 990_000), format: PpFormat); _tokenSetter("m950 000PP", GetPp(_ppCalculator, 0, mods, 950_000), format: PpFormat); _tokenSetter("m900 000PP", GetPp(_ppCalculator, 0, mods, 900_000), format: PpFormat); _tokenSetter("m800 000PP", GetPp(_ppCalculator, 0, mods, 800_000), format: PpFormat); _tokenSetter("m700 000PP", GetPp(_ppCalculator, 0, mods, 700_000), format: PpFormat); _tokenSetter("m600 000PP", GetPp(_ppCalculator, 0, mods, 600_000), format: PpFormat); } else { _tokenSetter("mSSPP", GetPp(_ppCalculator, 100d, mods), format: PpFormat); _tokenSetter("m99.9PP", GetPp(_ppCalculator, 99.9d, mods), format: PpFormat); _tokenSetter("m99PP", GetPp(_ppCalculator, 99d, mods), format: PpFormat); _tokenSetter("m98PP", GetPp(_ppCalculator, 98d, mods), format: PpFormat); _tokenSetter("m95PP", GetPp(_ppCalculator, 95d, mods), format: PpFormat); _tokenSetter("m90PP", GetPp(_ppCalculator, 90d, mods), format: PpFormat); } }
private static PpCalculator InternalGetPpCalculator(int rulesetId, string file, PpCalculator ppCalculator, int retryCount) { if (rulesetId != ppCalculator?.RulesetId) { ppCalculator = GetPpCalculator(rulesetId); } try { ppCalculator?.PreProcess(new ProcessorWorkingBeatmap(file)); } catch (IOException) { //file is being used by another process.. if (retryCount < 5) { return(InternalGetPpCalculator(rulesetId, file, ppCalculator, ++retryCount)); } } return(ppCalculator); }
public Tokens GetMapReplacements(MapSearchResult map) { var ret = new Tokens { { "GameMode", new Token(null) }, { "MaxCombo", new Token(null) }, { "SSPP", new Token(null) }, { "99.9PP", new Token(null) }, { "99PP", new Token(null) }, { "98PP", new Token(null) }, { "95PP", new Token(null) }, { "90PP", new Token(null) }, { "1 000 000PP", new Token(null) }, { "990 000PP", new Token(null) }, { "950 000PP", new Token(null) }, { "900 000PP", new Token(null) }, { "800 000PP", new Token(null) }, { "700 000PP", new Token(null) }, { "600 000PP", new Token(null) }, { "mMod", new Token(null) }, { "mSSPP", new Token(null) }, { "m99.9PP", new Token(null) }, { "m99PP", new Token(null) }, { "m98PP", new Token(null) }, { "m95PP", new Token(null) }, { "m90PP", new Token(null) }, { "m1 000 000PP", new Token(null) }, { "m990 000PP", new Token(null) }, { "m950 000PP", new Token(null) }, { "m900 000PP", new Token(null) }, { "m800 000PP", new Token(null) }, { "m700 000PP", new Token(null) }, { "m600 000PP", new Token(null) }, }; if (!map.FoundBeatmaps || !map.BeatmapsFound[0].IsValidBeatmap(_settings, out var mapLocation) ) { return(ret); } var workingBeatmap = new ProcessorWorkingBeatmap(mapLocation); var playMode = (PlayMode)PpCalculatorHelpers.GetRulesetId(workingBeatmap.RulesetID, map.PlayMode.HasValue ? (int?)map.PlayMode : null); _ppCalculator = PpCalculatorHelpers.GetPpCalculator((int)playMode, mapLocation, _ppCalculator); if (_ppCalculator == null) { return(ret);//Ctb not supported :( } if (playMode == PlayMode.OsuMania) { _ppCalculator.Score = 1_000_000; } else { _ppCalculator.Score = 0; } _ppCalculator.Mods = null; ret["GameMode"] = new TokenWithFormat(playMode.ToString()); string mods = ""; if (playMode == PlayMode.OsuMania) { ret["1 000 000PP"] = new TokenWithFormat(GetPp(_ppCalculator, 0, mods, 1_000_000), format: PpFormat); ret["990 000PP"] = new TokenWithFormat(GetPp(_ppCalculator, 0, mods, 990_000), format: PpFormat); ret["950 000PP"] = new TokenWithFormat(GetPp(_ppCalculator, 0, mods, 950_000), format: PpFormat); ret["900 000PP"] = new TokenWithFormat(GetPp(_ppCalculator, 0, mods, 900_000), format: PpFormat); ret["800 000PP"] = new TokenWithFormat(GetPp(_ppCalculator, 0, mods, 800_000), format: PpFormat); ret["700 000PP"] = new TokenWithFormat(GetPp(_ppCalculator, 0, mods, 700_000), format: PpFormat); ret["600 000PP"] = new TokenWithFormat(GetPp(_ppCalculator, 0, mods, 600_000), format: PpFormat); } else { ret["SSPP"] = new TokenWithFormat(GetPp(_ppCalculator, 100d), format: PpFormat); ret["99.9PP"] = new TokenWithFormat(GetPp(_ppCalculator, 99.9d), format: PpFormat); ret["99PP"] = new TokenWithFormat(GetPp(_ppCalculator, 99d), format: PpFormat); ret["98PP"] = new TokenWithFormat(GetPp(_ppCalculator, 98d), format: PpFormat); ret["95PP"] = new TokenWithFormat(GetPp(_ppCalculator, 95d), format: PpFormat); ret["90PP"] = new TokenWithFormat(GetPp(_ppCalculator, 90d), format: PpFormat); } ret["MaxCombo"] = new TokenWithFormat(_ppCalculator.GetMaxCombo()); string modsStr; if (map.Action == OsuStatus.Playing || map.Action == OsuStatus.Watching) { mods = map.Mods?.WorkingMods ?? ""; modsStr = map.Mods?.ShownMods ?? ""; _lastShortMods = mods; _lastModsStr = modsStr; } else { mods = _lastShortMods; modsStr = _lastModsStr; } ret["mMod"] = new Token(modsStr); if (playMode == PlayMode.OsuMania) { ret["m1 000 000PP"] = new TokenWithFormat(GetPp(_ppCalculator, 0, mods, 1_000_000), format: PpFormat); ret["m990 000PP"] = new TokenWithFormat(GetPp(_ppCalculator, 0, mods, 990_000), format: PpFormat); ret["m950 000PP"] = new TokenWithFormat(GetPp(_ppCalculator, 0, mods, 950_000), format: PpFormat); ret["m900 000PP"] = new TokenWithFormat(GetPp(_ppCalculator, 0, mods, 900_000), format: PpFormat); ret["m800 000PP"] = new TokenWithFormat(GetPp(_ppCalculator, 0, mods, 800_000), format: PpFormat); ret["m700 000PP"] = new TokenWithFormat(GetPp(_ppCalculator, 0, mods, 700_000), format: PpFormat); ret["m600 000PP"] = new TokenWithFormat(GetPp(_ppCalculator, 0, mods, 600_000), format: PpFormat); } else { ret["mSSPP"] = new TokenWithFormat(GetPp(_ppCalculator, 100d, mods), format: PpFormat); ret["m99.9PP"] = new TokenWithFormat(GetPp(_ppCalculator, 99.9d, mods), format: PpFormat); ret["m99PP"] = new TokenWithFormat(GetPp(_ppCalculator, 99d, mods), format: PpFormat); ret["m98PP"] = new TokenWithFormat(GetPp(_ppCalculator, 98d, mods), format: PpFormat); ret["m95PP"] = new TokenWithFormat(GetPp(_ppCalculator, 95d, mods), format: PpFormat); ret["m90PP"] = new TokenWithFormat(GetPp(_ppCalculator, 90d, mods), format: PpFormat); } return(ret); }