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:
parent
fb92b3551e
commit
b10240d7ef
osu.Game
@ -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)
|
||||||
|
@ -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;
|
||||||
|
Loading…
Reference in New Issue
Block a user