TechbloxModdingAPI/GamecraftModdingAPI/Interface/IMGUI/Button.cs
2020-12-21 16:31:57 -05:00

92 lines
2.5 KiB
C#

using System;
using Unity.Mathematics;
using UnityEngine;
namespace GamecraftModdingAPI.Interface.IMGUI
{
/// <summary>
/// A clickable button.
/// This wraps Unity's IMGUI Button.
/// </summary>
public class Button : UIElement
{
private bool automaticLayout = false;
private string text;
/// <summary>
/// The rectangular area that the button can use.
/// </summary>
public Rect Box { get; set; } = Rect.zero;
/// <summary>
/// An event that fires when the button is clicked.
/// </summary>
public event EventHandler<bool> OnClick;
public void OnGUI()
{
if (automaticLayout)
{
if (GUILayout.Button(text, Constants.Default.button))
{
OnClick?.Invoke(this, true);
}
}
else
{
if (GUI.Button(Box, text, Constants.Default.button))
{
OnClick?.Invoke(this, true);
}
}
}
/// <summary>
/// The button's unique name.
/// </summary>
public string Name { get; private set; }
/// <summary>
/// Whether to display the button.
/// </summary>
public bool Enabled { get; set; } = true;
/// <summary>
/// Initialize a new button with automatic layout.
/// </summary>
/// <param name="text">The text to display on the button.</param>
/// <param name="name">The button's name.</param>
public Button(string text, string name = null)
{
automaticLayout = true;
this.text = text;
if (name == null)
{
this.Name = typeof(Button).FullName + "::" + text;
}
else
{
this.Name = name;
}
IMGUIManager.AddElement(this);
}
/// <summary>
/// Initialize a new button.
/// </summary>
/// <param name="text">The text to display on the button.</param>
/// <param name="box">Rectangular area for the button to use.</param>
/// <param name="name">The button's name.</param>
public Button(string text, Rect box, string name = null) : this(text, name)
{
automaticLayout = false;
this.Box = box;
}
~Button()
{
IMGUIManager.RemoveElement(this);
}
}
}