コード例 #1
0
 /// <summary>
 /// 使用指定的<seealso cref="CatchBeatmap"/>和要使用的Mod初始化CatchDifficultyCalculator
 /// </summary>
 /// <param name="beatmap"></param>
 /// <param name="mods"></param>
 public CatchDifficultyCalculator(CatchBeatmap beatmap, ModList mods)
 {
     Beatmap = beatmap;
     Mods    = mods;
     foreach (var diff in beatmap.Difficulty)
     {
         var scala = diff.Key == "CircleSize" ? 1.3 : 1.4;
         diff.Value = AdjustDifficulty(diff.Value, mods, scala);
     }
     foreach (var hitObject in Beatmap.CatchHitObjects)
     {
         var catchHitObj = (CatchHitObject)hitObject;
         HitObjectsWithTicks.Add(catchHitObj);
         if (catchHitObj.BaseHitObject.HitObjectType == HitObjectTypes.JuiceStream || catchHitObj.BaseHitObject.HitObjectType == HitObjectTypes.Slider)
         {
             HitObjectsWithTicks.AddRange(catchHitObj.Ticks);
             HitObjectsWithTicks.AddRange(catchHitObj.EndTicks);
         }
     }
     TimeRate    = Mods.TimeRate;
     PlayerWidth = 305 / 1.6 *
                   ((102.4 * (1 - 0.7 * (Beatmap.Difficulty.CircleSize - 5) / 5)) / 128) * 0.7;
     HitObjectsWithTicks.ForEach(hitObject => DifficultyHitObjects.Add(new CatchDifficultyHitObject(hitObject, PlayerWidth * 0.4)));
     UpdateHyperDashDistance();
     DifficultyHitObjects.Sort((x, y) =>
                               Math.Abs(x.HitObject.Offset - y.HitObject.Offset) == 0  ? 0 : x.HitObject.Offset > y.HitObject.Offset ? 1 : -1);
     CalcStrainValues();
     Stars = Math.Pow(CalcDifficulty(), 0.5) * Constants.StarScalingFactor;
 }
コード例 #2
0
 /// <summary>
 /// 使用要计算的谱面和要使用的Mod初始化pp计算器
 /// </summary>
 /// <param name="beatmap"></param>
 /// <param name="mods"></param>
 public CatchPerformanceCalculator(CatchBeatmap beatmap, ModList mods)
 {
     Beatmap = beatmap;
     Mods    = mods;
     DifficultyCalculator = new CatchDifficultyCalculator(beatmap, mods);
 }