private void SetFocusAtIntrnalElement(int axis, float delta)
        {
            if (focusInternal)
            {
                bool positive = delta >= 0;

                if (selectables.IsAlmostSpecificCount() && delta != 0)
                {
                    foreach (var selectable in selectables)
                    {
                        var   target        = selectable.GetComponent <RectTransform>();
                        var   container     = viewport;
                        var   bounds        = container.TransformBoundsTo(target);
                        float boundsElement = axis == 0 ? bounds.center.x : bounds.center.y;

                        if ((positive && _rangeLeft.Contains(boundsElement)) || (!positive && _rangeRight.Contains(boundsElement)))
                        {
                            FocusManager.SetFocus(selectable);

                            if (verticalScrollbar && horizontalScrollbar)
                            {
                                selectable.SetNavigation(verticalScrollbar, verticalScrollbar, verticalScrollbar, verticalScrollbar);
                            }
                            else if (verticalScrollbar)
                            {
                                selectable.SetNavigation(verticalScrollbar, verticalScrollbar.navigation.selectOnRight, verticalScrollbar.navigation.selectOnLeft, verticalScrollbar);
                            }
                            else
                            {
                                selectable.SetNavigation(verticalScrollbar.navigation.selectOnUp, verticalScrollbar, verticalScrollbar, verticalScrollbar.navigation.selectOnDown);
                            }

                            break;
                        }
                    }
                }
            }
        }
Beispiel #2
0
        public void Initialize(string titleText, string descriptionText, FinishQustionEnum finishQustionEnum, bool useFocusUp, params ButtonInfo[] buttonInfos)
        {
            this.finishQustionEnum = finishQustionEnum;
            gameObject.SetActive(true);
            transform.SetAsLastSibling();

            _isFirstFocusable = false;

            if (buttonInfos == null || dialogsIndexDictonary == null)
            {
                return;
            }

            if (titleContainer != null)
            {
                titleContainer.SetText(titleText);
            }

            if (descriptionContainer != null)
            {
                descriptionContainer.SetText(descriptionText);
            }

            int length = buttonInfos.Length;

            if (!dialogsIndexDictonary.TryGetValue(length, out _buttonsContainer))
            {
                return;
            }

            foreach (var pair in dialogsIndexDictonary)
            {
                pair.Value.gameObject.SetActive(pair.Key == length);
            }

            for (int index = 0; index < buttonInfos.Length; index++)
            {
                if (index >= _buttonsContainer.childCount)
                {
                    continue;
                }

                Transform child = _buttonsContainer.GetChild(index);

                if (child == null)
                {
                    continue;
                }

                Button      button      = child.GetComponent <Button>();
                TextManager textManager = child.GetComponentInChildren <TextManager>();


                if (button == null || textManager == null)
                {
                    continue;
                }

                ButtonInfo buttonInfo = buttonInfos[index];

                var auxEvent = buttonInfo.unityEvent;
                auxEvent.AddInHeadNotPersistantListener(DisableObject);

                ButtonClickedEvent buttonClickEvent = new ButtonClickedEvent();

                var auxList = auxEvent.UnityActions;
                foreach (var unityEvent in auxList)
                {
                    buttonClickEvent.AddListener(unityEvent);
                }
                button.onClick = buttonClickEvent;


                textManager.SetText(buttonInfo.text);

                if (buttonInfo.isFirstFocus || length == 1 || (!_isFirstFocusable && index == length - 1))
                {
                    FocusManager.SetFocus(button.gameObject);
                    _isFirstFocusable = true;
                }
            }
        }