/// <summary> /// If the player isn't being held by entities asks him where would he like to go. /// </summary> /// <param name="chatId">The player's id</param> /// <returns></returns> public static async void AskForAction(long chatId, bool sendField = true) { Player curPlayer = GameCore.GetActivePlayer(chatId); if (curPlayer != null) { List <KeyboardButton[]> buttons; if (sendField) { await SendCurrentFieldPicture(curPlayer); } if (GameCore.GetPlayerInDialogue(chatId) == null) // if the player didn't start a conversation { buttons = new List <KeyboardButton[]>() { new KeyboardButton[] { MarkerUpLeft, MarkerUp, MarkerUpRight }, new KeyboardButton[] { MarkerLeft, MarkerChangeMode + curPlayer.Mode.ToString(), MarkerRight }, new KeyboardButton[] { MarkerDownLeft, MarkerDown, MarkerDownRight } }; } else { buttons = new List <KeyboardButton[]>() { new KeyboardButton[] { MarkerAskDirection, MarkerAskAround }, new KeyboardButton[] { MarkerTrade, MarkerBack } }; } ReplyKeyboardMarkup replyKeyboard = new ReplyKeyboardMarkup(buttons); await CheckAndSendAsync(chatId, "Choose the next action: ", replyKeyboard); } }
private static async Task HandleInGameCommands(string cmd, Player curPlayer) { var chatId = curPlayer.Id; //a separate part for performing dialogues if (GameCore.GetPlayerInDialogue(chatId) != null) { switch (cmd) { default: break; case MarkerAskDirection: CharacterAnswer(curPlayer, AnswerModes.DirectionAnswer); break; case MarkerAskAround: break; case MarkerTrade: break; case MarkerBack: GameCore.RemovePlayerInDialogue(chatId); curPlayer.AskedDirection = false; curPlayer.AskedNeighbourhood = false; AskForAction(chatId); break; } } else { switch (cmd) { default: break; case MarkerLoadGame: //if the user wants to load his last saved game GameCore.UpdatePlayerTimestamp(curPlayer); AskForAction(chatId); break; case MarkerUp: curPlayer.DirectAction(0, -1); break; case MarkerUpRight: curPlayer.DirectAction(1, -1); break; case MarkerRight: curPlayer.DirectAction(1, 0); break; case MarkerDownRight: curPlayer.DirectAction(1, 1); break; case MarkerDown: curPlayer.DirectAction(0, 1); break; case MarkerDownLeft: curPlayer.DirectAction(-1, 1); break; case MarkerLeft: curPlayer.DirectAction(-1, 0); break; case MarkerUpLeft: curPlayer.DirectAction(-1, -1); break; } if (cmd == MarkerChangeMode + curPlayer.Mode.ToString()) { curPlayer.Mode = (PlayerModes)Math.Abs((int)curPlayer.Mode - 1); //since there are only 2 modes //available, we can change them //with this magic await CheckAndSendAsync(curPlayer.Id, $"I will {curPlayer.Mode} now"); AskForAction(curPlayer.Id, false); } } }