Пример #1
0
        private static int PlayerControl(Unit pc)
        {
            bool loop = true;
            while (loop)
            {
                if (Console.KeyAvailable)
                {
                    loop = false;
                    ConsoleKeyInfo key = Console.ReadKey(true);
                    switch (key.Key)
                    {
                        case ConsoleKey.T:      //Tests
                            Tests.Testing.ItemTest(pc);
                            return 0;

                        /*case ConsoleKey.U:
                            Tests.Testing.UnitSpawn();
                            return 0;*/

                        case ConsoleKey.F1:
                            MessageLog.SendMessage(string.Format("[{0}, {1}]", pc.X, pc.Y));
                            return 0;

                        /*case ConsoleKey.H:
                            MessageLog.ShowLogFile(pc);
                            return 0;*/

                        #region PickUpItem
                        case ConsoleKey.G:
                        case ConsoleKey.OemComma:
                            //pick up item
                            if (GameField[pc.X, pc.Y].ItemList != null && GameField[pc.X, pc.Y].ItemList.Count > 0)
                            {
                                if (GameField[pc.X, pc.Y].ItemList.Count == 1)
                                {
                                    pc.Inventory.StoreItem(GameField[pc.X, pc.Y].ItemList[0]);
                                    MessageLog.SendMessage(string.Format("Picked up {0}.", GameField[pc.X, pc.Y].ItemList[0].ToString()));
                                    GameField[pc.X, pc.Y].ItemList.Remove(GameField[pc.X, pc.Y].ItemList[0]);
                                }
                                else
                                {
                                    bool itemLoop = true;
                                    while (itemLoop)
                                    {
                                        for (int i = 0; i < GameField[pc.X, pc.Y].ItemList.Count; i++)
                                        {
                                            MessageLog.SendMessage(string.Format("Pick up {0}? [Y]es/ [N]o/ [A]ll/ [C]ancel", GameField[pc.X, pc.Y].ItemList[i].ToString()));

                                            ConsoleKeyInfo itemKey = Console.ReadKey(true);
                                            switch (itemKey.Key)
                                            {
                                                case ConsoleKey.Y:
                                                    pc.Inventory.StoreItem(GameField[pc.X, pc.Y].ItemList[i]);
                                                    MessageLog.SendMessage(string.Format("Picked up {0}.", GameField[pc.X, pc.Y].ItemList[i].ToString()));
                                                    GameField[pc.X, pc.Y].ItemList.Remove(GameField[pc.X, pc.Y].ItemList[i]);
                                                    i--;
                                                    break;

                                                case ConsoleKey.A:
                                                    MessageLog.SendMessage("Picking up all items.");
                                                    for (int k = i; k < GameField[pc.X, pc.Y].ItemList.Count; k++)
                                                    {
                                                        pc.Inventory.StoreItem(GameField[pc.X, pc.Y].ItemList[k]);
                                                        MessageLog.SendMessage(string.Format("Picked up {0}.", GameField[pc.X, pc.Y].ItemList[k].ToString()));
                                                        GameField[pc.X, pc.Y].ItemList.Remove(GameField[pc.X, pc.Y].ItemList[k]);
                                                        k--;
                                                    }
                                                    itemLoop = false;
                                                    i = GameField[pc.X, pc.Y].ItemList.Count;
                                                    break;

                                                case ConsoleKey.C:
                                                case ConsoleKey.Escape:
                                                    itemLoop = false;
                                                    i = GameField[pc.X, pc.Y].ItemList.Count;
                                                    MessageLog.SendMessage("Action canceled.");
                                                    break;

                                                case ConsoleKey.N:
                                                    break;

                                                default:
                                                    i--;
                                                    break;
                                            }
                                        }
                                        break;
                                    }
                                }
                            }
                            return 100;
                        #endregion

                        case ConsoleKey.I:
                            OpenInventory(pc);
                            return 100;

                        case ConsoleKey.X:
                            pc.Experience.GainXP(15);
                            return 0;

                        case ConsoleKey.UpArrow:
                        case ConsoleKey.NumPad8:
                        case ConsoleKey.K:
                            if (!ModifierPressed(key))
                                pc.MakeAMove(CardinalDirection.North);
                            break;

                        case ConsoleKey.DownArrow:
                        case ConsoleKey.NumPad2:
                        case ConsoleKey.J:
                            if (!ModifierPressed(key))
                                pc.MakeAMove(CardinalDirection.South);
                            break;

                        case ConsoleKey.LeftArrow:
                        case ConsoleKey.NumPad4:
                        case ConsoleKey.H:
                            if (!ModifierPressed(key))
                                pc.MakeAMove(CardinalDirection.West);
                            break;

                        case ConsoleKey.RightArrow:
                        case ConsoleKey.NumPad6:
                        case ConsoleKey.L:
                            if (!ModifierPressed(key))
                                pc.MakeAMove(CardinalDirection.East);
                            break;

                        case ConsoleKey.NumPad7:
                        case ConsoleKey.Y:
                            if (!ModifierPressed(key))
                                pc.MakeAMove(CardinalDirection.NorthWest);
                            break;

                        case ConsoleKey.NumPad9:
                        case ConsoleKey.U:
                            if (!ModifierPressed(key))
                                pc.MakeAMove(CardinalDirection.NorthEast);
                            break;

                        case ConsoleKey.NumPad1:
                        case ConsoleKey.B:
                            if (!ModifierPressed(key))
                                pc.MakeAMove(CardinalDirection.SouthWest);
                            break;

                        case ConsoleKey.NumPad3:
                        case ConsoleKey.N:
                            if (!ModifierPressed(key))
                                pc.MakeAMove(CardinalDirection.SouthEast);
                            break;

                        case ConsoleKey.Escape:
                            loop = false;
                            UIElements.MainMenu();
                            return 0;

                        default:
                            loop = true;
                            break;
                    }

                    if (GameField[pc.X, pc.Y].ItemList != null && GameField[pc.X, pc.Y].ItemList.Count > 0)
                    {
                        if (GameField[pc.X, pc.Y].ItemList.Count == 1)
                            MessageLog.SendMessage(string.Format("You see a {0} here.", GameField[pc.X, pc.Y].ItemList[0].ToString()));
                        else
                        {
                            StringBuilder itemsPresentSB = new StringBuilder();
                            for (int i = 0; i < GameField[pc.X, pc.Y].ItemList.Count; i++)
                            {
                                itemsPresentSB.Append(GameField[pc.X, pc.Y].ItemList[i].ToString());
                                if (i + 1 < GameField[pc.X, pc.Y].ItemList.Count)
                                    itemsPresentSB.Append(", ");
                            }
                            MessageLog.SendMessage(string.Format("You see {0} items here: {1}.", GameField[pc.X, pc.Y].ItemList.Count, itemsPresentSB.ToString()));
                        }
                    }
                }
            }
            return 100;
        }