StationObscurum/Assets/Packages/Heat - Complete Modern UI/Scripts/Animation/ButtonFrame.cs
2024-02-01 22:45:59 -05:00

66 lines
2.2 KiB
C#

using System.Collections;
using UnityEngine;
namespace Michsky.UI.Heat
{
[RequireComponent(typeof(Animator))]
public class ButtonFrame : MonoBehaviour
{
// Resources
[SerializeField] private Animator animator;
[SerializeField] private ButtonManager buttonManager;
[SerializeField] private PanelButton panelButton;
// Settings
[SerializeField] private ButtonType buttonType = ButtonType.ButtonManager;
public enum ButtonType { ButtonManager, PanelButton }
void Start()
{
if ((buttonType == ButtonType.ButtonManager && buttonManager == null) || (buttonType == ButtonType.PanelButton && panelButton == null)) { return; }
if (animator == null) { animator = GetComponent<Animator>(); }
if (buttonType == ButtonType.ButtonManager)
{
buttonManager.onHover.AddListener(delegate { DoIn(); });
buttonManager.onLeave.AddListener(delegate { DoOut(); });
buttonManager.onSelect.AddListener(delegate { DoIn(); });
buttonManager.onDeselect.AddListener(delegate { DoOut(); });
}
else if (buttonType == ButtonType.PanelButton)
{
panelButton.onHover.AddListener(delegate { DoIn(); });
panelButton.onLeave.AddListener(delegate { DoOut(); });
panelButton.onSelect.AddListener(delegate { DoOut(); });
}
animator.enabled = false;
}
public void DoIn()
{
animator.enabled = true;
animator.CrossFade("In", 0.15f);
StopCoroutine("DisableAnimator");
StartCoroutine("DisableAnimator");
}
public void DoOut()
{
animator.enabled = true;
animator.CrossFade("Out", 0.15f);
StopCoroutine("DisableAnimator");
StartCoroutine("DisableAnimator");
}
IEnumerator DisableAnimator()
{
yield return new WaitForSecondsRealtime(HeatUIInternalTools.GetAnimatorClipLength(animator, "ButtonFrame_In"));
animator.enabled = false;
}
}
}