Beispiel #1
0
        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();
            }
        }
Beispiel #2
0
 public void AddScreen(string name, GameScreen screen)
 {
     screen.Name       = name;
     screen.parentGame = this;
     allScreens[name]  = screen;
 }