using System.Collections.Generic; using UnityEngine; using UnityEngine.UI; using UnityEngine.Events; using UnityEngine.EventSystems; using TMPro; using System.Collections; namespace Michsky.MUIP { public class CustomDropdown : MonoBehaviour, IPointerExitHandler, IPointerEnterHandler, IPointerClickHandler, ISubmitHandler { // Resources public Animator dropdownAnimator; public GameObject triggerObject; public TextMeshProUGUI selectedText; public Image selectedImage; public Transform itemParent; public GameObject itemObject; public GameObject scrollbar; public VerticalLayoutGroup itemList; public Transform listParent; public AudioSource soundSource; [HideInInspector] public Transform currentListParent; public RectTransform listRect; public CanvasGroup listCG; public CanvasGroup contentCG; // Settings public bool isInteractable = true; public bool enableIcon = true; public bool enableTrigger = true; public bool enableScrollbar = true; public bool updateOnEnable = true; public bool outOnPointerExit = false; public bool setHighPriority = true; public bool invokeAtStart = false; public bool initAtStart = true; public bool enableDropdownSounds = false; public bool useHoverSound = true; public bool useClickSound = true; [Range(1, 50)] public int itemPaddingTop = 8; [Range(1, 50)] public int itemPaddingBottom = 8; [Range(1, 50)] public int itemPaddingLeft = 8; [Range(1, 50)] public int itemPaddingRight = 25; [Range(1, 50)] public int itemSpacing = 8; public int selectedItemIndex = 0; // Animation public AnimationType animationType; public PanelDirection panelDirection; [Range(25, 1000)] public float panelSize = 200; [Range(0.5f, 10)] public float curveSpeed = 3; public AnimationCurve animationCurve = new AnimationCurve(new Keyframe(0.0f, 0.0f), new Keyframe(1.0f, 1.0f)); // Saving public bool saveSelected = false; public string saveKey = "My Dropdown"; // Item list [SerializeField] public List items = new List(); // Events [System.Serializable] public class DropdownEvent : UnityEvent { } public DropdownEvent onValueChanged; [System.Serializable] public class ItemTextChangedEvent : UnityEvent { } public ItemTextChangedEvent onItemTextChanged; // Audio public AudioClip hoverSound; public AudioClip clickSound; // Other variables [HideInInspector] public bool isOn; [HideInInspector] public int index = 0; [HideInInspector] public int siblingIndex = 0; [HideInInspector] public TextMeshProUGUI setItemText; [HideInInspector] public Image setItemImage; EventTrigger triggerEvent; Sprite imageHelper; string textHelper; #if UNITY_EDITOR public bool extendEvents = false; #endif public enum AnimationType { Modular, Custom } public enum PanelDirection { Bottom, Top } [System.Serializable] public class Item { public string itemName = "Dropdown Item"; public Sprite itemIcon; [HideInInspector] public int itemIndex; public UnityEvent OnItemSelection = new UnityEvent(); } void Awake() { if (enableTrigger == true && triggerObject != null) { // triggerButton = gameObject.GetComponent