92 lines
No EOL
2.5 KiB
C#
92 lines
No EOL
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);
|
|
}
|
|
}
|
|
} |