Esempio n. 1
0
        private void SetupTemplate()
        {
            this.validTemplate = false;
            if (!this.m_Template)
            {
                Debug.LogError("The dropdown template is not assigned. The template needs to be assigned and must have a child GameObject with a Toggle component serving as the item.", this);
                return;
            }
            GameObject gameObject = this.m_Template.gameObject;

            gameObject.SetActive(true);
            Toggle componentInChildren = this.m_Template.GetComponentInChildren <Toggle>();

            this.validTemplate = true;
            if (!componentInChildren || componentInChildren.transform == this.template)
            {
                this.validTemplate = false;
                Debug.LogError("The dropdown template is not valid. The template must have a child GameObject with a Toggle component serving as the item.", this.template);
            }
            else if (!(componentInChildren.transform.parent is RectTransform))
            {
                this.validTemplate = false;
                Debug.LogError("The dropdown template is not valid. The child GameObject with a Toggle component (the item) must have a RectTransform on its parent.", this.template);
            }
            else if (this.itemText != null && !this.itemText.transform.IsChildOf(componentInChildren.transform))
            {
                this.validTemplate = false;
                Debug.LogError("The dropdown template is not valid. The Item Text must be on the item GameObject or children of it.", this.template);
            }
            else if (this.itemImage != null && !this.itemImage.transform.IsChildOf(componentInChildren.transform))
            {
                this.validTemplate = false;
                Debug.LogError("The dropdown template is not valid. The Item Image must be on the item GameObject or children of it.", this.template);
            }
            if (!this.validTemplate)
            {
                gameObject.SetActive(false);
                return;
            }
            DropdownWithColor.DropdownItem dropdownItem = componentInChildren.gameObject.AddComponent <DropdownWithColor.DropdownItem>();
            dropdownItem.text          = this.m_ItemText;
            dropdownItem.image         = this.m_ItemImage;
            dropdownItem.toggle        = componentInChildren;
            dropdownItem.rectTransform = (RectTransform)componentInChildren.transform;
            Canvas orAddComponent = DropdownWithColor.GetOrAddComponent <Canvas>(gameObject);

            orAddComponent.overrideSorting = true;
            orAddComponent.sortingOrder    = 30000;
            DropdownWithColor.GetOrAddComponent <GraphicRaycaster>(gameObject);
            DropdownWithColor.GetOrAddComponent <CanvasGroup>(gameObject);
            gameObject.SetActive(false);
            this.validTemplate = true;
        }
Esempio n. 2
0
 private DropdownWithColor.DropdownItem AddItem(DropdownWithColor.OptionData data, bool selected, DropdownWithColor.DropdownItem itemTemplate, List <DropdownWithColor.DropdownItem> items)
 {
     DropdownWithColor.DropdownItem dropdownItem = this.CreateItem(itemTemplate);
     dropdownItem.rectTransform.SetParent(itemTemplate.rectTransform.parent, false);
     dropdownItem.gameObject.SetActive(true);
     dropdownItem.gameObject.name = "Item " + items.Count + ((data.text == null) ? string.Empty : (": " + data.text));
     if (dropdownItem.toggle != null)
     {
         dropdownItem.toggle.isOn = false;
     }
     if (dropdownItem.text)
     {
         dropdownItem.text.text = data.text;
     }
     if (dropdownItem.image)
     {
         dropdownItem.image.sprite  = data.image;
         dropdownItem.image.enabled = (dropdownItem.image.sprite != null);
         dropdownItem.image.color   = data.color;
     }
     items.Add(dropdownItem);
     return(dropdownItem);
 }
Esempio n. 3
0
 protected virtual void DestroyItem(DropdownWithColor.DropdownItem item)
 {
 }
Esempio n. 4
0
 protected virtual DropdownWithColor.DropdownItem CreateItem(DropdownWithColor.DropdownItem itemTemplate)
 {
     return(Object.Instantiate <DropdownWithColor.DropdownItem>(itemTemplate));
 }
Esempio n. 5
0
        /// <summary>
        ///   <para>Show the dropdown list.</para>
        /// </summary>
        public void Show()
        {
            if (!this.IsActive() || !this.IsInteractable() || this.m_Dropdown != null)
            {
                return;
            }
            if (!this.validTemplate)
            {
                this.SetupTemplate();
                if (!this.validTemplate)
                {
                    return;
                }
            }
            List <Canvas> list = MyListPool <Canvas> .Get();

            base.gameObject.GetComponentsInParent <Canvas>(false, list);
            if (list.Count == 0)
            {
                return;
            }
            Canvas canvas = list[0];

            MyListPool <Canvas> .Release(list);

            this.m_Template.gameObject.SetActive(true);
            this.m_Dropdown      = this.CreateDropdownList(this.m_Template.gameObject);
            this.m_Dropdown.name = "Dropdown List";
            this.m_Dropdown.SetActive(true);
            RectTransform rectTransform = this.m_Dropdown.transform as RectTransform;

            rectTransform.SetParent(this.m_Template.transform.parent, false);
            DropdownWithColor.DropdownItem componentInChildren = this.m_Dropdown.GetComponentInChildren <DropdownWithColor.DropdownItem>();
            GameObject    gameObject     = componentInChildren.rectTransform.parent.gameObject;
            RectTransform rectTransform2 = gameObject.transform as RectTransform;

            componentInChildren.rectTransform.gameObject.SetActive(true);
            Rect    rect    = rectTransform2.rect;
            Rect    rect2   = componentInChildren.rectTransform.rect;
            Vector2 vector  = rect2.min - rect.min + (Vector2)componentInChildren.rectTransform.localPosition;
            Vector2 vector2 = rect2.max - rect.max + (Vector2)componentInChildren.rectTransform.localPosition;
            Vector2 size    = rect2.size;

            this.m_Items.Clear();
            Toggle toggle = null;

            for (int i = 0; i < this.options.Count; i++)
            {
                DropdownWithColor.OptionData   data = this.options[i];
                DropdownWithColor.DropdownItem item = this.AddItem(data, this.value == i, componentInChildren, this.m_Items);
                if (!(item == null))
                {
                    item.toggle.isOn = (this.value == i);
                    item.toggle.onValueChanged.AddListener(delegate(bool x)
                    {
                        this.OnSelectItem(item.toggle);
                    });
                    if (item.toggle.isOn)
                    {
                        item.toggle.Select();
                    }
                    if (toggle != null)
                    {
                        Navigation navigation  = toggle.navigation;
                        Navigation navigation2 = item.toggle.navigation;
                        navigation.mode          = Navigation.Mode.Explicit;
                        navigation2.mode         = Navigation.Mode.Explicit;
                        navigation.selectOnDown  = item.toggle;
                        navigation.selectOnRight = item.toggle;
                        navigation2.selectOnLeft = toggle;
                        navigation2.selectOnUp   = toggle;
                        toggle.navigation        = navigation;
                        item.toggle.navigation   = navigation2;
                    }
                    toggle = item.toggle;
                }
            }
            Vector2 sizeDelta = rectTransform2.sizeDelta;

            sizeDelta.y = size.y * (float)this.m_Items.Count + vector.y - vector2.y;
            rectTransform2.sizeDelta = sizeDelta;
            float num = rectTransform.rect.height - rectTransform2.rect.height;

            if (num > 0f)
            {
                rectTransform.sizeDelta = new Vector2(rectTransform.sizeDelta.x, rectTransform.sizeDelta.y - num);
            }
            Vector3[] array = new Vector3[4];
            rectTransform.GetWorldCorners(array);
            RectTransform rectTransform3 = canvas.transform as RectTransform;
            Rect          rect3          = rectTransform3.rect;

            for (int j = 0; j < 2; j++)
            {
                bool flag = false;
                for (int k = 0; k < 4; k++)
                {
                    Vector3 vector3 = rectTransform3.InverseTransformPoint(array[k]);
                    if (vector3[j] < rect3.min[j] || vector3[j] > rect3.max[j])
                    {
                        flag = true;
                        break;
                    }
                }
                if (flag)
                {
                    RectTransformUtility.FlipLayoutOnAxis(rectTransform, j, false, false);
                }
            }
            for (int l = 0; l < this.m_Items.Count; l++)
            {
                RectTransform rectTransform4 = this.m_Items[l].rectTransform;
                rectTransform4.anchorMin        = new Vector2(rectTransform4.anchorMin.x, 0f);
                rectTransform4.anchorMax        = new Vector2(rectTransform4.anchorMax.x, 0f);
                rectTransform4.anchoredPosition = new Vector2(rectTransform4.anchoredPosition.x, vector.y + size.y * (float)(this.m_Items.Count - 1 - l) + size.y * rectTransform4.pivot.y);
                rectTransform4.sizeDelta        = new Vector2(rectTransform4.sizeDelta.x, size.y);
            }
            //this.AlphaFadeList(0.15f, 0f, 1f);
            this.m_Template.gameObject.SetActive(false);
            componentInChildren.gameObject.SetActive(false);
            this.m_Blocker = this.CreateBlocker(canvas);
        }