using System.Collections; using UnityEngine; using UnityEngine.UI; using UnityEngine.EventSystems; using TMPro; namespace Michsky.MUIP { public class ContextMenuSubMenu : MonoBehaviour, IPointerClickHandler, IPointerEnterHandler, IPointerExitHandler { public ContextMenuManager cmManager; public ContextMenuContent cmContent; public Animator subMenuAnimator; public Transform itemParent; public GameObject trigger; [HideInInspector] public int subMenuIndex; GameObject selectedItem; Image setItemImage; TextMeshProUGUI setItemText; Sprite imageHelper; string textHelper; RectTransform listParent; [HideInInspector] public bool enableFadeOut = true; void OnEnable() { if (itemParent == null) { Debug.Log("[Context Menu] Item Parent is missing.", this); return; } listParent = itemParent.parent.gameObject.GetComponent(); } public void OnPointerClick(PointerEventData eventData) { if (cmManager.subMenuBehaviour == ContextMenuManager.SubMenuBehaviour.Click) { if (subMenuAnimator.GetCurrentAnimatorStateInfo(0).IsName("Menu In")) { subMenuAnimator.Play("Menu Out"); if (trigger != null) { trigger.SetActive(false); } } else { subMenuAnimator.Play("Menu In"); if (trigger != null) { trigger.SetActive(true); } } } } public void OnPointerEnter(PointerEventData eventData) { foreach (Transform child in itemParent) Destroy(child.gameObject); for (int i = 0; i < cmContent.contexItems[subMenuIndex].subMenuItems.Count; ++i) { bool nulLVariable = false; if (cmContent.contexItems[subMenuIndex].subMenuItems[i].contextItemType == ContextMenuContent.ContextItemType.Button && cmManager.contextButton != null) selectedItem = cmManager.contextButton; else if (cmContent.contexItems[subMenuIndex].subMenuItems[i].contextItemType == ContextMenuContent.ContextItemType.Separator && cmManager.contextSeparator != null) selectedItem = cmManager.contextSeparator; else { Debug.LogError("[Context Menu] At least one of the item presets is missing. " + "You can assign a new variable in Resources (Context Menu) tab. All default presets can be found in " + "Modern UI Pack > Prefabs > Context Menu folder.", this); nulLVariable = true; } if (nulLVariable == false) { GameObject go = Instantiate(selectedItem, new Vector3(0, 0, 0), Quaternion.identity) as GameObject; go.transform.SetParent(itemParent, false); if (cmContent.contexItems[subMenuIndex].subMenuItems[i].contextItemType == ContextMenuContent.ContextItemType.Button) { setItemText = go.GetComponentInChildren(); textHelper = cmContent.contexItems[subMenuIndex].subMenuItems[i].itemText; setItemText.text = textHelper; Transform goImage = go.gameObject.transform.Find("Icon"); setItemImage = goImage.GetComponent(); imageHelper = cmContent.contexItems[subMenuIndex].subMenuItems[i].itemIcon; setItemImage.sprite = imageHelper; if (imageHelper == null) setItemImage.color = new Color(0, 0, 0, 0); Button itemButton = go.GetComponent