using System;
|
|
using System.Collections.Generic;
|
|
using System.Text;
|
|
using UnityEngine;
|
|
using UnityEngine.SceneManagement;
|
|
using IPA.Loader;
|
|
using IPA.Loader.Composite;
|
|
using IPA.Logging;
|
|
|
|
namespace IPA.Loader
|
|
{
|
|
internal class PluginComponent : MonoBehaviour
|
|
{
|
|
private CompositeBSPlugin bsPlugins;
|
|
private CompositeIPAPlugin ipaPlugins;
|
|
private bool quitting = false;
|
|
|
|
internal static PluginComponent Create()
|
|
{
|
|
Application.logMessageReceived += delegate (string condition, string stackTrace, LogType type)
|
|
{
|
|
var level = UnityLogInterceptor.LogTypeToLevel(type);
|
|
UnityLogInterceptor.UnityLogger.Log(level, $"{condition.Trim()}");
|
|
UnityLogInterceptor.UnityLogger.Log(level, $"{stackTrace.Trim()}");
|
|
};
|
|
|
|
return new GameObject("IPA_PluginManager").AddComponent<PluginComponent>();
|
|
}
|
|
|
|
void Awake()
|
|
{
|
|
DontDestroyOnLoad(gameObject);
|
|
|
|
bsPlugins = new CompositeBSPlugin(PluginManager.BSPlugins);
|
|
ipaPlugins = new CompositeIPAPlugin(PluginManager.Plugins);
|
|
|
|
gameObject.AddComponent<Updating.ModsaberML.Updater>();
|
|
|
|
bsPlugins.OnApplicationStart();
|
|
ipaPlugins.OnApplicationStart();
|
|
|
|
SceneManager.activeSceneChanged += OnActiveSceneChanged;
|
|
SceneManager.sceneLoaded += OnSceneLoaded;
|
|
SceneManager.sceneUnloaded += OnSceneUnloaded;
|
|
|
|
foreach (var provider in PluginManager.configProviders)
|
|
if (provider.Key.HasChanged) provider.Key.Save();
|
|
}
|
|
|
|
void Update()
|
|
{
|
|
bsPlugins.OnUpdate();
|
|
ipaPlugins.OnUpdate();
|
|
}
|
|
|
|
void LateUpdate()
|
|
{
|
|
bsPlugins.OnLateUpdate();
|
|
ipaPlugins.OnLateUpdate();
|
|
|
|
foreach (var provider in PluginManager.configProviders)
|
|
{
|
|
if (provider.Key.HasChanged) provider.Key.Save();
|
|
else if (provider.Key.LastModified > provider.Value.Value)
|
|
{
|
|
provider.Key.Load(); // auto reload if it changes
|
|
provider.Value.Value = provider.Key.LastModified;
|
|
}
|
|
}
|
|
}
|
|
|
|
void FixedUpdate()
|
|
{
|
|
bsPlugins.OnFixedUpdate();
|
|
ipaPlugins.OnFixedUpdate();
|
|
}
|
|
|
|
void OnDestroy()
|
|
{
|
|
if (!quitting)
|
|
{
|
|
Create();
|
|
}
|
|
}
|
|
|
|
void OnApplicationQuit()
|
|
{
|
|
SceneManager.activeSceneChanged -= OnActiveSceneChanged;
|
|
SceneManager.sceneLoaded -= OnSceneLoaded;
|
|
SceneManager.sceneUnloaded -= OnSceneUnloaded;
|
|
|
|
bsPlugins.OnApplicationQuit();
|
|
ipaPlugins.OnApplicationQuit();
|
|
|
|
foreach (var provider in PluginManager.configProviders)
|
|
if (provider.Key.HasChanged) provider.Key.Save();
|
|
|
|
quitting = true;
|
|
}
|
|
|
|
void OnLevelWasLoaded(int level)
|
|
{
|
|
ipaPlugins.OnLevelWasLoaded(level);
|
|
}
|
|
|
|
void OnLevelWasInitialized(int level)
|
|
{
|
|
ipaPlugins.OnLevelWasInitialized(level);
|
|
}
|
|
|
|
void OnSceneLoaded(Scene scene, LoadSceneMode sceneMode)
|
|
{
|
|
bsPlugins.OnSceneLoaded(scene, sceneMode);
|
|
}
|
|
|
|
private void OnSceneUnloaded(Scene scene) {
|
|
bsPlugins.OnSceneUnloaded(scene);
|
|
}
|
|
|
|
private void OnActiveSceneChanged(Scene prevScene, Scene nextScene) {
|
|
bsPlugins.OnActiveSceneChanged(prevScene, nextScene);
|
|
}
|
|
|
|
}
|
|
}
|