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);