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