public static ExecutionResult LaunchGameForPlayer(DrawGame game, PlayerGameSave save, Player player, IGameProcessor gameProcessor) { player.ActiveGameSave = new PlayerGameSave { GameName = game.GameName, StateId = game.StartState.Id, }; var messages = gameProcessor.RecursivelyHandleStates(game.StartState, player.ActiveGameSave, player, game, true); messages.Messages.Reverse(); player.ActiveGameSave = new PlayerGameSave { GameName = game.GameName, StateId = messages.EndingState.Id, }; player.PlayerFlag = PlayerFlag.IN_GAME.ToString(); var execResult = new ExecutionResult { MessagesToShow = messages.Item1, OptionsToShow = gameProcessor.GetCurrentOptions(player.ActiveGameSave, game) }; return(execResult); }
public List <string> GetOptions(Player player) { var gameSave = player.ActiveGameSave; var gameBeingPlayed = FindGame(player, gameSave); var options = _gameProcessor.GetCurrentOptions(gameSave, gameBeingPlayed); if (options.Count == 0) { options.Add(Messages.Restart); options.Add(Messages.MainMenu); } else { options.Add("-Menu-"); } return(options); }
public static ExecutionResult ReturnToGame(Player player, IGameRetrieverService _gameStoreService, ITextParsing textParsing, IGameProcessor gameProcessor) { player.PlayerFlag = PlayerFlag.IN_GAME.ToString(); var games = _gameStoreService.ListGames(); var playerState = player.ActiveGameSave; var gameFound = games.Where(a => a.GameName == playerState.GameName).FirstOrDefault(); var state = gameFound.FindStateById(playerState.StateId); var execResult = new ExecutionResult { MessagesToShow = new List <MessageResult> { new MessageResult { Message = textParsing.ParseText(playerState, state.StateText) } }, OptionsToShow = gameProcessor.GetCurrentOptions(playerState, gameFound, state) }; execResult.OptionsToShow.Add("-Menu-"); return(execResult); }
public ExecutionResult HandleMessage(string message, Player player) { if (player.PlayerFlag != PlayerFlag.LOAD_GAME.ToString()) { player.PlayerMenuContext = player.PlayerFlag.ToString(); player.PlayerFlag = PlayerFlag.LOAD_GAME.ToString(); return(ExecutionResultHelper.SingleMessage("Select a game save to load", GetOptions(player))); } else if (message == Messages.Return) { player.PlayerMenuContext2 = "0"; if (player.PlayerMenuContext == PlayerFlag.GAME_MENU.ToString()) { return(MessageHandlerHelpers.ReturnToGameMenu(player, "")); } return(MessageHandlerHelpers.ReturnToMainMenu(player)); } else if (message.StartsWith("<")) { if (int.TryParse(player.PlayerMenuContext2, out int pageNumber)) { if (pageNumber <= 0) { pageNumber = 1; } player.PlayerMenuContext2 = "" + (pageNumber - 1); } else { player.PlayerMenuContext2 = "0"; } return(ExecutionResultHelper.SingleMessage("Select a game save to load", GetOptions(player))); } else if (message.StartsWith(">")) { if (int.TryParse(player.PlayerMenuContext2, out int pageNumber)) { if (pageNumber < 0) { pageNumber = 0; } player.PlayerMenuContext2 = "" + (pageNumber + 1); } else { player.PlayerMenuContext2 = "" + player.GameSaves.Count / PageSize; } return(ExecutionResultHelper.SingleMessage("Select a game save to load", GetOptions(player))); } else { var saveIdString = message.Split(' ')[0]; if (!int.TryParse(saveIdString, out var saveId)) { return(ExecutionResultHelper.SingleMessage("Invalid save specified", GetOptions(player))); } var gameSave = _gameSaveService.GetGameSaveById(saveId, player.PlayerId)?.PlayerGameSave; if (gameSave == null) { return(ExecutionResultHelper.SingleMessage($"Save with ID {saveId} is invalid. Either it doesn't exist, or it doesn't belong to you!", GetOptions(player))); } player.PlayerMenuContext2 = "0"; player.ActiveGameSave.GameName = gameSave.GameName; player.ActiveGameSave.GameSaveData = gameSave.GameSaveData.Select(a => new PlayerGameSaveData { Name = a.Name, Value = a.Value }).ToList(); player.ActiveGameSave.StateId = gameSave.StateId; player.ActiveGameSave.FrameStack = gameSave.FrameStack.Select(a => new PlayerFrameStack { CreatedDate = a.CreatedDate, FunctionName = a.FunctionName, ReturnStateId = a.ReturnStateId, Save = player.ActiveGameSave, SaveId = player.ActiveGameSave.SaveId }).ToList(); player.PlayerFlag = PlayerFlag.IN_GAME.ToString(); var games = _gameStore.ListGames(); var playerState = player.ActiveGameSave; var gameFound = games.Where(a => a.GameName == playerState.GameName).FirstOrDefault(); var state = gameFound.FindStateById(playerState.StateId); var execResult = new ExecutionResult { MessagesToShow = new List <MessageResult> { new MessageResult { Message = _textParsing.ParseText(playerState, state.StateText) } }, OptionsToShow = _gameProcessor.GetCurrentOptions(playerState, gameFound, state) }; execResult.OptionsToShow.Add("-Menu-"); return(execResult); } }