Skip to content

Commit 3f54f4e

Browse files
committed
Make MainMenuAwaiter public
1 parent 10d8e4c commit 3f54f4e

File tree

4 files changed

+56
-25
lines changed

4 files changed

+56
-25
lines changed

BeatSaberMarkupLanguage/Harmony Patches/MainMenuInstaller.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -60,7 +60,7 @@ private static void Prefix(MainSettingsMenuViewControllersInstaller __instance)
6060
container.Bind<TypeHandler>().To(type).AsSingle();
6161
}
6262

63-
container.Bind(typeof(IInitializable), typeof(IDisposable)).To<MenuInitAwaiter>().AsSingle();
63+
container.Bind(typeof(IInitializable), typeof(IDisposable)).To<MainMenuAwaiter>().AsSingle();
6464

6565
#if DEBUG
6666
container.Bind(typeof(IInitializable)).To<TestPresenter>().AsSingle();

BeatSaberMarkupLanguage/Plugin.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -66,7 +66,7 @@ private async Task LoadAndSetUpFontFallbacksAsync()
6666

6767
Logger.Log.Debug("Waiting for default font presence");
6868

69-
await MenuInitAwaiter.WaitForMainMenuAsync();
69+
await MainMenuAwaiter.WaitForMainMenuAsync();
7070

7171
Logger.Log.Debug("Setting up default font fallbacks");
7272

Lines changed: 54 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,54 @@
1+
using System;
2+
using System.Linq;
3+
using System.Threading.Tasks;
4+
using Zenject;
5+
6+
namespace BeatSaberMarkupLanguage.Util
7+
{
8+
/// <summary>
9+
/// Contains utilities to wait for the main menu to initialize.
10+
/// </summary>
11+
/// <remarks>If you are using Zenject, you should not need to use this class. Instead, create a class that implements <see cref="IInitializable"/> and bind it to the main menu.</remarks>
12+
public class MainMenuAwaiter : IInitializable, IDisposable
13+
{
14+
private static TaskCompletionSource<VoidResult> taskCompletionSource = new();
15+
16+
/// <summary>
17+
/// Occurs when the main menu is initializing.
18+
/// </summary>
19+
public static event Action MainMenuInitializing;
20+
21+
/// <summary>
22+
/// Waits for the main menu to initialize asynchronously.
23+
/// </summary>
24+
/// <returns>A task that completes when the main menu is initializing.</returns>
25+
public static Task WaitForMainMenuAsync() => taskCompletionSource.Task;
26+
27+
/// <inheritdoc />
28+
public void Initialize()
29+
{
30+
taskCompletionSource.SetResult(default);
31+
32+
if (MainMenuInitializing != null)
33+
{
34+
foreach (Action action in MainMenuInitializing.GetInvocationList().Cast<Action>())
35+
{
36+
try
37+
{
38+
action?.Invoke();
39+
}
40+
catch (Exception ex)
41+
{
42+
Logger.Log.Error($"An exception occurred while invoking {nameof(MainMenuInitializing)}\n{ex}");
43+
}
44+
}
45+
}
46+
}
47+
48+
/// <inheritdoc />
49+
public void Dispose()
50+
{
51+
taskCompletionSource = new();
52+
}
53+
}
54+
}

BeatSaberMarkupLanguage/Util/MenuInitAwaiter.cs

Lines changed: 0 additions & 23 deletions
This file was deleted.

0 commit comments

Comments
 (0)