UIWindow

Windows represent a single window pane in your UI. A window can be shows and hidden and contains events to synchronize it with other UI elements.

UI windows get disabled when hidden to reduce resource usage and increases drawing performance.

Using a UIWindow

using UnityEngine;
using Devdog.General.UI;

public class MyClass : MonoBehaviour
{
    // Assign in Unity inspector.
    public UIWindow myWindow;

    private void MyMethod()
    {
        myWindow.Show();
    }

    private void MyHideMethod()
    {
        myWindow.Hide();
    }

    private void MyToggleMethod()
    {
        // Show if hidden, hide if shown.
        myWindow.Toggle();
    }
}

Input handlers

Input handlers are responsible for showing / hiding the window when the user performs an action or input. The IUIWindowInputHandler can be implemented to create your own UI window input handler.

using UnityEngine;
using Devdog.General.UI;

[RequireComponent(typeof(UIWindow))]
public sealed class MyUIWindowInputHandler : MonoBehaviour, IUIWindowInputHandler
{
    public KeyCode keyCode = KeyCode.None;

    private UIWindow _window;
    private void Awake()
    {
        _window = GetComponent<UIWindow>();
    }

    private void Update()
    {
        if (Input.GetKeyDown(keyCode))
        {
            _window.Toggle();
        }
    }
}

Visuals

The UIWindowVisuals component can handle the visuals for a window, such as show and hide animations and audio.

Window events

UIWindow events can be used to synchronize UI elements, enable / disable controllers, etc.

Danger

Don't forget to unsubscribe your events when your object gets destroyed or disabled.

using UnityEngine;
using Devdog.General.UI;

public class MyEventListenerClass : MonoBehaviour
{
    // Assign in Unity inspector.
    public UIWindow myWindow;

    private void MyMethod()
    {
        myWindow.OnShow += OnShow;
        myWindow.OnHide += OnHide;
    }

    private void OnDestroy()
    {
        // Remove / cleanup event listeners on destroy.
        myWindow.OnShow -= OnShow;
        myWindow.OnHide -= OnHide;
    }

    private void OnShow()
    {
        // Called when the window is hidden.
    }

    private void OnHide()
    {
        // Called when the window is shown.
    }
}