public CardGainAvailablility[] GetCardAvailability(int numberOfPlayers, CardAvailabilityType cardAvailabilityType)
{
var builder = new CardGainAvailabilityBuilder();
int curseCount = (numberOfPlayers - 1) * 10;
int ruinsCount = (numberOfPlayers - 1) * 10;
int victoryCount = (numberOfPlayers == 2) ? 8 : 12;
builder.AddSupply(60, Cards.Copper);
builder.AddSupply(40, Cards.Silver);
builder.AddSupply(30, Cards.Gold);
if (this.useColonyAndPlatinum)
{
builder.AddSupply(20, Cards.Platinum);
}
if (this.kingdomPiles.Where(card => card.potionCost != 0).Any())
{
builder.AddSupply(16, Cards.Potion);
}
if (this.kingdomPiles.Where(card => card.requiresSpoils).Any())
{
builder.AddNonSupply(16, Cards.Spoils);
}
if (this.useShelters)
{
switch (cardAvailabilityType)
{
case CardAvailabilityType.AdditionalCardsAfterKingdom:
case CardAvailabilityType.AllPossibleCardsInGame:
{
builder.AddStartingCard(Cards.Necropolis);
builder.AddStartingCard(Cards.Hovel);
builder.AddStartingCard(Cards.OvergrownEstate);
break;
}
}
}
builder.AddSupply(victoryCount + (!this.useShelters ? numberOfPlayers * 3 : 0), Cards.Estate);
builder.AddSupply(victoryCount, Cards.Duchy);
builder.AddSupply(victoryCount, Cards.Province);
if (this.useColonyAndPlatinum)
{
builder.AddSupply(victoryCount, Cards.Colony);
}
builder.AddSupply(curseCount, Cards.Curse);
if (cardAvailabilityType != CardAvailabilityType.AdditionalCardsAfterKingdom)
{
foreach (Card card in this.kingdomPiles)
{
if (card.isVictory)
{
builder.AddSupply(victoryCount, card);
}
else
{
builder.AddSupply(card.defaultSupplyCount, card);
}
if (card == Cards.YoungWitch && baneCard != null)
{
if (baneCard.isVictory)
{
builder.AddSupply(victoryCount, baneCard);
}
else
{
builder.AddSupply(card.defaultSupplyCount, baneCard);
}
}
}
}
if (this.NeedsRuins)
{
switch (cardAvailabilityType)
{
case CardAvailabilityType.AllPossibleCardsInGame:
case CardAvailabilityType.AdditionalCardsAfterKingdom:
{
foreach (var card in ruins)
builder.AddSupply(1, card);
break;
}
}
switch (cardAvailabilityType)
{
case CardAvailabilityType.AllPossibleCardsInGame:
case CardAvailabilityType.TypesForBuyingOrGaining:
{
builder.AddSupply(ruinsCount, Cards.Ruins);
break;
}
}
}
if (this.kingdomPiles.Where(card => card == Cards.Hermit).Any())
{
builder.AddNonSupply(10, Cards.Madman);
}
if (this.kingdomPiles.Where(card => card == Cards.Urchin).Any())
{
builder.AddNonSupply(10, Cards.Mercenary);
}
if (this.kingdomPiles.Where(card => card == Cards.Tournament).Any())
{
foreach (Card prize in prizes)
{
builder.AddNonSupply(1, prize);
}
}
return builder.Result;
}