Esempio n. 1
0
        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;
        }