1
0
mirror of https://github.com/ppy/osu.git synced 2025-02-21 23:59:16 +08:00

Refactor MedalOverlay to be more readable

Shouldn't really have any functionality changes, just fixing some old
code that I can't easily parse these days.
This commit is contained in:
Dean Herbert 2024-11-26 14:13:07 +09:00
parent 8585327858
commit d057dc9a95
No known key found for this signature in database

View File

@ -35,7 +35,7 @@ namespace osu.Game.Overlays
private IAPIProvider api { get; set; } = null!; private IAPIProvider api { get; set; } = null!;
private Container<Drawable> medalContainer = null!; private Container<Drawable> medalContainer = null!;
private MedalAnimation? lastAnimation; private MedalAnimation? currentMedalDisplay;
[BackgroundDependencyLoader] [BackgroundDependencyLoader]
private void load() private void load()
@ -54,11 +54,7 @@ namespace osu.Game.Overlays
{ {
base.LoadComplete(); base.LoadComplete();
OverlayActivationMode.BindValueChanged(val => OverlayActivationMode.BindValueChanged(_ => displayIfReady(), true);
{
if (val.NewValue == OverlayActivation.All && (queuedMedals.Any() || medalContainer.Any() || lastAnimation?.IsLoaded == false))
Show();
}, true);
} }
private void handleMedalMessages(SocketMessage obj) private void handleMedalMessages(SocketMessage obj)
@ -86,31 +82,13 @@ namespace osu.Game.Overlays
queuedMedals.Enqueue(medalAnimation); queuedMedals.Enqueue(medalAnimation);
Logger.Log($"Queueing medal unlock for \"{medal.Name}\" ({queuedMedals.Count} to display)"); Logger.Log($"Queueing medal unlock for \"{medal.Name}\" ({queuedMedals.Count} to display)");
if (OverlayActivationMode.Value == OverlayActivation.All) Schedule(displayIfReady);
Scheduler.AddOnce(Show);
}
protected override void Update()
{
base.Update();
if (medalContainer.Any() || lastAnimation?.IsLoaded == false)
return;
if (!queuedMedals.TryDequeue(out lastAnimation))
{
Logger.Log("All queued medals have been displayed!");
Hide();
return;
}
Logger.Log($"Preparing to display \"{lastAnimation.Medal.Name}\"");
LoadComponentAsync(lastAnimation, medalContainer.Add);
} }
protected override bool OnClick(ClickEvent e) protected override bool OnClick(ClickEvent e)
{ {
lastAnimation?.Dismiss(); dismissDisplayedMedal();
loadNextMedal();
return true; return true;
} }
@ -118,13 +96,57 @@ namespace osu.Game.Overlays
{ {
if (e.Action == GlobalAction.Back) if (e.Action == GlobalAction.Back)
{ {
lastAnimation?.Dismiss(); dismissDisplayedMedal();
loadNextMedal();
return true; return true;
} }
return base.OnPressed(e); return base.OnPressed(e);
} }
private void dismissDisplayedMedal()
{
if (currentMedalDisplay?.IsLoaded == false)
return;
currentMedalDisplay?.Dismiss();
currentMedalDisplay = null;
}
private void displayIfReady()
{
if (OverlayActivationMode.Value != OverlayActivation.All)
return;
if (currentMedalDisplay != null)
{
Show();
return;
}
if (queuedMedals.Any())
{
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}\"");
LoadComponentAsync(currentMedalDisplay, m => medalContainer.Add(m));
}
protected override void Dispose(bool isDisposing) protected override void Dispose(bool isDisposing)
{ {
base.Dispose(isDisposing); base.Dispose(isDisposing);