From f3f7e28353d340b916a2d4ba7735e21de3c51c16 Mon Sep 17 00:00:00 2001 From: Dean Herbert Date: Wed, 1 Jun 2022 20:57:24 +0900 Subject: [PATCH] Ignore initial taps as they are generally inaccurate --- osu.Game/Screens/Edit/Timing/TapButton.cs | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/osu.Game/Screens/Edit/Timing/TapButton.cs b/osu.Game/Screens/Edit/Timing/TapButton.cs index fb5580c6ac..65f31f4396 100644 --- a/osu.Game/Screens/Edit/Timing/TapButton.cs +++ b/osu.Game/Screens/Edit/Timing/TapButton.cs @@ -275,20 +275,23 @@ namespace osu.Game.Screens.Edit.Timing IsHandlingTapping.Value = false; } + private const int initial_taps_to_ignore = 4; + private const int max_taps_to_consider = 8; + private void handleTap() { tapTimings.Add(Clock.CurrentTime); - if (tapTimings.Count > 8) + if (tapTimings.Count > initial_taps_to_ignore + max_taps_to_consider) tapTimings.RemoveAt(0); - if (tapTimings.Count < 5) + if (tapTimings.Count < initial_taps_to_ignore * 2) { bpmText.Text = new string('.', tapTimings.Count); return; } - double bpm = Math.Round(60000 / ((tapTimings.Last() - tapTimings.First()) / (tapTimings.Count - 1))); + double bpm = Math.Round(60000 / ((tapTimings.Last() - tapTimings.Skip(initial_taps_to_ignore).First()) / (tapTimings.Count - initial_taps_to_ignore - 1))); bpmText.Text = $"{bpm} BPM";