Ejemplo n.º 1
0
    public UIBaseScreen ShowScreen(UIBaseScreen screen, bool force = false)
    {
        if (screen == null)
        {
            throw new KeyNotFoundException("UIScreenManager: Show(UIBaseScreen) failed, screen is Null.");
        }

        if (!force && (mScreenQueueDirty || screenQueue.LastOrDefault() == screen))
        {
            return(screen);
        }

        screenQueue.Add(screen);
        InsertionSort(screenQueue);

        if (CurrentScreen == null || (int)CurrentScreen.Priority <= (int)screen.Priority)
        {
            if (CurrentScreen != null)
            {
                CurrentScreen.OnDeactivated(false);
            }
            mScreenQueueDirty = true;
        }

        return(screen);
    }
Ejemplo n.º 2
0
    IEnumerator CoroutineUpdate()
    {
        var waitTime = new WaitForSecondsRealtime(0.1f);

        while (true)
        {
            if (mScreenQueueDirty)
            {
                if (mScreenToKill != null && mScreenToKill == CurrentScreen)
                {
                    if (onScreenHide != null)
                    {
                        onScreenHide.Invoke(CurrentScreen);
                    }

                    int screenToKillIndex = screenQueue.FindLastIndex(x => x == mScreenToKill);
                    if (screenToKillIndex != -1)
                    {
                        screenQueue.RemoveAt(screenToKillIndex);
                    }

                    EventSystem.current.SetSelectedGameObject(null);
                    mScreenToKill.SelectedObject = null;
                    mScreenToKill.OnDeactivated(true, true);
                    if (mScreenToKill.keepOnTopWhenHiding)
                    {
                        mScreenToKeepOnTop = mScreenToKill;
                    }
                    mScreenToKill = null;
                    CurrentScreen = null;
                }

                if (screenQueue.Count == 0 && mScreenToShowInTheEnd != null)
                {
                    screenQueue.Add(mScreenToShowInTheEnd);
                    mScreenToShowInTheEnd = null;
                }

                UIBaseScreen maxPriorityScreen = screenQueue.LastOrDefault();

                if (CurrentScreen != maxPriorityScreen)
                {
                    UIBaseScreen previousScreen = CurrentScreen;

                    if (previousScreen != null)
                    {
                        previousScreen.SelectedObject = EventSystem.current.currentSelectedGameObject;
                        EventSystem.current.SetSelectedGameObject(null);
                    }

                    if (maxPriorityScreen.Transition)
                    {
                        CurrentScreen     = null;
                        mScreenQueueDirty = true;
                        yield return(waitTime);

                        continue;
                    }
                    else
                    {
                        CurrentScreen = maxPriorityScreen;

                        if (CurrentScreen == null && DefaultScreen != null)
                        {
                            CurrentScreen = DefaultScreen;
                        }

                        if (CurrentScreen != null)
                        {
                            if (onScreenShow != null)
                            {
                                onScreenShow.Invoke(CurrentScreen);
                            }
                            CurrentScreen.OnActivated();
                        }

                        if (previousScreen != null)
                        {
                            previousScreen.OnDeactivated(CurrentScreen.hideCurrent);
                        }

                        if (mScreenToKeepOnTop != null && mScreenToKeepOnTop.isActiveAndEnabled)
                        {
                            mScreenToKeepOnTop.transform.SetAsLastSibling();
                            mScreenToKeepOnTop = null;
                        }
                    }
                }

                mScreenQueueDirty = false;
            }

            if (!IsTouchMode && alwaysOnSelection)
            {
                if (CurrentScreen != null && !CurrentScreen.Transition)
                {
                    GameObject selectedGameObject = EventSystem.current.currentSelectedGameObject;
                    bool       isCurrentActive    = (selectedGameObject != null && selectedGameObject.activeInHierarchy);

                    if (!isCurrentActive)
                    {
                        if (lastSelection != null && lastSelection.activeInHierarchy && lastSelection.transform.IsChildOf(CurrentScreen.transform))
                        {
                            EventSystem.current.SetSelectedGameObject(lastSelection);
                        }
                        else if (CurrentScreen.DefaultSelection != null && CurrentScreen.DefaultSelection.gameObject.activeInHierarchy)
                        {
                            EventSystem.current.SetSelectedGameObject(CurrentScreen.DefaultSelection.gameObject);
                            lastSelection = CurrentScreen.DefaultSelection.gameObject;
                        }
                    }
                    else
                    {
                        lastSelection = selectedGameObject;
                    }
                }
            }

            yield return(waitTime);
        }
    }