public void AddDisplay(IDebugDisplay a_display)
    {
        if (a_display == null)
        {
            Debug.LogError("KDebugDisplayHandler:: Attempting to add null display!");
            return;
        }

        if (_debugDisplayObjects.Count + _activeDisplays.Count == 0) // In the event of no prewarmup, force.
        {
            WarmupPool();
        }

        // Pop Object from Pool
        DebugDisplayObject displayObject = _debugDisplayObjects.Pop();

        // Call On Add
        a_display.OnAdd(displayObject);
        // Set Parent to Root
        displayObject.transform.SetParent(_displayRoot.transform);

        // Turn Culling off - Display now!
        displayObject.SetShouldCull(false);

        // Apply Visuals to Display
        ApplyVisualsToDisplay(a_display);

        // Add to Active Displays List
        _activeDisplays.Add(a_display);

        // Call on Show
        a_display.OnShow();
    }
 void IDisplayHandler.OnUpdate()
 {
     for (int i = 0; i < _activeDisplays.Count; ++i)
     {
         IDebugDisplay display = _activeDisplays[i];
         display?.OnUpdate();
     }
 }
 public void OnVisualChange()
 {
     for (int i = 0; i < _activeDisplays.Count; ++i)
     {
         IDebugDisplay disp = _activeDisplays[i];
         ApplyVisualsToDisplay(disp);
     }
 }
    private void ApplyVisualsToDisplay(IDebugDisplay a_display)
    {
        if (a_display == null)
        {
            return;
        }

        // Set Image/Font Colour
        a_display.UIObject.Colour   = KDebug.GetVisualData.PrimaryColor;
        a_display.DefaultFontColour = KDebug.GetVisualData.PrimaryTextColor;
    }
    public void RemoveDisplay(IDebugDisplay a_display)
    {
        // Cast to Concrete UI Object
        DebugDisplayObject UIObject = (DebugDisplayObject)a_display.UIObject;

        // Set to Cull
        UIObject.SetShouldCull(true);

        // Parent back under the pool
        UIObject.Rect.SetParent(_poolRoot.transform);

        // Remove from the active displays list.
        _activeDisplays.Remove(a_display);

        // Call on Remove
        a_display.OnRemove();

        // Push UI Object back into the Pool.
        _debugDisplayObjects.Push((DebugDisplayObject)a_display.UIObject);
    }