public void HandleInput(ConsoleKey input)
        {
            buyPotion = arrowPos < 5;
            heal      = Enumerable.Range(5, 3).Contains(arrowPos);

            arrowPos = Program.ArrowGUI(arrowPos, input, 1, 8, null);

            nextState = new PotionStoreGameState(arrows, arrowPos);

            switch (input)
            {
            case ConsoleKey.Enter:

                if (buyPotion)
                {
                    int cap = Program.potions.Count + 1;

                    nextState = new PotionStoreGameState(arrows, arrowPos);

                    for (int potion = 0; potion < cap; potion++)
                    {
                        if (Program.potions.Count == potion)
                        {
                            cap = potion;

                            switch (arrowPos)
                            {
                            case 1: potionSold = strengthPotion; break;

                            case 2: potionSold = toughnessPotion; break;

                            case 3: potionSold = defencePotion; break;

                            case 4: potionSold = luckPotion; break;
                            }

                            if (potionSold != null)
                            {
                                Program.potions[potion] = potionSold;
                            }

                            if (Program.potions[potion].price <= Program.Gold)
                            {
                                nextState     = new ExplorationGameState();
                                Program.Gold -= Program.potions[potion].price;
                            }
                            else
                            {
                                Program.potions.Remove(potion);
                            }
                        }
                    }
                }
                else if (heal)
                {
                    if (Program.Gold >= healingPrice)
                    {
                        nextState = new ExplorationGameState();

                        switch (arrowPos)
                        {
                        case 5: character = Program.ben; break;

                        case 6: character = Program.tim; break;

                        case 7: character = Program.ty; break;
                        }

                        if (character.alive)
                        {
                            character.Health += healAmount;
                            Program.Gold     -= 100;
                        }
                    }
                    else
                    {
                        nextState = new PotionStoreGameState(arrows, arrowPos);
                    }
                }
                else
                {
                    nextState = new ExplorationGameState();
                }

                break;
            }

            for (int arrow = 0; arrow < 8; arrow++)
            {
                arrows[arrow] = arrowPos == (arrow + 1) ? ">" : " ";
            }
        }
        public void HandleInput(ConsoleKey input)
        {
            bool inputTaken = false;

            if (potionAction && !inputTaken)
            {
                int    key  = 0;
                string stat = "";

                inputTaken = true;

                potionArrowPos = Program.ArrowGUI(potionArrowPos, input, 2, 2, null);

                switch (input)
                {
                case ConsoleKey.R:
                    for (int potionName = 0; potionName < potionNames.Length; potionName++)
                    {
                        potionNames[potionName] = " ";
                    }

                    for (int potionArrow = 0; potionArrow < potionArrows.Length; potionArrow++)
                    {
                        potionArrows[potionArrow] = " ";
                    }

                    potionAction = false;

                    error = true;

                    SetUpNextState();
                    break;

                case ConsoleKey.Enter:
                    switch (potionArrowPos)
                    {
                    case 1: stat = "Strength"; break;

                    case 2: stat = "Toughness"; break;

                    case 3: stat = "Defence"; break;

                    case 4: stat = "Luck"; break;
                    }

                    for (int potionCount = 0; potionCount < Program.potions.Count; potionCount++)
                    {
                        if (Program.potions[potionCount].stat == stat)
                        {
                            key    = potionCount;
                            potion = Program.potions[potionCount];
                        }
                    }

                    if (potion != null)
                    {
                        if (character.hasFought)
                        {
                            error         = true;
                            notifications = $"{character.nickname} has already fought!!";
                        }
                        else
                        {
                            character.hasFought = true;
                        }

                        if (!error)
                        {
                            bool miss = character.LuckRoll(15);

                            if (miss)
                            {
                                notifications = $"{enemy.creatureName} missed!";
                            }

                            enemy.Combat(character, round, miss);

                            character.PotionWearOff();

                            Program.potions.Remove(key);

                            character.ConsumePotion(potion);

                            notifications = $"{character.nickname} used a {potion.name}";

                            for (int potionName = 0; potionName < potionNames.Length; potionName++)
                            {
                                potionNames[potionName] = " ";
                            }

                            for (int potionArrow = 0; potionArrow < potionArrows.Length; potionArrow++)
                            {
                                potionArrows[potionArrow] = " ";
                            }

                            potionAction = false;
                        }
                    }
                    else
                    {
                        error         = true;
                        notifications = "You do not have that kind of potion!";
                    }

                    SetUpNextState();
                    break;
                }

                if (potionAction)
                {
                    for (int potionArrow = 0; potionArrow < potionArrows.Length; potionArrow++)
                    {
                        potionArrows[potionArrow] = potionArrowPos == potionArrow + 1 ? ">" : " ";
                    }
                }
            }

            if (!characterSelected && !inputTaken)
            {
                inputTaken = true;

                charArrowPos = Program.ArrowGUI(charArrowPos, input, 3, 1, null);

                switch (input)
                {
                case ConsoleKey.R:
                    error = true;

                    SetUpNextState();
                    break;

                case ConsoleKey.Enter:
                    if (charArrows[0] == ">")
                    {
                        character = ben;
                    }
                    else if (charArrows[1] == ">")
                    {
                        character = tim;
                    }
                    else if (charArrows[2] == ">")
                    {
                        character = ty;
                    }

                    if (character.alive)
                    {
                        characterSelected = true;
                    }
                    else
                    {
                        error         = true;
                        notifications = $"{character.nickname} is dead!";
                    }
                    break;
                }

                for (int charArrow = 0; charArrow < charArrows.Length; charArrow++)
                {
                    charArrows[charArrow] = charArrowPos == charArrow + 1 ? ">" : " ";
                }
            }

            if (characterSelected && !inputTaken)
            {
                actionArrowPos = Program.ArrowGUI(actionArrowPos, input, 2, 2, null);

                switch (input)
                {
                case ConsoleKey.R:
                    error = true;

                    SetUpNextState();
                    break;

                case ConsoleKey.Enter:
                    ActionExecution();
                    break;
                }

                for (int actionArrow = 0; actionArrow < actionArrows.Length; actionArrow++)
                {
                    actionArrows[actionArrow] = actionArrowPos == actionArrow + 1 ? ">" : " ";
                }
            }
        }