private static void CachePPv2Parameters(string mapCachePath, PPv2Parameters pp) { try { File.WriteAllText(mapCachePath, JsonConvert.SerializeObject(pp)); } catch (Exception e) { Console.WriteLine($"Oppai: Failed to cache ppv2 params. {e}"); } }
private static PPv2 CalcPP(BeatmapBase beatmap, LegacyMods mods = LegacyMods.NM, double acc = -1, int combo = -1, int misses = 0, bool cache = false) { try { var mapCachePath = Path.Combine(cache_path, $"{beatmap.Id}_{(int)(mods & LegacyMods.DifficultyChanging)}.json"); var ppParams = GetCachedPPv2Parameters(mapCachePath); if (ppParams != null) { ppParams.Accuracy = acc / 100; ppParams.Combo = combo; ppParams.CountMiss = misses; ppParams.Mods = (Mods)mods; return(new PPv2(ppParams)); } using (var stream = new MemoryStream(beatmap.FileBytes, false)) using (var reader = new StreamReader(stream, true)) { Beatmap map = Beatmap.Read(reader); DiffCalc diff = new DiffCalc().Calc(map, (Mods)mods); ppParams = new PPv2Parameters(map, diff, acc / 100, misses, combo, (Mods)mods); if (cache) { CachePPv2Parameters(mapCachePath, ppParams); } return(new PPv2(ppParams)); } } catch (Exception e) { Log.Error($"CalcPP failed, ${e.InnerMessageIfAny()}"); } return(null); }