You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

111 lines
2.8 KiB

  1. using IPA.Config;
  2. using IPA.Loader.Composite;
  3. using System.Diagnostics.CodeAnalysis;
  4. using UnityEngine;
  5. using UnityEngine.SceneManagement;
  6. // ReSharper disable UnusedMember.Local
  7. namespace IPA.Loader
  8. {
  9. [SuppressMessage("ReSharper", "ClassNeverInstantiated.Global")]
  10. internal class PluginComponent : MonoBehaviour
  11. {
  12. private CompositeBSPlugin bsPlugins;
  13. private CompositeIPAPlugin ipaPlugins;
  14. private bool quitting;
  15. internal static PluginComponent Create()
  16. {
  17. return new GameObject("IPA_PluginManager").AddComponent<PluginComponent>();
  18. }
  19. void Awake()
  20. {
  21. DontDestroyOnLoad(gameObject);
  22. bsPlugins = new CompositeBSPlugin(PluginManager.BSMetas);
  23. #pragma warning disable 618
  24. ipaPlugins = new CompositeIPAPlugin(PluginManager.Plugins);
  25. #pragma warning restore 618
  26. gameObject.AddComponent<Updating.BeatMods.Updater>();
  27. bsPlugins.OnApplicationStart();
  28. ipaPlugins.OnApplicationStart();
  29. SceneManager.activeSceneChanged += OnActiveSceneChanged;
  30. SceneManager.sceneLoaded += OnSceneLoaded;
  31. SceneManager.sceneUnloaded += OnSceneUnloaded;
  32. Config.Config.Save();
  33. }
  34. void Update()
  35. {
  36. bsPlugins.OnUpdate();
  37. ipaPlugins.OnUpdate();
  38. Config.Config.Update();
  39. }
  40. void LateUpdate()
  41. {
  42. bsPlugins.OnLateUpdate();
  43. ipaPlugins.OnLateUpdate();
  44. //Config.Config.Update();
  45. }
  46. void FixedUpdate()
  47. {
  48. bsPlugins.OnFixedUpdate();
  49. ipaPlugins.OnFixedUpdate();
  50. }
  51. void OnDestroy()
  52. {
  53. if (!quitting)
  54. {
  55. Create();
  56. }
  57. }
  58. void OnApplicationQuit()
  59. {
  60. SceneManager.activeSceneChanged -= OnActiveSceneChanged;
  61. SceneManager.sceneLoaded -= OnSceneLoaded;
  62. SceneManager.sceneUnloaded -= OnSceneUnloaded;
  63. bsPlugins.OnApplicationQuit();
  64. ipaPlugins.OnApplicationQuit();
  65. Config.Config.Save();
  66. quitting = true;
  67. }
  68. void OnLevelWasLoaded(int level)
  69. {
  70. ipaPlugins.OnLevelWasLoaded(level);
  71. }
  72. void OnLevelWasInitialized(int level)
  73. {
  74. ipaPlugins.OnLevelWasInitialized(level);
  75. }
  76. void OnSceneLoaded(Scene scene, LoadSceneMode sceneMode)
  77. {
  78. bsPlugins.OnSceneLoaded(scene, sceneMode);
  79. }
  80. private void OnSceneUnloaded(Scene scene) {
  81. bsPlugins.OnSceneUnloaded(scene);
  82. }
  83. private void OnActiveSceneChanged(Scene prevScene, Scene nextScene) {
  84. bsPlugins.OnActiveSceneChanged(prevScene, nextScene);
  85. }
  86. }
  87. }