using System; using System.Collections; using TMPro; using UnityEngine; using UnityEngine.EventSystems; using UnityEngine.Events; using UnityEngine.UI; namespace Michsky.UI.Heat { [ExecuteInEditMode] [DisallowMultipleComponent] public class ButtonManager : MonoBehaviour, IPointerClickHandler, IEventSystemHandler, IPointerEnterHandler, IPointerExitHandler, ISelectHandler, IDeselectHandler, ISubmitHandler { [Serializable] public class Padding { public int left = 18; public int right = 18; public int top = 15; public int bottom = 15; } public Sprite buttonIcon; public string buttonText = "Button"; [Range(0.1f, 10f)] public float iconScale = 1f; [Range(1f, 200f)] public float textSize = 24f; [SerializeField] private CanvasGroup normalCG; [SerializeField] private CanvasGroup highlightCG; [SerializeField] private CanvasGroup disabledCG; public TextMeshProUGUI normalTextObj; public TextMeshProUGUI highlightTextObj; public TextMeshProUGUI disabledTextObj; public Image normalImageObj; public Image highlightImageObj; public Image disabledImageObj; public bool autoFitContent = true; public Padding padding; [Range(0f, 100f)] public int spacing = 12; [SerializeField] private HorizontalLayoutGroup disabledLayout; [SerializeField] private HorizontalLayoutGroup normalLayout; [SerializeField] private HorizontalLayoutGroup highlightedLayout; public HorizontalLayoutGroup mainLayout; [SerializeField] private ContentSizeFitter mainFitter; [SerializeField] private ContentSizeFitter targetFitter; [SerializeField] private RectTransform targetRect; public bool isInteractable = true; public bool enableIcon; public bool enableText = true; public bool useCustomContent; [SerializeField] private bool useCustomTextSize; public bool checkForDoubleClick = true; public bool useLocalization = true; public bool bypassUpdateOnEnable; 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(0.1f, 1f)] public float doubleClickPeriod = 0.25f; [Range(1f, 15f)] public float fadingMultiplier = 8f; public UnityEvent onClick = new UnityEvent(); public UnityEvent onDoubleClick = new UnityEvent(); public UnityEvent onHover = new UnityEvent(); public UnityEvent onLeave = new UnityEvent(); public UnityEvent onSelect = new UnityEvent(); public UnityEvent onDeselect = new UnityEvent(); [HideInInspector] public bool overrideInteractable; private bool isInitialized; private Button targetButton; private LocalizedObject localizedObject; private bool waitingForDoubleClickInput; private void OnEnable() { if (!isInitialized) { Initialize(); } if (!bypassUpdateOnEnable) { UpdateUI(); } if (Application.isPlaying && useUINavigation) { AddUINavigation(); } else if (Application.isPlaying && !useUINavigation && targetButton == null) { if (base.gameObject.GetComponent