using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.UI; using UnityEngine.Events; using UnityEngine.EventSystems; using TMPro; #if ENABLE_INPUT_SYSTEM using UnityEngine.InputSystem; #endif namespace Michsky.MUIP { [AddComponentMenu("Modern UI Pack/Context Menu/Context Menu Content")] public class ContextMenuContent : MonoBehaviour, IPointerClickHandler { // Resources public ContextMenuManager contextManager; public Transform itemParent; // Settings public bool useIn3D = false; // Items public List contexItems = new List(); GameObject selectedItem; Image setItemImage; TextMeshProUGUI setItemText; Sprite imageHelper; string textHelper; [System.Serializable] public class ContextItem { [Header("Information")] [Space(-5)] public string itemText = "Item Text"; public Sprite itemIcon; public ContextItemType contextItemType; [Header("Sub Menu")] public List subMenuItems = new List(); [Header("Events")] public UnityEvent onClick; } [System.Serializable] public class SubMenuItem { public string itemText = "Item Text"; public Sprite itemIcon; public ContextItemType contextItemType; public UnityEvent onClick; } public enum ContextItemType { Button, Separator } void Awake() { if (contextManager == null) { try { #if UNITY_2023_2_OR_NEWER contextManager = FindObjectsByType(FindObjectsSortMode.None)[0]; #else contextManager = (ContextMenuManager)FindObjectsOfType(typeof(ContextMenuManager))[0]; #endif itemParent = contextManager.transform.Find("Content/Item List").transform; } catch { Debug.LogError("[Context Menu] Context Manager is missing.", this); return; } } foreach (Transform child in itemParent) Destroy(child.gameObject); } public void ProcessContent() { foreach (Transform child in itemParent) { Destroy(child.gameObject); } for (int i = 0; i < contexItems.Count; ++i) { bool nulLVariable = false; if (contexItems[i].contextItemType == ContextItemType.Button && contextManager.contextButton != null) selectedItem = contextManager.contextButton; else if (contexItems[i].contextItemType == ContextItemType.Separator && contextManager.contextSeparator != null) selectedItem = contextManager.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) { if (contexItems[i].subMenuItems.Count == 0) { GameObject go = Instantiate(selectedItem, new Vector3(0, 0, 0), Quaternion.identity) as GameObject; go.transform.SetParent(itemParent, false); if (contexItems[i].contextItemType == ContextItemType.Button) { setItemText = go.GetComponentInChildren(); textHelper = contexItems[i].itemText; setItemText.text = textHelper; Transform goImage = go.gameObject.transform.Find("Icon"); setItemImage = goImage.GetComponent(); imageHelper = contexItems[i].itemIcon; setItemImage.sprite = imageHelper; if (imageHelper == null) setItemImage.color = new Color(0, 0, 0, 0); Button itemButton = go.GetComponent