From e7a29d7c53545271f1debb1c024a264c3766a790 Mon Sep 17 00:00:00 2001 From: Andrei Zavatski Date: Sat, 30 Mar 2024 23:19:54 +0300 Subject: [PATCH] Improve slider body generation --- .../Extensions/ConversionExtensions.cs | 17 +++++++++++++---- 1 file changed, 13 insertions(+), 4 deletions(-) diff --git a/osu.Game.Rulesets.Bosu/Extensions/ConversionExtensions.cs b/osu.Game.Rulesets.Bosu/Extensions/ConversionExtensions.cs index 39e48b6..aedb10c 100644 --- a/osu.Game.Rulesets.Bosu/Extensions/ConversionExtensions.cs +++ b/osu.Game.Rulesets.Bosu/Extensions/ConversionExtensions.cs @@ -132,13 +132,22 @@ public static IEnumerable GenerateSliderBody(double startTime, IH { List bodyCherries = new List(); - var bodyCherriesCount = Math.Min(curve.Distance * (curve.RepeatCount + 1) / 15, max_visuals_per_slider_span * (curve.RepeatCount + 1)); + var bodyCherriesCount = (int)(curve.Distance * (curve.RepeatCount + 1) / 15); + + Vector2 lastPosition = new Vector2(-10000, -10000); for (int i = 0; i < bodyCherriesCount; i++) { - var progress = i / bodyCherriesCount; - var position = curve.CurvePositionAt(progress) + originalPosition; - position = toPlayfieldSpace(position * new Vector2(1, 0.4f)); + var progress = i / (float)bodyCherriesCount; + Vector2 position = toPlayfieldSpace((curve.CurvePositionAt(progress) + originalPosition) * new Vector2(1, 0.4f)); + + if (i != 0 && i != bodyCherriesCount - 1) + { + if (Vector2.Distance(position, lastPosition) < 5) + continue; + } + + lastPosition = position; if (withinPlayfield(position)) {