/// <summary> /// Load game state. /// </summary> /// <param name="gameState">current state of the game</param> /// <param name="gameStateId">saved game identifier</param> /// <param name="sceneId">current scene identifier</param> /// <param name="playerId">player identifier</param> /// <returns></returns> public CharacterModel LoadGameState(ExtendedGameState gameState, string gameStateId, string sceneId, string playerId) { var charactersDto = _connection.Table <CharacterStateDTO>() .Where(c => c.GameStateId == gameStateId && c.SceneId == sceneId); CharacterModel player = null; foreach (var itemDto in charactersDto) { var inventoryDto = _connection.Table <InventoryDTO>() .Where(i => i.InventoryId == itemDto.InventoryId) .FirstOrDefault(); // todo: load loot itmes for current inventory var character = itemDto.ConvertToModel <CharacterModel>( inventoryDto.ConvertToModel <InventoryModel>()); gameState.AddCharacter(character); if (character.Id == playerId) { player = character; } } return(player); }
/// <summary> /// Save game state. /// </summary> /// <param name="login">authenticated user login</param> /// <param name="sceneId">active scene identifier</param> /// <param name="player">player state</param> /// <param name="extGameState">game state</param> /// <returns></returns> public void SaveGame(string login, string sceneId, CharacterModel player, ExtendedGameState extGameState) { // Create game safe point var created = DateTime.UtcNow; var gameState = new GameStateModel( Guid.NewGuid().ToString(), login, sceneId, string.Format("Save for {0} at {1}", login, created.ToLocalTime()), created); var gameStateDto = gameState.ConvertToDTO <GameStateDTO>(); // Create main character safe point state var gameStateCharacterDto = player.ConvertToDTO <CharacterStateDTO>(gameStateDto.GameStateId); // todo: save all objects to Database in transaction _connection.Insert(gameStateDto); _connection.Insert(gameStateCharacterDto); // todo: process extGameState saving }
/// <summary> /// Protected consructor for Singleton behaviour. /// </summary> protected GameStateManager() { extendedGameState = new ExtendedGameState(); }