public void NextMenu()
 {
     try
     {
         currentScreen = screens[screens.IndexOf(currentScreen) + 1];
     }
     finally
     {
     }
 }
 /// <summary>
 /// 
 /// </summary>
 /// <param name="type">Type of menu option</param>
 /// <param name="text"></param>
 private MenuOption(MenuOptionType type, string text, MenuScreen link, MenuCommand command)
 {
     this.type = type;
     this.text = text;
     this.link = link;
     this.command = command;
 }
 public MenuOption(MenuOptionType type, string text, MenuScreen link)
     : this(type, text, link, MenuCommand.NONE)
 {
 }
        /// <summary>
        /// Initialize the game menus
        /// </summary>
        public void InitializeMenus()
        {
            // Set up main screen
            MenuScreen mainScreen = new MenuScreen(520.0f, 180.0f, 50.0f);
            //floorsScreen = new MenuScreen(520.0f, 150.0f, 50.0f, true);
            floorsScreen = new MenuScreenGraphical();

            introductionRoomsScreen = new RoomSelectionMenu();
            recreationRoomsScreen = new RoomSelectionMenu();
            engineeringRoomsScreen = new RoomSelectionMenu();
            coreRoomsScreen = new RoomSelectionMenu();

            mainScreen.Options.Add(new MenuOption(MenuOptionType.Command, "Reset Game", MenuCommand.New));
            //mainScreen.Options.Add(new MenuOption(MenuOptionType.Command, "Unlock All", MenuCommand.LoadCompleted));
            //mainScreen.Options.Add(new MenuOption(MenuOptionType.Command, "Load Game", MenuCommand.Load));
            mainScreen.Options.Add(new MenuOption(MenuOptionType.Link, "Sector Select", floorsScreen));
            //mainScreen.Options.Add(new MenuOption(MenuOptionType.Command, "Launch Editor", MenuCommand.LaunchEditor));
            mainScreen.Options.Add(new MenuOption(MenuOptionType.Command, "Exit", MenuCommand.ExitProgram));

            //floorsScreen.Options.Add(new MenuOption(MenuOptionType.Command, "Introduction", MenuCommand.LoadGenesis));
            //floorsScreen.Options.Add(new MenuOption(MenuOptionType.Command, "Recreation", MenuCommand.LoadExodus));
            //floorsScreen.Options.Add(new MenuOption(MenuOptionType.Command, "Engineering", MenuCommand.LoadLeviticus));
            //floorsScreen.Options.Add(new MenuOption(MenuOptionType.Command, "Core", MenuCommand.LoadNumbers));

            floorsScreen.Options.Add(new MenuOption(MenuOptionType.Link, "Introduction", introductionRoomsScreen));
            floorsScreen.Options.Add(new MenuOption(MenuOptionType.Link, "Recreation", recreationRoomsScreen));
            floorsScreen.Options.Add(new MenuOption(MenuOptionType.Link, "Engineering", engineeringRoomsScreen));
            floorsScreen.Options.Add(new MenuOption(MenuOptionType.Link, "Core", coreRoomsScreen));
            floorsScreen.Options.Add(new MenuOption(MenuOptionType.Command, "Credits", MenuCommand.LoadDeuteronomy));
            floorsScreen.Options.Add(new MenuOption(MenuOptionType.Link, "Main Menu", mainScreen));
            savedgame.disabledOptions.AddRange(new List<int> { 1, 2, 3 });
            /*if (savedgame.LoadGame()) // if there is a saved game, load it instead of the hardcoded starter version above
            {
                mainScreen.Options[0] = new MenuOption(MenuOptionType.Command, "Continue", MenuCommand.Continue);
            }*/

            introductionRoomsScreen.Options.Add(new MenuOption(MenuOptionType.Command, "introduction1", MenuCommand.LoadIntroduction));
            introductionRoomsScreen.Options.Add(new MenuOption(MenuOptionType.Command, "introduction2", MenuCommand.LoadIntroduction));
            introductionRoomsScreen.Options.Add(new MenuOption(MenuOptionType.Command, "introduction3", MenuCommand.LoadIntroduction));
            introductionRoomsScreen.Options.Add(new MenuOption(MenuOptionType.Command, "introduction4", MenuCommand.LoadIntroduction));
            introductionRoomsScreen.Options.Add(new MenuOption(MenuOptionType.Command, "introduction5", MenuCommand.LoadIntroduction));
            introductionRoomsScreen.Options.Add(new MenuOption(MenuOptionType.Link, "Sector Select", floorsScreen));

            recreationRoomsScreen.Options.Add(new MenuOption(MenuOptionType.Command, "recreation1", MenuCommand.LoadRecreation));
            recreationRoomsScreen.Options.Add(new MenuOption(MenuOptionType.Command, "recreation2", MenuCommand.LoadRecreation));
            recreationRoomsScreen.Options.Add(new MenuOption(MenuOptionType.Command, "recreation3", MenuCommand.LoadRecreation));
            recreationRoomsScreen.Options.Add(new MenuOption(MenuOptionType.Command, "recreation4", MenuCommand.LoadRecreation));
            recreationRoomsScreen.Options.Add(new MenuOption(MenuOptionType.Command, "recreation5", MenuCommand.LoadRecreation));
            recreationRoomsScreen.Options.Add(new MenuOption(MenuOptionType.Link, "Sector Select", floorsScreen));

            engineeringRoomsScreen.Options.Add(new MenuOption(MenuOptionType.Command, "engineering1", MenuCommand.LoadEngineering));
            engineeringRoomsScreen.Options.Add(new MenuOption(MenuOptionType.Command, "engineering2", MenuCommand.LoadEngineering));
            engineeringRoomsScreen.Options.Add(new MenuOption(MenuOptionType.Command, "engineering3", MenuCommand.LoadEngineering));
            engineeringRoomsScreen.Options.Add(new MenuOption(MenuOptionType.Command, "engineering4", MenuCommand.LoadEngineering));
            engineeringRoomsScreen.Options.Add(new MenuOption(MenuOptionType.Command, "engineering5", MenuCommand.LoadEngineering));
            engineeringRoomsScreen.Options.Add(new MenuOption(MenuOptionType.Link, "Sector Select", floorsScreen));

            coreRoomsScreen.Options.Add(new MenuOption(MenuOptionType.Command, "core1", MenuCommand.LoadCore));
            coreRoomsScreen.Options.Add(new MenuOption(MenuOptionType.Command, "core2", MenuCommand.LoadCore));
            coreRoomsScreen.Options.Add(new MenuOption(MenuOptionType.Command, "core3", MenuCommand.LoadCore));
            coreRoomsScreen.Options.Add(new MenuOption(MenuOptionType.Command, "core4", MenuCommand.LoadCore));
            coreRoomsScreen.Options.Add(new MenuOption(MenuOptionType.Command, "core5", MenuCommand.LoadCore));
            coreRoomsScreen.Options.Add(new MenuOption(MenuOptionType.Link, "Sector Select", floorsScreen));

            savedgame.LoadGame();

            startMenu.Screens.Add(mainScreen);
            startMenu.Screens.Add(floorsScreen);

            startMenu.Screens.Add(introductionRoomsScreen);
            startMenu.Screens.Add(recreationRoomsScreen);
            startMenu.Screens.Add(engineeringRoomsScreen);
            startMenu.Screens.Add(coreRoomsScreen);

            // Pause screen

            pauseScreen = new MenuScreen(520.0f, 180.0f, 50.0f);

            pauseScreen.Options.Add(new MenuOption(MenuOptionType.Command, "Resume", MenuCommand.Resume));
            //pauseScreen.Options.Add(new MenuOption(MenuOptionType.Command, "Load", MenuCommand.Load));
            //pauseScreen.Options.Add(new MenuOption(MenuOptionType.Command, "Main Menu", MenuCommand.LinkToMainMenu)); // Can link between engines...
            //pauseScreen.Options.Add(new MenuOption(MenuOptionType.Command, "Return to Rooms", MenuCommand.LinkToRooms));
            pauseScreen.Options.Add(new MenuOption(MenuOptionType.Link, "Sector Select", floorsScreen));

            //pauseMenu.Screens.Add(pauseScreen);
            startMenu.Screens.Add(pauseScreen);

            SetCurrentMenu(startMenu);
        }
 public void Reset()
 {
     currentScreen = screens[0];
 }
        public void Update()
        {
            //currentScreen.Update();
            if (currentScreen is MenuScreenGraphical)
                ((MenuScreenGraphical)currentScreen).Update();
            else if (currentScreen is RoomSelectionMenu)
                ((RoomSelectionMenu)currentScreen).Update();
            else
                currentScreen.Update();

            MenuOption selected = currentScreen.ReturnCommand(); // command returned by user

            if (selected != null)
            {
                switch (selected.Type)
                {
                    case MenuOptionType.Link:
                        KeyboardState prevks = currentScreen.controller.keyState;
                        MouseState prevms = currentScreen.ms;
                        currentScreen = selected.Link;
                        // pass along the previous keystate the first time so we don't duplicate selection
                        currentScreen.controller.prevState = prevks;
                        currentScreen.prevms = prevms;
                        break;

                    case MenuOptionType.Command:
                        command = selected.Command;
                        break;

                }
            }
        }