diff --git a/osu.Game.Rulesets.Mania/Mods/ManiaModGravity.cs b/osu.Game.Rulesets.Mania/Mods/ManiaModGravity.cs index 0560780be9..d36b187599 100644 --- a/osu.Game.Rulesets.Mania/Mods/ManiaModGravity.cs +++ b/osu.Game.Rulesets.Mania/Mods/ManiaModGravity.cs @@ -9,6 +9,7 @@ using osu.Game.Graphics; using osu.Game.Rulesets.Mania.Timing; using osu.Game.Rulesets.Objects; using osu.Game.Rulesets.Timing; +using osu.Game.Rulesets.Mania.Objects.Drawables; namespace osu.Game.Rulesets.Mania.Mods { @@ -34,9 +35,9 @@ namespace osu.Game.Rulesets.Mania.Mods hitObjectTimingChanges[maniaObject.Column].Add(new ManiaSpeedAdjustmentContainer(controlPoint, ScrollingAlgorithm.Gravity)); } - foreach (BarLine barLine in hitRenderer.BarLines) + foreach (DrawableBarLine barLine in hitRenderer.BarLines) { - var controlPoint = hitRenderer.CreateControlPointAt(barLine.StartTime); + var controlPoint = hitRenderer.CreateControlPointAt(barLine.HitObject.StartTime); controlPoint.TimingPoint.BeatLength = 1000; barlineTimingChanges.Add(new ManiaSpeedAdjustmentContainer(controlPoint, ScrollingAlgorithm.Gravity)); diff --git a/osu.Game.Rulesets.Mania/UI/ManiaHitRenderer.cs b/osu.Game.Rulesets.Mania/UI/ManiaHitRenderer.cs index 57ad9dcb45..048506d111 100644 --- a/osu.Game.Rulesets.Mania/UI/ManiaHitRenderer.cs +++ b/osu.Game.Rulesets.Mania/UI/ManiaHitRenderer.cs @@ -6,7 +6,9 @@ using System.Collections.Generic; using System.Linq; using OpenTK; using OpenTK.Input; +using osu.Framework.Allocation; using osu.Framework.Configuration; +using osu.Framework.Extensions.IEnumerableExtensions; using osu.Framework.Graphics; using osu.Framework.Lists; using osu.Framework.MathUtils; @@ -36,7 +38,7 @@ namespace osu.Game.Rulesets.Mania.UI /// public int PreferredColumns; - public readonly List BarLines = new List(); + public IEnumerable BarLines; /// /// Per-column timing changes. @@ -58,9 +60,12 @@ namespace osu.Game.Rulesets.Mania.UI for (int i = 0; i < PreferredColumns; i++) hitObjectTimingChanges[i] = new List(); - // Generate the bar line list + // Generate the bar lines double lastObjectTime = (Objects.LastOrDefault() as IHasEndTime)?.EndTime ?? Objects.LastOrDefault()?.StartTime ?? double.MaxValue; + SortedList timingPoints = Beatmap.ControlPointInfo.TimingPoints; + var barLines = new List(); + for (int i = 0; i < timingPoints.Count; i++) { TimingControlPoint point = timingPoints[i]; @@ -71,15 +76,17 @@ namespace osu.Game.Rulesets.Mania.UI int index = 0; for (double t = timingPoints[i].Time; Precision.DefinitelyBigger(endTime, t); t += point.BeatLength, index++) { - BarLines.Add(new BarLine + barLines.Add(new DrawableBarLine(new BarLine { StartTime = t, ControlPoint = point, BeatIndex = index - }); + })); } } + BarLines = barLines; + // Generate speed adjustments from mods first bool useDefaultSpeedAdjustments = true; @@ -97,6 +104,16 @@ namespace osu.Game.Rulesets.Mania.UI generateDefaultSpeedAdjustments(); } + [BackgroundDependencyLoader] + private void load() + { + var maniaPlayfield = Playfield as ManiaPlayfield; + if (maniaPlayfield == null) + return; + + BarLines.ForEach(maniaPlayfield.Add); + } + private void generateDefaultSpeedAdjustments() { defaultControlPoints.ForEach(c => diff --git a/osu.Game.Rulesets.Mania/UI/ManiaPlayfield.cs b/osu.Game.Rulesets.Mania/UI/ManiaPlayfield.cs index dbf2fa2d65..255cadbac3 100644 --- a/osu.Game.Rulesets.Mania/UI/ManiaPlayfield.cs +++ b/osu.Game.Rulesets.Mania/UI/ManiaPlayfield.cs @@ -127,7 +127,8 @@ namespace osu.Game.Rulesets.Mania.UI Name = "Bar lines", Anchor = Anchor.TopCentre, Origin = Anchor.TopCentre, - RelativeSizeAxes = Axes.Y + RelativeSizeAxes = Axes.Y, + VisibleTimeRange = visibleTimeRange // Width is set in the Update method } }