/// <summary> /// Responds to user input, accepting or cancelling the message box. /// </summary> public override void HandleInput(InputState input) { ScreenManager.Game.IsMouseVisible = true; PlayerIndex playerIndex; int state = -2; var prevButton = mSelectedButton; if (input.IsNextButton(ControllingPlayer)) { do mSelectedButton = (mSelectedButton + 1) % Buttons.Count; while(Buttons[mSelectedButton].State == Button.ButtonState.Inactive); } if (input.IsPreviousButton(ControllingPlayer)) { do mSelectedButton = (mSelectedButton - 1 + Buttons.Count) % Buttons.Count; while(Buttons[mSelectedButton].State == Button.ButtonState.Inactive); } for(int i = 0; i < Buttons.Count; i++) if (Buttons[i].Contains(input.CurrentMouseState.X, input.CurrentMouseState.Y) && input.IsNewMouseState() && Buttons[i].State != Button.ButtonState.Inactive) { mSelectedButton = i; if (input.IsNewLeftMouseClick()) { state = i; } } if (prevButton != mSelectedButton) { Buttons[prevButton].State = Button.ButtonState.Active; Buttons[mSelectedButton].State = Button.ButtonState.Selected; } if (input.IsMenuSelect(ControllingPlayer, out playerIndex) && !input.IsNewLeftMouseClick()) { state = mSelectedButton; } else if (input.IsMenuCancel(ControllingPlayer, out playerIndex)) { state = -1; } switch (state) { case -2: break; case -1: if (Cancelled != null) Cancelled(this, new PlayerIndexEventArgs(PlayerIndex.One)); ExitScreen(); break; default: ExitScreen(); Buttons[state].RaiseEvent(); break; } }
/// <summary> /// Responds to user input, changing the selected entry and accepting /// or cancelling the menu. /// </summary> public override void HandleInput(InputState input) { var before = selectedEntry; // Move to the previous menu entry? if (input.IsMenuUp(ControllingPlayer)) { selectedEntry--; } // Move to the next menu entry? if (input.IsMenuDown(ControllingPlayer)) { selectedEntry++; } selectedEntry = (int)MathHelper.Clamp(selectedEntry, 0, MenuEntries.Count - 1); if (!menuEntries[selectedEntry].HandleMouseInput(input)) for (int i = 0; i < menuEntries.Count; i++) { if(menuEntries[i].HandleMouseInput(input)) { selectedEntry = i; break; } } if(selectedEntry != before) { menuEntries[before].State = UIState.Active; menuEntries[selectedEntry].State = UIState.Selected; AudioSettings settings = (ScreenManager.Game as HalfCakedGame).CurrentProfile.Audio; if(EntryFocusChanged != null) EntryFocusChanged.Play(settings.SoundEffectsVolume / 500f, 0f, 0f); } // Accept or cancel the menu? We pass in our ControllingPlayer, which may // either be null (to accept input from any player) or a specific index. // If we pass a null controlling player, the InputState helper returns to // us which player actually provided the input. We pass that through to // OnSelectEntry and OnCancel, so they can tell which player triggered them. PlayerIndex playerIndex; if (input.IsMenuSelect(ControllingPlayer, out playerIndex)) { OnSelectEntry(selectedEntry, playerIndex, 0); } else if (menuEntries[selectedEntry].ChangesValue && input.IsNextButton(ControllingPlayer)) { OnSelectEntry(selectedEntry, playerIndex, 1); } else if (menuEntries[selectedEntry].ChangesValue && (input.IsPreviousButton(ControllingPlayer))) { OnSelectEntry(selectedEntry, playerIndex, -1); } else if (input.IsMenuCancel(ControllingPlayer, out playerIndex)) { OnCancel(playerIndex); } }
/// <summary> /// Responds to user input, accepting or cancelling the message box. /// </summary> public override void HandleInput(InputState input) { ScreenManager.Game.IsMouseVisible = true; PlayerIndex playerIndex; int state = -1; var prevButton = mSelectedButton; Vector2 mousePos = new Vector2(-1, -1); if(Buttons.Any(x => x.State != UIState.Inactive)) if (input.IsNextButton(ControllingPlayer)) { do mSelectedButton = (mSelectedButton + 1) % Buttons.Count; while (Buttons[mSelectedButton].State == UIState.Inactive); } else if (input.IsPreviousButton(ControllingPlayer)) { do mSelectedButton = (mSelectedButton - 1 + Buttons.Count) % Buttons.Count; while (Buttons[mSelectedButton].State == UIState.Inactive); } for(int i = 0; i < Buttons.Count; i++) if (Buttons[i].HandleMouseInput(input)) { mSelectedButton = i; if (input.IsNewLeftMouseClick()) { state = i; return; } break; } if (prevButton != mSelectedButton) { if(prevButton >= 0) Buttons[prevButton].State = UIState.Active; Buttons[mSelectedButton].State = UIState.Selected; } if (input.IsMenuSelect(ControllingPlayer, out playerIndex) && !input.IsNewLeftMouseClick()) { state = mSelectedButton; } else if (input.IsMenuCancel(ControllingPlayer, out playerIndex)) { state = -2; } switch (state) { case -1: break; case -2: if (Cancelled != null) Cancelled(this, new PlayerIndexEventArgs(playerIndex)); ExitScreen(); break; default: Buttons[state].OnPressedElement(playerIndex, 0); break; } }