using FMOD.Studio; using FMODUnity; using System; using UnityEngine; using UnityEngine.EventSystems; using UnityEngine.UI; namespace NEG.UI.UnityUi.Buttons { [RequireComponent(typeof(ButtonSerializeFields))] public class BaseButton : MonoBehaviour, ISelectHandler, IDeselectHandler, IPointerEnterHandler, IPointerExitHandler { public event Action OnButtonPressed; public bool Interactable { get => serializeFields.Button.interactable; set => serializeFields.Button.interactable = value; } [SerializeField] protected ButtonSerializeFields serializeFields; private bool isHovered; public virtual void OnSelect(BaseEventData eventData) { if (serializeFields.Text) serializeFields.Text.color = serializeFields.SelectedTextColor; } public void OnDeselect(BaseEventData eventData) { if (serializeFields.Text) serializeFields.Text.color = serializeFields.DeselectedTextColor; } public void OnPointerEnter(PointerEventData eventData) { isHovered = true; if (serializeFields.Text) serializeFields.Text.color = serializeFields.SelectedTextColor; } public void OnPointerExit(PointerEventData eventData) { isHovered = false; if (serializeFields.Text) serializeFields.Text.color = serializeFields.DeselectedTextColor; } public void SetText(string text) { if(serializeFields == null) return; if(serializeFields.Text == null) return; serializeFields.Text.text = text; } protected virtual void Awake() { if(serializeFields == null) serializeFields = GetComponent(); serializeFields.Button.onClick.AddListener(OnClicked); OnDeselect(null); } private void OnValidate() { if(serializeFields == null) serializeFields = GetComponent(); } protected virtual void OnClicked() { OnDeselect(null); isHovered = false; OnButtonPressed?.Invoke(); } } }