Esempio n. 1
0
 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}");
     }
 }
Esempio n. 2
0
        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);
        }