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.

96 lines
2.4 KiB

  1. using System;
  2. using System.Collections.Generic;
  3. using System.Text;
  4. using UnityEngine;
  5. using UnityEngine.SceneManagement;
  6. namespace IllusionInjector
  7. {
  8. public class PluginComponent : MonoBehaviour
  9. {
  10. private CompositePlugin plugins;
  11. private bool freshlyLoaded = false;
  12. private bool quitting = false;
  13. public static PluginComponent Create()
  14. {
  15. return new GameObject("IPA_PluginManager").AddComponent<PluginComponent>();
  16. }
  17. void Awake()
  18. {
  19. DontDestroyOnLoad(gameObject);
  20. plugins = new CompositePlugin(PluginManager.Plugins);
  21. plugins.OnApplicationStart();
  22. SceneManager.activeSceneChanged += OnActiveSceneChanged;
  23. SceneManager.sceneLoaded += OnSceneLoaded;
  24. SceneManager.sceneUnloaded += OnSceneUnloaded;
  25. }
  26. void Start()
  27. {
  28. OnLevelWasLoaded(Application.loadedLevel);
  29. }
  30. void Update()
  31. {
  32. if (freshlyLoaded)
  33. {
  34. freshlyLoaded = false;
  35. plugins.OnLevelWasInitialized(Application.loadedLevel);
  36. }
  37. plugins.OnUpdate();
  38. }
  39. void LateUpdate()
  40. {
  41. plugins.OnLateUpdate();
  42. }
  43. void FixedUpdate()
  44. {
  45. plugins.OnFixedUpdate();
  46. }
  47. void OnDestroy()
  48. {
  49. if (!quitting)
  50. {
  51. Create();
  52. }
  53. }
  54. void OnApplicationQuit()
  55. {
  56. SceneManager.activeSceneChanged += OnActiveSceneChanged;
  57. SceneManager.sceneLoaded += OnSceneLoaded;
  58. SceneManager.sceneUnloaded += OnSceneUnloaded;
  59. plugins.OnApplicationQuit();
  60. quitting = true;
  61. }
  62. void OnLevelWasLoaded(int level)
  63. {
  64. plugins.OnLevelWasLoaded(level);
  65. freshlyLoaded = true;
  66. }
  67. void OnSceneLoaded(Scene scene, LoadSceneMode sceneMode)
  68. {
  69. plugins.OnSceneLoaded(scene, sceneMode);
  70. }
  71. private void OnSceneUnloaded(Scene scene) {
  72. plugins.OnSceneUnloaded(scene);
  73. }
  74. private void OnActiveSceneChanged(Scene prevScene, Scene nextScene) {
  75. plugins.OnActiveSceneChanged(prevScene, nextScene);
  76. }
  77. }
  78. }