/// <summary> /// Tries to gain the specified cardType from the specified supply into the location and position of the deck specified /// </summary> /// <param name="supply">The supply pile to gain from</param> /// <param name="cardType">The card type we're trying to gain</param> /// <param name="location">The deck the card should go into</param> /// <param name="position">The position into the deck the card should go</param> /// <param name="isBought">Indicating whether or not the card was bought</param> /// <returns>True if the card was actually gained, False otherwise</returns> public Boolean Gain(Supply supply, Type cardType, DeckLocation location, DeckPosition position, Boolean isBought) { if (supply.CanGain(cardType)) { Card supplyCard = supply[cardType].First(); CardGainEventArgs cgea = CardGainCheckAllowed(supplyCard, location, position, isBought); if (!cgea.Cancelled) return this.Gain(supply.Take(cardType), cgea.Location, cgea.Position, cgea.Bought); else { CardGainFinish(supplyCard, cgea.Location, cgea.Position, cgea.Bought, cgea.Cancelled, cgea.IsLostTrackOf); return false; } } return false; }