using System.Collections; using TMPro; using UnityEngine; using UnityEngine.EventSystems; using UnityEngine.Events; using UnityEngine.UI; namespace Michsky.UI.Heat { [ExecuteInEditMode] [DisallowMultipleComponent] public class PanelButton : MonoBehaviour, IPointerClickHandler, IEventSystemHandler, IPointerEnterHandler, IPointerExitHandler, ISelectHandler, IDeselectHandler, ISubmitHandler { public Sprite buttonIcon; public string buttonText = "Button"; [SerializeField] private CanvasGroup disabledCG; [SerializeField] private CanvasGroup normalCG; [SerializeField] private CanvasGroup highlightCG; [SerializeField] private CanvasGroup selectCG; [SerializeField] private TextMeshProUGUI disabledTextObj; [SerializeField] private TextMeshProUGUI normalTextObj; [SerializeField] private TextMeshProUGUI highlightTextObj; [SerializeField] private TextMeshProUGUI selectTextObj; [SerializeField] private Image disabledImageObj; [SerializeField] private Image normalImageObj; [SerializeField] private Image highlightImageObj; [SerializeField] private Image selectedImageObj; [SerializeField] private GameObject seperator; public bool isInteractable = true; public bool isSelected; public bool useLocalization = true; public bool useCustomText; public bool useSeperator = true; public bool useUINavigation; public Navigation.Mode navigationMode = Navigation.Mode.Automatic; public GameObject selectOnUp; public GameObject selectOnDown; public GameObject selectOnLeft; public GameObject selectOnRight; public bool wrapAround; public bool useSounds = true; [Range(1f, 15f)] public float fadingMultiplier = 8f; public UnityEvent onClick = new UnityEvent(); public UnityEvent onHover = new UnityEvent(); public UnityEvent onLeave = new UnityEvent(); public UnityEvent onSelect = new UnityEvent(); private bool isInitialized; private Button targetButton; private LocalizedObject localizedObject; [HideInInspector] public NavigationBar navbar; private void OnEnable() { if (!isInitialized) { Initialize(); } UpdateUI(); } private void Initialize() { if (!Application.isPlaying) { return; } if (UIManagerAudio.instance == null) { useSounds = false; } if (useUINavigation) { AddUINavigation(); } if (base.gameObject.GetComponent() == null) { Image image = base.gameObject.AddComponent(); image.color = new Color(0f, 0f, 0f, 0f); image.raycastTarget = true; } disabledCG.alpha = 0f; normalCG.alpha = 1f; highlightCG.alpha = 0f; selectCG.alpha = 0f; if (useLocalization) { localizedObject = base.gameObject.GetComponent(); if (localizedObject == null || !localizedObject.CheckLocalizationStatus()) { useLocalization = false; } else if (useLocalization && !string.IsNullOrEmpty(localizedObject.localizationKey)) { buttonText = localizedObject.GetKeyOutput(localizedObject.localizationKey); localizedObject.onLanguageChanged.AddListener(delegate { buttonText = localizedObject.GetKeyOutput(localizedObject.localizationKey); UpdateUI(); }); } } isInitialized = true; } public void IsInteractable(bool value) { isInteractable = value; if (!isInteractable) { StartCoroutine("SetDisabled"); } else if (isInteractable && !isSelected) { StartCoroutine("SetNormal"); } } public void AddUINavigation() { if (targetButton == null) { if (base.gameObject.GetComponent