diff --git a/osu.Game.Rulesets.Mania/UI/DrawableManiaRuleset.cs b/osu.Game.Rulesets.Mania/UI/DrawableManiaRuleset.cs
index e5ec054fa7..796d083c32 100644
--- a/osu.Game.Rulesets.Mania/UI/DrawableManiaRuleset.cs
+++ b/osu.Game.Rulesets.Mania/UI/DrawableManiaRuleset.cs
@@ -7,6 +7,7 @@ using osu.Framework.Bindables;
using osu.Framework.Extensions.IEnumerableExtensions;
using osu.Framework.Input;
using osu.Game.Beatmaps;
+using osu.Game.Beatmaps.ControlPoints;
using osu.Game.Input.Handlers;
using osu.Game.Replays;
using osu.Game.Rulesets.Mania.Beatmaps;
@@ -46,6 +47,18 @@ namespace osu.Game.Rulesets.Mania.UI
[BackgroundDependencyLoader]
private void load()
{
+ bool isForCurrentRuleset = Beatmap.BeatmapInfo.Ruleset.Equals(Ruleset.RulesetInfo);
+
+ foreach (var p in ControlPoints)
+ {
+ // Mania doesn't care about global velocity
+ p.Velocity = 1;
+
+ // For non-mania beatmap, speed changes should only happen through timing points
+ if (!isForCurrentRuleset)
+ p.DifficultyPoint = new DifficultyControlPoint();
+ }
+
BarLines.ForEach(Playfield.Add);
Config.BindWith(ManiaRulesetSetting.ScrollDirection, configDirection);
diff --git a/osu.Game/Rulesets/UI/Scrolling/DrawableScrollingRuleset.cs b/osu.Game/Rulesets/UI/Scrolling/DrawableScrollingRuleset.cs
index 8bcdfff2fd..f3d2c5bdcb 100644
--- a/osu.Game/Rulesets/UI/Scrolling/DrawableScrollingRuleset.cs
+++ b/osu.Game/Rulesets/UI/Scrolling/DrawableScrollingRuleset.cs
@@ -74,11 +74,9 @@ namespace osu.Game.Rulesets.UI.Scrolling
protected virtual bool RelativeScaleBeatLengths => false;
///
- /// Provides the default s that adjust the scrolling rate of s
- /// inside this .
+ /// The s that adjust the scrolling rate of s inside this .
///
- ///
- private readonly SortedList controlPoints = new SortedList(Comparer.Default);
+ protected readonly SortedList ControlPoints = new SortedList(Comparer.Default);
protected IScrollingInfo ScrollingInfo => scrollingInfo;
@@ -95,11 +93,11 @@ namespace osu.Game.Rulesets.UI.Scrolling
switch (VisualisationMethod)
{
case ScrollVisualisationMethod.Sequential:
- scrollingInfo.Algorithm = new SequentialScrollAlgorithm(controlPoints);
+ scrollingInfo.Algorithm = new SequentialScrollAlgorithm(ControlPoints);
break;
case ScrollVisualisationMethod.Overlapping:
- scrollingInfo.Algorithm = new OverlappingScrollAlgorithm(controlPoints);
+ scrollingInfo.Algorithm = new OverlappingScrollAlgorithm(ControlPoints);
break;
case ScrollVisualisationMethod.Constant:
@@ -168,10 +166,18 @@ namespace osu.Game.Rulesets.UI.Scrolling
// Collapse sections with the same start time
.GroupBy(s => s.StartTime).Select(g => g.Last()).OrderBy(s => s.StartTime);
- controlPoints.AddRange(timingChanges);
+ ControlPoints.AddRange(timingChanges);
- if (controlPoints.Count == 0)
- controlPoints.Add(new MultiplierControlPoint { Velocity = Beatmap.BeatmapInfo.BaseDifficulty.SliderMultiplier });
+ if (ControlPoints.Count == 0)
+ ControlPoints.Add(new MultiplierControlPoint { Velocity = Beatmap.BeatmapInfo.BaseDifficulty.SliderMultiplier });
+ }
+
+ protected override void LoadComplete()
+ {
+ base.LoadComplete();
+
+ if (!(Playfield is ScrollingPlayfield))
+ throw new ArgumentException($"{nameof(Playfield)} must be a {nameof(ScrollingPlayfield)} when using {nameof(DrawableScrollingRuleset)}.");
}
public bool OnPressed(GlobalAction action)
@@ -193,14 +199,6 @@ namespace osu.Game.Rulesets.UI.Scrolling
return false;
}
- protected override void LoadComplete()
- {
- base.LoadComplete();
-
- if (!(Playfield is ScrollingPlayfield))
- throw new ArgumentException($"{nameof(Playfield)} must be a {nameof(ScrollingPlayfield)} when using {nameof(DrawableScrollingRuleset)}.");
- }
-
public void OnReleased(GlobalAction action)
{
}