public void AfterCardPlay(CardData card, CardData cardToOblivion = null) { if (card == null) // From SelectCardToOblivionEffect { card = lastCardPlayed; } waitForCardEffect = false; switch (card.CardPlayedOrigin) { case CardPlayedOrigin.HAND: hand.DiscardCard(card); if (card.DestroyAfterPlay || card == cardToOblivion) { library.RemoveCard(card); oblivionDeck.AddCard(card); } else { memoriesPile.AddCard(card.indexInDeck); } if (cardToOblivion != null && card != cardToOblivion) { hand.DiscardCard(cardToOblivion); library.RemoveCard(cardToOblivion); oblivionDeck.AddCard(cardToOblivion); } break; case CardPlayedOrigin.RENT: rent.RemoveCard(); break; case CardPlayedOrigin.EVENTS: currentEventPile.CardPlayed(); break; } card.ResetIndexes(); if (LoseConditionsMet()) { GameOverLose(); } else if (WinConditionsMet()) { GameOverWin(); } }