/// <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; } }