mirror of
https://github.com/ppy/osu.git
synced 2025-02-02 00:12:54 +08:00
Merge pull request #8133 from peppy/better-filter-bypass
Reapply filters on next change after a forced beatmap display
This commit is contained in:
commit
6f7a6a5a59
@ -465,6 +465,43 @@ namespace osu.Game.Tests.Visual.SongSelect
|
|||||||
AddAssert("carousel still correct", () => songSelect.Carousel.SelectedBeatmap.OnlineBeatmapID == target.OnlineBeatmapID);
|
AddAssert("carousel still correct", () => songSelect.Carousel.SelectedBeatmap.OnlineBeatmapID == target.OnlineBeatmapID);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
[Test]
|
||||||
|
public void TestExternalBeatmapChangeWhileFilteredThenRefilter()
|
||||||
|
{
|
||||||
|
createSongSelect();
|
||||||
|
addManyTestMaps();
|
||||||
|
|
||||||
|
changeRuleset(0);
|
||||||
|
|
||||||
|
AddUntilStep("has selection", () => songSelect.Carousel.SelectedBeatmap != null);
|
||||||
|
|
||||||
|
AddStep("set filter text", () => songSelect.FilterControl.ChildrenOfType<SearchTextBox>().First().Text = "nonono");
|
||||||
|
|
||||||
|
AddUntilStep("dummy selected", () => Beatmap.Value is DummyWorkingBeatmap);
|
||||||
|
|
||||||
|
AddUntilStep("has no selection", () => songSelect.Carousel.SelectedBeatmap == null);
|
||||||
|
|
||||||
|
BeatmapInfo target = null;
|
||||||
|
|
||||||
|
AddStep("select beatmap externally", () =>
|
||||||
|
{
|
||||||
|
target = manager.GetAllUsableBeatmapSets().Where(b => b.Beatmaps.Any(bi => bi.RulesetID == 1))
|
||||||
|
.ElementAt(5).Beatmaps.First();
|
||||||
|
|
||||||
|
Beatmap.Value = manager.GetWorkingBeatmap(target);
|
||||||
|
});
|
||||||
|
|
||||||
|
AddUntilStep("has selection", () => songSelect.Carousel.SelectedBeatmap != null);
|
||||||
|
|
||||||
|
AddUntilStep("carousel has correct", () => songSelect.Carousel.SelectedBeatmap?.OnlineBeatmapID == target.OnlineBeatmapID);
|
||||||
|
AddUntilStep("game has correct", () => Beatmap.Value.BeatmapInfo.OnlineBeatmapID == target.OnlineBeatmapID);
|
||||||
|
|
||||||
|
AddStep("set filter text", () => songSelect.FilterControl.ChildrenOfType<SearchTextBox>().First().Text = "nononoo");
|
||||||
|
|
||||||
|
AddUntilStep("game lost selection", () => Beatmap.Value is DummyWorkingBeatmap);
|
||||||
|
AddAssert("carousel lost selection", () => songSelect.Carousel.SelectedBeatmap == null);
|
||||||
|
}
|
||||||
|
|
||||||
[Test]
|
[Test]
|
||||||
public void TestAutoplayViaCtrlEnter()
|
public void TestAutoplayViaCtrlEnter()
|
||||||
{
|
{
|
||||||
|
@ -25,6 +25,13 @@ namespace osu.Game.Screens.Select.Carousel
|
|||||||
{
|
{
|
||||||
base.Filter(criteria);
|
base.Filter(criteria);
|
||||||
|
|
||||||
|
if (Beatmap.BeatmapSet?.Equals(criteria.SelectedBeatmapSet) == true)
|
||||||
|
{
|
||||||
|
// bypass filtering for selected beatmap
|
||||||
|
Filtered.Value = false;
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
bool match =
|
bool match =
|
||||||
criteria.Ruleset == null ||
|
criteria.Ruleset == null ||
|
||||||
Beatmap.RulesetID == criteria.Ruleset.ID ||
|
Beatmap.RulesetID == criteria.Ruleset.ID ||
|
||||||
|
@ -16,7 +16,7 @@ namespace osu.Game.Screens.Select.Carousel
|
|||||||
/// <summary>
|
/// <summary>
|
||||||
/// This item is not in a hidden state.
|
/// This item is not in a hidden state.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public bool Visible => State.Value == CarouselItemState.Selected || (State.Value != CarouselItemState.Collapsed && !Filtered.Value);
|
public bool Visible => State.Value != CarouselItemState.Collapsed && !Filtered.Value;
|
||||||
|
|
||||||
public virtual List<DrawableCarouselItem> Drawables
|
public virtual List<DrawableCarouselItem> Drawables
|
||||||
{
|
{
|
||||||
|
@ -15,6 +15,8 @@ namespace osu.Game.Screens.Select
|
|||||||
public GroupMode Group;
|
public GroupMode Group;
|
||||||
public SortMode Sort;
|
public SortMode Sort;
|
||||||
|
|
||||||
|
public BeatmapSetInfo SelectedBeatmapSet;
|
||||||
|
|
||||||
public OptionalRange<double> StarDifficulty;
|
public OptionalRange<double> StarDifficulty;
|
||||||
public OptionalRange<float> ApproachRate;
|
public OptionalRange<float> ApproachRate;
|
||||||
public OptionalRange<float> DrainRate;
|
public OptionalRange<float> DrainRate;
|
||||||
|
@ -392,7 +392,12 @@ namespace osu.Game.Screens.Select
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Even if a ruleset mismatch was not the cause (ie. a text filter is applied),
|
// Even if a ruleset mismatch was not the cause (ie. a text filter is applied),
|
||||||
// we still want to forcefully show the new beatmap, bypassing filters.
|
// we still want to temporarily show the new beatmap, bypassing filters.
|
||||||
|
// This will be undone the next time the user changes the filter.
|
||||||
|
var criteria = FilterControl.CreateCriteria();
|
||||||
|
criteria.SelectedBeatmapSet = e.NewValue.BeatmapInfo.BeatmapSet;
|
||||||
|
Carousel.Filter(criteria);
|
||||||
|
|
||||||
Carousel.SelectBeatmap(e.NewValue.BeatmapInfo);
|
Carousel.SelectBeatmap(e.NewValue.BeatmapInfo);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user