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()
{
}
}
}