internal void ProcessCommand(Interface.Command cmd, double timeElapsed)
{
if (CurrMenu < 0)
{
return;
}
// MenuBack is managed independently from single menu data
if (cmd == Interface.Command.MenuBack)
{
PopMenu();
return;
}
SingleMenu menu = Menus[CurrMenu];
if (menu.Selection == SelectionNone) // if menu has no selection, do nothing
return;
switch (cmd)
{
case Interface.Command.MenuUp: // UP
if (menu.Selection > 0 &&
!(menu.Items[menu.Selection - 1] is MenuCaption))
{
menu.Selection--;
PositionMenu();
}
break;
case Interface.Command.MenuDown: // DOWN
if (menu.Selection < menu.Items.Length - 1)
{
menu.Selection++;
PositionMenu();
}
break;
// case Interface.Command.MenuBack: // ESC: managed above
// break;
case Interface.Command.MenuEnter: // ENTER
if (menu.Items[menu.Selection] is MenuCommand)
{
MenuCommand menuItem = (MenuCommand)menu.Items[menu.Selection];
switch (menuItem.Tag)
{
// menu management commands
case MenuTag.MenuBack: // BACK TO PREVIOUS MENU
Menu.instance.PopMenu();
break;
case MenuTag.MenuJumpToStation: // TO STATIONS MENU
Menu.instance.PushMenu(MenuType.JumpToStation);
break;
case MenuTag.MenuExitToMainMenu: // TO EXIT MENU
Menu.instance.PushMenu(MenuType.ExitToMainMenu);
break;
case MenuTag.MenuQuit: // TO QUIT MENU
Menu.instance.PushMenu(MenuType.Quit);
break;
case MenuTag.MenuControls: // TO CONTROLS MENU
Menu.instance.PushMenu(MenuType.Controls);
break;
case MenuTag.BackToSim: // OUT OF MENU BACK TO SIMULATION
Reset();
Game.CurrentInterface = Game.InterfaceType.Normal;
break;
// simulation commands
case MenuTag.JumpToStation: // JUMP TO STATION
Reset();
TrainManager.JumpTrain(TrainManager.PlayerTrain, menuItem.Data);
break;
case MenuTag.ExitToMainMenu: // BACK TO MAIN MENU
Reset();
Program.RestartArguments =
Interface.CurrentOptions.GameMode == Interface.GameMode.Arcade ? "/review" : "";
MainLoop.Quit = true;
break;
case MenuTag.Control: // CONTROL CUSTOMIZATION
PushMenu(MenuType.Control, ((MenuCommand)menu.Items[menu.Selection]).Data);
isCustomisingControl = true;
CustomControlIdx = ((MenuCommand)menu.Items[menu.Selection]).Data;
break;
case MenuTag.Quit: // QUIT PROGRAMME
Reset();
MainLoop.Quit = true;
break;
}
}
break;
case Interface.Command.MiscFullscreen:
// fullscreen
Screen.ToggleFullscreen();
break;
case Interface.Command.MiscMute:
// mute
Sounds.GlobalMute = !Sounds.GlobalMute;
Sounds.Update(timeElapsed, Interface.CurrentOptions.SoundModel);
break;
}
}