From 7892eefd6899bf6c0a64d397f300d77bc3576e92 Mon Sep 17 00:00:00 2001 From: smoogipoo Date: Fri, 17 Nov 2017 14:23:52 +0900 Subject: [PATCH] Fix up mod application + beatmap/hitobject references --- .../OsuDifficulty/OsuDifficultyCalculator.cs | 13 ++++++++++--- osu.Game.Rulesets.Osu/OsuRuleset.cs | 2 +- .../TaikoDifficultyCalculator.cs | 2 +- osu.Game/Beatmaps/DifficultyCalculator.cs | 18 +++++++++--------- 4 files changed, 21 insertions(+), 14 deletions(-) diff --git a/osu.Game.Rulesets.Osu/OsuDifficulty/OsuDifficultyCalculator.cs b/osu.Game.Rulesets.Osu/OsuDifficulty/OsuDifficultyCalculator.cs index 6ed45e1f03..9f279ccae4 100644 --- a/osu.Game.Rulesets.Osu/OsuDifficulty/OsuDifficultyCalculator.cs +++ b/osu.Game.Rulesets.Osu/OsuDifficulty/OsuDifficultyCalculator.cs @@ -4,6 +4,7 @@ using System; using System.Collections.Generic; using osu.Game.Beatmaps; +using osu.Game.Rulesets.Mods; using osu.Game.Rulesets.Osu.Beatmaps; using osu.Game.Rulesets.Osu.Objects; using osu.Game.Rulesets.Osu.OsuDifficulty.Preprocessing; @@ -16,19 +17,25 @@ public class OsuDifficultyCalculator : DifficultyCalculator private const int section_length = 400; private const double difficulty_multiplier = 0.0675; - public OsuDifficultyCalculator(Beatmap beatmap) : base(beatmap) + public OsuDifficultyCalculator(Beatmap beatmap) + : base(beatmap) + { + } + + public OsuDifficultyCalculator(Beatmap beatmap, Mod[] mods) + : base(beatmap, mods) { } protected override void PreprocessHitObjects() { - foreach (OsuHitObject h in Objects) + foreach (OsuHitObject h in Beatmap.HitObjects) (h as Slider)?.Curve?.Calculate(); } public override double Calculate(Dictionary categoryDifficulty) { - OsuDifficultyBeatmap beatmap = new OsuDifficultyBeatmap(Objects); + OsuDifficultyBeatmap beatmap = new OsuDifficultyBeatmap(Beatmap.HitObjects); Skill[] skills = { new Aim(), diff --git a/osu.Game.Rulesets.Osu/OsuRuleset.cs b/osu.Game.Rulesets.Osu/OsuRuleset.cs index a4828319d1..8b7a014ea8 100644 --- a/osu.Game.Rulesets.Osu/OsuRuleset.cs +++ b/osu.Game.Rulesets.Osu/OsuRuleset.cs @@ -113,7 +113,7 @@ public override IEnumerable GetModsFor(ModType type) public override Drawable CreateIcon() => new SpriteIcon { Icon = FontAwesome.fa_osu_osu_o }; - public override DifficultyCalculator CreateDifficultyCalculator(Beatmap beatmap, Mod[] mods = null) => new OsuDifficultyCalculator(beatmap); + public override DifficultyCalculator CreateDifficultyCalculator(Beatmap beatmap, Mod[] mods = null) => new OsuDifficultyCalculator(beatmap, mods); public override string Description => "osu!"; diff --git a/osu.Game.Rulesets.Taiko/TaikoDifficultyCalculator.cs b/osu.Game.Rulesets.Taiko/TaikoDifficultyCalculator.cs index 57986cd198..adb7ace5f9 100644 --- a/osu.Game.Rulesets.Taiko/TaikoDifficultyCalculator.cs +++ b/osu.Game.Rulesets.Taiko/TaikoDifficultyCalculator.cs @@ -41,7 +41,7 @@ public override double Calculate(Dictionary categoryDifficulty) // Fill our custom DifficultyHitObject class, that carries additional information difficultyHitObjects.Clear(); - foreach (var hitObject in Objects) + foreach (var hitObject in Beatmap.HitObjects) difficultyHitObjects.Add(new TaikoHitObjectDifficulty(hitObject)); // Sort DifficultyHitObjects by StartTime of the HitObjects - just to make sure. diff --git a/osu.Game/Beatmaps/DifficultyCalculator.cs b/osu.Game/Beatmaps/DifficultyCalculator.cs index 34c6bb95ff..3c32b718bc 100644 --- a/osu.Game/Beatmaps/DifficultyCalculator.cs +++ b/osu.Game/Beatmaps/DifficultyCalculator.cs @@ -19,11 +19,9 @@ public abstract class DifficultyCalculator public abstract class DifficultyCalculator : DifficultyCalculator where T : HitObject { - protected readonly Beatmap Beatmap; + protected readonly Beatmap Beatmap; protected readonly Mod[] Mods; - protected List Objects; - protected DifficultyCalculator(Beatmap beatmap) : this(beatmap, null) { @@ -31,13 +29,9 @@ protected DifficultyCalculator(Beatmap beatmap) protected DifficultyCalculator(Beatmap beatmap, Mod[] mods) { - Beatmap = beatmap; + Beatmap = CreateBeatmapConverter().Convert(beatmap); Mods = mods ?? new Mod[0]; - Objects = CreateBeatmapConverter().Convert(beatmap).HitObjects; - - foreach (var h in Objects) - h.ApplyDefaults(beatmap.ControlPointInfo, beatmap.BeatmapInfo.BaseDifficulty); ApplyMods(Mods); @@ -50,9 +44,15 @@ protected virtual void ApplyMods(Mod[] mods) mods.OfType().ForEach(m => m.ApplyToClock(clock)); TimeRate = clock.Rate; + foreach (var mod in Mods.OfType()) + mod.ApplyToDifficulty(Beatmap.BeatmapInfo.BaseDifficulty); + foreach (var mod in mods.OfType>()) - foreach (var obj in Objects) + foreach (var obj in Beatmap.HitObjects) mod.ApplyToHitObject(obj); + + foreach (var h in Beatmap.HitObjects) + h.ApplyDefaults(Beatmap.ControlPointInfo, Beatmap.BeatmapInfo.BaseDifficulty); } protected virtual void PreprocessHitObjects()