diff --git a/osu.Game.Rulesets.Mania/Edit/ManiaBeatSnapGrid.cs b/osu.Game.Rulesets.Mania/Edit/ManiaBeatSnapGrid.cs index 9cc84450cc..4d45e16588 100644 --- a/osu.Game.Rulesets.Mania/Edit/ManiaBeatSnapGrid.cs +++ b/osu.Game.Rulesets.Mania/Edit/ManiaBeatSnapGrid.cs @@ -8,6 +8,8 @@ using osu.Framework.Bindables; using osu.Framework.Caching; using osu.Framework.Graphics; +using osu.Framework.Graphics.Containers; +using osu.Framework.Graphics.Pooling; using osu.Framework.Graphics.Shapes; using osu.Game.Graphics; using osu.Game.Rulesets.Edit; @@ -23,7 +25,7 @@ namespace osu.Game.Rulesets.Mania.Edit /// /// A grid which displays coloured beat divisor lines in proximity to the selection or placement cursor. /// - public partial class ManiaBeatSnapGrid : Component + public partial class ManiaBeatSnapGrid : CompositeComponent { private const double visible_range = 750; @@ -53,6 +55,8 @@ public partial class ManiaBeatSnapGrid : Component private readonly List grids = new List(); + private readonly DrawablePool linesPool = new DrawablePool(50); + private readonly Cached lineCache = new Cached(); private (double start, double end)? selectionTimeRange; @@ -60,6 +64,8 @@ public partial class ManiaBeatSnapGrid : Component [BackgroundDependencyLoader] private void load(HitObjectComposer composer) { + AddInternal(linesPool); + foreach (var stage in ((ManiaPlayfield)composer.Playfield).Stages) { foreach (var column in stage.Columns) @@ -85,17 +91,10 @@ protected override void Update() } } - private readonly Stack availableLines = new Stack(); - private void createLines() { foreach (var grid in grids) - { - foreach (var line in grid.Objects.OfType()) - availableLines.Push(line); - grid.Clear(); - } if (selectionTimeRange == null) return; @@ -131,10 +130,13 @@ private void createLines() foreach (var grid in grids) { - if (!availableLines.TryPop(out var line)) - line = new DrawableGridLine(); + var line = linesPool.Get(); + + line.Apply(new HitObject + { + StartTime = time + }); - line.HitObject.StartTime = time; line.Colour = colour; grid.Add(line);