public override void ProcessKeyboard(IScreenObject consoleObject, Keyboard info, out bool handled) { if (actions.Any()) { handled = true; return; } playerMoved = false; if (state == InputState.Idle) { if (info.IsKeyPressed(Keys.Down)) { MovePlayer(Direction.Down); playerMoved = true; } else if (info.IsKeyPressed(Keys.Up)) { MovePlayer(Direction.Up); playerMoved = true; } else if (info.IsKeyPressed(Keys.Left)) { MovePlayer(Direction.Left); playerMoved = true; } else if (info.IsKeyPressed(Keys.Right)) { MovePlayer(Direction.Right); playerMoved = true; } else if (info.IsKeyPressed(Keys.Space)) { state = InputState.TargetingDirection; } else if (info.IsKeyPressed(Keys.T)) { state = InputState.Targeting; } else if (info.IsKeyPressed(Keys.I)) { state = InputState.Inventory; inventory.IsVisible = true; mapConsole.IsVisible = false; messageConsole.IsVisible = false; logConsole.IsVisible = false; } } else if (state == InputState.TargetingDirection) { messageConsole.SetMessage("Which direction?"); if (info.IsKeyPressed(Keys.Down)) { TargetDirection(Direction.Down); playerMoved = true; } else if (info.IsKeyPressed(Keys.Up)) { TargetDirection(Direction.Up); playerMoved = true; } else if (info.IsKeyPressed(Keys.Left)) { TargetDirection(Direction.Left); playerMoved = true; } else if (info.IsKeyPressed(Keys.Right)) { TargetDirection(Direction.Right); playerMoved = true; } } else if (state == InputState.Targeting) { messageConsole.SetMessage("Select a target"); mapConsole.overlayPoints = new List <Point>(); if (info.IsKeyPressed(Keys.T)) { messageConsole.SetMessage(""); state = InputState.Idle; } } else if (state == InputState.Inventory) { if (info.IsKeyPressed(Keys.I)) { ExitInventory(); } else if (info.KeysPressed.Count > 0) { var item = inventory.GetItem(info.KeysPressed[0].Key); if (item != null) { player.Weapon = ((Weapon)item); messageConsole.SetMessage($"{player.Name()} Equipped {item.Name()}"); ExitInventory(); } } } if (playerMoved) { ActivateActors(); } handled = true; }