public void ProcessAddRemoveInserts() { // Remove outgoing screens if (toPop.Count > 0) { for (int i = 0; i < toPop.Count; i++) { ActiveScreens.Remove(toPop[i]); toPop[i].IsActivated = false; } toPop.Clear(); } // Add new screens if (toPush.Count > 0) { for (int i = 0; i < toPush.Count; i++) { // Assign parent screen GameScreen scrn = toPush[i]; //scrn.ParentScreen = (ActiveScreens.Count == 0) ? // null : ActiveScreens[ActiveScreens.Count - 1]; ActiveScreens.Add(scrn); if (!scrn.IsInitialized) { scrn.Initialize(this); } scrn.IsActivated = true; } toPush.Clear(); } // Insert new screens if (toInsert.Count > 0) { for (int i = 0; i < toInsert.Count; i++) { ScreenToInsert inserter = toInsert[i]; if (inserter.PositionFromEnd > ActiveScreens.Count) { throw new InvalidOperationException(string.Format("Tried to insert screen '{0}' {1} from end when only {2} screens are active", inserter.Screen.Name, inserter.PositionFromEnd, ActiveScreens.Count)); //continue; } // Assign parent screen int insertPos = ActiveScreens.Count - inserter.PositionFromEnd; //if (insertPos > 0) // inserter.ParentScreen = ActiveScreens[insertPos - 1]; // Insert the screen if (insertPos < ActiveScreens.Count) { ActiveScreens.Insert(insertPos, inserter.Screen); } else { ActiveScreens.Add(inserter.Screen); } // Ensure initialized if (!inserter.Screen.IsInitialized) { inserter.Screen.Initialize(this); } inserter.Screen.IsActivated = true; } toInsert.Clear(); } }
public void AddScreen(string name, GameScreen screen) { screen.Name = name; screen.parentGame = this; allScreens[name] = screen; }