diff --git a/osu.Game/Online/Rooms/PlaylistExtensions.cs b/osu.Game/Online/Rooms/PlaylistExtensions.cs
index e9a0519f3d..8591b5bb47 100644
--- a/osu.Game/Online/Rooms/PlaylistExtensions.cs
+++ b/osu.Game/Online/Rooms/PlaylistExtensions.cs
@@ -6,6 +6,7 @@ using System.Linq;
using Humanizer;
using Humanizer.Localisation;
using osu.Framework.Bindables;
+using osu.Game.Rulesets;
using osu.Game.Utils;
namespace osu.Game.Online.Rooms
@@ -42,14 +43,14 @@ namespace osu.Game.Online.Rooms
///
/// Returns the total duration from the in playlist order from the supplied ,
///
- public static string GetTotalDuration(this BindableList playlist) =>
+ public static string GetTotalDuration(this BindableList playlist, RulesetStore rulesetStore) =>
playlist.Select(p =>
{
double rate = 1;
if (p.RequiredMods.Length > 0)
{
- var ruleset = p.Beatmap.Ruleset.CreateInstance();
+ var ruleset = rulesetStore.GetRuleset(p.RulesetID)!.CreateInstance();
rate = ModUtils.CalculateRateWithMods(p.RequiredMods.Select(mod => mod.ToMod(ruleset)));
}
diff --git a/osu.Game/Screens/OnlinePlay/Components/OverlinedPlaylistHeader.cs b/osu.Game/Screens/OnlinePlay/Components/OverlinedPlaylistHeader.cs
index fc86cbbbdd..dd728e460b 100644
--- a/osu.Game/Screens/OnlinePlay/Components/OverlinedPlaylistHeader.cs
+++ b/osu.Game/Screens/OnlinePlay/Components/OverlinedPlaylistHeader.cs
@@ -1,12 +1,17 @@
// Copyright (c) ppy Pty Ltd . Licensed under the MIT Licence.
// See the LICENCE file in the repository root for full licence text.
+using osu.Framework.Allocation;
using osu.Game.Online.Rooms;
+using osu.Game.Rulesets;
namespace osu.Game.Screens.OnlinePlay.Components
{
public partial class OverlinedPlaylistHeader : OverlinedHeader
{
+ [Resolved]
+ private RulesetStore rulesets { get; set; } = null!;
+
public OverlinedPlaylistHeader()
: base("Playlist")
{
@@ -16,7 +21,7 @@ namespace osu.Game.Screens.OnlinePlay.Components
{
base.LoadComplete();
- Playlist.BindCollectionChanged((_, _) => Details.Value = Playlist.GetTotalDuration(), true);
+ Playlist.BindCollectionChanged((_, _) => Details.Value = Playlist.GetTotalDuration(rulesets), true);
}
}
}
diff --git a/osu.Game/Screens/OnlinePlay/Playlists/PlaylistsRoomSettingsOverlay.cs b/osu.Game/Screens/OnlinePlay/Playlists/PlaylistsRoomSettingsOverlay.cs
index 84e419d67a..9166cac9de 100644
--- a/osu.Game/Screens/OnlinePlay/Playlists/PlaylistsRoomSettingsOverlay.cs
+++ b/osu.Game/Screens/OnlinePlay/Playlists/PlaylistsRoomSettingsOverlay.cs
@@ -24,6 +24,7 @@ using osu.Game.Overlays;
using osu.Game.Screens.OnlinePlay.Match.Components;
using osuTK;
using osu.Game.Localisation;
+using osu.Game.Rulesets;
namespace osu.Game.Screens.OnlinePlay.Playlists
{
@@ -78,6 +79,9 @@ namespace osu.Game.Screens.OnlinePlay.Playlists
[Resolved]
private IAPIProvider api { get; set; } = null!;
+ [Resolved]
+ private RulesetStore rulesets { get; set; } = null!;
+
private IBindable localUser = null!;
private readonly Room room;
@@ -366,7 +370,7 @@ namespace osu.Game.Screens.OnlinePlay.Playlists
public void SelectBeatmap() => editPlaylistButton.TriggerClick();
private void onPlaylistChanged(object? sender, NotifyCollectionChangedEventArgs e) =>
- playlistLength.Text = $"Length: {Playlist.GetTotalDuration()}";
+ playlistLength.Text = $"Length: {Playlist.GetTotalDuration(rulesets)}";
private bool hasValidSettings => RoomID.Value == null && NameField.Text.Length > 0 && Playlist.Count > 0
&& hasValidDuration;