mathe/Library/PackageCache/com.unity.render-pipelines.core@14.0.8/Runtime/Debugging/DebugManager.UIState.cs
2024-09-20 20:30:10 +02:00

151 lines
4.2 KiB
C#

using System;
using System.Diagnostics;
using UnityEngine.Rendering.UI;
#if UNITY_EDITOR
using UnityEditor;
#endif
#if UNITY_ANDROID || UNITY_IPHONE || UNITY_TVOS || UNITY_SWITCH
using UnityEngine.UI;
#endif
namespace UnityEngine.Rendering
{
using UnityObject = UnityEngine.Object;
public sealed partial class DebugManager
{
/// <summary>
/// The modes of the UI of the Rendering Debugger
/// </summary>
public enum UIMode : int
{
/// <summary>
/// Editor Window
/// </summary>
EditorMode,
/// <summary>
/// In Game view
/// </summary>
RuntimeMode
}
/// <summary>
/// Event that is raised when a window state is changed
/// </summary>
public static event Action<UIMode, bool> windowStateChanged;
class UIState
{
public UIMode mode;
[SerializeField]
private bool m_Open;
public bool open
{
get => m_Open;
set
{
if (m_Open == value)
return;
m_Open = value;
windowStateChanged?.Invoke(mode, m_Open);
}
}
}
private UIState editorUIState = new UIState() { mode = UIMode.EditorMode };
/// <summary>
/// Is the debug editor window open.
/// </summary>
public bool displayEditorUI
{
get => editorUIState.open;
set => editorUIState.open = value;
}
private bool m_EnableRuntimeUI = true;
/// <summary>
/// Controls whether runtime UI can be enabled. When this is set to false, there will be no overhead
/// from debug GameObjects or runtime initialization.
/// </summary>
public bool enableRuntimeUI
{
get => m_EnableRuntimeUI;
set
{
if (value != m_EnableRuntimeUI)
{
m_EnableRuntimeUI = value;
DebugUpdater.SetEnabled(value);
}
}
}
private UIState runtimeUIState = new UIState() { mode = UIMode.RuntimeMode };
/// <summary>
/// Displays the runtime version of the debug window.
/// </summary>
public bool displayRuntimeUI
{
get => m_Root != null && m_Root.activeInHierarchy;
set
{
if (value)
{
m_Root = UnityObject.Instantiate(Resources.Load<Transform>("DebugUICanvas")).gameObject;
m_Root.name = "[Debug Canvas]";
m_Root.transform.localPosition = Vector3.zero;
m_RootUICanvas = m_Root.GetComponent<DebugUIHandlerCanvas>();
#if UNITY_ANDROID || UNITY_IPHONE || UNITY_TVOS || UNITY_SWITCH
var canvasScaler = m_Root.GetComponent<CanvasScaler>();
canvasScaler.uiScaleMode = CanvasScaler.ScaleMode.ScaleWithScreenSize;
#endif
m_Root.SetActive(true);
}
else
{
CoreUtils.Destroy(m_Root);
m_Root = null;
m_RootUICanvas = null;
}
onDisplayRuntimeUIChanged(value);
DebugUpdater.HandleInternalEventSystemComponents(value);
runtimeUIState.open = m_Root != null && m_Root.activeInHierarchy;
}
}
/// <summary>
/// Displays the persistent runtime debug window.
/// </summary>
public bool displayPersistentRuntimeUI
{
get => m_RootUIPersistentCanvas != null && m_PersistentRoot.activeInHierarchy;
set
{
if (value)
{
EnsurePersistentCanvas();
}
else
{
CoreUtils.Destroy(m_PersistentRoot);
m_PersistentRoot = null;
m_RootUIPersistentCanvas = null;
}
}
}
}
}