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.

118 lines
3.3 KiB

  1. using System;
  2. using System.Collections.Generic;
  3. using System.Text;
  4. using UnityEngine;
  5. using UnityEngine.SceneManagement;
  6. using IPA.Loader;
  7. using IPA.Loader.Composite;
  8. using IPA.Logging;
  9. namespace IPA.Loader
  10. {
  11. internal class PluginComponent : MonoBehaviour
  12. {
  13. private CompositeBSPlugin bsPlugins;
  14. private CompositeIPAPlugin ipaPlugins;
  15. private bool quitting = false;
  16. internal static PluginComponent Create()
  17. {
  18. Application.logMessageReceived += delegate (string condition, string stackTrace, LogType type)
  19. {
  20. var level = UnityLogInterceptor.LogTypeToLevel(type);
  21. UnityLogInterceptor.UnityLogger.Log(level, $"{condition.Trim()}");
  22. UnityLogInterceptor.UnityLogger.Log(level, $"{stackTrace.Trim()}");
  23. };
  24. return new GameObject("IPA_PluginManager").AddComponent<PluginComponent>();
  25. }
  26. void Awake()
  27. {
  28. DontDestroyOnLoad(gameObject);
  29. bsPlugins = new CompositeBSPlugin(PluginManager.BSPlugins);
  30. ipaPlugins = new CompositeIPAPlugin(PluginManager.Plugins);
  31. gameObject.AddComponent<Updating.ModsaberML.Updater>();
  32. bsPlugins.OnApplicationStart();
  33. ipaPlugins.OnApplicationStart();
  34. SceneManager.activeSceneChanged += OnActiveSceneChanged;
  35. SceneManager.sceneLoaded += OnSceneLoaded;
  36. SceneManager.sceneUnloaded += OnSceneUnloaded;
  37. foreach (var provider in PluginManager.configProviders)
  38. if (provider.HasChanged) provider.Save();
  39. }
  40. void Update()
  41. {
  42. bsPlugins.OnUpdate();
  43. ipaPlugins.OnUpdate();
  44. }
  45. void LateUpdate()
  46. {
  47. bsPlugins.OnLateUpdate();
  48. ipaPlugins.OnLateUpdate();
  49. foreach (var provider in PluginManager.configProviders)
  50. if (provider.HasChanged) provider.Save();
  51. }
  52. void FixedUpdate()
  53. {
  54. bsPlugins.OnFixedUpdate();
  55. ipaPlugins.OnFixedUpdate();
  56. }
  57. void OnDestroy()
  58. {
  59. if (!quitting)
  60. {
  61. Create();
  62. }
  63. }
  64. void OnApplicationQuit()
  65. {
  66. SceneManager.activeSceneChanged -= OnActiveSceneChanged;
  67. SceneManager.sceneLoaded -= OnSceneLoaded;
  68. SceneManager.sceneUnloaded -= OnSceneUnloaded;
  69. bsPlugins.OnApplicationQuit();
  70. ipaPlugins.OnApplicationQuit();
  71. foreach (var provider in PluginManager.configProviders)
  72. if (provider.HasChanged) provider.Save();
  73. quitting = true;
  74. }
  75. void OnLevelWasLoaded(int level)
  76. {
  77. ipaPlugins.OnLevelWasLoaded(level);
  78. }
  79. void OnLevelWasInitialized(int level)
  80. {
  81. ipaPlugins.OnLevelWasInitialized(level);
  82. }
  83. void OnSceneLoaded(Scene scene, LoadSceneMode sceneMode)
  84. {
  85. bsPlugins.OnSceneLoaded(scene, sceneMode);
  86. }
  87. private void OnSceneUnloaded(Scene scene) {
  88. bsPlugins.OnSceneUnloaded(scene);
  89. }
  90. private void OnActiveSceneChanged(Scene prevScene, Scene nextScene) {
  91. bsPlugins.OnActiveSceneChanged(prevScene, nextScene);
  92. }
  93. }
  94. }