/// <summary> /// Lets the game respond to player input. Unlike the Update method, /// this will only be called when the gameplay screen is active. /// </summary> public override void HandleInput(InputState input) { #if WINDOWS_PHONE PlayerIndex player; if (input.IsNewButtonPress(Buttons.Back, ControllingPlayer, out player)) { ScreenManager.Game.Exit(); } else { if (elapsedMilliseconds < ReceiveInputTime) { //Show the splash for a little while return; } for (int i = 0; i < input.Gestures.Count; ++i) { if (input.Gestures[i].GestureType == GestureType.Tap) { GotoNextScreen(); } } } #else if (Keyboard.GetState().IsKeyDown(Keys.Escape)) { ScreenManager.Game.Exit(); } if (elapsedMilliseconds < ReceiveInputTime) { //Show the splash for a little while return; } var keys = Keyboard.GetState().GetPressedKeys(); bool noKeysPressed = (keys.Length == 1 && keys[0] == Keys.None) || keys.Length == 0; if (!noKeysPressed) { GotoNextScreen(); } #endif }
/// <summary> /// Lets the game respond to player input. Unlike the Update method, /// this will only be called when the gameplay screen is active. /// </summary> public override void HandleInput(InputState input) { #if WINDOWS if (Keyboard.GetState().IsKeyDown(Keys.Escape)) { LoadingScreen.Load(ScreenManager, false, ControllingPlayer, new BackgroundScreen(), new MainMenuScreen()); } var mouseState = Mouse.GetState(); //If finger touched screen for the first time if (mouseState.LeftButton == ButtonState.Pressed) { isMouseClicked = true; } else { lastTouch = new Vector2(mouseState.X, mouseState.Y); } #else PlayerIndex player; if (input.IsNewButtonPress(Buttons.Back, ControllingPlayer, out player)) { LoadingScreen.Load(ScreenManager, false, ControllingPlayer, new BackgroundScreen(), new MainMenuScreen()); } else { for (int i = 0; i < input.Gestures.Count; ++i) { var gesture = input.Gestures[i]; if (gesture.GestureType == GestureType.Tap) { if (!isMouseClicked) { isMouseClicked = true; lastTouch = input.Gestures[i].Position; } } else { if (gesture.GestureType == GestureType.FreeDrag) { lastTouch.X += input.Gestures[i].Delta.X; lastTouch.Y += input.Gestures[i].Delta.Y; } } } } #endif }
/// <summary> /// Responds to user input, changing the selected entry and accepting /// or cancelling the menu. /// </summary> public override void HandleInput(InputState input) { // we cancel the current menu screen if the user presses the back button PlayerIndex player; if (input.IsNewButtonPress(Buttons.Back, ControllingPlayer, out player) || input.IsNewKeyPress(Keys.Escape, ControllingPlayer, out player)) { OnCancel(player); } #if !WINDOWS_PHONE // Move to the previous menu entry? if (input.IsMenuUp(ControllingPlayer)) { selectedEntry--; if (selectedEntry < 0) selectedEntry = menuEntries.Count - 1; } // Move to the next menu entry? if (input.IsMenuDown(ControllingPlayer)) { selectedEntry++; if (selectedEntry >= menuEntries.Count) selectedEntry = 0; } PlayerIndex playerIndex; if (input.IsMenuSelect(ControllingPlayer, out playerIndex)) { OnSelectEntry(selectedEntry, playerIndex); } else if (input.IsMenuCancel(ControllingPlayer, out playerIndex)) { OnCancel(playerIndex); } var mouseState = Mouse.GetState(); if (mouseState.LeftButton == ButtonState.Pressed) { for (int i = 0; i < menuEntries.Count; i++) { MenuEntry menuEntry = menuEntries[i]; if (GetMenuEntryHitBounds(menuEntry).Contains(new Point(mouseState.X, mouseState.Y))) { // select the entry. since gestures are only available on Windows Phone, // we can safely pass PlayerIndex.One to all entries since there is only // one player on Windows Phone. OnSelectEntry(i, PlayerIndex.One); } } } #else // look for any taps that occurred and select any entries that were tapped foreach (GestureSample gesture in input.Gestures) { if (gesture.GestureType == GestureType.Tap) { // convert the position to a Point that we can test against a Rectangle Point tapLocation = new Point((int)gesture.Position.X, (int)gesture.Position.Y); // iterate the entries to see if any were tapped for (int i = 0; i < menuEntries.Count; i++) { MenuEntry menuEntry = menuEntries[i]; if (GetMenuEntryHitBounds(menuEntry).Contains(tapLocation)) { // select the entry. since gestures are only available on Windows Phone, // we can safely pass PlayerIndex.One to all entries since there is only // one player on Windows Phone. OnSelectEntry(i, PlayerIndex.One); } } } } #endif }