From 511c1d835bc41e648f8aa8f3e3778c9e24c0952a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bart=C5=82omiej=20Dach?= Date: Tue, 3 Jun 2025 14:50:35 +0200 Subject: [PATCH] Fix track not looping if specified preview point exceeds duration of track By falling back to the default of 40% of track duration in such cases. Also added a safety for the restart point exceeding acceptable bounds in case of a non-zero offset. Closes https://github.com/ppy/osu/issues/33308. --- osu.Game/Beatmaps/WorkingBeatmap.cs | 16 +++++++--------- 1 file changed, 7 insertions(+), 9 deletions(-) diff --git a/osu.Game/Beatmaps/WorkingBeatmap.cs b/osu.Game/Beatmaps/WorkingBeatmap.cs index b0f6082406..4ea26b46f8 100644 --- a/osu.Game/Beatmaps/WorkingBeatmap.cs +++ b/osu.Game/Beatmaps/WorkingBeatmap.cs @@ -124,18 +124,16 @@ namespace osu.Game.Beatmaps Track.Looping = looping; Track.RestartPoint = Metadata.PreviewTime; - if (Track.RestartPoint == -1) + if (!Track.IsLoaded) { - if (!Track.IsLoaded) - { - // force length to be populated (https://github.com/ppy/osu-framework/issues/4202) - Track.Seek(Track.CurrentTime); - } - - Track.RestartPoint = 0.4f * Track.Length; + // force length to be populated (https://github.com/ppy/osu-framework/issues/4202) + Track.Seek(Track.CurrentTime); } - Track.RestartPoint += offsetFromPreviewPoint; + if (Track.RestartPoint < 0 || Track.RestartPoint > Track.Length) + Track.RestartPoint = 0.4f * Track.Length; + + Track.RestartPoint = Math.Clamp(Track.RestartPoint + offsetFromPreviewPoint, 0, Track.Length); } ///