1
0
mirror of https://github.com/ppy/osu.git synced 2024-12-05 10:33:22 +08:00

Better control of show/hide of overlay

This commit is contained in:
Dean Herbert 2024-11-26 14:42:30 +09:00
parent d057dc9a95
commit 672dbe6e03
No known key found for this signature in database

View File

@ -57,6 +57,11 @@ namespace osu.Game.Overlays
OverlayActivationMode.BindValueChanged(_ => displayIfReady(), true);
}
public override void Hide()
{
// don't allow hiding the overlay via any method other than our own.
}
private void handleMedalMessages(SocketMessage obj)
{
if (obj.Event != @"new")
@ -87,8 +92,7 @@ namespace osu.Game.Overlays
protected override bool OnClick(ClickEvent e)
{
dismissDisplayedMedal();
loadNextMedal();
progressDisplayByUser();
return true;
}
@ -96,21 +100,31 @@ namespace osu.Game.Overlays
{
if (e.Action == GlobalAction.Back)
{
dismissDisplayedMedal();
loadNextMedal();
progressDisplayByUser();
return true;
}
return base.OnPressed(e);
}
private void dismissDisplayedMedal()
private void progressDisplayByUser()
{
// For now, we want to make sure that medals are definitely seen by the user.
// So we block exiting the overlay until the load of the active medal completes.
if (currentMedalDisplay?.IsLoaded == false)
return;
currentMedalDisplay?.Dismiss();
currentMedalDisplay = null;
if (!queuedMedals.Any())
{
Logger.Log("All queued medals have been displayed, hiding overlay!");
base.Hide();
return;
}
showNextMedal();
}
private void displayIfReady()
@ -118,34 +132,27 @@ namespace osu.Game.Overlays
if (OverlayActivationMode.Value != OverlayActivation.All)
return;
if (currentMedalDisplay != null || queuedMedals.Any())
showNextMedal();
}
private void showNextMedal()
{
// A medal is already loading / loaded, so just ensure the overlay is visible.
if (currentMedalDisplay != null)
{
Show();
return;
}
if (queuedMedals.Any())
if (queuedMedals.TryDequeue(out currentMedalDisplay))
{
Show();
loadNextMedal();
}
}
private void loadNextMedal()
{
if (currentMedalDisplay != null)
return;
if (!queuedMedals.TryDequeue(out currentMedalDisplay))
{
Logger.Log("All queued medals have been displayed!");
Hide();
return;
}
Logger.Log($"Preparing to display \"{currentMedalDisplay.Medal.Name}\"");
Show();
LoadComponentAsync(currentMedalDisplay, m => medalContainer.Add(m));
}
}
protected override void Dispose(bool isDisposing)
{