コード例 #1
0
        private static RectTransform HandleGroupElement(GroupElement element, ref int groupIndex, ref int elementIndex, float width = 120f)
        {
            ContextMenuUIElement uiElement = GetContextMenuUIElement(elementIndex);

            uiElement.rectTransform.SetParent(null);
            uiElement.rectTransform.gameObject.SetActive(true);

            uiElement.icon.gameObject.SetActive(element.icon != null);
            uiElement.icon.sprite = element.icon;
            uiElement.icon.color  = element.icon != null ? element.iconColor : Color.clear;
            uiElement.childIcon.gameObject.SetActive(true);
            uiElement.text.rectTransform.offsetMax = new Vector2(20f, 0f);
            ++elementIndex;


            RectTransform group = GetContextMenuGroup(groupIndex);

            group.SetParent(uiElement.rectTransform);
            group.localPosition = Vector3.zero;
            group.localRotation = Quaternion.identity;
            group.localScale    = Vector3.one;
            group.SetRect(new Vector2(1f, 0f), new Vector2(1f, 0f), Vector2.zero, new Vector2(width, 0f));
            group.gameObject.SetActive(false);

            uiElement.text.text = element.text;
            uiElement.rectTransform.gameObject.name = element.text;
            uiElement.button.onClick = new Button.ButtonClickedEvent();
            uiElement.button.onClick.AddListener(() => group.gameObject.SetActive(!group.gameObject.activeSelf));
            ++groupIndex;

            foreach (AContextMenuElement e in element.elements)
            {
                RectTransform rt = null;
                if (e is LeafElement)
                {
                    rt = HandleLeafElement((LeafElement)e, ref elementIndex);
                }
                else if (e is GroupElement)
                {
                    rt = HandleGroupElement((GroupElement)e, ref groupIndex, ref elementIndex, width);
                }
                rt.SetParent(group);
                rt.localPosition = Vector3.zero;
                rt.localRotation = Quaternion.identity;
                rt.localScale    = Vector3.one;
                rt.SetAsLastSibling();
            }

            group.SetParent(uiElement.rectTransform);
            group.localPosition = Vector3.zero;
            group.localRotation = Quaternion.identity;
            group.localScale    = Vector3.one;
            group.SetRect(new Vector2(1f, 0f), new Vector2(1f, 0f), Vector2.zero, new Vector2(width, 0f));
            return(uiElement.rectTransform);
        }
コード例 #2
0
        private static ContextMenuUIElement GetContextMenuUIElement(int index)
        {
            if (index < _displayedContextMenuElements.Count)
            {
                return(_displayedContextMenuElements[index]);
            }
            ContextMenuUIElement uiElement = new ContextMenuUIElement();

            uiElement.rectTransform = ConstuctContextMenuElement();
            uiElement.button        = uiElement.rectTransform.Find("Button").GetComponent <Button>();
            uiElement.icon          = uiElement.button.transform.Find("Icon").GetComponent <Image>();
            uiElement.text          = uiElement.button.GetComponentInChildren <Text>();
            uiElement.childIcon     = uiElement.button.transform.Find("ChildIcon").GetComponent <RawImage>();
            _displayedContextMenuElements.Add(uiElement);
            return(uiElement);
        }
コード例 #3
0
        private static RectTransform HandleLeafElement(LeafElement element, ref int index)
        {
            ContextMenuUIElement uiElement = GetContextMenuUIElement(index);

            uiElement.rectTransform.SetParent(null);
            uiElement.rectTransform.gameObject.SetActive(true);

            uiElement.icon.gameObject.SetActive(element.icon != null);
            uiElement.icon.sprite = element.icon;
            uiElement.icon.color  = element.icon != null ? element.iconColor : Color.clear;
            uiElement.childIcon.gameObject.SetActive(false);
            uiElement.text.rectTransform.offsetMax = Vector2.zero;

            uiElement.text.text = element.text;
            uiElement.rectTransform.gameObject.name = element.text;
            uiElement.button.onClick = new Button.ButtonClickedEvent();
            uiElement.button.onClick.AddListener(() =>
            {
                element.onClick(element.parameter);
                HideContextMenu();
            });
            ++index;
            return(uiElement.rectTransform);
        }