public GameState(
IPlayerAction[] playerActions,
int[] playerPositions,
Game game)
{
if (playerActions.Length != playerPositions.Length)
throw new Exception();
this.game = game;
GameConfig gameConfig = game.GameConfig;
this.emptyCardCollection = new CollectionCards(this.CardGameSubset, null);
int playerCount = playerActions.Length;
this.supplyPiles = gameConfig.GetSupplyPiles(playerCount, game.random);
this.nonSupplyPiles = gameConfig.GetNonSupplyPiles(playerCount);
this.mapCardToPile = new MapOfCardsForGameSubset<PileOfCards>(this.CardGameSubset);
this.BuildMapOfCardToPile();
this.players = new PlayerCircle(playerCount, playerActions, playerPositions, game);
this.hasPileEverBeenGained = new MapPileOfCards<bool>(this.supplyPiles);
this.pileEmbargoTokenCount = new MapPileOfCards<int>(this.supplyPiles);
this.trash = new BagOfCards(this.CardGameSubset);
this.cardContextStack = new CardContextStack();
this.GainStartingCards(gameConfig);
foreach (PileOfCards cardPile in this.supplyPiles)
{
cardPile.ProtoTypeCard.DoSpecializedSetupIfInSupply(this);
}
this.players.AllPlayersDrawInitialCards(gameConfig, this);
}