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(); }
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); } }
public void ShowGameScreen(bool useCourtutine) { if (useCourtutine) { StartCoroutine(SwapScreen(gameScreen)); } else { activeScreen.Deactivate(); activeScreen = gameScreen; activeScreen.Activate(); } }
private void OnEnable() { activeScreen = startScreen; //activeScreen.Show(); }