You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
CrowdControl/Assets/3rd/StompyRobot/SRDebugger/Scripts/Internal/SRScriptRecompileHelper.cs

73 lines
2.0 KiB
C#

3 months ago
#if UNITY_EDITOR
using UnityEngine;
namespace SRDebugger.Scripts.Internal
{
/// <summary>
/// Behaviour that supports SRDebugger reloading itself after a script recompile is detected.
/// </summary>
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<SRScriptRecompileHelper>();
}
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