Esempio n. 1
0
        public BeatmapStats Calculate()
        {
            if (!string.IsNullOrEmpty(BeatmapId))
            {
                ProcessedBeatmap = new ProcessorWorkingBeatmap(BeatmapId);
                var ruleset = new OsuRuleset();

                ProcessedBeatmap.BeatmapInfo.Ruleset = ruleset.RulesetInfo;

                var attributes = ruleset.CreateDifficultyCalculator(ProcessedBeatmap).Calculate(GetModObjects(Mods, ruleset));

                switch (attributes)
                {
                case OsuDifficultyAttributes osu:
                    double[] strainPeakTotal = new double[osu.Skills[0].StrainPeaks.Count];
                    double[] strainPeakAim   = osu.Skills[0].StrainPeaks.ToArray();
                    double[] strainPeakSpeed = osu.Skills[1].StrainPeaks.ToArray();

                    for (int i = 0; i < osu.Skills[0].StrainPeaks.Count; i++)
                    {
                        strainPeakAim[i]   = Math.Sqrt(strainPeakAim[i] * 9.999) * difficultyMultiplier;
                        strainPeakSpeed[i] = Math.Sqrt(strainPeakSpeed[i] * 9.999) * difficultyMultiplier;

                        strainPeakTotal[i] = strainPeakAim[i] + strainPeakSpeed[i] + Math.Abs(strainPeakAim[i] - strainPeakSpeed[i]) / 2;
                    }

                    return(new BeatmapStats
                    {
                        DiffAim = osu.AimSR,
                        DiffSpeed = osu.TapSR,
                        DiffTotal = osu.StarRating,
                        StrainPeakAim = strainPeakAim,
                        StrainPeakSpeed = strainPeakSpeed,
                        StrainPeakTotal = strainPeakTotal
                    });

                default:
                    return(new BeatmapStats {
                    });
                }
            }
            else
            {
                throw new ArgumentNullException("No beatmap ID provided");
            }
        }