From 747bff1df9e671eff2a773dfd35c80eac5d0f8e5 Mon Sep 17 00:00:00 2001 From: Hivie Date: Wed, 16 Jul 2025 01:53:22 +0100 Subject: [PATCH] address review - add TODO for refactoring verifier context ctor - call `GetPlayableBeatmap()` in verifier context ctor - filter diffs with relevant ruleset in check logic - fix tests --- .../Editing/Checks/CheckLowestDiffDrainTimeTest.cs | 9 ++++++--- osu.Game/Rulesets/Edit/BeatmapVerifierContext.cs | 9 +++++---- .../Rulesets/Edit/Checks/CheckLowestDiffDrainTime.cs | 4 +++- osu.Game/Screens/Edit/Verify/IssueList.cs | 11 ++++++++++- 4 files changed, 24 insertions(+), 9 deletions(-) diff --git a/osu.Game.Tests/Editing/Checks/CheckLowestDiffDrainTimeTest.cs b/osu.Game.Tests/Editing/Checks/CheckLowestDiffDrainTimeTest.cs index 96f942fd8e..20213b13a4 100644 --- a/osu.Game.Tests/Editing/Checks/CheckLowestDiffDrainTimeTest.cs +++ b/osu.Game.Tests/Editing/Checks/CheckLowestDiffDrainTimeTest.cs @@ -10,6 +10,7 @@ using osu.Game.Extensions; using osu.Game.Rulesets.Edit; using osu.Game.Rulesets.Edit.Checks; using osu.Game.Rulesets.Objects; +using osu.Game.Rulesets.Osu; using osu.Game.Tests.Beatmaps; namespace osu.Game.Tests.Editing.Checks @@ -158,7 +159,8 @@ namespace osu.Game.Tests.Editing.Checks BeatmapInfo = new BeatmapInfo { StarRating = starRating, - DifficultyName = difficultyName + DifficultyName = difficultyName, + Ruleset = new OsuRuleset().RulesetInfo }, HitObjects = new List { @@ -177,7 +179,8 @@ namespace osu.Game.Tests.Editing.Checks BeatmapInfo = new BeatmapInfo { StarRating = starRating, - DifficultyName = difficultyName + DifficultyName = difficultyName, + Ruleset = new OsuRuleset().RulesetInfo }, HitObjects = new List { @@ -242,7 +245,7 @@ namespace osu.Game.Tests.Editing.Checks currentBeatmap, new TestWorkingBeatmap(currentBeatmap), currentDifficultyRating, - beatmapInfo => difficultyDict.TryGetValue(beatmapInfo, out var workingBeatmap) ? workingBeatmap : null + beatmapInfo => difficultyDict.TryGetValue(beatmapInfo, out var workingBeatmap) ? workingBeatmap.Beatmap : null ); } diff --git a/osu.Game/Rulesets/Edit/BeatmapVerifierContext.cs b/osu.Game/Rulesets/Edit/BeatmapVerifierContext.cs index 9b4448a6f9..9761212b55 100644 --- a/osu.Game/Rulesets/Edit/BeatmapVerifierContext.cs +++ b/osu.Game/Rulesets/Edit/BeatmapVerifierContext.cs @@ -33,7 +33,8 @@ namespace osu.Game.Rulesets.Edit /// public readonly IReadOnlyList BeatmapsetDifficulties; - public BeatmapVerifierContext(IBeatmap beatmap, IWorkingBeatmap workingBeatmap, DifficultyRating difficultyRating = DifficultyRating.ExpertPlus, Func? beatmapResolver = null) + // TODO: Refactor this to have a simple constructor that only stores data and move the beatmap resolution logic to a static factory method. + public BeatmapVerifierContext(IBeatmap beatmap, IWorkingBeatmap workingBeatmap, DifficultyRating difficultyRating = DifficultyRating.ExpertPlus, Func? beatmapResolver = null) { Beatmap = beatmap; WorkingBeatmap = workingBeatmap; @@ -59,9 +60,9 @@ namespace osu.Game.Rulesets.Edit } // Try to resolve other difficulties using the provided resolver - var working = beatmapResolver?.Invoke(beatmapInfo); - if (working?.Beatmap != null) - difficulties.Add(working.Beatmap); + var resolvedBeatmap = beatmapResolver?.Invoke(beatmapInfo); + if (resolvedBeatmap != null) + difficulties.Add(resolvedBeatmap); } BeatmapsetDifficulties = difficulties; diff --git a/osu.Game/Rulesets/Edit/Checks/CheckLowestDiffDrainTime.cs b/osu.Game/Rulesets/Edit/Checks/CheckLowestDiffDrainTime.cs index 47db1fc54b..58346f7e3e 100644 --- a/osu.Game/Rulesets/Edit/Checks/CheckLowestDiffDrainTime.cs +++ b/osu.Game/Rulesets/Edit/Checks/CheckLowestDiffDrainTime.cs @@ -27,7 +27,9 @@ namespace osu.Game.Rulesets.Edit.Checks public IEnumerable Run(BeatmapVerifierContext context) { - IReadOnlyList difficulties = context.BeatmapsetDifficulties; + IReadOnlyList difficulties = context.BeatmapsetDifficulties + .Where(d => d.BeatmapInfo.Ruleset.Equals(context.Beatmap.BeatmapInfo.Ruleset)) + .ToList(); if (difficulties.Count == 0) yield break; diff --git a/osu.Game/Screens/Edit/Verify/IssueList.cs b/osu.Game/Screens/Edit/Verify/IssueList.cs index 62056e2ae1..6ef193fd79 100644 --- a/osu.Game/Screens/Edit/Verify/IssueList.cs +++ b/osu.Game/Screens/Edit/Verify/IssueList.cs @@ -46,7 +46,16 @@ namespace osu.Game.Screens.Edit.Verify generalVerifier = new BeatmapVerifier(); rulesetVerifier = beatmap.BeatmapInfo.Ruleset.CreateInstance().CreateBeatmapVerifier(); - context = new BeatmapVerifierContext(beatmap, workingBeatmap.Value, verify.InterpretedDifficulty.Value, beatmapInfo => beatmapManager.GetWorkingBeatmap(beatmapInfo)); + context = new BeatmapVerifierContext( + beatmap, + workingBeatmap.Value, + verify.InterpretedDifficulty.Value, + beatmapInfo => + beatmapManager + .GetWorkingBeatmap(beatmapInfo) + ?.GetPlayableBeatmap(beatmapInfo.Ruleset) + ); + verify.InterpretedDifficulty.BindValueChanged(difficulty => context.InterpretedDifficulty = difficulty.NewValue); RelativeSizeAxes = Axes.Both;