diff --git a/osu.Game.Rulesets.Mania/UI/DrawableManiaRuleset.cs b/osu.Game.Rulesets.Mania/UI/DrawableManiaRuleset.cs index 614a7b00c7..5247cb05b0 100644 --- a/osu.Game.Rulesets.Mania/UI/DrawableManiaRuleset.cs +++ b/osu.Game.Rulesets.Mania/UI/DrawableManiaRuleset.cs @@ -94,7 +94,7 @@ private void load() // For non-mania beatmap, speed changes should only happen through timing points if (!isForCurrentRuleset) - p.DifficultyPoint = new DifficultyControlPoint(); + p.EffectPoint = new EffectControlPoint(); } BarLines.ForEach(Playfield.Add); diff --git a/osu.Game.Tests/Visual/Gameplay/TestSceneScrollingHitObjects.cs b/osu.Game.Tests/Visual/Gameplay/TestSceneScrollingHitObjects.cs index 9b444c1f44..88d295561e 100644 --- a/osu.Game.Tests/Visual/Gameplay/TestSceneScrollingHitObjects.cs +++ b/osu.Game.Tests/Visual/Gameplay/TestSceneScrollingHitObjects.cs @@ -93,9 +93,9 @@ private void setUpHitObjects() => AddStep("set up hit objects", () => private IList testControlPoints => new List { - new MultiplierControlPoint(time_range) { DifficultyPoint = { SliderVelocity = 1.25 } }, - new MultiplierControlPoint(1.5 * time_range) { DifficultyPoint = { SliderVelocity = 1 } }, - new MultiplierControlPoint(2 * time_range) { DifficultyPoint = { SliderVelocity = 1.5 } } + new MultiplierControlPoint(time_range) { EffectPoint = { ApproachRate = 1.25 } }, + new MultiplierControlPoint(1.5 * time_range) { EffectPoint = { ApproachRate = 1 } }, + new MultiplierControlPoint(2 * time_range) { EffectPoint = { ApproachRate = 1.5 } } }; [Test] diff --git a/osu.Game/Beatmaps/BeatmapDifficulty.cs b/osu.Game/Beatmaps/BeatmapDifficulty.cs index 1844b193f2..df78af7527 100644 --- a/osu.Game/Beatmaps/BeatmapDifficulty.cs +++ b/osu.Game/Beatmaps/BeatmapDifficulty.cs @@ -26,7 +26,7 @@ public float ApproachRate set => approachRate = value; } - public double SliderMultiplier { get; set; } = 1; + public double SliderMultiplier { get; set; } = 1; // AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA this needs to be renamed or removed or something. public double SliderTickRate { get; set; } = 1; /// diff --git a/osu.Game/Beatmaps/Formats/LegacyBeatmapDecoder.cs b/osu.Game/Beatmaps/Formats/LegacyBeatmapDecoder.cs index a9b5793565..c19ab0fca9 100644 --- a/osu.Game/Beatmaps/Formats/LegacyBeatmapDecoder.cs +++ b/osu.Game/Beatmaps/Formats/LegacyBeatmapDecoder.cs @@ -387,6 +387,7 @@ private void handleTimingPoint(string line) { KiaiMode = kiaiMode, OmitFirstBarLine = omitFirstBarSignature, + ApproachRate = speedMultiplier, }, timingChange); addControlPoint(time, new LegacySampleControlPoint diff --git a/osu.Game/Beatmaps/Formats/LegacyBeatmapEncoder.cs b/osu.Game/Beatmaps/Formats/LegacyBeatmapEncoder.cs index a317e6e129..3a206cc63e 100644 --- a/osu.Game/Beatmaps/Formats/LegacyBeatmapEncoder.cs +++ b/osu.Game/Beatmaps/Formats/LegacyBeatmapEncoder.cs @@ -184,7 +184,7 @@ private void handleControlPoints(TextWriter writer) SampleControlPoint lastRelevantSamplePoint = null; DifficultyControlPoint lastRelevantDifficultyPoint = null; - // iterate over hitobjects and pull out all required sample changes + // iterate over hitobjects and pull out all required sample and difficulty changes foreach (var h in beatmap.HitObjects) { var hSamplePoint = h.SampleControlPoint; @@ -202,6 +202,8 @@ private void handleControlPoints(TextWriter writer) lastRelevantSamplePoint = hSamplePoint; } } + + // TODO: we need to pull out approach rate from EffectControlPoint and shove it in with difficulty points where necessary... } foreach (var group in beatmap.ControlPointInfo.Groups) diff --git a/osu.Game/Rulesets/Timing/MultiplierControlPoint.cs b/osu.Game/Rulesets/Timing/MultiplierControlPoint.cs index 61308505cd..d5d1c849ec 100644 --- a/osu.Game/Rulesets/Timing/MultiplierControlPoint.cs +++ b/osu.Game/Rulesets/Timing/MultiplierControlPoint.cs @@ -7,7 +7,7 @@ namespace osu.Game.Rulesets.Timing { /// - /// A control point which adds an aggregated multiplier based on the provided 's BeatLength and 's SpeedMultiplier. + /// A control point which adds an aggregated multiplier based on the provided 's BeatLength and 's SpeedMultiplier. /// public class MultiplierControlPoint : IComparable { @@ -19,7 +19,7 @@ public class MultiplierControlPoint : IComparable /// /// The aggregate multiplier which this provides. /// - public double Multiplier => Velocity * DifficultyPoint.SliderVelocity * BaseBeatLength / TimingPoint.BeatLength; + public double Multiplier => Velocity * EffectPoint.ApproachRate * BaseBeatLength / TimingPoint.BeatLength; /// /// The base beat length to scale the provided multiplier relative to. @@ -38,9 +38,9 @@ public class MultiplierControlPoint : IComparable public TimingControlPoint TimingPoint = new TimingControlPoint(); /// - /// The that provides additional difficulty information for this . + /// The that provides additional difficulty information for this . /// - public DifficultyControlPoint DifficultyPoint = new DifficultyControlPoint(); + public EffectControlPoint EffectPoint = new EffectControlPoint(); /// /// Creates a . This is required for JSON serialization diff --git a/osu.Game/Rulesets/UI/Scrolling/DrawableScrollingRuleset.cs b/osu.Game/Rulesets/UI/Scrolling/DrawableScrollingRuleset.cs index adef42e4c4..f0a0dd1367 100644 --- a/osu.Game/Rulesets/UI/Scrolling/DrawableScrollingRuleset.cs +++ b/osu.Game/Rulesets/UI/Scrolling/DrawableScrollingRuleset.cs @@ -139,27 +139,26 @@ private void load() // Merge sequences of timing and difficulty control points to create the aggregate "multiplier" control point var lastTimingPoint = new TimingControlPoint(); - var lastDifficultyPoint = new DifficultyControlPoint(); + var lastEffectPoint = new EffectControlPoint(); var allPoints = new SortedList(Comparer.Default); - allPoints.AddRange(Beatmap.ControlPointInfo.TimingPoints); - // TODO: fix - //allPoints.AddRange(Beatmap.ControlPointInfo.DifficultyPoints); + allPoints.AddRange(Beatmap.ControlPointInfo.TimingPoints); + allPoints.AddRange(Beatmap.ControlPointInfo.EffectPoints); // Generate the timing points, making non-timing changes use the previous timing change and vice-versa var timingChanges = allPoints.Select(c => { if (c is TimingControlPoint timingPoint) lastTimingPoint = timingPoint; - else if (c is DifficultyControlPoint difficultyPoint) - lastDifficultyPoint = difficultyPoint; + else if (c is EffectControlPoint difficultyPoint) + lastEffectPoint = difficultyPoint; return new MultiplierControlPoint(c.Time) { Velocity = Beatmap.BeatmapInfo.BaseDifficulty.SliderMultiplier, BaseBeatLength = baseBeatLength, TimingPoint = lastTimingPoint, - DifficultyPoint = lastDifficultyPoint + EffectPoint = lastEffectPoint }; });