/// <summary> /// Used to process a battle. /// </summary> /// <param name="playerA"></param> /// <param name="playerB"></param> private void Process(IPlayer playerA, IPlayer playerB) { // Get loggers IBattleLog battleLog = new BattleLog(); var(playerLogA, playerLogB) = battleLog.GetPlayerLogs(playerA.Username, playerB.Username); // Get cards var rawDeckA = db.GetUserDeck(playerA.Username); var rawDeckB = db.GetUserDeck(playerB.Username); // Convert card data schema to functional card var deckA = rawDeckA.Select( rawCard => CardFactory.Print(rawCard.Name, rawCard.Damage, playerLogA)). Where(card => card != null).ToList() !; var deckB = rawDeckB.Select( rawCard => CardFactory.Print(rawCard.Name, rawCard.Damage, playerLogB)). Where(card => card != null).ToList() !; playerA.AddDeck(deckA !); playerB.AddDeck(deckB !); // Let's get ready to rumble var battle = new Battle(playerA, playerB, battleLog); var result = battle.ProcessBattle(); var log = (JsonConvert.SerializeObject(result.Log) is var json && json is {}) ? json : "";