Exemple #1
0
        public virtual void DataBind(IUserInterface userInterface, MenuItemInfo itemInfo)
        {
            m_item          = itemInfo;
            m_userInterface = userInterface;

            if (m_item != null)
            {
                m_icon.sprite = m_item.Icon;
                if (m_item.Data != null && m_item.Data is ColorResource)
                {
                    m_icon.color = ((ColorResource)m_item.Data).Color;
                    m_text.text  = ((ColorResource)m_item.Data).ShortDescription.ToUpper();
                    if (m_icon.color.grayscale > .5f)
                    {
                        m_text.color = Color.white;
                    }
                    else
                    {
                        m_text.color = Color.black;
                    }
                }

                m_icon.gameObject.SetActive(m_item.Icon != null || (m_item.Data != null && m_item.Data is ColorResource));
            }
            else
            {
                m_icon.sprite = null;
                m_icon.gameObject.SetActive(false);
                m_text.text = string.Empty;
            }

            m_item.Validate = new MenuItemValidationEvent();

            if (m_experienceMachine == null)
            {
                m_experienceMachine = IOCCore.Resolve <IExperienceMachine>();
            }
            if (m_appTheme == null)
            {
                m_appTheme = IOCCore.Resolve <IAppTheme>();
            }

            m_item.Validate.AddListener(m_experienceMachine.CanExecuteMenuCommand);
            m_item.Validate.AddListener((args) => args.IsValid = m_item.IsValid);

            var validationResult = IsValid();

            if (validationResult.IsVisible)
            {
                if (image != null)
                {
                    if (m_item.IsValid)
                    {
                        image.color = m_appTheme.GetSelectedTheme(m_platform).buttonNormalTextColor;
                    }
                    else
                    {
                        image.color = m_appTheme.GetSelectedTheme(m_platform).buttonDisabledTextColor;
                    }
                }

                if (m_item.Data is TMP_InputField.ContentType)
                {
                    TMP_InputField inputField = (TMP_InputField)selectable;
                    if (inputField != null)
                    {
                        inputField.contentType = (TMP_InputField.ContentType)m_item.Data;
                        var placeHolderText = inputField.placeholder.GetComponent <TextMeshProUGUI>();
                        if (placeHolderText)
                        {
                            placeHolderText.text = m_item.Text;
                        }
                    }
                }

                if (!(m_item.Data is TMPro.TMP_InputField.ContentType))
                {
                    m_item.Action = new MenuItemEvent();
                    m_item.Action.AddListener(m_experienceMachine.ExecuteMenuCommand);
                    ((Button)selectable).onClick.AddListener(() => m_item.Action.Invoke(new MenuClickArgs(m_item.Path, m_item.Text, m_item.Command, m_item.CommandType, m_item.Data)));
                }
            }

            gameObject.SetActive(validationResult.IsVisible);
            selectable.interactable = validationResult.IsValid;
        }
Exemple #2
0
        public virtual void DataBind(IUserInterface userInterface, MenuItemInfo item)
        {
            m_item   = item;
            m_vrMenu = userInterface;

            if (m_item != null)
            {
                m_icon.sprite = m_item.Icon;
                m_text.text   = m_item.Text;
                if (m_item.Data != null && m_item.Data is ColorResource)
                {
                    m_icon.color = ((ColorResource)m_item.Data).Color;
                    m_text.text  = ((ColorResource)m_item.Data).ShortDescription.ToUpper();
                }

                m_icon.gameObject.SetActive(m_item.Icon != null || (m_item.Data != null && m_item.Data is ColorResource));
            }
            else
            {
                m_icon.sprite = null;
                m_icon.gameObject.SetActive(false);
                m_text.text = string.Empty;
            }

            if (m_item.Validate == null)
            {
                m_item.Validate = new MenuItemValidationEvent();
            }

            if (m_experienceMachine == null)
            {
                m_experienceMachine = IOCCore.Resolve <IExperienceMachine>();
            }
            if (m_appTheme == null)
            {
                m_appTheme = IOCCore.Resolve <IAppTheme>();
            }

            m_item.Validate.AddListener(m_experienceMachine.CanExecuteMenuCommand);
            m_item.Validate.AddListener((args) => args.IsValid = m_item.IsValid);

            var validationResult = IsValid();

            if (validationResult.IsVisible)
            {
                if (m_item.IsValid)
                {
                    m_text.color = overrideColor? overriddenHighlight : m_appTheme.GetSelectedTheme(m_platform).buttonNormalTextColor;
                }
                else
                {
                    m_text.color = m_appTheme.GetSelectedTheme(m_platform).buttonDisabledTextColor;
                }

                if (m_image != null)
                {
                    if (m_item.IsValid)
                    {
                        m_image.color = m_appTheme.GetSelectedTheme(m_platform).buttonNormalTextColor;
                    }
                    else
                    {
                        m_image.color = m_appTheme.GetSelectedTheme(m_platform).buttonDisabledTextColor;
                    }
                }

                if (!(m_item.Data is ColorResource))
                {
                    if (m_item.Action == null)
                    {
                        m_item.Action = new MenuItemEvent();
                    }
                    m_item.Action.AddListener(m_experienceMachine.ExecuteMenuCommand);
                    ((Button)selectable).onClick.AddListener(() => m_item.Action.Invoke(new MenuClickArgs(m_item.Path, m_item.Text, m_item.Command, m_item.CommandType, m_item.Data)));
                }
            }

            if (m_root != null)
            {
                m_root.gameObject.SetActive(validationResult.IsVisible);
            }
            selectable.interactable = validationResult.IsValid;
            if (m_allowTextScroll)
            {
                StartCoroutine(InitializeTextScroll());
            }
        }