using System; // Some fields assigned through only through serialization. #pragma warning disable CS0649 namespace UnityEngine.InputSystem.Samples { /// /// Base class for and . /// Not meant to be extended outside of input system. /// public abstract class InputVisualizer : MonoBehaviour { protected void OnEnable() { ResolveParent(); } protected void OnDisable() { m_Parent = null; m_Visualizer = null; } protected void OnGUI() { if (Event.current.type != EventType.Repaint) return; // If we have a parent, offset our rect by the parent. var rect = m_Rect; if (m_Parent != null) rect.position += m_Parent.m_Rect.position; if (m_Visualizer != null) m_Visualizer.OnDraw(rect); else VisualizationHelpers.DrawRectangle(rect, new Color(1, 1, 1, 0.1f)); // Draw label, if we have one. if (!string.IsNullOrEmpty(m_Label)) { if (m_LabelContent == null) m_LabelContent = new GUIContent(m_Label); if (s_LabelStyle == null) { s_LabelStyle = new GUIStyle(); s_LabelStyle.normal.textColor = Color.yellow; } ////FIXME: why does CalcSize not calculate the rect width correctly? var labelSize = s_LabelStyle.CalcSize(m_LabelContent); var labelRect = new Rect(rect.x + 4, rect.y, labelSize.x + 4, rect.height); s_LabelStyle.Draw(labelRect, m_LabelContent, false, false, false, false); } } protected void OnValidate() { ResolveParent(); m_LabelContent = null; } protected void ResolveParent() { var parentTransform = transform.parent; if (parentTransform != null) m_Parent = parentTransform.GetComponent(); } [SerializeField] internal string m_Label; [SerializeField] internal int m_HistorySamples = 500; [SerializeField] internal float m_TimeWindow = 3; [SerializeField] internal Rect m_Rect = new Rect(10, 10, 300, 30); [NonSerialized] internal GUIContent m_LabelContent; [NonSerialized] internal VisualizationHelpers.Visualizer m_Visualizer; [NonSerialized] internal InputVisualizer m_Parent; private static GUIStyle s_LabelStyle; } }