#if UNITY_EDITOR
using UnityEngine;
namespace SRDebugger.Scripts.Internal
{
///
/// Behaviour that supports SRDebugger reloading itself after a script recompile is detected.
///
public class SRScriptRecompileHelper : MonoBehaviour
{
private static SRScriptRecompileHelper _instance;
[RuntimeInitializeOnLoadMethod(RuntimeInitializeLoadType.BeforeSceneLoad)]
public static void Initialize()
{
if (_instance != null)
{
return;
}
var go = new GameObject("SRDebugger Script Recompile Helper (Editor Only)");
DontDestroyOnLoad(go);
go.hideFlags = HideFlags.DontSave | HideFlags.HideInHierarchy;
go.AddComponent();
}
private bool _hasEnabled;
private bool _srdebuggerHasInitialized;
void OnEnable()
{
if(_instance != null)
{
Destroy(gameObject);
return;
}
_instance = this;
// Don't take any action on the first OnEnable()
if (!_hasEnabled)
{
_hasEnabled = true;
return;
}
// Next OnEnable() will be due to script reload.
AutoInitialize.OnLoadBeforeScene();
if (_srdebuggerHasInitialized)
{
Debug.Log("[SRScriptRecompileHelper] Restoring SRDebugger after script reload.", this);
SRDebug.Init();
}
}
void OnApplicationQuit()
{
// Destroy this object when leaving play mode (otherwise it will linger and a new instance will be created next time play mode is entered).
Destroy(gameObject);
}
public static void SetHasInitialized()
{
if (_instance == null)
{
Initialize();
}
_instance._srdebuggerHasInitialized = true;
}
}
}
#endif