/// <summary> /// Handles input for the specified player. In local game modes, this is called /// just once for the controlling player. In network modes, it can be called /// more than once if there are multiple profiles playing on the local machine. /// Returns true if we should continue to handle input for subsequent players, /// or false if this player has paused the game. /// </summary> bool HandlePlayerInput(InputState input, PlayerIndex playerIndex) { // Look up inputs for the specified player profile. KeyboardState keyboardState = input.CurrentKeyboardStates[(int)playerIndex]; GamePadState gamePadState = input.CurrentGamePadStates[(int)playerIndex]; // The game pauses either if the user presses the pause button, or if // they unplug the active gamepad. This requires us to keep track of // whether a gamepad was ever plugged in, because we don't want to pause // on PC if they are playing with a keyboard and have no gamepad at all! bool gamePadDisconnected = !gamePadState.IsConnected && input.GamePadWasConnected[(int)playerIndex]; if (input.IsPauseGame(playerIndex) || gamePadDisconnected) { ScreenManager.AddScreen(new PauseMenuScreen(networkSession), playerIndex); return(false); } // Otherwise move the player position. Vector2 movement = Vector2.Zero; if (keyboardState.IsKeyDown(Keys.Left)) { movement.X--; } if (keyboardState.IsKeyDown(Keys.Right)) { movement.X++; } if (keyboardState.IsKeyDown(Keys.Up)) { movement.Y--; } if (keyboardState.IsKeyDown(Keys.Down)) { movement.Y++; } Vector2 thumbstick = gamePadState.ThumbSticks.Left; movement.X += thumbstick.X; movement.Y -= thumbstick.Y; if (movement.Length() > 1) { movement.Normalize(); } playerPosition += movement * 2; return(true); }
/// <summary> /// Handles input for the specified player. In local game modes, this is called /// just once for the controlling player. In network modes, it can be called /// more than once if there are multiple profiles playing on the local machine. /// Returns true if we should continue to handle input for subsequent players, /// or false if this player has paused the game. /// </summary> bool HandlePlayerInput(InputState input, PlayerIndex playerIndex) { // Look up inputs for the specified player profile. KeyboardState keyboardState = input.CurrentKeyboardStates[(int)playerIndex]; GamePadState gamePadState = input.CurrentGamePadStates[(int)playerIndex]; // The game pauses either if the user presses the pause button, or if // they unplug the active gamepad. This requires us to keep track of // whether a gamepad was ever plugged in, because we don't want to pause // on PC if they are playing with a keyboard and have no gamepad at all! bool gamePadDisconnected = !gamePadState.IsConnected && input.GamePadWasConnected[(int)playerIndex]; if (input.IsPauseGame(playerIndex) || gamePadDisconnected) { ScreenManager.AddScreen(new PauseMenuScreen(networkSession), playerIndex); return(false); } return(true); }
/// <summary> /// Handles input for the specified player. In local game modes, this is called /// just once for the controlling player. In network modes, it can be called /// more than once if there are multiple profiles playing on the local machine. /// Returns true if we should continue to handle input for subsequent players, /// or false if this player has paused the game. /// </summary> bool HandlePlayerInput(InputState input, PlayerIndex playerIndex) { // Look up inputs for the specified player profile. KeyboardState keyboardState = input.CurrentKeyboardStates[(int)playerIndex]; GamePadState gamePadState = input.CurrentGamePadStates[(int)playerIndex]; // The game pauses either if the user presses the pause button, or if // they unplug the active gamepad. This requires us to keep track of // whether a gamepad was ever plugged in, because we don't want to pause // on PC if they are playing with a keyboard and have no gamepad at all! bool gamePadDisconnected = !gamePadState.IsConnected && input.GamePadWasConnected[(int)playerIndex]; if (input.IsPauseGame(playerIndex) || gamePadDisconnected) { ScreenManager.AddScreen(new PauseMenuScreen(networkSession), playerIndex); return false; } return true; }
/// <summary> /// Handles input for the specified player. In local game modes, this is called /// just once for the controlling player. In network modes, it can be called /// more than once if there are multiple profiles playing on the local machine. /// Returns true if we should continue to handle input for subsequent players, /// or false if this player has paused the game. /// </summary> bool HandlePlayerInput(InputState input, PlayerIndex playerIndex) { // Look up inputs for the specified player profile. KeyboardState keyboardState = input.CurrentKeyboardStates[(int)playerIndex]; GamePadState gamePadState = input.CurrentGamePadStates[(int)playerIndex]; // The game pauses either if the user presses the pause button, or if // they unplug the active gamepad. This requires us to keep track of // whether a gamepad was ever plugged in, because we don't want to pause // on PC if they are playing with a keyboard and have no gamepad at all! bool gamePadDisconnected = !gamePadState.IsConnected && input.GamePadWasConnected[(int)playerIndex]; if (input.IsPauseGame(playerIndex) || gamePadDisconnected) { ScreenManager.AddScreen(new PauseMenuScreen(networkSession), playerIndex); return false; } // Otherwise move the player position. Vector2 movement = Vector2.Zero; if (keyboardState.IsKeyDown(Keys.Left)) movement.X--; if (keyboardState.IsKeyDown(Keys.Right)) movement.X++; if (keyboardState.IsKeyDown(Keys.Up)) movement.Y--; if (keyboardState.IsKeyDown(Keys.Down)) movement.Y++; Vector2 thumbstick = gamePadState.ThumbSticks.Left; movement.X += thumbstick.X; movement.Y -= thumbstick.Y; if (movement.Length() > 1) movement.Normalize(); playerPosition += movement * 2; return true; }