public void RemoveScreen(Data.UI.Interfaces.IGameScreen screen) { _gameScreens.Remove(screen); if (screen is IDrawable) { var dScreen = screen as IDrawable; dScreen.UnloadContent(); if (dScreen.CoversOthers) { foreach (IDrawable oScreen in _gameScreens) { oScreen.IsCovered = false; oScreen.OnTop = false; } if (_gameScreens.Last.Value is IDrawable) { (_gameScreens.Last.Value as IDrawable).OnTop = true; } } } if (screen is IInputReciever) { if (_gameScreens.Count > 0) { if (_gameScreens.Last.Value is IInputReciever) { (_gameScreens.Last.Value as IInputReciever).HasFocus = true; } } } }
public void RemoveScreen(Data.UI.Interfaces.IGameScreen screen) { screen.UnloadContent(); _gameScreens.Remove(screen); if (_gameScreens.Count > 1) { if (screen.CoversOthers) { var oldScreen = _gameScreens.Last; if (_gameScreens.Count > 1) { do { if (oldScreen.Value.CoversOthers) { oldScreen.Value.IsCovered = false; break; } oldScreen = oldScreen.Previous; } while (oldScreen.Previous != null); } } if (screen.HasFocus) { var oldScreen = _gameScreens.Last; do { if (oldScreen.Value.GetsInput) { oldScreen.Value.HasFocus = true; break; } oldScreen = oldScreen.Previous; } while (oldScreen.Previous != null); } } else { var temp = _gameScreens.First; temp.Value.IsCovered = false; if (temp.Value.GetsInput) { temp.Value.HasFocus = true; } } }