Пример #1
0
    IEnumerator SwapScreen(ScreenBehavior newScreen)
    {
        canSwap = false;
        yield return(null);

        ToggleBlocker();
        if (activeScreen != null)
        {
            activeScreen.Hide();

            // yield return new WaitForSeconds(activeScreen.hideTime);
            while (activeScreen.IsPlayingAnim())
            {
                yield return(null);
            }

            activeScreen.Deactivate();
        }

        newScreen.Activate();
        newScreen.Show();
        yield return(new WaitForSeconds(newScreen.showTime));

        activeScreen = newScreen;
        canSwap      = true;
        ToggleBlocker();
    }
Пример #2
0
        public void Show(Screen screen, ScreenBehavior behavior)
        {
            Log.Debug((s, b) => $"Show. {s} {b}", screen, behavior);

            if (screen == _currentScreen)
            {
                Log.Warn(s => $"Screen already shown: {s}", screen);
                return;
            }

            var previousScreen = _currentScreen;

            if (behavior == ScreenBehavior.Replace && _currentScreen != null)
            {
                HideScreenImpl(_currentScreen);
                _currentScreen = null;
            }

            var instance = GetInstance(screen, UIControlOptions.Instantiate | UIControlOptions.Activate, out var isNewInstance);

            if (instance == null)
            {
                Log.Error(s => $"Failed to instantiate screen: {s}", screen);
                return;
            }

            if (!_openScreens.Contains(screen))
            {
                if (behavior == ScreenBehavior.OpenOnTop)
                {
                    _openScreens.Insert(0, screen);

                    // No need to move object in hierarchy as it'll be added on top of everything on the layer.
                }
                else
                {
                    _openScreens.Add(screen);
                }
            }

            if (isNewInstance)
            {
                Dispatcher.Dispatch(ScreenEvent.Created, screen);
            }

            if (behavior != ScreenBehavior.OpenInBackground)
            {
                _currentScreen = screen;
                Dispatcher.Dispatch(ScreenEvent.Shown, screen);
            }

            if (behavior == ScreenBehavior.OpenOnTop && previousScreen != null)
            {
                Dispatcher.Dispatch(ScreenEvent.Hidden, previousScreen);
            }
        }
Пример #3
0
 public void ShowGameScreen(bool useCourtutine)
 {
     if (useCourtutine)
     {
         StartCoroutine(SwapScreen(gameScreen));
     }
     else
     {
         activeScreen.Deactivate();
         activeScreen = gameScreen;
         activeScreen.Activate();
     }
 }
Пример #4
0
 private void OnEnable()
 {
     activeScreen = startScreen;
     //activeScreen.Show();
 }