UI/BaseCanvas.cs
using System;

namespace HC3;

public partial class BaseCanvas : PanelComponent
{
	public string Name { get; private set; }
	public bool IsVisible { get; private set; } = false;

	protected override void OnAwake()
	{
		OpenedCanvas = string.Empty;
	}

	protected override void OnTreeBuilt()
	{
		SetClass( "basecanvas", true );
	}

	protected override int BuildHash()
	{
		return HashCode.Combine( IsVisible );
	}

	protected override void OnUpdate()
	{
		SetClass( "visible", IsVisible );

		if ( Input.EscapePressed && canvases.Any( x => x.Value.IsVisible ) )
		{
			Input.EscapePressed = false;
			CloseAllCanvases();
		}
	}

	public void RegisterAs( string name )
	{
		RegisterCanvas( name, this );
		Name = name;
	}

	public void Close()
	{
		if ( string.IsNullOrEmpty( Name ) )
		{
			Log.Warning( "This canvas wasn't registered properly - can't close" );
			return;
		}

		CloseCanvas( Name );
	}

	/// <summary>
	/// Called when this canvas is closed
	/// </summary>
	protected virtual void OnClose()
	{
	}

	/// <summary>
	/// Called when this canvas is opened
	/// </summary>
	protected virtual void OnOpen()
	{
	}
}