/// <summary> /// Uninitializes the game engine /// </summary> public static void Uninitialize() { HearthEntityFactory.Reset(); GameEventManager.Uninitialize(); GameState = null; DeadCardsThisTurn = null; DeadPlayersThisTurn = null; Deathrattles = null; PlayerMulliganed = false; OpponentMulliganed = false; }
/// <summary> /// Performs a mulligan for the specified player /// </summary> /// <param name="player">The player performing the mulligan</param> /// <param name="mulligans">The cards to toss if any</param> public static void Mulligan(BasePlayer player, IEnumerable <BaseCard> mulligans) { if (mulligans != null && mulligans.Any()) { var mulligansList = mulligans.ToList(); foreach (var card in mulligansList) { if (!player.Hand.Contains(card)) { throw new InvalidOperationException( string.Format("Can't mulligan {0} because it could not be found it the player's hand!", card)); } Logger.Instance.InfoFormat("{0} is mulliganing {1}", player.LogString(), card); player.RemoveCardFromHand(card); } // Draw new cards equal to the amount mulliganed player.DrawCards(mulligansList.Count()); // Shuffle the mulliganed cards back into the deck player.Deck.AddCards(mulligansList); player.Deck.Shuffle(); } if (player == GameEngine.GameState.Player) { PlayerMulliganed = true; } else { OpponentMulliganed = true; } if (PlayerMulliganed && OpponentMulliganed) { var theCoin = HearthEntityFactory.CreateCard <TheCoin>(); Logger.Instance.InfoFormat("Giving {0} {1}", GameEngine.GameState.WaitingPlayer.LogString(), theCoin); GameEngine.GameState.WaitingPlayer.AddCardToHand(theCoin); GameEngine.StartTurn(GameEngine.GameState.CurrentPlayer); } }