1
0
mirror of https://github.com/ppy/osu.git synced 2025-02-17 19:12:57 +08:00

Handle the case where the selected panel is no longer a valid selection better

This commit is contained in:
Dean Herbert 2017-12-11 21:31:26 +09:00
parent fb92b3551e
commit b10240d7ef
2 changed files with 31 additions and 24 deletions
osu.Game
Beatmaps/Drawables
Screens/Select

View File

@ -47,31 +47,34 @@ namespace osu.Game.Beatmaps.Drawables
set set
{ {
state = value; state = value;
UpdateState();
switch (value)
{
case BeatmapGroupState.Expanded:
Header.State = PanelSelectedState.Selected;
foreach (BeatmapPanel panel in BeatmapPanels)
panel.State = panel == SelectedPanel ? PanelSelectedState.Selected :
!panel.Filtered ? PanelSelectedState.NotSelected : PanelSelectedState.Hidden;
break;
case BeatmapGroupState.Collapsed:
Header.State = PanelSelectedState.NotSelected;
foreach (BeatmapPanel panel in BeatmapPanels)
panel.State = PanelSelectedState.Hidden;
break;
case BeatmapGroupState.Hidden:
Header.State = PanelSelectedState.Hidden;
foreach (BeatmapPanel panel in BeatmapPanels)
panel.State = PanelSelectedState.Hidden;
break;
}
StateChanged?.Invoke(state); StateChanged?.Invoke(state);
} }
} }
public void UpdateState()
{
switch (state)
{
case BeatmapGroupState.Expanded:
Header.State = PanelSelectedState.Selected;
foreach (BeatmapPanel panel in BeatmapPanels)
panel.State = panel == SelectedPanel ? PanelSelectedState.Selected :
!panel.Filtered ? PanelSelectedState.NotSelected : PanelSelectedState.Hidden;
break;
case BeatmapGroupState.Collapsed:
Header.State = PanelSelectedState.NotSelected;
foreach (BeatmapPanel panel in BeatmapPanels)
panel.State = PanelSelectedState.Hidden;
break;
case BeatmapGroupState.Hidden:
Header.State = PanelSelectedState.Hidden;
foreach (BeatmapPanel panel in BeatmapPanels)
panel.State = PanelSelectedState.Hidden;
break;
}
}
public BeatmapGroup(BeatmapSetInfo beatmapSet, BeatmapManager manager) public BeatmapGroup(BeatmapSetInfo beatmapSet, BeatmapManager manager)
{ {
if (beatmapSet == null) if (beatmapSet == null)

View File

@ -327,6 +327,8 @@ namespace osu.Game.Screens.Select
computeYPositions(); computeYPositions();
selectedGroup?.UpdateState();
if (selectedGroup == null || selectedGroup.State == BeatmapGroupState.Hidden) if (selectedGroup == null || selectedGroup.State == BeatmapGroupState.Hidden)
SelectNext(); SelectNext();
else else
@ -441,11 +443,13 @@ namespace osu.Game.Screens.Select
panel.MoveToX(-50, 500, Easing.OutExpo); panel.MoveToX(-50, 500, Easing.OutExpo);
bool isHidden = panel.State == PanelSelectedState.Hidden;
//on first display we want to begin hidden under our group's header. //on first display we want to begin hidden under our group's header.
if (panel.Filtered || panel.Alpha == 0) if (isHidden || panel.Alpha == 0)
panel.MoveToY(headerY); panel.MoveToY(headerY);
movePanel(panel, !panel.Filtered, animated, ref currentY); movePanel(panel, !isHidden, animated, ref currentY);
} }
} }
else else
@ -479,7 +483,7 @@ namespace osu.Game.Screens.Select
{ {
try try
{ {
if (panel == null) if (panel == null || panel.Filtered == true)
panel = group.BeatmapPanels.First(p => !p.Filtered); panel = group.BeatmapPanels.First(p => !p.Filtered);
if (selectedPanel == panel) return; if (selectedPanel == panel) return;