using System.Collections.Generic; using UnityEngine; using UnityEngine.UI; using UnityEngine.Events; using UnityEngine.EventSystems; using TMPro; namespace Michsky.MUIP { public class DropdownMultiSelect : MonoBehaviour, IPointerExitHandler, IPointerClickHandler { // Resources public GameObject triggerObject; public Transform itemParent; public GameObject itemObject; public GameObject scrollbar; private VerticalLayoutGroup itemList; private Transform currentListParent; public Transform listParent; private Animator dropdownAnimator; public TextMeshProUGUI setItemText; public CanvasGroup contentCG; // Settings public bool isInteractable = true; public bool initAtStart = true; public bool enableIcon = true; public bool enableTrigger = true; public bool enableScrollbar = true; public bool setHighPriority = true; public bool outOnPointerExit = false; public bool isListItem = false; public bool invokeAtStart = false; [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; // Animation public AnimationType animationType; [Range(1, 25)] public float transitionSmoothness = 10; [Range(1, 25)] public float sizeSmoothness = 15; public float panelSize = 200; public RectTransform listRect; public CanvasGroup listCG; bool isInTransition = false; float closeOn; // Items [SerializeField] public List items = new List(); // Other variables bool isInitialized = false; int currentIndex; Toggle currentToggle; string textHelper; bool isOn; public int siblingIndex = 0; EventTrigger triggerEvent; [System.Serializable] public class ToggleEvent : UnityEvent { } public enum AnimationType { Modular, Stylish } [System.Serializable] public class Item { public string itemName = "Dropdown Item"; public bool isOn; [HideInInspector] public int itemIndex; [SerializeField] public ToggleEvent onValueChanged = new ToggleEvent(); } void OnEnable() { if (isInitialized == false) { Initialize(); } listCG.alpha = 0; listCG.interactable = false; listCG.blocksRaycasts = false; listRect.sizeDelta = new Vector2(listRect.sizeDelta.x, closeOn); } void Initialize() { if (listCG == null) { listCG = gameObject.GetComponentInChildren(); } if (listRect == null) { listRect = listCG.GetComponent(); } if (initAtStart == true) { SetupDropdown(); } if (animationType == AnimationType.Modular && dropdownAnimator != null) { Destroy(dropdownAnimator); } if (enableTrigger == true && triggerObject != null) { // triggerButton = gameObject.GetComponent