using IPA; using UnityEngine.SceneManagement; using IPALogger = IPA.Logging.Logger; using BSIPA_ModList.UI; using UnityEngine; using IPA.Logging; using BSIPA_ModList.UI.ViewControllers; using System.Collections; using IPA.Loader; using IPA.Config; using IPA.Utilities; using System; namespace BSIPA_ModList { internal static class Logger { internal static IPALogger log { get; set; } internal static IPALogger md => log.GetChildLogger("MarkDown"); } internal class SelfConfig { public bool Regenerate = true; public bool ShowEnableDisable = false; } /// /// The main plugin type for the in-game mod list mod. /// internal class Plugin : IBeatSaberPlugin { internal static IConfigProvider provider; internal static Ref config; internal static event Action OnConfigChaned; /// /// Initializes the plugin with certain parameters. Is only called once. /// /// This is called by the plugin loader in BSIPA, and thus must be . /// /// a logger to initialize the plugin with public void Init(IPALogger logger, IConfigProvider provider) { Logger.log = logger; Plugin.provider = provider; config = provider.MakeLink((p, r) => { if (r.Value.Regenerate) p.Store(r.Value = new SelfConfig { Regenerate = false }); OnConfigChaned?.Invoke(r.Value); }); IPA.Updating.BeatMods.Updater.ModListPresent = true; // Load resources ahead of time MarkdownView.StartLoadResourcesAsync(); SharedCoroutineStarter.instance.StartCoroutine(LoadPluginIcons()); } public void OnActiveSceneChanged(Scene prevScene, Scene nextScene) { } public void OnApplicationQuit() { } public void OnApplicationStart() { } private static IEnumerator LoadPluginIcons() { foreach (var p in PluginManager.AllPlugins) { yield return null; Logger.log.Debug($"Loading icon for {p.Metadata.Name}"); var _ = p.Metadata.GetIcon(); } } public void OnFixedUpdate() { } public void OnSceneLoaded(Scene scene, LoadSceneMode sceneMode) { if (scene.name == "MenuCore") { FloatingNotification.Create(); if (ButtonUI.Instance == null) new GameObject("BSIPA Mod List Object").AddComponent().Init(); } } public void OnSceneUnloaded(Scene scene) { } public void OnUpdate() { } } }