/// <summary> /// Allows the screen to handle user input. Unlike Update, this method /// is only called when the screen is active, and not when some other /// screen has taken the focus. /// </summary> public virtual void HandleInput(InputState input) { }
/// <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 (input == null) throw new ArgumentNullException("input"); // Look up inputs for the active player profile. int playerIndex = (int)ControllingPlayer.Value; KeyboardState keyboardState = input.CurrentKeyboardStates[playerIndex]; GamePadState gamePadState = input.CurrentGamePadStates[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[playerIndex]; if (input.IsPauseGame(ControllingPlayer) || gamePadDisconnected) { ScreenManager.AddScreen(new PauseMenuScreen(), ControllingPlayer); } else if (keyboardState.IsKeyDown(Keys.F1)) { if (Mouse.GetState().LeftButton == ButtonState.Pressed && this.LeftClickLock == false && this.localPlayer == null) { this.LeftClickLock = true; Point position = new Point { X = Mouse.GetState().X, Y = Mouse.GetState().Y }; ITile tile = TileEngine.TileEngine.Map.GetTile(position); if (!tile.IsBlocked) { PlayerEntity pEntity = new PlayerEntity(tile.ToLocation()); Texture2D texture = screenManager.Content.Load<Texture2D>("player_blue"); Rectangle destinationRectangle = tile.Rect; Rectangle sourceRectangle = Rectangle.Empty; pEntity.SetDrawData(texture, destinationRectangle, sourceRectangle, 0.4f); pEntity.IsBlocked = false; tile.AddEntity(pEntity); this.localPlayer = pEntity; TileEngine.TileEngine.Map.Player = pEntity; } } if (Mouse.GetState().LeftButton == ButtonState.Released && this.LeftClickLock == true) { this.LeftClickLock = false; } } else if (keyboardState.IsKeyDown(Keys.F2) && this.localPlayer == null) { TileEngine.TileEngine.SetMap(); } else if (keyboardState.IsKeyDown(Keys.F3)) { if (Mouse.GetState().LeftButton == ButtonState.Pressed && this.LeftClickLock == false) { this.LeftClickLock = true; Point position = new Point { X = Mouse.GetState().X + TileEngine.TileEngine.mapOriginPosition.X, Y = Mouse.GetState().Y + TileEngine.TileEngine.mapOriginPosition.Y }; TileEngine.TileEngine.SelectedTile = TileEngine.TileEngine.Map.GetTile(position); } if (Mouse.GetState().LeftButton == ButtonState.Released && this.LeftClickLock == true) { this.LeftClickLock = false; } } else if (keyboardState.IsKeyDown(Keys.F4)) { TileEngine.TileEngine.IsMinimapOn = !TileEngine.TileEngine.IsMinimapOn; } else if (keyboardState.IsKeyDown(Keys.F5)) { if (Mouse.GetState().LeftButton == ButtonState.Pressed && this.LeftClickLock == false && this.localPlayer != null) { this.LeftClickLock = true; Point position = new Point { X = Mouse.GetState().X + this.localPlayer.Rect.X, Y = Mouse.GetState().Y + this.localPlayer.Rect.Y }; ITile tile = TileEngine.TileEngine.Map.GetTile(position); if (!tile.IsBlocked) { BearEntity bEntity = new BearEntity(tile.ToLocation()); Texture2D texture = screenManager.Content.Load<Texture2D>("bear"); Rectangle destinationRectangle = tile.Rect; Rectangle sourceRectangle = Rectangle.Empty; bEntity.SetDrawData(texture, destinationRectangle, sourceRectangle, 0.4f); bEntity.IsBlocked = false; tile.AddEntity(bEntity); this.bearList.Add(bEntity); TileEngine.TileEngine.Map.BearList.Add(bEntity); } } if (Mouse.GetState().LeftButton == ButtonState.Released && this.LeftClickLock == true) { this.LeftClickLock = false; } } else if (keyboardState.IsKeyDown(Keys.F6)) { if (Mouse.GetState().LeftButton == ButtonState.Pressed && this.LeftClickLock == false && this.localPlayer != null) { this.LeftClickLock = true; Point position = new Point { X = Mouse.GetState().X + localPlayer.Rect.X, Y = Mouse.GetState().Y + localPlayer.Rect.Y }; ITile tile = TileEngine.TileEngine.Map.GetTile(position); if (!tile.IsBlocked) { LorisEntity lEntity = new LorisEntity(tile.ToLocation()); Texture2D texture = screenManager.Content.Load<Texture2D>("loris_LQ"); if (random.NextDouble() > 0.5) texture = screenManager.Content.Load<Texture2D>("loris_MQ"); Rectangle destinationRectangle = tile.Rect; Rectangle sourceRectangle = Rectangle.Empty; lEntity.SetDrawData(texture, destinationRectangle, sourceRectangle, 0.4f); lEntity.IsBlocked = false; tile.AddEntity(lEntity); this.lorisList.Add(lEntity); TileEngine.TileEngine.Map.LorisList.Add(lEntity); } } if (Mouse.GetState().LeftButton == ButtonState.Released && this.LeftClickLock == true) { this.LeftClickLock = false; } } else if (localPlayer != null) { // Otherwise move the player position. Vector2 movement = Vector2.Zero; if (keyboardState.IsKeyDown(Keys.Left)) { movement.X--; } else if (keyboardState.IsKeyDown(Keys.Right)) { movement.X++; } else if (keyboardState.IsKeyDown(Keys.Up)) { movement.Y--; } else if (keyboardState.IsKeyDown(Keys.Down)) { movement.Y++; } //Vector2 thumbstick = gamePadState.ThumbSticks.Left; //movement.X += thumbstick.X; //movement.Y -= thumbstick.Y; //if (keyboardState.IsKeyDown(Keys.LeftShift)) //{ // movement = movement * 5; //} localPlayer.Movement = movement; } }
/// <summary> /// Responds to user input, accepting or cancelling the message box. /// </summary> public override void HandleInput(InputState input) { PlayerIndex playerIndex; // 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 our Accepted and // Cancelled events, so they can tell which player triggered them. if (input.IsMenuSelect(ControllingPlayer, out playerIndex)) { // Raise the accepted event, then exit the message box. if (Accepted != null) Accepted(this, new PlayerIndexEventArgs(playerIndex)); ExitScreen(); } else if (input.IsMenuCancel(ControllingPlayer, out playerIndex)) { // Raise the cancelled event, then exit the message box. if (Cancelled != null) Cancelled(this, new PlayerIndexEventArgs(playerIndex)); ExitScreen(); } }
/// <summary> /// Responds to user input, changing the selected entry and accepting /// or cancelling the menu. /// </summary> public override void HandleInput(InputState input) { // 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; } // 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); } else if (input.IsMenuCancel(ControllingPlayer, out playerIndex)) { OnCancel(playerIndex); } }