/// <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, GameTime gameTime) { // 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); } // Handle Player Input if (networkSession == null) { players[(int)playerIndex].HandleInput(input, playerIndex, gameTime); } else { if ((int)playerIndex >= networkSession.LocalGamers.Count) { return(true); } Player p = networkSession.LocalGamers[(int)playerIndex].Tag as Player; p.HandleInput(input, playerIndex, gameTime); } return(true); }