mirror of
https://github.com/ppy/osu
synced 2025-03-19 09:34:49 +00:00
Add testing and fix filtering only some difficulties
This commit is contained in:
parent
48f30d2bb5
commit
8646d5d1e0
@ -79,6 +79,8 @@ namespace osu.Game.Tests.Visual
|
|||||||
|
|
||||||
AddUntilStep(() => carousel.Beatmaps.Any(), "Wait for load");
|
AddUntilStep(() => carousel.Beatmaps.Any(), "Wait for load");
|
||||||
|
|
||||||
|
// test traversal
|
||||||
|
|
||||||
advanceSelection(direction: 1, diff: false);
|
advanceSelection(direction: 1, diff: false);
|
||||||
checkSelected(1, 1);
|
checkSelected(1, 1);
|
||||||
|
|
||||||
@ -98,6 +100,8 @@ namespace osu.Game.Tests.Visual
|
|||||||
advanceSelection(direction: -1, diff: true);
|
advanceSelection(direction: -1, diff: true);
|
||||||
checkSelected(4, 3);
|
checkSelected(4, 3);
|
||||||
|
|
||||||
|
// test basic filtering
|
||||||
|
|
||||||
AddStep("Filter", () => carousel.Filter(new FilterCriteria { SearchText = "set #3" }, false));
|
AddStep("Filter", () => carousel.Filter(new FilterCriteria { SearchText = "set #3" }, false));
|
||||||
checkVisibleItemCount(diff: false, count: 1);
|
checkVisibleItemCount(diff: false, count: 1);
|
||||||
checkVisibleItemCount(diff: true, count: 3);
|
checkVisibleItemCount(diff: true, count: 3);
|
||||||
@ -111,7 +115,13 @@ namespace osu.Game.Tests.Visual
|
|||||||
checkVisibleItemCount(diff: false, count: 4);
|
checkVisibleItemCount(diff: false, count: 4);
|
||||||
checkVisibleItemCount(diff: true, count: 3);
|
checkVisibleItemCount(diff: true, count: 3);
|
||||||
|
|
||||||
setSelected(1, diff: 2);
|
// test filtering some difficulties (and keeping current beatmap set selected).
|
||||||
|
|
||||||
|
setSelected(1, 2);
|
||||||
|
AddStep("Filter some difficulties", () => carousel.Filter(new FilterCriteria { SearchText = "Normal" }, false));
|
||||||
|
checkSelected(1, 1);
|
||||||
|
AddStep("Un-filter", () => carousel.Filter(new FilterCriteria(), false));
|
||||||
|
checkSelected(1, 1);
|
||||||
}
|
}
|
||||||
|
|
||||||
private BeatmapSetInfo createTestBeatmapSet(int i)
|
private BeatmapSetInfo createTestBeatmapSet(int i)
|
||||||
|
@ -94,6 +94,7 @@ namespace osu.Game.Screens.Select
|
|||||||
private readonly Stack<CarouselBeatmap> randomSelectedBeatmaps = new Stack<CarouselBeatmap>();
|
private readonly Stack<CarouselBeatmap> randomSelectedBeatmaps = new Stack<CarouselBeatmap>();
|
||||||
|
|
||||||
private CarouselBeatmap selectedBeatmap;
|
private CarouselBeatmap selectedBeatmap;
|
||||||
|
private CarouselBeatmapSet selectedBeatmapSet => carouselSets.FirstOrDefault(s => s.State == CarouselItemState.Selected);
|
||||||
|
|
||||||
public BeatmapCarousel()
|
public BeatmapCarousel()
|
||||||
{
|
{
|
||||||
@ -291,14 +292,28 @@ namespace osu.Game.Screens.Select
|
|||||||
{
|
{
|
||||||
FilterTask = null;
|
FilterTask = null;
|
||||||
|
|
||||||
|
var lastSet = selectedBeatmapSet;
|
||||||
|
var lastBeatmap = selectedBeatmap;
|
||||||
|
|
||||||
carouselSets.ForEach(s => s.Filter(criteria));
|
carouselSets.ForEach(s => s.Filter(criteria));
|
||||||
|
|
||||||
yPositionsCache.Invalidate();
|
yPositionsCache.Invalidate();
|
||||||
|
|
||||||
if (selectedBeatmap?.Visible != true)
|
if (selectedBeatmap?.Filtered == false)
|
||||||
SelectNext();
|
|
||||||
else
|
|
||||||
select(selectedBeatmap);
|
select(selectedBeatmap);
|
||||||
|
else if (lastBeatmap != null && !lastSet.Filtered)
|
||||||
|
{
|
||||||
|
var searchable = lastSet.Beatmaps.AsEnumerable();
|
||||||
|
|
||||||
|
// search forwards first then backwards if nothing found.
|
||||||
|
var nextAvailable =
|
||||||
|
searchable.SkipWhile(b => b != lastBeatmap).FirstOrDefault(b => !b.Filtered) ??
|
||||||
|
searchable.Reverse().SkipWhile(b => b != lastBeatmap).FirstOrDefault(b => !b.Filtered);
|
||||||
|
|
||||||
|
select(nextAvailable);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
SelectNext();
|
||||||
};
|
};
|
||||||
|
|
||||||
FilterTask?.Cancel();
|
FilterTask?.Cancel();
|
||||||
|
Loading…
Reference in New Issue
Block a user