Files
NovaFree/Scripts/Internal/Compat/InternalScript_27.cs
2025-08-02 20:11:41 +08:00

98 lines
2.7 KiB
C#

// Copyright (c) Supernova Technologies LLC
using UnityEngine;
namespace Nova.Compat
{
internal static class NovaApplication
{
public static event System.Action EditorDelayCall
{
add
{
#if UNITY_EDITOR
UnityEditor.EditorApplication.delayCall += () => value?.Invoke();
#endif
}
remove
{
#if UNITY_EDITOR
Debug.LogError("NovaApplication.DelayCall doesn't support unsubscribing because it wraps UnityEditor.EditorApplication.delayCall, which uses its own editor-only delegate type" +
" that isn't accessible in an Editor-agnostic dll. Currently not worth remapping events since we don't need that functionality at time of writing.");
#endif
}
}
public static event System.Action EditorBeforeAssemblyReload = null;
private static void HandleBeforeAssemblyReload()
{
EditorBeforeAssemblyReload?.Invoke();
}
[System.Diagnostics.DebuggerBrowsable(System.Diagnostics.DebuggerBrowsableState.Never)]
public static readonly bool IsEditor =
#if UNITY_EDITOR
true;
#else
false;
#endif
[System.Diagnostics.DebuggerBrowsable(System.Diagnostics.DebuggerBrowsableState.Never)]
public const bool ConstIsEditor =
#if UNITY_EDITOR
true;
#else
false;
#endif
public static void QueueEditorPlayerLoop()
{
#if UNITY_EDITOR
UnityEditor.EditorApplication.QueuePlayerLoopUpdate();
#endif
}
public static void MarkDirty(Object obj)
{
#if UNITY_EDITOR
UnityEditor.EditorUtility.SetDirty(obj);
#endif
}
[System.Diagnostics.DebuggerBrowsable(System.Diagnostics.DebuggerBrowsableState.Never)]
public static bool IsPlaying { get; private set; } =
#if UNITY_EDITOR
false;
#else
true;
#endif
public static bool InPlayer(Object obj)
{
#if UNITY_EDITOR
return Application.IsPlaying(obj);
#else
return true;
#endif
}
#if UNITY_EDITOR
[UnityEditor.InitializeOnLoadMethod]
private static void Init()
{
IsPlaying = UnityEditor.EditorApplication.isPlayingOrWillChangePlaymode;
UnityEditor.EditorApplication.playModeStateChanged += HandlePlayModeStateChanged;
UnityEditor.AssemblyReloadEvents.beforeAssemblyReload += HandleBeforeAssemblyReload;
}
private static void HandlePlayModeStateChanged(UnityEditor.PlayModeStateChange state)
{
IsPlaying = UnityEditor.EditorApplication.isPlayingOrWillChangePlaymode;
}
#endif
}
}