/// <summary> /// Responds to user input, changing the selected entry and accepting /// or cancelling the menu. /// </summary> public override void HandleInput(InputHelper input, GameTime gameTime) { base.HandleInput(input, gameTime); if (input.IsMenuSelect() && _selectedEntry != -1) { if (_menuEntries[_selectedEntry].SettingsChange != null) { _menuEntries[_selectedEntry].ModifyOption(null); if (_menuEntries[_selectedEntry].OptionRequiresRestart) ScreenManager.AddScreen(new MessageBoxScreen("Changing this option requires you to restart the game for it to take effect.", MessageBoxViewportAlignment.Center)); } } }
/// <summary> /// Responds to user input, changing the selected entry and accepting /// or cancelling the menu. /// </summary> public override void HandleInput(InputHelper input, GameTime gameTime) { // Mouse or touch on a menu item int hoverIndex = GetMenuEntryAt(input.Cursor); if (hoverIndex > -1 && _menuEntries[hoverIndex].IsSelectable() && !_scrollLock) { _selectedEntry = hoverIndex; } else { _selectedEntry = -1; } _scrollSlider.Hover = false; if (input.IsCursorValid) { _scrollUp.Collide(input.Cursor); _scrollDown.Collide(input.Cursor); _scrollSlider.Collide(input.Cursor); } else { _scrollUp.Hover = false; _scrollDown.Hover = false; _scrollLock = false; } // Accept or cancel the menu? if (input.IsMenuSelect() && _selectedEntry != -1) { if (_menuEntries[_selectedEntry].IsGlobalExitItem()) { ScreenManager.Game.Exit(); } else if (_menuEntries[_selectedEntry].IsScreenExitItem()) { ExitScreen(); if (_menuEntries[_selectedEntry].CloseParentScreen) _activeGameScreen.ExitScreen(); } else if (_menuEntries[_selectedEntry].LinkScreen != null) { ScreenManager.AddScreen(_menuEntries[_selectedEntry].LinkScreen); if (_menuEntries[_selectedEntry].LinkScreen is IDemoScreen) { ScreenManager.AddScreen( new MessageBoxScreen((_menuEntries[_selectedEntry].LinkScreen as IDemoScreen).GetDetails(), MessageBoxViewportAlignment.Center)); } } else if (_menuEntries[_selectedEntry].SettingsChange != null) { _menuEntries[_selectedEntry].ModifyOption(null); } } else if (input.IsMenuCancel()) { this.ExitScreen(); } if (input.IsMenuPressed()) { if (_scrollUp.Hover) { _menuOffset = Math.Max(_menuOffset - 200f * (float)gameTime.ElapsedGameTime.TotalSeconds, 0f); _scrollLock = false; } if (_scrollDown.Hover) { _menuOffset = Math.Min(_menuOffset + 200f * (float)gameTime.ElapsedGameTime.TotalSeconds, _maxOffset); _scrollLock = false; } if (_scrollSlider.Hover) { _scrollLock = true; } } if (input.IsMenuReleased()) { _scrollLock = false; } if (_scrollLock) { _scrollSlider.Hover = true; _menuOffset = Math.Max(Math.Min(((input.Cursor.Y - _menuBorderTop) / (_menuBorderBottom - _menuBorderTop)) * _maxOffset, _maxOffset), 0f); } }
/// <summary> /// Responds to user input, accepting or cancelling the message box. /// </summary> public override void HandleInput(InputHelper input, GameTime gameTime) { if (input.IsMenuSelect() || input.IsMenuCancel() || input.IsNewMouseButtonPress(MouseButtons.LeftButton)) { ExitScreen(); } }