internal void player_GainInn(Player player, ref Players.CardGainEventArgs e) { CardCollection actionCards = player.DiscardPile.LookThrough(c => (c.Category & Cards.Category.Action) == Cards.Category.Action); Choice choice = new Choice("Choose cards to reveal and shuffle into your deck", this, actionCards, player, false, 0, actionCards.Count); ChoiceResult result = player.MakeChoice(choice); // We lose track of Inn if we put it on top of the deck and shuffle if (result.Cards.Contains(this)) e.IsLostTrackOf = true; player.AddCardsInto(DeckLocation.Revealed, player.DiscardPile.Retrieve(player, c => result.Cards.Contains(c))); player.AddCardsToDeck(player.Revealed.Retrieve(player, c => result.Cards.Contains(c)), DeckPosition.Top); player.ShuffleDrawPile(); e.HandledBy.Add(TypeClass.Inn); // Clear out the Event Triggers -- this only happens when its Gained, so we don't care any more foreach (Player playerLoop in _CardGainedHandlers.Keys) playerLoop.CardGained -= _CardGainedHandlers[playerLoop]; _CardGainedHandlers.Clear(); }