diff --git a/osu.Game/Beatmaps/Beatmap.cs b/osu.Game/Beatmaps/Beatmap.cs index fcdef1ce39..5683663816 100644 --- a/osu.Game/Beatmaps/Beatmap.cs +++ b/osu.Game/Beatmaps/Beatmap.cs @@ -17,6 +17,11 @@ public class Beatmap public List ControlPoints { get; set; } public List ComboColors { get; set; } + public double BPMAt(double time) + { + return 60000 / BeatLengthAt(time); + } + public double BeatLengthAt(double time, bool applyMultipliers = false) { int point = 0; diff --git a/osu.Game/Screens/Select/BeatmapInfoWedge.cs b/osu.Game/Screens/Select/BeatmapInfoWedge.cs index a931d58624..42836e046c 100644 --- a/osu.Game/Screens/Select/BeatmapInfoWedge.cs +++ b/osu.Game/Screens/Select/BeatmapInfoWedge.cs @@ -61,19 +61,7 @@ public void UpdateBeatmap(WorkingBeatmap beatmap) BeatmapSetInfo beatmapSetInfo = beatmap.BeatmapSetInfo; BeatmapInfo beatmapInfo = beatmap.BeatmapInfo; - double bpmPreview = 60000 / beatmap.Beatmap.BeatLengthAt(beatmap.Beatmap.Metadata.PreviewTime); - double bpmMax = bpmPreview; - double bpmMin = bpmPreview; - foreach( ControlPoint a in beatmap.Beatmap.ControlPoints) - { - if (a.BeatLength == 0) continue; - double tmp = 60000 / a.BeatLength; - if (bpmMax < tmp) bpmMax = tmp; - if (bpmMin > tmp) bpmMin = tmp; - } - string bpm; - if (bpmMax == bpmMin) bpm = bpmMin + "bpm"; - else bpm = bpmMin + "-" + bpmMax + "(" + 60000 / beatmap.Beatmap.BeatLengthAt(beatmap.Beatmap.Metadata.PreviewTime) + ")bpm"; + string bpm = GetBPMRange(beatmap); string length = "" + TimeSpan.FromMilliseconds((beatmap.Beatmap.HitObjects.Last().EndTime - beatmap.Beatmap.HitObjects.First().StartTime)).ToString(@"m\:s"); string hitCircles = "" + beatmap.Beatmap.HitObjects.Count(b => b.GetType().ToString().Equals("osu.Game.Modes.Osu.Objects.HitCircle")); string sliders = "" + beatmap.Beatmap.HitObjects.Count(b => b.GetType().ToString().Equals("osu.Game.Modes.Osu.Objects.Slider")); @@ -184,6 +172,21 @@ public void UpdateBeatmap(WorkingBeatmap beatmap) Add(d); }); } + + private string GetBPMRange(WorkingBeatmap beatmap) + { + double bpmMax = double.MinValue; + double bpmMin = double.MaxValue; + foreach (ControlPoint a in beatmap.Beatmap.ControlPoints) + { + if (a.BeatLength == 0) continue; + double tmp = 60000 / a.BeatLength; + if (bpmMax < tmp) bpmMax = tmp; + if (bpmMin > tmp) bpmMin = tmp; + } + if (bpmMax == bpmMin) return bpmMin + "bpm"; + return bpmMin + "-" + bpmMax + "(" + beatmap.Beatmap.BPMAt(beatmap.Beatmap.Metadata.PreviewTime) + ")bpm"; + } private Container InfoLabel(FontAwesome icon, string text) {